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 😉