jueves, 2 de julio de 2015

30 Ejemplos prácticos con arduino nivel básico, simulados en proteus+codigo en c y arduino

Hola de nuevo
traigo unas prácticas con arduino de nivel básico para los que se quieran iniciar en este campo.
todo va simulado en Proteus con su código en c,  los archivos .pde de los sketchs y un video demostrando el funcionamiento de cada ejemplo.
Sin más empezamos

Ejercicio 1 Blink

/*
* Intermitente
*
* Ejemplo básico con Arduino. Encendido y apagado de un led
* con una cadencia de 1 sg. usando el PIN 13 como salida
* no es necesario usar una resistencia para el led
* la salida 13 de Arduino la lleva incorporada.
*
* http://www.arduino.cc/en/Tutorial/Blink
*/
//Práctica de Luisdlahuerta
int ledPin = 13; // Definición de la salida en el PIN 13
void setup() //Configuración
{
pinMode(ledPin, OUTPUT); // designa la salida digital al PIN 13
}
void loop() // bucle de funcionamiento
{
digitalWrite(ledPin, HIGH); // activa el LED
delay(1000); // espera 1 seg. (tiempo encendido)
digitalWrite(ledPin, LOW); // desactiva el LED
delay(1000); // espera 1 seg. (tiempo apagado)
}

Simulación en proteus y código en c pinchando aqui


Ejercicio 2 Blink con Botón


//blink con botón
//Práctica de Luisdlahuerta
int ledPin=13;           // elijo el pin13 para el led
int inPin=5;             // elijo el pin d5 para entrada del botón
int val=0;               //declaro la variable para leer el estado del botón

void setup() {
pinMode(ledPin,OUTPUT);  //declaro el led como salida
pinMode(inPin,INPUT);    //declaro el pin del boton como entrada
}

void loop() {
val=digitalRead(inPin);   //Lee el valor de entrada del botón
if(val==HIGH){            //Chequea si el valor leido en el botón es 
                          //alto "1"(boton presionado)
digitalWrite(ledPin,LOW); //pone el led en off
}else{
digitalWrite(ledPin,LOW);  //apaga el led
delay(100);               //retardo 100ms  
digitalWrite(ledPin,HIGH);//enciende el led
delay(100);               //retardo 100ms
}
}

 

Simulación en proteus y código en c pinchando aqui

Ejercicio 3 Encendido y apagado de 3 leds


//Encendido y apagado de 3 led
//Práctica de Luisdlahuerta
int ledPin1=6;           //Defino las salidas de los leds
int ledPin2=7;
int ledPin3=8;
void setup() {           //configuro las salidas para los leds
pinMode(ledPin1,OUTPUT); //definidos como salidas
pinMode(ledPin2,OUTPUT);
pinMode(ledPin3,OUTPUT);
digitalWrite(ledPin1,LOW);//Apago los leds
digitalWrite(ledPin2,LOW);
digitalWrite(ledPin3,LOW);
}

void loop() {              //Bucle de funcionamiento
digitalWrite(ledPin1,HIGH);//Enciende y apago los leds cada 100ms
delay(100);
digitalWrite(ledPin1,LOW); 
delay(100);
digitalWrite(ledPin2,HIGH);//Enciende y apago los leds cada 100ms
delay(100);
digitalWrite(ledPin2,LOW); 
delay(100);
digitalWrite(ledPin3,HIGH);//Enciende y apago los leds cada 100ms
delay(100);
digitalWrite(ledPin3,LOW); 
delay(100);
}




Simulación en proteus y código en c pinchando aqui

Ejercicio 4 Lectura del estado de un botón

//Lectura del estado de un botón
// detecta si el boton se esta pulsando o no y enciende un led 
//Práctica de Luisdlahuerta
int ledPin=13;  //Pin del led
int inPin=10;   //Pin del boton
int value=0;    //establezco el valor del pulsador en cero

void setup() {
pinMode(ledPin,OUTPUT);  //establezco el pin del led como salida
pinMode(inPin,INPUT);    //establezco el pin del boton como entrada digital
}

void loop() {
value = digitalRead(inPin); //lee el valor del botón en la entrada digital
digitalWrite(ledPin, value);
}




Simulación en proteus y código en c pinchando aqui

Ejercicio 5 Lectura de la entrada analógica de un potenciometro

//potenciométro lectura de señal analógica
//enciende y apaga un LED conectado al pin digital #13;
// La cantidad de tiempo que el LED parpadeará depende del
//valor obtenido mediante analogRead(). En este caso al pin A0
//Práctica de Luisdlahuerta

int potPin=0;                //Defino el pin A0 como entrada analógica para el potenciómetro
int ledPin=13;               //defino el pin D13 para el led indicador
int val=0;                   //variable para almacenar la lectura del potenciómetro

void setup() {
pinMode(ledPin,OUTPUT);      //Declaro el led como salida
}
void loop() {
val=analogRead(potPin);      //Lee el valor del potenciómetro
digitalWrite(ledPin,HIGH);   //Enciende el led 
delay(val);                  //Detiene el programa por un tiempo igual a la lectura del potenciómetro
digitalWrite(ledPin,LOW);    //Apaga el led
delay(val);                  //Detiene el programa por un tiempo igual a la lectura del potenciómetro

}


Simulación en proteus y código en c pinchando aqui

Ejercicio 6 El coche fantástico 1

/*El coche fantástico 1
*/
//Práctica de Luisdlahuerta
int pin2 = 2; // PIN-es de los LED
int pin3 = 3;
int pin4 = 4;
int pin5 = 5;
int pin6 = 6;
int pin7 = 7;
int timer = 100; // Temporizador
void setup(){
pinMode(pin2, OUTPUT); // Configuración de los PIN-es como salida
pinMode(pin3, OUTPUT);
pinMode(pin4, OUTPUT);
pinMode(pin5, OUTPUT);
pinMode(pin6, OUTPUT);
pinMode(pin7, OUTPUT);
}
void loop() {
digitalWrite(pin2, HIGH); // Enciende y apaga secuencialmente LED-s
delay(timer);
digitalWrite(pin2, LOW);
delay(timer);
digitalWrite(pin3, HIGH);
delay(timer);
digitalWrite(pin3, LOW);
delay(timer);
digitalWrite(pin4, HIGH);
delay(timer);
digitalWrite(pin4, LOW);
delay(timer);
digitalWrite(pin5, HIGH);
delay(timer);
digitalWrite(pin5, LOW);
delay(timer);
digitalWrite(pin6, HIGH);
delay(timer);
digitalWrite(pin6, LOW);
delay(timer);
digitalWrite(pin7, HIGH);
delay(timer);
digitalWrite(pin7, LOW);
delay(timer);
digitalWrite(pin6, HIGH);
delay(timer);
digitalWrite(pin6, LOW);
delay(timer);
digitalWrite(pin5, HIGH);
delay(timer);
digitalWrite(pin5, LOW);
delay(timer);
digitalWrite(pin4, HIGH);
delay(timer);
digitalWrite(pin4, LOW);
delay(timer);
digitalWrite(pin3, HIGH);
delay(timer);
digitalWrite(pin3, LOW);
delay(timer);
}


Simulación en proteus y código en c  pinchando aqui

Ejercicio 7 coche fantástico 2 con ciclo for


//el coche fantastico 2 reduciendo las lineas de codigo con un ciclo FOR
//Práctica de Luisdlahuerta
int pinArray[]={2,3,4,5,6,7};          //se define el array de pines, y ahorramos codigo
int count=0;                           //variable contador 
int timer=100;                         //temporizador con un valor de 100ms

void setup() {
for(count=0;count<6;count++){          //Sentencia For cuenta parriba
pinMode(pinArray[count],OUTPUT);       //configuramos todos los pines de los leds como salida
  }
}

void loop() {
for(count=0;count<6;count++){          //recorrido de ida, cuenta parriba con For
  digitalWrite(pinArray[count],HIGH);  //Ponemos los led en High, alto
  delay(timer);
  digitalWrite(pinArray[count],LOW);   //Apagamos los leds
  delay(timer);
}
for(count=5;count>=0;count--){         //recorrido de vuelta, pabajo los leds con for
  digitalWrite(pinArray[count],HIGH);  //Encendemos los leds
  delay(timer);
  digitalWrite(pinArray[count],LOW);  //Apagamos los leds
  delay(timer);
  }
}


Simulación en proteus y código en c  pnchando aqui

Ejercicio 8 coche fantástico 3 efecto visual


//El coche fantástico 3

int pinArray[]={2,3,4,5,6,7};         //pines del array
int count=0;                          //Contador
int timer=30;                         //temporizador

void setup(){

  for(count=0;count<6;count++){       //Incremeto
    pinMode(pinArray[count],OUTPUT);   //Configuramos todos los pines de una vez
    }
}

void loop(){                          //bucle
  
  for(count=0;count<5;count++){       //enciende los leds creando una estela visual
    digitalWrite(pinArray[count],HIGH);
    delay(timer);
    digitalWrite(pinArray[count+1],HIGH);
    delay(timer);
    digitalWrite(pinArray[count],LOW);
    delay(timer*2);
    }
  for(count=5;count>0;count--){
     digitalWrite(pinArray[count],HIGH);
    delay(timer);
    digitalWrite(pinArray[count-1],HIGH);
    delay(timer);
    digitalWrite(pinArray[count],LOW);
    delay(timer*2);
  }
}




Simulación en proteus y código en c   pinchando aqui


Ejercicio 9 Estrella fugaz


//Estrella fugaz, variante del coche fantastico
//Práctica de Luisdlahuerta

int pinArray[]={2,3,4,5,6,7,8,9,10,11,12};    //declaracion de pines mediante un array
int controlLed=13;                            //Led de control
int waitNextLed=100;                          //tiempo antes de encender el siquiente led
//Número de les que permanecen encendidos antes de empezar a apagarlos para formar la cola
int tailLength=4;                             //Numero de leds conectados(tamaño del array)
int lineSize=11;

void setup(){
int i;
pinMode(controlLed,OUTPUT);                 //configuramos los pines como salida digital
for(i=0;i<lineSize;i++){
pinMode(pinArray[i],OUTPUT);
 }
}

void loop()
{                                          //bucle
int i;
int tailCounter = tailLength;                         //Se establece la longitud de la cola en un contador
digitalWrite(controlLed, HIGH);                       //Se enciende el led de control para indicar el incio del loop
for (i=0; i<lineSize; i++)                            //For de incremento
{                      
digitalWrite(pinArray[i], HIGH);                     //Se encienden consecutivamente los leds
delay(waitNextLed);                                  //esta variable de tiempo controla la velocidad a la que se mueve la estrella
if (tailCounter == 0)                                //aqui cuidado!! puse ; sin querer y no daba con la falla XD
{
digitalWrite(pinArray[i-tailLength],LOW);           //Se apagan los leds en funcion de la longitud de la cola
}
else
if (tailCounter > 0)
tailCounter--;
}
for (i=(lineSize-tailLength); i<lineSize; i++)
{
digitalWrite(pinArray[i],LOW);                     //se apagan los leds
delay(waitNextLed);
}
}



Simulación en proteus y código en c pinchando aqui

Ejercicio 10 Cuenta pulsador


//Contar las veces que se pulsa un botón
//el botón va a estar en el pin digital 7 y a la vez que contamos
//encendemos un led conectado al pin digital 13
//Práctica de Luisdlahuerta

int led=13;
int boton=7;
int valor=0;
int contador=0;
int estadoanteriorboton=0;

void setup(){
  Serial.begin(9600);             //configuración de los baudios de transmisión para el puerto com
  pinMode(led,OUTPUT);           //inicializa como salida el pin digital 13 (led)
  pinMode(boton,INPUT);          //inicializa como entrada el pin digital 7 (boton)
  }

void loop(){                     //bucle
  valor=digitalRead(boton);      //lee el valor de la entrada digital del boton en pin d7
  digitalWrite(led,valor);
    if(valor!=estadoanteriorboton){
      if(valor==1){
        contador++;
        Serial.print(contador);
        Serial.write(10);
        Serial.write(13);
      }
    }
      estadoanteriorboton=valor;
  }


Simulación en proteus y código en c pinchando aqui

Ejercicio 11 Contador modificado


Código

/* Main.ino file generated by New Project wizard
 *
 * Created:   Thu Sep 5 2013
 * Processor: ATmega328P
 * Compiler:  Arduino AVR
 */

//Contador modificado
//Práctica de Luisdlahuerta
//es muy parecido al anterior sketch pero ahora al pulsar el boton introducimos un "=" en el pin d7
//por lo tanto para que se encienda la salida del pin d13 hay que escribir en ella un valor leido negado
//"!valor!

int led=13;
int boton=7;
int valor=0;
int contador=0;
int estadoanteriorboton=0;

void setup(){
  Serial.begin(9600);                           //configuro la velocidad de los baudios de transmisión
  pinMode(led,OUTPUT);                          //inicializo como salida el pin digital 13
  pinMode(boton,INPUT);                         //inicializo como entrada digital el pin 7
  digitalWrite(boton,HIGH);                     //habilito la resistencia interna pull-up del pin d7
 }
void loop(){
  valor=digitalRead(boton);                     //leo el valor de la entrada d7, el boton 
  digitalWrite(led,!valor);                     //Escribimos en la salida el valor leido negado
    if(valor!=estadoanteriorboton){
      if(valor==1){
        contador++;
Serial.print("Has pulsado  ");
        Serial.print(contador);
Serial.print("  Veces  ");
        Serial.write(10);
        Serial.write(13);
      }
    }
      estadoanteriorboton=valor;
    }



Simulación en Proteus y código en c pinchando aqui

Ejercicio 12 Contador de cero a 10 con pulsador


Código

/* Main.ino file generated by New Project wizard
 *
 * Created:   Thu Sep 5 2013
 * Processor: ATmega328P
 * Compiler:  Arduino AVR
 */

//Contador de 0 a 10 ejercicio 12
//Práctica de Luisdlahuerta
//cuando el valor del contador llegue a 10 se pondrá en cero de nuevo


int led=13;
int boton=7;
int valor=0;
int contador=0;
int estadoanteriorboton=0;

void setup(){
  Serial.begin(9600);                    //Configuro los baudios de transmision del puerto com
  pinMode(led,OUTPUT);                   //inicializa el pin 13 como salida digital
  pinMode(boton,INPUT);                  //inicializa el pin 7 como entrada digital
}

void loop(){
  valor=digitalRead(boton);              //lee el valor del boton en pin d7
  digitalWrite(led,valor);

    if(valor!=estadoanteriorboton){
      if(valor==1){
        contador++;
        Serial.print("Has pulsado  ");
        Serial.print(contador);
        Serial.print("  veces");
        Serial.write(10);
        Serial.write(13);
          if(contador==10){             //limito la cuenta a un valor de 10 para la variable contador
            contador=0;
            }
      }
 
    }
      estadoanteriorboton=valor;
    }


Simulación en Proteus y código en c pinchando aqui




seguimos mañana que ya es tarde 
Saludos





16 comentarios:

  1. Muchas gracias Luis por los ejemplos subidos!
    Estoy recién arrancando con Arduino.
    Saludos!!

    ResponderEliminar
    Respuestas
    1. Muchas gracias por tu comentario, me alegro que disfrutes con arduino, es un entorno con muchas posibilidades e infinidad de librerías.
      Tengo mucho lio, de ahí mi tardanza en responder.
      Saludos

      Eliminar
    2. Me han gustado mucho los ejemplos subidos

      Eliminar
  2. muy bueno gracias amigo estos ejemplos son muy prácticos para uno que recién esta aprendiendo en Arduino, así familiarizarse con este entorno variado y complejo =)

    ResponderEliminar
  3. Si, la verdad es que arduino y la electrónica digital mola mucho. Lo complicado para mi es la programación, pero poco a poco lo voy sacando.
    Gracias por comentar. Saludos

    ResponderEliminar
  4. Tendrias un codigo de como hcrear o simular un calendario?

    ResponderEliminar
  5. SALIUDOS, ME GUSTARIA SABER SI PUEDO ACTIVAR UN RELE, CON ALGUNA SEÑAL OTORGADA POR EL COMPUTADOR ATRAVEZ DE USB. LA IDEA ES INCREMENTAR UNAS LINEAS DE COMANDO EN UN PROGRAMA PARA QUE ENVIE LA SEÑAL DIGITAL AL ARDUINO Y ESTE CIERRE UN RELE.

    ResponderEliminar
    Respuestas
    1. hola,
      te recomiendo que leas y aprendas antes de preguntar ,saludos .

      Eliminar
  6. Hola ,
    yo provengo de pic y ensamblador;
    intento aprender cosas nuevas y he de decir que escribir tareas en C,o sea lenguaje placa arduino o atmel procesador,lo encuentro mas tedioso y con mas líneas de código que en ensamblador,
    y por lo que leo por foros ,¿ como puede una persona montar un robot, si ni siquiera sabe leer el código de colores de las resistencias?.
    saludos

    ResponderEliminar
  7. Realmente no es necesario saberse los códigos de colores de las resistencias para saber programación en C, aunque lo suyo es tener nociones básicas de electrónica, y saber lo que quieres hacer con tu PIC, ATMEL,CYPRESS... o el micro que uses. Yo disfruto con mis proyectos de electrónica y con las soluciones que consigo con ellos.
    Saludos.

    ResponderEliminar
  8. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  9. disculpa si vas a seguir subiendo los otros ejercicios gracias

    ResponderEliminar
  10. muy buenas tus programaciones y funcionan,sabrias codificar un pulsador para que encienda la estrella fugaz cuando pulsas??tienes alguna programacion para teclado 4x4?? he visto algunas por internet pero no me funcionan ninguna

    ResponderEliminar
  11. Buenas amigo, soy un estudiante nivel bachillerato en el cual estudia electronica y necesito un favor, podrias pasar el codigo de tocar tonos desde puerto serial seria de mucha ayuda que tenga excelente dia !

    ResponderEliminar
  12. Enhorabuena Luis, con ejemplos así es mas fácil comprender la programación. Saludos

    ResponderEliminar