22 may 2016

Prácticas con Arduino

1. Parpadeo de un led





/*
  Parpadeo
  Enciende un LED por durante segundo y después lo apaga.
  */

int led = 13; // asigna a la variable led el valor 13

// la rutina de setup corre una vez o cuando se presiona reset
void setup() {              
  pinMode(led, OUTPUT);   // inicializa el pin 13 como pin de salida
}

// la rutina loop corre constantemente
void loop() {
  digitalWrite(led, HIGH);   // enciende el LED (HIGH es el nivel de voltaje)
  delay(1000);               // espera un segundo
  digitalWrite(led, LOW);    // apaga el LED poniendo el voltaje a LOW
  delay(1000);               // espera por un segundo
}

2. Semáforo



/*************/
/*  SEMÁFORO */
/*************/

//** Definiciones **//
int rojo=2;      //definimos el valor del pin para el led rojo
int amarillo=4;  //definimos el valor del pin para el led amarillo
int verde=7;     //definimos el valor del pin para el led verde

//** Programa **//

void setup() {
  pinMode(rojo,OUTPUT);   //declaramos el pin verde como salida
  pinMode(amarillo,OUTPUT);//declaramos el pin amarillo como salida
  pinMode(verde,OUTPUT);    //declaramos el pin rojo como salida
}

void loop() {
 digitalWrite(rojo,HIGH); //encendemos el led rojo
 delay(2000);             //esperamos 2 segundos
 digitalWrite(rojo,LOW);  //apagamos el led rojo

 digitalWrite(amarillo,HIGH); //encendemos el led amarillo
 delay(2000);                 //esperamos 2 segundos
 digitalWrite(amarillo,LOW);  //apagamos el led amarillo

 digitalWrite(verde,HIGH); //encendemos el led verde
 delay(2000);              //esperamos 2 segundos
 digitalWrite(verde,LOW);  //apagamos el led verde
}

3. Encendido progresivo de un led

Se trata aumentar y disminuir la luminosidad de un led usando la capacidad de ofrecer una tensión variable que da una salida analógica. Para ello se conecta un led al pin 11 y se provoca que su luminosidad pase de mínima a máxima, para luego ir de máxima a mínima. Los valores de salidas analógicas van del mínimo 0 al máximo 255.


int luminosidad = 0;  // variable para asignar la luminosidad al led
int led = 11; // pin del led
void setup()
{
  // en el setup no hay que configurar nada
}
void loop()
{
  for (luminosidad = 0 ; luminosidad <= 255; luminosidad=luminosidad+3) // fade in (del mínimo a máximo)
  {
    analogWrite(led, luminosidad);  // ilumina el led con el valor asignado a luminosidad (entre 0 y 255)
    delay(30); // espera 30 ms para que se vea el efecto
 }
 for (luminosidad = 255; luminosidad >=0; luminosidad=luminosidad-3)   // fade out (del máximo al mínimo)
 {
   analogWrite(led, luminosidad);
   delay(30);
 }
}

4. Secuencia de leds

Se trata de encender y apagar 5 leds secuencialmente. Los leds deben estar conectados a los pines 2, 3, 4, 5 y 6.
Se deben encender y posteriormente apagar los leds desde el pin 5 al 8, con un tiempo de duración de
encendido y apagado de 200 milisegundos.


Solución 1:
int tiempo=200; //declara una variable como entero y de valor 200
void setup() { //comienza la configuracion
pinMode(2,OUTPUT);
pinMode(3,OUTPUT);
pinMode(4,OUTPUT);
pinMode(5,OUTPUT);
pinMode(6,OUTPUT);
}
void loop() { //comienza el bucle principal del programa
digitalWrite(2,HIGH);
delay(tiempo);
digitalWrite(2,LOW);
delay(tiempo);
digitalWrite(3,HIGH);
delay(tiempo);
digitalWrite(3,LOW);
delay(tiempo);
digitalWrite(4,HIGH);
delay(tiempo);
digitalWrite(4,LOW);
delay(tiempo);
digitalWrite(5,HIGH);
delay(tiempo);
digitalWrite(5,LOW);
delay(tiempo);
digitalWrite(6,HIGH);
delay(tiempo);
digitalWrite(6,LOW);
delay(tiempo);
 }
Solución 2 (usando FOR):
int tiempo=200;
int n;
void setup() { //comienza la configuracion
for (n=2;n<7;n++) {
pinMode (n, OUTPUT);
}
}
void secuencia() {
for (n=2;n<7;n++) {
digitalWrite (n, HIGH);
delay (tiempo);
digitalWrite (n, LOW);
delay (tiempo);
}
}
void loop() {
secuencia();
}

5. Coche fantástico

Se trata de encender y apagar 6 leds secuencialmente. Los leds deben estar conectados a los pines
2, 3, 4, 5, 6 y 7.
Se deben encender y apagar los leds desde el pin 2 al 7, con un tiempo de encendido y apagado de 50 ms, más tarde se deben encender y apagar los leds desde el pin 7 al 2, con un tiempo de encendido y apagado de 50 ms. La secuencia se debe repetir indefinidamente.
El efecto del programa es el de las luces delanteras del "Coche fantástico".

Solución 1:
int n=0;
int tiempo=50;
void setup() { //comienza la configuración
  for (n=2;n<8;n++) {
    pinMode(n,OUTPUT);
  }
}
void loop() {
    for (n=2;n<8;n++) {
    digitalWrite (n,HIGH);
    delay(tiempo);
    digitalWrite (n,LOW);
    delay(tiempo);
  }
  for (n=7;n>=2;n--) {
    digitalWrite (n,HIGH);
    delay(tiempo);
    digitalWrite (n,LOW);
    delay(tiempo);
  }
}

Solución 2 (Mejorando el efecto visual):
int leds[]={2,3,4,5,6,7};
int n=0;
int tiempo=30;
void setup() { //comienza la configuración
  for (n=0;n<6;n++) {
    pinMode(leds[n],OUTPUT);
  }
}
void loop() {
    for (n=0;n<6;n++) {
    digitalWrite (leds[n],HIGH);
    delay(tiempo);
    digitalWrite(leds[n+1],HIGH);
    delay(tiempo);
    digitalWrite (leds[n],LOW);
    delay(tiempo*2);
  }
  for (n=5;n>=0;n--) {
    digitalWrite (leds[n],HIGH);
    delay(tiempo);
    digitalWrite(leds[n-1],HIGH);
    delay(tiempo);
    digitalWrite (leds[n],LOW);
    delay(tiempo*2);
  }
}

6. Simulación de la luz de una vela

Se trata de simular el movimiento de la llama de una vela. Hacemos uso de la instrucción para generar un numero aleatorio que lo asignamos a una salida analógica PWM y otro número que lo asociamos a la variable de temporización (tiempo que esperamos para cambiar el valor de la salida).


  /* Simula luz de vela*/

int ledPin = 9;    // selecciona el puerto PWM
int val = 0;       // define y pone a cero la variable "brillo"
int delayval = 0;  // define el intervalo de cambio de valor de salida

void setup() {
  randomSeed(0);            // inicializa el generador de números aleatorios
  pinMode(ledPin, OUTPUT);  // declara el pin de SALIDA pin 9
}

void loop() {
  val = random(100,255);       // genera un número aleatorio entre 100 y 255 que asigna a la variable val
  analogWrite(ledPin, val);    // envía ese valor a la salida pin 9

  delayval = random(50,150);   // genera un numero aleatorio entre 50 y 150 y lo asigna a la variable de temporización
  delay(delayval);             // espera un tiempo delayval medido en milisegundos
}

7. Encender y apagar un led con un pulsador

Al presionar el pulsador se encenderá el led. Si se presiona nuevamente el led se apaga.
FUNCIONAMIENTO:
  • Se utilizara la variable val la cual leerá digitalmente lo que sucede en el pin 2 (pulsador), su comando seria digitalRead(PULSADOR). 
  • Utilizamos la orden if. La estructura if es un condicional que permite decidir en función del valor de la variable val, si este es alto (HIGH=1) o si es bajo (LOW=0). Se utiliza una variable estado (state) que registrará los cambios de HIGH y LOW
  • Para que el LED se encienda, si state==1 se utiliza el comando  digitalWrite(LED,HIGH). Para quel LED pueda apagarse se utiliza el mismo comando digitalWrite(LED,HIGH).


// Práctica encender LED con un pulsador y luego apagar LED con el mismo
 //botón pulsador
const int LED = 8;
const int PULSADOR = 2;
int val = 0; //val se emplea para almacenar el estado del pulsador
int state = 0; // 0 LED apagado. 1 LED encendido
int old_val = 0; // almacena el antiguo valor de val
void setup(){  // definir si la variable es de entrada // o salida.
 pinMode(LED,OUTPUT); // establecer que el pin digital es una señal de salida
 pinMode(PULSADOR,INPUT); // y PULSADOR como señal de entrada
 }
void loop() {       // loop = realice un lazo continuamente
 val= digitalRead(PULSADOR); // lee el estado del pulsador
if ((val == HIGH) && (old_val == LOW)){
 state=1-state;
 delay(10);
 }
 old_val = val; // valor del antiguo estado
if (state==1){
 digitalWrite(LED, HIGH); // enciende el LED
 }
else{
 digitalWrite(LED,LOW); // apagar el LED
 }
 }

8. Encender y apagar un led con dos pulsadores

Un pulsador encenderá el led y el otro lo apaga.

int LED = 8; //LED
int pulsador1 = 2; // primer pulsador
int pulsador2 = 6; // segundo pulsador

 void setup () { 
  pinMode (LED, OUTPUT); //configurado como salida
  pinMode (pulsador1,INPUT); //configurado de entrada
  pinMode (pulsador2, INPUT);
}

 void loop () {
  if (digitalRead(pulsador1) == HIGH){ //si el pulsador1 está en alto
    digitalWrite (LED, HIGH); //encender el LED
  }
  else if (digitalRead(pulsador2) == HIGH){ //si el pulsador2 está en alto
    digitalWrite (LED, LOW); // apagar el LED
  }
}

0 comentarios:

Twitter Facebook Tuenti LinkedIn gmail Favorites More