El viernes 27 de octubre fui invitada por Román Gelbort para dar una charla sobre robótica y Arduino en la Escuela Florentino Ameghino.
Esta fue la presentación que utilicé: Robótica libre
Bytes sobre Educación y Tecnología en Argentina
El viernes 27 de octubre fui invitada por Román Gelbort para dar una charla sobre robótica y Arduino en la Escuela Florentino Ameghino.
Esta fue la presentación que utilicé: Robótica libre
Hoy estrené el servo de mi kit básico de Arduino Uno.
Para utilizarlo, seguí instrucciones de varias páginas, pero el ejemplo que más me gustó fue el de www.electroensaimada.com
En él se utiliza la interacción con el puerto serial para enviarle una letra ‘a’ o una letra ‘z’ al robot, y en cada letra se aumenta o disminuye el ángulo del servo.
Aquí, el código para copiar y pegar:
#include
Servo mimotor;
int angulo=90;
void setup()
{
mimotor.attach(9);
Serial.begin(9600);
}
void loop() {
unsigned char comando=0;
if(Serial.available()){
comando=Serial.read();
if(comando=='a')angulo+=10;
else if(comando=='z')angulo-=10;
angulo=constrain(angulo,0,180);
}
mimotor.write(angulo);
Serial.print("Angulo: ");Serial.println(angulo);
delay(100);
}
Hoy conecté el buzzer que vino en mi kit de Arduino. No hubo que usar resistencia (en varios sitios la indicaban, pero así no me funcionaba), sólo conecté la pata más larga, positiva, al pin 11 y la más corta a tierra (GND).
La primera prueba que funcionó fue este código propuesto en el blog de Opiron.
void setup()
{
pinMode(11, OUTPUT); // El pin 11 es donde tenemos conectado el Buzzer
}void loop()
{
ring(); // con este ejemplo hacemos que el buzzer vaya tocando
// tonos de diferentes frecuencias alternativamente
}
void ring (){
analogWrite(11,20); //emite 1 sonido
delay(500); //espera medio segundo
analogWrite(11,120); //emite otro sonido
delay(500); //espera medio segundo
}
Después, continué buscando, y encontré este post de El Cajón de Arduino donde se indica qué tono es para cada nota:
// Introducimos la variable por donde saldrá nuestra señal digital hasta el zumbador
int speakerPin = 11;// Definimos una variable con el número de tonos que va a reproducirint numTones = 10;int tones[] = {261, 277, 294, 311, 330, 349, 370, 392, 415, 440};// mid C C# D D# E F F# G G# A// Arriba se muestran las equivalencias entre frecuencias y Notas de la escala natural, no están todas declaradas pero existen.void setup(){// Generamos un bucle que recorra nuestro vector. Este será el encargado de introducir una determinada frecuencia al zumbador cada vez, conforme hayamos declarado el vector de tonos.for (int i = 0; i < numTones; i++){tone(speakerPin, tones[i]);delay(500);}noTone(speakerPin);}void loop(){}
Después, jugué un poco con las distintas notas y los tiempos, para armar melodías.
Aquí, una muy mejorable versión del “Feliz cumpleaños”, dedicado a Claudio Segovia que cumplió años ayer:
// Introducimos la variable por donde saldrá nuestra señal digital hasta el zumbador
int speakerPin = 11;
// Definimos una variable con el número de tonos que va a reproducir
int numTones = 10;
int tones[] = {261, 277, 294, 311, 330, 349, 370, 392, 415, 440};
// mid C C# D D# E F F# G G# A
// Arriba se muestran las equivalencias entre frecuencias y Notas de la escala natural, no están todas declaradas pero existen.
void setup()
{}
void loop()
{
delay(1000);
tone(speakerPin, 261);
delay(180);
noTone(speakerPin);
delay(20);
tone(speakerPin, 261);
delay(100);
tone(speakerPin, 294);
delay(600);
tone(speakerPin, 261);
delay(600);
tone(speakerPin, 349);
delay(600);
tone(speakerPin, 330);
delay(1200);
tone(speakerPin, 261);
delay(180);
noTone(speakerPin);
delay(20);
tone(speakerPin, 261);
delay(100);
tone(speakerPin, 294);
delay(600);
tone(speakerPin, 261);
delay(600);
tone(speakerPin, 392);
delay(600);
tone(speakerPin, 349);
delay(1200);
}
Para poder encender y apagar una lámpara, es necesario contar con el Arduino, y con un módulo Relay o Relé, y experiencia previa en Arduino (encender un led, utilizar algún otro elemento como un sensor de distancia)
Fernando Bordignon, un gran colega con el que me comunico gracias a las redes, me facilitó este tutorial en el que se comprende perfectamente cómo conectar la lámpara. Para eso, es verdaderamente útil tener experiencia reparando interruptores y cosas por el estilo. Vamos a estar manipulando un dispositivo que funciona con 220v, así que hay que tener mucho cuidado.
Una vez leído el tutorial anterior, encontré este videotutorial donde se explica de otra manera cómo hacer las conexiones (mi módulo de relé tiene cuatro pines, como en este ejemplo, pero los hay de tres, como en el video tutorial que está debajo):
En este video explican perfectamente cómo funciona un Relé
Después de algunos pequeños experimentos con un Led, hoy decidí empezar a utilizar el sensor de distancia. El modelo que vino en mi kit Arduino es el HC-SR04, lo cual se puede ver en el sensor:
Busqué en la web algún tutorial y encontré este que es impecable, explica absolutamente todo lo que se necesita para poder ver en la pantalla la distancia de un objeto al sensor ultrasónico:
Gracias a este video pude realizar las conexiones y el programa necesarios para que un led se encienda al pulsar una vez, y se apague al volver a pulsar. Se puede ver el video de lo que hice, haciendo clic en esta foto:
Otra vez me compré un kit de arduino, pero esta vez es diferente, ya que tiene una Protoboard (la vez anterior compré un kit que tenía las conexiones más resueltas).
Primer programa: encender y apagar el led en el pin 13
Para comenzar, descargué el software para linux, desde la página de Arduino. Descomprimí, ejecuté el archivo con extensión .sh (install.sh)
Me costó un poquito que funcionara porque no me dejaba elegir el puerto serial. Reinicié y funcionó.
Después, utilizando un tutorial en Youtube, logré ejecutar el programa de ejemplo con el que se hace titilar un led en el pin 13.
¿Por qué este es el más simple de usar? El Arduino tiene un led interno conectado al pin 13, con lo cual si no conectamos nada, veremos parpadear una luz en la placa. Y si queremos ver parpadear un led externo, podemos conectarlo al pin 13 (el ánodo, la pata larga del led) y el cátodo al que tiene al lado llamado GND (“ground”, tierra). Esto sólo puede hacerse con el pin 13, porque el Arduino tiene una resistencia interna con este fin (ver tutorial)
Segunda experiencia: encender y apagar un led en otro pin (se agrega la resistencia)
Como segunda experiencia me resultó muy útil, para comprender qué son todos esos agujeritos de la protoboard y para empezar a utilizar una resistencia, este video donde una chica (¡Séeeee!) explica cómo hacer titilar un led conectado a la protoboard.
Physical Etoys es un desarrollo del Grupo de Investigación en Robótica Autónoma del CAETI (GIRA).
En su página nos anuncian:
Estamos muy pero muy contentos de anunciarles que Physical Etoys llegó a su versión 2.0 y vendrá en TODAS las computadoras de Argentina asociadas al plan Conectar Igualdad! Se siente muy bien saber que desde acá podemos aportar nuestro granito de arena en pos de la educación del país. Ya está disponible para bajar de la página de Physical Etoys.
¿En qué consiste?
Physical Etoys es una ‘extensión’ de Etoys; una adaptación del lenguaje de programación para programar fácilmente objetos físicos como robots.
¿Cómo se usa?
Y aquí vemos la primera pantalla:
Antes de continuar, recomiendo ver este video en que se muestran algunas nociones mínimas sobre Arduino, sus modelos, sus elementos, etc.
Hoy conecté un botón para utilizar un ejemplo del sitio de Arduino en el que muestran cómo leer el valor del botón (es decir, cómo enterarme mediante código si el botón está presionado o no).
Tengo el botón conectado en mi conector 12, es decir que voy a usar digitalRead(12) para saber cuál es su valor, asignándolo a la variable sensorValue. Después, le indico que el sensorValue lo muestre en la ventana Serial monitor, que debo abrir usando el menú Tools. Una vez compilado el código (botón “verify”, el primero) y subido a la placa (botón “upload”. el que tiene una flecha hacia la derecha), pulso el botón y veo en el Serial monitor una secuencia de ceros, que cuando pulso el botón se transforman en unos.
El siguiente código de ejemplo de la misma página es de lectura analógica. Esto implica que se leerá un valor que tendrá un rango. En el caso de un botón, no tiene demasiado sentido, ya que el valor que devuelve es fijo: 1023 cuando está presionado, y 0 cuando no lo está:
Si conectamos un potenciómetro estos valores se incrementan o decrementan de acuerdo a lo que hagamos con él.
Combinando todo lo aprendido ayer más lo aprendido hoy, podemos conectar un led y crear un nuevo código donde indiquemos que el led se encienda cuando el botón se presiona:
/*
Aqui usamos el boton para encender el LED.
*/void setup() {
Serial.begin(9600);
pinMode(12, OUTPUT);
}void loop() {
int sensorValue = digitalRead(A2);
Serial.println(sensorValue);
if (sensorValue == 1) {
digitalWrite(12, HIGH); // si el valor del sensor es 1, enciende el LED
delay(100); // espera un ratito
digitalWrite(12, LOW); // apaga el LED
}}
Este otro código enciende el led de acuerdo al valor del potenciómetro:
/*
Aqui usamos el potenciometro para encender el LED.
*/
void setup() {
Serial.begin(9600);
pinMode(A3, OUTPUT);
}
void loop() {
int sensorValue = analogRead(A2);
analogWrite(A3, sensorValue/4); // escribimos en el conector A3 el valor del sensor (del potenciómetro) dividido cuatro.
Serial.println(sensorValue);
}
Me prestaron muy amablemente un Starter kit de Arduino. Como de costumbre, mi intención era hacerlo funcionar en Ubuntu.
Lo primero que hice fue instalar el software, desde este sitio: Arduino Software
Después estuve buscando tutoriales y encontré algunos que seguramente son muy útiles pero que no usan el modelo de Arduino que yo tengo (por ejemplo, este video: Primeros pasos con Arduino)
Mi objetivo es usar Arduino con Physical Etoys, un desarrollo de Gonzalo Zabala y su equipo sobre Etoys. No logré hacerlo andar y entonces me di cuenta de que me faltaba conocer el modelo de Arduino y también el nombre de mi conexión…!
Así que retrocedí un paso, abrí el software que instalé y de la misma página de Arduino tomé el primer código de la sección Learning, que es para hacer parpadear un led conectado en D13.
/*
Blink
Turns on an LED on for one second, then off for one second, repeatedly.This example code is in the public domain.
*/void setup() {
// initialize the digital pin as an output.
// Pin 13 has an LED connected on most Arduino boards:
pinMode(13, OUTPUT);
}void loop() {
digitalWrite(13, HIGH); // set the LED on
delay(1000); // wait for a second
digitalWrite(13, LOW); // set the LED off
delay(1000); // wait for a second
}
No funcionaba, así que busqué en Google el mensaje de error hasta que encontré esto: Installing Arduino 0023 on Ubuntu 11.10 (Oneiric Ocelot)
Este era el error que me daba:
In file included from /usr/lib/gcc/avr/4.5.3/../../../avr/include/util/delay.h:44:0,
from /usr/lib/gcc/avr/4.5.3/../../../avr/include/avr/delay.h:37,
from /home/matt/arduino-0023/hardware/arduino/cores/arduino/wiring_private.h:30,
from /home/matt/arduino-0023/hardware/arduino/cores/arduino/WInterrupts.c:34:
/usr/lib/gcc/avr/4.5.3/../../../avr/include/math.h:426:15: error: expected identifier or ‘(’ before ‘double’
/usr/lib/gcc/avr/4.5.3/../../../avr/include/math.h:426:15: error: expected ‘)’ before ‘>=’ token
En el post encontrado se muestra la solución: comentar una línea del código del software de Arduino. Mi archivo no estaba en la misma carpeta del ejemplo así que tuve que buscar la carpeta Arduino por todos lados. Al encontrar el archivo, para editarlo tuve que usar sudo gedit ‘…’ porque si lo editaba directamente no tenía los permisos suficientes para guardar.
Una vez que logré comentar esa línea de código, volví a mi programa que ya había adaptado para encender el led conectado en el conector D12 (mi placa no tiene D13 o no lo encuentro), ¡y funcionó! Me puse tan contenta que les armé un gif animado 😉