Curso de introducción a Arduino. 2a sesión


La segunda sesión del curso Introducción a Arduino se ha celebrado el lunes 3 de noviembre.

Durante esta sesión hemos empezado descubriendo el código de programación de Arduino. Variables, operadores lógicos, estructuras de control…. tan sólo una pequeña descripción para saber que nos vamos a encontrar conforme avance el curso. Hemos usado una guía que los chicos de www.ardumania.es se han encargado de traducir al castellano. ¡Gracias!. Podéis encontrarla en el siguiente enlace:

Durante el curso alguien me preguntó dónde obtener guías y ejercicios. Aparte de Google, hay bastante documentación en castellano en el “playground” de arduino

La presentación también está disponible públicamente:

En la parte práctica pusimos en común los ejemplos de la sesión anterior y controlamos un led de forma pseudo-analógica usando una salida PWM haciendo variar su intensidad por medio de un potenciómetro. El montaje es de la siguiente imagen:

Y el código utilizado:

int led = 6;
int i;

void setup(){
  Serial.begin(9600);
  pinMode(led, OUTPUT);
}

void loop(){
  int sensorValue = analogRea(A0);
  i = map(sensorValue, 0, 1023, 0, 255);
  Serial.println(i);
  analogWrite(led, i);
  delay(10);
}

En la siguiente práctica el objetivo era aprender a utilizar una librería. Hicimos un montaje típico de botón para contar las pulsaciones:

Y escribimos un código simple:

// contador de pulsaciones
// incrementa un contador en funcion de las pulsaciones recibidas por un boton

int cont = 0;

void setup(){
  pinMode(7, INPUT);
  Serial.begin(9600);

}

void loop(){
  if (digitalRead(7) == HIGH){
  cont = cont + 1;
  }
  Serial.println(cont);
  delay(50);
}

En seguida los primeros en acabar el montaje empezaron a preguntarse por qué aquello no funcionaba bien. Fué el momento de explicar el efecto del rebote debido a las pequeñas micro-variacines que se producen al pulsar un interruptor

Esto se puede evitar mediante código (en Archivo -> Ejemplos -> Digital -> Debounce) o mediante el uso de una librería. Para ello usamos la librería EasyButton ( playground.arduino.cc/Code/EasyButton ). Para usarla primero descargamos la librería y descomprimimos el archivo dentro de la carpeta de librerías de Arduino ( /home/sketches/libraries en Linux ó C:/ArchivosdePrograma/Arduino/libraries en Windows). Una vez descomprimida hemos de cerrar Arduino y volver a arrancar el programa para que los cambios tomen efecto. El código del programa modificado para usar la librería es:

//Sketch que incorpora antirebote usando la librera Easybutton

#include <EasyButton.h>

int cont = 0;
EasyButton button(2);

void setup() 
{
  Serial.begin(9600);
}

void loop(){
  button.update();
  if (button.IsPushed()){
    cont = cont + 1;
  }
  Serial.println(cont);
  delay(50);
}

Una vez cargado iniciamos el monitor serie y vemos que ahora cuenta correctamente las pulsaciones.

La última práctica del día consistió en elaborar un termómetro. La pequeña presentación  del proyecto es accesible a través del enlace:

El montaje es el siguiente:

El servo se conecta: rojo a 5V, negro a Gnd y blanco (señal) al pin 9. El código es el siguiente:

//TMP36 Sensor de temperatura

int sensorPin = 0;   //conectaremos el pin de datos al pin A0
                     //La resolucin es de  10 mV / grado centigrado 
                     //0ºC son 500mV 
int angulo = 0;      //añadimos una variable para controlar el servo

#include <Servo.h>   // Incluimos la libreria Servo
Servo nuestroServo;  // Generamos el elemento nuestroServo

void setup(){        //Este bucle se ejecuta 1 sola vez
  Serial.begin(9600);//Inicia el puerto serie para que podamos usarlo
  nuestroServo.attach(9); // indicamos el pin al que esta conectado el servo
}

void loop(){  
 //leemos el pin
 int lectura = analogRead(sensorPin);  

 // convertimos la lectura a voltaje
 float voltaje = lectura * 5.0;
 voltaje /= 1024.0; 
 angulo = map(lectura, 0, 1023, 0, 179);

 // imprimimos el voltaje
 Serial.print(voltaje); Serial.println(” voltios”);
 nuestroServo.write(angulo);
 // imprimimos la temperatura
 float temperaturaC = (voltaje – 0.5) * 100 ;  //10 mv por grado con 500 mV de salto
 Serial.print(temperaturaC); Serial.println(” grados C”);
  delay(1000);        //esperamos 1 segundo
}

Ojo: Este programa está modificado, el que mostré tenía un pequeño error. Ahora el servo responde a cambios de temperatura.

Y eso es todo. Hasta la tercera sesión 😉

Dejar un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *