Está en la página 1de 20

Universidad de Santiago de Chile Facultad de Ingeniera Departamento de Ingeniera Mecnica rea de Procesos Mecnicos

Proyecto Arduino

Estudiante: Javier Daz Toro Ing. Ejecucin en Mecnica Profesor: Renato Salinas Michael Miranda Asignatura: Tpico I, Robtica

Fecha: 31 Agosto 2013

INDICE

1.- Introduccin.......................................................................................3 2.- Equipos e instrumentos utilizados.....................................................4 2.1.- Tarjeta Arduino Duemilanove 2.2.- Piezo-elctrico 2.3.-Rel Electromecnico 3.-Funcionamiento..7 3.1.-Lectura y discriminacin de golpes 3.2.-Diagrama de flujo 4.- Descripcin del Mtodo Seguido....................................................7

4.1.-El piezo-elctrico y sus valores de operacin 4.2.-Conexin de Rel a placa Arduino y a CA. 3.4.-Conexin Universal USB 1.8mm 4.3.-Conexin de alimentacin batera de 9V
5.- Presentacin de los Resultados.......................................................10 5.1.-Imagenes KNOCK ON 5.2.-Programa 5.3.-Circuito elctrico 5.4.-Costo de desarrollo 6.- Conclusiones y Comentarios........................................................................................13 7.- Bibliografa y Anexos.........................................................................15

1.-INTRODUCCIN

Presenta contenido terico y experimental del proyecto Arduino, mostrando el desarrollo y explicacin del programa desarrollado para el microcontrolador Arduino Duemilanove. El proyecto consta de lectura de golpes va piezo-elctrico, los que con una justa combinacin controlan el encendido y apagado de un rel que comanda un circuito de corriente AC 50-60Hz, 220V, 10A. Dentro de los instrumentos utilizados se puede verificar las caractersticas de la placa Arduino con la que se trabaj y las funciones principales de los elementos constituyentes del circuito. Se presenta el mtodo usado, que bsicamente const en el reconocimiento de las partes bsicas de la tarjeta microcontroladora Arduino, instalacin en el computador, uso y aprendizaje de estructuras de programacin bsica, funciones y variables. Luego en la presentacin de resultados se cita el programa creado junto con los comentarios e incluye imgenes que muestran el funcionamiento del proyecto. Finalmente se comentan observaciones y se seala bibliografa

2.-EQUIPOS E INSTRUMENTOS UTILIZADOS


2.1.-Tarjeta Arduino Duemilanove

Microcontrolador Voltaje de operacin Tensin de entrada (recomendada) Tensin de entrada (lmite) Pines digitales de in/out 14 Pines de entrada analgicos 6 Corriente DC por pin Corriente DC para pin Memoria Flash 16 KB SRAM EEPROM Frecuencia de reloj

ATmega368 5V 7 - 12 V 6 - 20 V (de los cuales 6 proveen salidas PWM) E/S 40 mA 3.3 V 50 mA (de los cuales 2 KB usados para bootloader) 1 KB 512 bytes 16 MHz

Contiene todo lo necesario para apoyar el micro-controlador, basta con conectarlo a un ordenador con un cable USB o alimentarlo con un adaptador AC-DC o batera para empezar. Duemilanove significa 2009 en italiano que fue el ao que fue lanzada al mercado.

2.2.-Piezo-elctrico
Dispositivo: Marca: Modelo: Rango de Operacin: Entrada anloga: Dimensiones: Costo en el Comercio: Piezo-elctrico Desconocida Desconocido 6v/1A 0 - 1023 D=27mm e=0.3mm $70 (Casa Royal)

Los transductores piezo-elctricos son aquellos que basan su funcionamiento en el fenmeno de la piezoelectricidad. Para su fabricacin se utilizan materiales cermicos como el Titano de Bario. Mediante el efecto piezo-elctrico directo a travs de una fuerza externa se logra un desplazamiento de cargas lo que induce una corriente de desplazamiento y sta un campo elctrico. ste es el fundamento de, por ejemplo, los micrfonos piezoelctricos. Mientras que los altavoces piezoelctricos aprovechan el efecto piezoelctrico inverso, mediante el cual a travs de un campo elctrico se produce una deformacin mecnica, que convenientemente aprovechada, puede llegar a emitir sonidos.

2.3.-Relevador Electromecnico
Dispositivo: Rel Electromecnico. Marca: TAHUA Modelo: JQC-3F-L Rangos de Operacin: 7A/240VAC 7A/24VDC 6VDC Costo en el Comercio: $560 (Casa Royal) El rel o relevador es un dispositivo electromecnico. Funciona como un interruptor controlado por un circuito elctrico en el que, por medio de una bobina y un electroimn, se acciona un contacto que permiten abrir o cerrar otros circuitos elctricos independientes. Dado que el rel es capaz de controlar un circuito de salida de mayor potencia que el de entrada, puede considerarse, en un amplio sentido, como un amplificador elctrico. Como tal se emplearon en telegrafa, haciendo la funcin de repetidores que generaban una nueva seal con corriente procedente de pilas locales a partir de la seal dbil recibida por la lnea. Se les llamaba "relevadores" de ah "rel".

3.-FUNCIONAMIENTO 3.1.- Lectura y discriminacin de golpes


Una vez cruzado el umbral definido el programa se pone en funcionamiento, midiendo el tiempo transcurrido entre un golpe y otro. La secuencia de golpes genera un vector lecturaGolpes[10]={207, 167, 190, 342, 220, 374, 195, 0, 0, 0}

ste ser comparado con el vector patrn, pero antes de ello, queda realizar una correccin del rango de valores para hacerlos comparables entre s. Como vemos los rangos de esta lectura estn lejos de coincidir con el vector patrn, lo que hace necesario un mapeo de rangos, que bsicamente es el cambio de rango existente a uno deseado. map (value, fromLOW, formHIGH, toLOW, toHIGH) Value: Valor a mapear fromLOW: limite inferior rango actual (0) fromHIGH: limite superrior rango actual(1200) toLOW: limite inferior rango deseado (0) toHIGH: limite superior rango deseado (100)

mapeando desde cero 0 hasta el tempo mximo ledo: lecturaGolpes[i] = map( lecturaGolpes[i], 0, valorMaxrango, 0, 100) Por lo que el verctor previo al mapeo: lecturaGolpes[10] = {207, 167, 190, 342, 220, 374, 195, 0, 0, 0} Se convertir en: lecturaGolpes[10] = {48, 59, 54, 98, 63, 100, 56, 0, 0, 0} Que es ahora comparable al patrn: codigoSecreto[10] = {50, 50, 50, 100, 50, 100, 50, 0, 0, 0} Finalmente un discriminador calcula las diferencias elemento a elemento de ambos vectores, si esta diferencia es menor a 20. el vector generado es reconocido como una secuencia aceptablemente similar y segn el estado del Switch ejecuta alguna accin. El Switch es el ejecutor dentro de la arquitectura del programa, discrimina el estado del pin que comanda la corriente de alta, prendindola si est apagada y apagndola en el caso contrario. Siempre que la secuencia sea coincidente, consultar el estado del Switch para definir qu es lo que har, ENCENDER O APAGAR. Esto gracias a una variable predefinida en estado cero 0(apagada) que cambia al valor 1 cuando se enciende y a 0 nuevamente una vez que es apagada la lmpara.

3.-FUNCIONAMIENTO 3.2.-Diagrama de Flujo

4.-DESCRIPCIN DEL MTODO SEGUIDO


El profesor realiz una presentacin de los elementos bsicos de la tarjeta, se describieron funciones del lenguaje processing, ejecutamos el programa para conocer la interfaz bajo la que se trabajara. Se nos mostr un ejemplo bsico de Blink, se nos provey de una tarjeta arduino por grupo, para interactuar libremente con la tarjeta y mediante los ejemplos bsicos integrados del programa ir reconociendo las funciones que nos permiten controlar distintos parmetros. Se procede a la constante interaccin y aprendizaje de los elementos constituyentes del proyecto, estudiando sus parmetros, forma en que varan, la interaccin de estos con la tarjeta y su control mediante el diseo de un programa que va mejorando en medida que se incorporan nuevos conocimientos.

4.1.-El piezo elctrico y sus valores de operacin


Lo primero que deba hacer si deseaba utilizar el piezo era conocer sus valores de operacin, conectarlo a la tarjeta arduino y ver de que manera poda interactuar con ella para luego controlar piezo-elctrico. En un foro de www.youtube.com llamado Cosas de Mecatrnica muestran cmo interactuar con elementos de lectura anloga, y fue as con el siguiente mini programa que pude reconocer los parmetros de un piezo elctrico y ver los resultados en el Monitor Serial. Cito (http://www.youtube.com/watch?v=soVxXQPVmFc) void setup() { pinMode(0, INPUT); } void loop() { int valor = analogRead(A0); Serial.println(valor); Delay(100); } muestra los valores recibidos por la entrada anloga A0, con un delay de 100mseg, permitiendo reconocer la sensibilidad del dispositivo y parmetros mximos y mnimos

4.2.-Conexin de Rel a placa Arduino y a CA.


El paso siguiente sera identificar los terminales del rel adquirido, para montarlo en una placa y hacer las conexiones correspondientes, fue de gran inters reconocer los pines de corriente de alta y de baja, ya que el rel es el puente de comunicacin entre la placa arduino y la corriente alterna de alto voltaje, adems de aislar la corriente de alta para evitar un shock elctrico por contacto.

Los pines GND Y PIN CANAL van conectados a la placa arduino, la Fase es la corriente de alta que se interrumpe conectando el otro extremo a normalmente abierto, que es el estado en reposo del rel.

4.3.-Conexin de alimentacin batera de 9V


Para la conexin de alimentacin en la placa con uso de una batera de 9v hay conocer la polaridad de alimentacin DC arduino. Segn la misma pagina de la tarjeta, la alimentacin se debe hacer mediante un Plug hembra de 2.1mm con centro positivo.

3.4.-Conexin Universal USB 1.8mm


Finalmente si quera modificar el programa inserto dentro de una botella lmpara me sera necesario instalar en la parte trasera de la botella un conector hembra usb de impresora Imagen 2. (Cable USB A/B 1.8mm ) por lo que debera estudiar sus terminales. Existe una correspondencia entre los colores de los terminales y los cables de conexin universal usb 2.0 imagen.1. 1.- BLANCO 2.- ROJO o ROSA 3.- VERDE 4.- NEGRO Imag.1.- USB 2.0

Imagen 2 USB 1.8mm

5.-PRESENTACIN DE LOS RESULTADOS


5.1.-Imagenes KNOCK ON

5.2.-Programa
//UNIDADES const int piezoSensor = 0; const int ledrojo = 11; const int ledverde =12; const int luzPin = 10; //CONSTANTES const int Umbral = 300; const int tiempoLecturaUnitaria = 50; const int golpesMaximos = 10; const int tiempoEsperaMax = 1200; //TOLERANCIAS PONCENTILES const int valorDesechoUnitario = 25; const int valorDesechoPromedio = 15; //DEF. CODIGO SECRETO int CodigoSecreto[golpesMaximos] = {50, 50, 50, 100, 50, 100, 50, 0, 0, 0}; int lecturaGolpes[golpesMaximos]; int valorSensor = 0; int Switch=0; //INICIO PROGRAMA void setup() { pinMode(luzPin, OUTPUT); pinMode(ledrojo, OUTPUT); pinMode(ledverde, OUTPUT); Serial.begin(9600); Serial.println("RECEPCION ABIERTA"); } //LECTURA DE GOLPES void loop() { valorSensor = analogRead(piezoSensor); if (valorSensor >= Umbral){ escucharGolpes(); } } void escucharGolpes(){ Serial.println("TOC!"); digitalWrite(ledrojo, HIGH); delay(100); digitalWrite(ledrojo, LOW);

int i = 0; for (i=0;i<golpesMaximos;i++){ lecturaGolpes[i]=0; } int numeroGolpesCualquiera=0; int inicioTiempo=millis(); int ahora=millis(); delay(tiempoLecturaUnitaria); do { valorSensor = analogRead(piezoSensor); if (valorSensor >=Umbral){ Serial.println("toc"); digitalWrite(ledrojo, HIGH); delay(100); digitalWrite(ledrojo, LOW); ahora=millis(); lecturaGolpes[numeroGolpesCualquiera] = ahora-inicioTiempo; numeroGolpesCualquiera ++; inicioTiempo=ahora; delay(tiempoLecturaUnitaria); } ahora=millis(); } while ((ahora-inicioTiempo < tiempoEsperaMax) && (numeroGolpesCualquiera < golpesMaximos)); //SWITCH if(validadordeGolpes() == true) { Serial.println("CODIGO CORRECTO"); if(Switch==0){ Serial.println("LUZ ENCENDIDA"); digitalWrite(luzPin, HIGH); digitalWrite(ledverde, HIGH); delay(1000); digitalWrite(ledverde, LOW); Switch=1;} else{ Serial.println("LUZ APAGADA"); digitalWrite(luzPin, LOW); digitalWrite(ledverde, HIGH); delay(1000); digitalWrite(ledverde, LOW); Switch=0;}} else{ Serial.println("CODIGO ERRONEO"); digitalWrite(ledrojo, HIGH); delay(100); digitalWrite(ledrojo, LOW); delay(100);

digitalWrite(ledrojo, HIGH); delay(100); digitalWrite(ledrojo, LOW); delay(100); digitalWrite(ledrojo, HIGH); delay(100); digitalWrite(ledrojo, LOW); } } //VALIDADOR DE GOLPES boolean validadordeGolpes(){ int i=0; int cuentaGolpesCualquiera = 0; int cuentaGolpesSecreto = 0; int intervaloMaxGolpes = 0; for (i=0;i<golpesMaximos;i++){ if (lecturaGolpes[i] > 0){ cuentaGolpesCualquiera++; } if (CodigoSecreto[i] > 0){ cuentaGolpesSecreto++; } if (lecturaGolpes[i] > intervaloMaxGolpes){ intervaloMaxGolpes = lecturaGolpes[i]; } } if (cuentaGolpesCualquiera != cuentaGolpesSecreto){ return false; } //NORMALIZADOR DE VELOCIDAD int tiempoTotalDif=0; int tiempoUnitDif=0; for (i=0;i<golpesMaximos;i++){ lecturaGolpes[i]= map(lecturaGolpes[i],0, intervaloMaxGolpes, 0, 100); tiempoUnitDif = abs(lecturaGolpes[i]-CodigoSecreto[i]); if (tiempoUnitDif > valorDesechoUnitario){ return false; } tiempoTotalDif += tiempoUnitDif; } if (tiempoTotalDif/cuentaGolpesSecreto > valorDesechoPromedio){ return false; } return true; }

*Los comentarios del programa estn en el archivo VERSION_FINAL_6_0.ino

5.-PRESENTACIN DE LOS RESULTADOS


5.3.-Circuito elctrico

5.3.-Costo de desarrollo
Tarjeta Arduino Duemilanove Piezo-elctrico Rel Electromecnico Leds, resistencias Set 20 brocas corte vidrio Banda cables de conexin TOTAL* $16.990 $70 $560 $220 $8990 $1490 $29320

*El costo total se reducira an ms en produccin en serie al compartirse el coste de ciertos materiales cmo los cables de conexin, set de brocas de corte de vidrio y otros no incluidos en la lista cmo herramientas utilizadas a $17620, un precio razonable que incluso podra bajar ms al comprar materiales en mayor cantidad.

6.-CONCLUSIONES Y COMENTARIOS
Si bien es reconocido que arduino es slo una de decenas de plataformas de control, es un buen comienzo para estudiantes, pudiendo a poco andar, interactuar con la tarjeta mediante programas bsicos y pensar en el funcionamiento de aparatos de la vida cotidiana, acercndonos a la investigacin y desarrollo de dispositivos propios, alejndonos para siempre de la ms completa ignorancia del cmo funciona El uso de microcontroladores y el uso de open source (hardware libre) viene a poner en la palestra temas completamente ausentes en nuestro diario contacto con la tecnologa, no solo como ingenieros, sino como investigadores de la ciencia, despierta en uno esas ganas de ver que hay detrs de las cosas, como funcionan incluso nuestros propios electrodomsticos. Es por lo mismo es un paso interesante para familiarizarnos con el lenguaje de programacin en C (que es el lenguaje en el que est basado processing) complementando herramientas de diseo y materiales que habamos estado estudiando a lo largo de la carrera, a m personalmente me cautiv el hecho de poder dar vida a ese elefante de piedra que tenamos ante nosotros, la mecnica, a pensar con la cabeza puesta en el futuro e ideas tecnolgicas aplicables en la industria que gozan de libre uso gracias al concepto de OPEN SOURCE. La experiencia de adentrarnos en materia de programacin y materializar el proyecto permiti un aprendizaje integral que nos permiti adquirir la experiencia necesaria para que en lo prximo seamos capaces de desarrollar y liderar algn proyecto que incluya tecnologa de microcontroladores, manejndonos no tan solo con el lenguaje de comunicacin con la tarjeta Arduino, sino tambin con el desarrollo, investigacin y aprendizaje obligatorio para concluir con ste, el primer proyecto de muchos.

BIBLIOGRAFIA
Tutorial maquinas CNC, [Rafael Enriquez Herrador, 13 nov 2009] Arduino programming notebook [brian w. Evans] Prcticas con Arduino Nivel 1[Jos Manuel Ruiz Gutierrez] Manual de Programacin en C [Frankfurt, Marrion; 1987 Usach] Learning to use Arduino [David A. Mellis; 2006] Ejercicios de Arduino [Grupo Sabika] Paginas
http://www.datasheetarchive.com/JQC-3F-datasheet.html Terminales rel

http://arduino.cc/es/Reference para anexos http://www.circuits.io/circuits/new diseo de circuitos online

ANEXOS
millis ()
D e s c r ip c i n Devuelve el nmero de milisegundos desde la placa Arduino se inici la ejecucin del programa en curso. Se desbordar Este nmero (volver a cero), despus de aproximadamente 50 das.

Declaracion FOR
D e s c r ip c i n La declaracin for es usada para repetir un bloque encerrado entre llaves. Un incremento de un contador es usado, normalmente, para aumentar y terminar con el bucle. La estructura for es muy til para la mayora de las operaciones repetitivas, y habitualmente se usa para operaciones con vectores, para operar sobre conjuntos de datos/pines El bucle for tiene tres partes o argumentos en su inicializacin:

for (initialization; condition; increment) { //funcin(es); }

booleano
Un booleano tiene uno de dos valores: true o false . (Cada variable booleana ocupa un byte de memoria.)

if (condicional) y ==, !=, <, > (operadores de comparacin)


if, el cual puede ser usado en conjunto con uno o ms operadores de comparacin, comprueba si cierta

condicin se cumple, por ejemplo, si un input posee un valor mayor a cierto nmero. El formato para una comprobacin if es el siguiente:
if (algunaVariable > 50) { // hacer algo aqu. }

Este programa comprueba si la variable algunaVariable es mayor a 50. Si lo es, el programa toma una accin particular. Dicho de otra forma, si la declaracin escrita dentro de los parntesis es verdadera (true), el cdigo dentro de las llaves se ejecutar. Sino, el programa ignora dicho cdigo. Las llaves pueden ser omitidas luego de una declaracin if. De hacer esto, la siguiente lnea (definida por el punto y coma) ser la nica afectada por la condicin.

if / else
if/else permite mayor control sobre el flujo del cdigo que la declaracin if bsica, por permitir agrupar mltiples comprobaciones. Por ejemplo, un input anlogo podra ser comprobado, y tomarse una accin si el valor del inputes menor a 500, y, otra accin se ser igual o mayor a 500. El cdigo se vera as:
if (pinCincoInput < 500) { // accin A } else { // accin B }

else puede proceder a una comprobacin if, de esta forma, se pueden realizar mltiples comprobaciones en una misma estructura de condiciones. Cada comprobacin proceder a la siguiente, slo cuando su propio resultado sea FALSE. Cuando el resultado sea TRUE, su bloque de cdigo contenido, ser ejecutado, y el programa esquivar las siguientes comprobaciones hasta el final de la estructura de comprobaciones. Si ninguna comprobacin devuelve valor TRUE, elelse ser ejecutado, y de no haber ninguno declarado, simplemente no sucede nada. Entonces un bloque else if puede ser usado con o sin else al final. La cantidad de declaraciones else if, y sus ramificaciones son ilimitadas.

Bucles while
D e s c r ip c i n Los bucles while se ejecutan continuamente, hasta que la expresin de dentro del parntesis, (), pasa a ser falsa. Algo debe modificar la variable comprobada, el bucle while nunca terminar. Lo que modifique la variable puede estar en el cdigo, como una variable que se incrementa, o ser una condicin externa, como el valor que da un sensor. S in t a x i s
while(expresion){ // sentencia(s) }

do - while
El bucle "'do'" trabaja de la misma manera que el bucle "'while'", con la excepcion de que la condicin se comprueba al final del bucle, por lo que este bucle se ejecuta "siempre" al menos una vez.
do { // bloque de instrucciones } while (condicin);

map(value, fromLow, fromHigh, toLow, toHigh)


D e s c r ip c i n Re-mapea un nmero desde un rango hacia otro. sto significa que, un valor (value) con respecto al rango fromLow-fromHight ser mapeado al rango toLow-toHigh. No se limitan los valores dentro del rango, ya que los valores fuera de rango son a veces objetivos y tiles. La funcinconstrain() puede ser usada tanto antes como despus de sta funcin, si los lmites de los rangos son deseados. value: fromLow: fromHigh: toLow: toHigh: el nmero (valor) a mapear. lmite inferior del rango actual del valor. lmite superior del rango actual del valor. lmite inferior del rango deseado. lmite superior del rango deseado.