Escolar Documentos
Profissional Documentos
Cultura Documentos
La siguiente gua tiene como objetivo mostrar introducir al usuario la construccin y programacin de un dispositivo interactivo. La informacin corresponde al libro Getting Started with Arduino por Massimo Banzi.
Una vez que el LED est conectado, necesitars decirle a Arduino que hacer, por medio de un cdigo, es decir, una lista de instrucciones que le damos al micro-controlador para que haga lo que le ordenemos. Inicia el software de Arduino en tu computador, ve a Select File > New y se te pedir que selecciones un nombre para tu archivo. Nmbralo Blinking_LED y clickea en OK. Luego copia el siguiente texto (Example 01) en el editor de Arduino (la ventana principal de Arduino IDE). Tambin puede descargarlo de www.makezine.com/getstartedarduino
Una vez que el cdigo est en el editor, necesitas verificar si esta correctamente escrito. Haz click en Verificar (figura 4-3). Si todo est en orden debera de aparecer un mensaje que diga "Done compiling" al final del editor. Este mensaje significa que el Arduino IDE ha convertido tu esquema en un programa ejecutable que puede ser ledo por la placa, similar a un archivo .exe para windows o a un archivo .app para mac. Ahora puedes cargar el cdigo a la placa clickeando en Upload to I/O board (figura 4-3) . Esto reiniciar la placa, forzndola a dejar de hacer lo que estaba haciendo para atender a nuevas instrucciones provenientes del puerto USB. El software enva nuevos cdigos a la placa los cuales se almacenarn en su memoria y eventualmente se ejecutarn. Vers aparecer algunos mensajes en el rea negra al final del editor, y justo arriba de esa rea vers el mensaje "Done uploading", lo cual indica que el proceso se ha llevado completado de manera correcta. Hay 2 LEDs en la placa marcados como RX y TX respectivamente, los cuales parpadean cada vez que un byte es enviado o recibido. Durante el proceso de uploading estos parpadearan de forma permanente. Si no vez los LEDs parpadeando o recibes un error en vez del mensaje "Done Uploading", significa entonces que debe haber un problema de comunicacin entre el computador y Arduino. Verifica que haz seleccionado el puerto serial correcto (ver captulo 3) en Tools > Serial port menu. Confirmar tambin que se encuentre seleccionado el modelo correcto de Arduino en Tools > Board Menu. Si el problema persiste chequea el capitulo 7.
Una vez que el cdigo este cargado en tu placa de Arduino, se quedar all hasta que cargues otro cdigo, incluso an cuando reiniciar la placa o la apagues. Similar a lo que ocurre con el disco duro del computador. Asumiendo que el cdigo fue cargado de forma correcta, vers el LED "L" encenderse por un segundo y luego apagarse por otro segundo. Si instalaste otro LED como se muestra en la figura 4-, ese LED tambin parpadear. Lo que acabas de escribir y cargar corresponde a un cdigo de programacin (sketch). Arduino, como se menciona con anterioridad, es como un pequeo computador y puede ser programado como de la forma que tu lo desees. Esto se hace utilizando un lenguaje de programacin donde escribes una seria de instrucciones en el Arduino IDE, que se convierten en acciones ejecutables para tu micro-controlador. Se mostrar a continuacin como entender un esquema o cdigos de programacin (sketch). Cabe considerar que Arduino ejecuta el cdigo de arriba hacia abajo, por lo que la primera lnea al principio es la primera en ser leda por el programa, luego se mueve hacia abajo.
const int se refiere a que LED corresponde a un nmero entero que no puede ser modificado y cuyo valor es 13. Es como una bsqueda y reemplazo automtico para tu cdigo; en este caso, le dice a Arduino que escriba el nmero 13 cada vez que LED aparezca. Hacemos uso de este comando para especificar que el LED que hacemos parpadear est conectado al pin13 de la placa. void setup() Indica a Arduino que el siguiente bloque de cdigos ser llamado setup() { Con este smbolo empezamos un nuevo bloque de cdigos pinMode(LED, OUTPUT; // sets the digital // pin as output
Indica a Arduino como configurar un cierto pin. Los pins digitales pueden ser usados como INPUT y OUTPUT. En este caso, necesitamos un OUTPUT pin para controlar nuestro LED, por lo que ponemos el nmero de nuestro pin y el modo entre los parntesis. pinMode es una funcin, y las palabras nmeros especificados entre los parntesis son los argumentos. INPUT y OUTPUT son constantes en el lenguaje de Arduino. (al igual que las variables, las constantes son valores asignados, excepto que estos ltimos son predefinidos y nunca cambian) } Con este smbolo le ponemos fin a la funcin setup() void loop() { loop() es donde especificamos el mayor comportamiento de nuestro dispositivo interactivo, este se repetira de forma indefinida hasta que desactivemos la placa.
1er argumento 2do argumento
digitalWrite(LED, HIGH);
Tal como se lee, digitalWrite es capaz de encender o apagar cualquier pin que haya sido configurado como un OUTPUT. El primer argumento (en este caso LED), especifica cual pin debe apagarse o encenderse (recuerda que LED es un valor constante que hace referencia al pin 13, por lo que ese ser el pin que cambie). El segundo argumento puede cambiar el pin a encendido (HIGH) o apagado (LOW). Imagina que cada pin OUTPUT es un pequeo enchufe como los que tienes en casa. En Europa son de 230V, en Amrica de 110V y para Arduino son 5V. Cuando escribes digitalWrite(LED, HIGH), activas el pin output a 5V y si le conectas un LED, este encender. Ya para este punto, una instruccin tipiada en el software se traduce en un acontecimiento o reaccin en el mundo real; en este caso, por medio del manejo del curso de electricidad hacia el pin. Encender y apagar el pin nos permitir traducir esto en algo ms visible para el humano; el LED es nuestro actuador.
delay(1000);
Arduino tiene una estructura muy bsica, por lo que, si quieres que algo suceda con una cierta regularidad, puedes conseguirlo. Esta herramienta bsicamente hace que el procesador no haga nada por el tiempo que le indiques como argumento (en milisegundos). 1000 milisegundos equivalen a 1 segundo. digitalWrite(LED, LOW); // turns the LED off
La siguiente instruccin pretende apagar el LED. Porque usamos HIGH y LOW?. Es un acuerdo en la electrnica digital donde HIGH significa encendido y LOW apagado. delay(1000); // waits for a second otra pausa } Cerramos el bloque y ponemos fin a la funcin loop() En resumen, este programa hace lo siguiente: Convierte el pin 13 en un output (una nica vez al principio) Introduce loops Activa el LED conectado al pin13 Hace pausas Desactiva el LED conectado al pin13 Hace pausas Vuelve al principio del loop
Se pueden realizar variados ajustes al cdigo, por ejemplo utilizar diversos periodos de pausas, nmeros para la activacin y desactivacin de las pulsaciones de forma tal de que puedas ver diferentes patrones de Blinking. Particularmente deberas ver lo que sucede cuando haces delays de periodos muy cortos, pero considera utilizar diferentes delays para la activacin y desactivacin se lleva a cabo un suceso extrao, el cual ser de gran utilidad cuando aprendas sobre pulse-widthmodulation ms adelante. En la siguiente seccin intentare explicar los fundamentos bsicos de la electricidad.
Si desarmas un ventilador podrs observar que est compuesto por una batera pequea, un par de cables, un motor elctrico y un switch (botn) que se encuentra en uno de los cables que va hacia el motor. Si la batera est en buen estado y presionas el botn, el motor echar a andar. Cmo es que funciona? Imagina que la batera es un depsito de agua que puede reservar y bombear, el switch es la llave de paso y el motor es uno de esos molinos de agua. Cuando das la llave de paso el agua fluye desde el depsito y hace que el molino entre en movimiento. El siguiente es un sistema hidrulico simple (figura 4-5) en donde hay 2 factores importantes: la presin del agua (que es determinada por el poder del bombeo que se genera en el depsito y la cantidad de agua que fluir por las tuberas (la cual depender del tamao de las tuberas y la resistencia que el molino tendr en relacin al flujo/corriente de agua que lo impacte).
Pronto te dars cuenta que si quieres que el molino gire ms velozmente tendrs que aumentar el tamao de las tuberas y aumentar la presin que el bombeo genera. Aumentar el tamao de las tuberas permite un gran flujo de agua; al hacerlas ms grandes, reducimos su resistencia al flujo del agua. Sin embargo esto funcionar hasta cierto punto, ya que el molino no girar ms rpido a menos que nuestro deposito bombee con mayor energa. Podrs observar que a medida que el molino gire, el eje se calentar de a poco, esto se debe debido a que, sin importar que tan bien hayamos montado nuestro molino, la friccin entre el ejes y los orificios en los que est montado, generar calor. Es importante entender que en cualquier sistema similar, no toda la energa se convertir en movimiento; parte de ella se desperdiciar en algunas deficiencias y generar calentamiento en algunas partes del mecanismo. Entonces las partes importantes del sistema son la presin producida por la bomba, la resistencia de las tuberas y el molino, y el flujo del agua(representado por el nmero de litros que viaja en 1 segundo). La electricidad funciona de forma similar al agua. Tienes un sistema de bombeo (cualquier fuente de electricidad como un enchufe o una batera) que impulsa flujos de electricidad (imagnalo como gotas de electricidad) a travs cables (tuberas). Cuando ves que una batera dice 9V, piensa que este voltaje vendra a ser la presin de agua que se produce por medio del bombeo, el cual se mide en volts. (por Alejandro Volta, inventor de la primera batera) As como la presin del agua tiene un equivalente elctrico, el flujo de esta tambin. A este lo llamamos corriente y se mide en amperes (por Andr-Marie Ampere, pionero en el electromagnetismo). La relacin entre el voltaje y la corriente puede ser ilustrada en el molino de agua: un mayor voltaje (bombeo) har que el molino gire mas rpido; un mayor flujo de agua (corriente) te permitir girar un molino mas grande. Finalmente, la resistencia que se opone al flujo de corriente de cualquier camino por el que esta viaje, se llama tal cual , resistencia; y se mide en ohm (por George Ohm). Herr Ohm formul igualmente un enunciado, el cual es necesario recordar. El fue capaz de demostrar que en cualquier circuito el voltaje, la corriente y la resistencia, estn relacionados entre s; y que particularmente la resistencia de un circuito determina el flujo de corriente dado por un cierto voltaje. Si lo piensas es bastante intuitivo. Toma una batera de 9V y conctala a un circuito simple. Mientras mides la corriente te dars cuenta que mientras mayor resistencia aadas al circuito, menor corriente viajara por l. Volviendo a la analoga del agua que fluye en las tuberas, dado un cierto bombeo, si instalo una vlvula (que equivaldra a una variable de resistencia en electricidad), mientras ms cerrada se encuentre (aumentado la resistencia al flujo de agua), menos agua viajar por las tuberas.
Ohm resumi su enunciado en la siguiente formula. R (resistance) = V (voltaje) / (corriente) V= R*I I=V/R Esta es realmente la nica ley que necesitas memorizar y aprender cmo usar , ya que en la mayora de tu trabajo ser la nica que utilizaras.
Utilizando un botn para controlar un LED (Using a Pushbutton to Control the LED)
En nuestro ejercicio anterior, el LED era un actuador controlado por Arduino. En este caso, para controlar el LED, vamos a usar uno de los sensores ms bsicos: un botn. Si quisieras desarmar un botn, te encontraras con que es un dispositivo bastante simple: 2 placas de metal separadas por un resorte, y una tapa plstica que cuando es presionada provoca que estas entren en contacto. Mientras estn placas estn separadas, no habr circulacin de corriente en el botn (similar a cuando la vlvula de agua estaba cerrada); cuando se presiona el botn hacemos la conexin. Para monitorear el estado de un switch existe un instruccin de Arduino, la cual veremos a continuacin: la funcin digitalRead() digitalRead() se encarga de ver si se est aplicando algn nivel de voltaje al pin que especificas entre los parntesis, traducindolo en un valor de HIGH o LOW (ON o OFF), dependiendo de su estado. Las instrucciones que hemos usado hasta ahora no nos han devuelto ningn tipo de informacin, solo han ejecutado lo que especficamente les hemos solicitado hacer. Lo anterior resulta bastante limitado, ya que responde a programaciones muy predecibles que carecen de alguna entrada (input) del mundo exterior. Con digitalRead(), podemos "preguntar" a Arduino y recibir "respuestas" que sern almacenadas en su memorias para despus tomar una decisin al respecto. Construya el circuito mostrado en la figura 4-6. Necesitar una serie de materiales. - breadboard - cable de puente - 1 resistencia de 10k Ohm - botn
Ve a Arduino, Select File > New. Cuando el programa te solicite nombrar el archivo, escribe PushButtonControl. Copia y pega el cdigo en tu editor (o descrgalo de www.makezine.com/getstartedarduino). Si todo est en orden el LED se debera encender cuando presiones el botn.
void setup() { pinMode(LED, OUTPUT); // tell Arduino LED is an output pinMode(BUTTON, INPUT); // and BUTTON is an input } void loop() { val = digitalRead(BUTTON); // read input value and store it // check if the input is HIGH (button pressed) // and change the state
if (val == HIGH) { state = 1 - state; } if (state == 1) { digitalWrite(LED, HIGH); } else { digitalWrite(LED, LOW); } } // turn LED ON
Ahora probemos el cdigo. Notars que la luz cambia tan rpidamente que no te permite dejarla encendida o apagada con solo apretar el botn. Revisemos en detalle el cdigo: state es una variable que almacena ya sea 0 o 1 como recordatorio de si el LED est encendido o apagado. Una vez que dejas de presiona el botn, lo reiniciamos a 0 (LED apagado). Luego, leemos el estado actual del botn, y si se encuentra presionado (val==HIGH), cambiamos state de 0 a 1, o viceversa. Como state puede ser nicamente 0 o 1, utilizamos un truco matemtico basado en la idea de que 1-0 es 1 y 1-1 es 0: state = 1 - state; El smbolo = equivaldra a asignar el resultado de lo que est detrs de m a el nombre de la variable antes de m. En este caso el nuevo valor de state es el valor de 1 - el valor anterior de state. Ms adelante en programacin, podrs ver que se utiliza state para ver si el LED debe estar encendido o apagado. No obstante, esto lleva a resultados poco fiables debido a la forma en que leemos el botn. Arduino es muy veloz; se ejecuta a una velocidad de 16 millones por segundo, es decir, puede estar ejecutando unos cuantos millones de lneas de cdigos por segundo. Esto significa que mientras tu dedo presiona el botn, Arduino probablemente lo ley unas miles de veces cambiando su state de acuerdo a lo acordado, por lo que el resultado termina siendo impredecible; puede que este apagado cuando tu quieras que realmente este encendido y viceversa. Como arreglamos esto?. Pues necesitamos detectar el momento exacto cuando el botn es presionado; ese es la nica instancia que tenemos que cambiar el state. Una forma de hacer esto es almacenando el valor de val antes que de leer uno nuevo; esto nos permite comprar la posicin actual del botn con la anterior, y cambiar state solo cuando el botn sea HIGH despus de haber sido LOW. Example 03B tiene el cdigo para llevarlo a cabo:
// Example 03B: Turn on LED when the button is pressed // and keep it on after it is released // Now with a new and improved formula! const int LED = 13; const int BUTTON = 7; int val = 0; int old_val = 0; int state = 0; void setup() { pinMode(LED, OUTPUT); pinMode(BUTTON, INPUT); } void loop(){ val = digitalRead(BUTTON); // the pin for the LED // the input pin where the // pushbutton is connected // val will be used to store the state // of the input pin // this variable stores the previous // value of "val" // 0 = LED off and 1 = LED on // tell Arduino LED is an output // and BUTTON is an input
// check if there was a transition if ((val == HIGH) && (old_val == LOW)){ state = 1 - state; }
old_val = val; // val is now old, let's store it if (state == 1) { digitalWrite(LED, HIGH); // turn LED ON } else { digitalWrite(LED, LOW); } }
No obstante este cdigo no est completamente correcto debido a otro problema con el mecanismo de switch. Los botones, como mencionaba, son mecanismos muy simples; 2 placas de metal separadas por un resorte. Cuando presionas el botn estas hacen contacto de forma que la electricidad fluye. Suena bastante simple aunque en realidad esta conexin no es tan perfecta como aparenta, en especial cuando el botn no est completamente presionado y genera interferencia en la seal (bouncings). Cuando el botn genera bouncings, Arduino detecta una secuencia muy rpida de on y off. Existen muchas formas de solucionar este problema, pero bastar con agregar un delay de 10 a 50 milisegundos para que se detecte la transicin. Example 03C es el resultado final:
// Example 03C: Turn on LED when the button is pressed // and keep it on after it is released // including simple de-bouncing // Now with another new and improved formula!! const int LED = 13; const int BUTTON = 7; int val = 0; int old_val = 0; int state = 0; void setup() { pinMode(LED, OUTPUT); pinMode(BUTTON, INPUT); } void loop(){ val = digitalRead(BUTTON); // the pin for the LED // the input pin where the // pushbutton is connected // val will be used to store the state // of the input pin // this variable stores the previous // value of "val" // 0 = LED off and 1 = LED on // tell Arduino LED is an output // and BUTTON is an input
// check if there was a transition if ((val == HIGH) && (old_val == LOW)){ state = 1 - state; delay(10); } old_val = val; // val is now old, let's store it