Felix Maocho

Para quien le interese lo que a nosotros nos interesa

Arduino – Atelier JCM, Capítulo Dos

Por Félix Maocho
23/6/2013

Sigo con la traducción comentada de los post de Introducción a Arduino de Ateleier JMC.

En este capítulo el autor se centra en la posibilidad de utilizar los pins digitales de Arduino como entrada de datos e ilustra el uso con un ejemplo centrado en detectar el estado de un pulsador o interruptor-

Es el primer ejemplo de funcionamiento de un sensor, es decir de uno de los diversos “sentidos” que podemos dar a nuestra placa Arduino. en este caso el del tacto, cuando pulsamos el botón del interruptor nuestro Arduino lo “siente”.

Sensores y actuadores son las dos elementos que forman la potencialidad de Arduino, por los sensores, (tacto, oído, temperatura, señales de radio, reloj, nivel de un líquido, grado de acidez, contadores de diversos tipos, inclinacion, acelerometros etc, ), Arduino capta la realidad del mundo exterior. y en funció de esos datos percibidos, activa o inhibe los actuadores, (motores, luces, sirenas, emite mensajes, abre o cierra válvulas, etc,) que modifican su forma de trabajar de los aparatos controlados por Arduino.

En el ejemplo final de este post, tenemos la forma de menejar un motor con solo oprimir un pulsador, este ejemplo nos demuestra como puede cambiar la forma de actuar un aparato controlado con Arduino, con solo percibir nuestra orden, en este caso, indicada por una pulsación del interruptor.

Como siempre tener en cuenta que para la practica se utiliza una placa llamada DFRduino, especialmente diseñada para el control de motores eléctricos, que es compatible con la que habitualmente utilizamos nosotros Arduino UNO, sin embargo en este casp, no utiliza elementos no estándar de Arduino por lo que exactamente la misma práctica, se puede realizar con un Arduino UNO.

Introducción al Arduino Capítulo 2

Hasta ahora hemos utilizado los contactos (pins) de Arduino como salida. También se pueden utilizar como entrada.

Los montajes de este capítulo utilizan una pieza llamada «solderless breadboard »  (tablero  de prototipado sin soldadura, que nosotros solemos llamar “protoboardª) Un pequeño rectángulo de plástico perforado y equipado con contactos internos para conseguir un buen contacto entre las piezas. Esta tarjeta viene con los kits de Arduino.

Nota del traductor

La utilidad de la tarjeta protoboard, o tarjeta de prototipado reside en que se pueden establecer los circuitos electrónicos sin necesidad de soldar los componentes a los cables que les comuniquen, lo que redunda en tres ventajas esenciales, la  rapidez en el montaje de prototipos, pues es mucho más rápido colocar las patas de cada componente en orificios adecuadas de la tarjeta protoboard, que andar soldando esas patas a cables .que les conecten  entre si. La segunda ventaja, es la facilidad con que se cambian los circuitos o corrigen errores, pues al no estar soldados basta sacar las patas de los componentes de los orificios donde están colocados, como si las desenchufaramos. La tercera ventaja es el completo reciclado de todos los componentes una vez finalizado el desarrollo del prototipo, basta tirar de ellos para recupera5rlos íntegros para ser utilizados en otros experimentos.

Lo único que necesitamos saber es que casi todas las tarjetas de prototipado o “protoboard”.  tiene en el lado más largo dos filas de agujeros conectados entre si, que son los buses que se utilizan normalmente para llevar las tensiones de 5 voltios (+5V) y tierra o GND (0V) a todos los componentes que lo necesiten . Con frecuencia estos dos buses están situados a  ambos lados de la dirección más larga  y se reconocen por tener pintadas cada una, una íinea roja o azul.

Perpendiculares  los buses suele haber dos agrupaciones de orificios de 5 agujeros situadas aambos lados de un canal de separación, los cinco agujeros de cada uno de estos segmentos  están interconectado entre si, basta por tanto poner dos componentes en dos agujeros del mismó segmento vertical  para que queden conectados automáticamente.

Una parte de la tarjeta protoboard se ve en la figura colocada a continuacion

  

El cable rojo se conecta al +5v del Arduino. llega a la protoboard y entra en un orificio de la linea roja y la totalidad de los orificios de la  línea situada al lado de la linea roja están a 5 v

El cable verde está conectado a tierra (GND) o 0V, y entra en el protoboard y toda la  línea horizontal que situada al lado de la l’inea azul están también a 0v

Importante: los 5 puntos de una pequeña sección vertical del tablero están todos interconectados.

El cable naranja parte del pin 2; está conectado a la resistencia de 220 homs que ofrece protección en caso de corto circuito, que será mejor explicado más adelante).

El otro extremo de la resistencia está conectado al cable amarillo, (y es así, porque están en el mismo pequeño segmento vertical).

El extremo del cable se controla por el programa correspondiente:

/*
* Test switch Capitulo 2 P1
*/

int switchPin = 2;   // el interruptor está conectado al pin digital 2

void setup()
{
Serial.begin(19200);
pinMode(switchPin, INPUT); // El pin 2 está en el modo de entrada
}

void loop()
{
int resultat;
Serial.print(“Serial.print(“Lecture de l’ etat du switch: “);
// el estado del interruptor (0 o 1) se almacena
// en la variable resultado
resultat=digitalRead(switchPin);
// Muestra en el monitor serie el contenido del resultado
// del estado de interruptor
Serial.println(resultat);
delay(1000);
}

•••

Este primer montaje nos llevará de nuevo a los tiempos de estudiante!
En efecto, el cable amarillo se puede conectar a dos posiciones:

– En la misma línea horizontal que el cable verde 0v, nivel bajo, indicado por el valor 0

– En la misma línea horizontal que el cable rojo 5v, nivel alto, indicado por el valor 1

Puede ser controlado a través del monitor serie cual es el cambio de estado del pin 2:

Nota del traductor

Para hacer esta sencilla prueba necesitamos utilizar la comunicacion serial que es un sencillo dispositivo que tiene Arduino para enviar/recibir datos de/desde  la tarjeta arduino a la pantalla del PC. para utilizar este servicio hay que inc dicar las siguientes cosas

1) Declarar en la funcion “setup” que vamos a utilizar la comunicacion serial con le mandato “begin” y la velocidad de transmision que establecemos. En nuetro caso hemos escrito en la funcion setup  el mandato “Serial.begin(19200);” que indica que vamos a establecer una comunicacion serial a 19200 baudios

2) Cargar el buffer y enviarlo al PC. Preparar la comunicacion a enviar cargandola en un buffer que tiene una capacidad máxima de 124 caracteres, pero que se puede enviar medio lleno. En este caso cargamos dos buffer. En el primero se utiliza la el mandato “Serial.print” que traslada el texto que se le indique. y lo envía (si queremos que este contenido quede despeq gado del que enviemos a continuacion añadiremos algun espacio en blanco antes de poner las comillas y cerrar el paréntesis  En nuestro ejemplo pasamos primeramente un buffer con un texto fijo con el siguiente mandato. “Serial.print(“Lecture de l’ etat du switch: “)” 

Pasamos a hora a cargar un segundo buffer con el contenido del pin para ello usaremos dos pasos: Cargar el valor del pin en una variable y luego escribir esa variable en el buffer.

El mandato “digitalRead” lee el estado del “pin switchpin“, (que en nuetro caso es el pin 2 pues ese es el valor con que le inicializamos esa variable) y el valor que tenga, que solo puede ser 21” o “0” ( HIGH/alto/5V, = “1” o LOW/bajo/0V  = “0”)  lo traspasa a la variable local “resultat”. (es local pues se ha definido dentro de la funcion “loop” y solo “existirá”en el interior de esta función. a diferencia de las variables globales, como “switchpin” definidas al comienzo del programa y fuera de las funciones, que “existen” en cualquier punto del sketch).

Bien volviendo al hilo de nuestra argumentación  leemos y traspasamos a la variable el valor que se detecta en el pin2 con la línera “resultat=digitalRead(switchPin) ;·

Por último escribimnos “resultat” en el buffer con el mandato “Serial.println” que es similar al mandato utilizado anteriormente “Serial.print”, solo que este añade al final el caracter no imprimible, línea nueva, (ln), que provoca el cambio de linea en la pantalla. en el ejemplo escribimos el mandato “Serial.println(resultat);”

La comunicación serial permite tambien de forma parecida que caracteres que hemos escrito nosotros en la pantalla, se introduzcan en directo en el sketch de Arduino, de modo que permite modificar sobre la marcha el funcionamiento de los sketch, por ejemplo aumentando o reduciendo voluntariamente la velocidad de un motor, por lo que es esencial conocer su funcionamiento, por ello dedicaré un post completo a este tema.

3) Cargar una pantalla serial en el PC  Falta aun cargar en nuestro odenador una pantalla capaz de leer lo que le llegue en el buffer de  Arduinio, El software estandard de Arduino cargado en nuestro PC tiene ya construido un monitor del puerto que permite comunicarte con la placa Arduino. Para acceder a el busca en el programa a Arduino que tienes cargado en tu PC

 Busca en el menu superior “Herramientas” y en el menu qye se despega al clicar encontrarás el botón del “Monitor seriale” solo te faltará  seleccionar la misma velocidad en baudios utilizada en la llamada a begin(). (en nuetro caso 19200. Podemos porejemplo cargar el programa en Arduino, cargar posteriormente la pantalla Serial y rearrancar el programa apretanto el “botón Reset” de la placa (el botón rojo que hay en kla placa), para ver el funcionamiento del programa desde el principio.

¿Para que lo hacemos?

Veremos muy pronto que vamos a tratar de reemplazar el cable amarillo por un interruptor real, detectar la posición en que posición se encuentra y decidir por ejemplo iniciar o detener un motor.

•••

Bueno, esto está bien, pero no es muy práctico  jugar al antiguo estudiante y poner el Pin 2 en el alta o bajo.

Nos gustaría sustituir este sistema con un simple interruptor de dos posiciones:

  • – En reposo estaría en el estado bajo: 0
  • Oprimiendo el Interruptor hacia abajo, sería en el estado alto: 1

Cuando se pulsa el interruptor, se constata en el monitor que pasa al  estado 1 (el pin 2 está conectado a 5v).

Uf … pero el resto, cuando no se presiona el interruptor, se pone complicado. De hecho estamos en la misma configuración de la siguiente manera:

En este caso, ¿en qué estado está el pin 2 de alto o bajo? Bueno … depende … a veces es  alta, a veces baja, no lo sabemos, cambia sin que toque nada. Bueno, eso no se sabe.

En caso que,  el interruptor esté en reposo, forcemos la transición al estado bajo. Lo que nos falta es una especie de “recurso de memoria electrónica” Lo haremos mediante la adición de una resistencia (10 kohms) que permitirá hacer circular un poco de corriente y colocar el pin 2 en estado bajo. Cuando se presiona el interruptor la corriente está mayoritariamente  del lado de 5v y pone claro el pin 2 en estado alto, la resistencia es casi ignorada.

Vamos a representar sobre un pequeño diagrama para hacerlo más claro (resistencia de 220 Homs protección no juega ningún papel en la “mecánica” del circuito, yo no la puse en el diagrama):

Cuando está abierto el interruptor se establece en 0 (gracias “al recuerdo”, la resistencia de 10 homs y no pasa mucho, pero la pequeña corriente que fluye a través es suficiente para pasar el Pin 2 al estado de baja). Esta resistencia se denomina “pull-down“, (que tira hacia abajo). También se puede imaginar una resistencia “pull-up” (que tira hacia arriba), la veremos en otro capítulo.

Cuando se cierra el circuito la corriente prefiere circular entre el Pin 2 y el o borne 5v (sólo hay que cruzar el interruptor que tiene una resistencia muy baja) debido a que, el otro camino ofrecido por la resistencia de 10 kohm no hace pasar gran cosa …

Nota del traductor

Un cable suelto que no termina en el pin de tierra, se ve afectado por las corrientes parásitas que inevitablemente circulan por el controlador, por ello puede dar lugar a que de forma imprevisible un pin de entrada que no quede unido ni a una fuente de voltaje alto (próxima a 5 voltios ni a una tierra, (GND,  próxima a cero voltios, de lugar a lecturas erróneas. Por ello es necesario establecer un circuito “pull down” (tira para abajo o (más raramente) , un circuito “pull up·” /tira para arriba, para garantizar que la lectura cuando el interruptor no este pulsado sea correcta.

En el circuito de “pull down” una gran resistencia (1Khoms) garantiza que la electricidad parásita que eventualmente pueda llegar al pin a controlar (en nuestro caso el 2), se descarga a tierra con un voltaje ínfimo por lo que la máquina detecta que el pin se encuentra en DOWN  (baja) . Cuando el pulsador se orima los 5 voltys de la salida de la tarjeta llegaran casi íntegros pues dado el valor de la resistencia (1 khom)  la corriente que circule hacia la tierra será mínima. Y el pin se encontrara en HIGH  (alta)

Queda por poner esto en un pequeño montaje de demostración.

•••

Un pequeño programa realizado mediante la combinación de partes de programas anteriores, seguido por el vídeo correspondiente.

// Capítulo 2 P2 programa DFRduino Romeo V1.1

int E1 = 5;  // Pin 5 Control de la velocidad del motor M1
int M1 = 4; // Pin 4 de control de la dirección de rotación del motor M1
int switchPin = 2; // el interruptor está conectado al pin digital 2

void marche_avant(int a)  // función marcha adelante
{
analogWrite (E1,a);
digitalWrite(M1,HIGH);
}

void marche_arriere(int a) // función marcha atrás
{
analogWrite (E1,a);
digitalWrite(M1,LOW);
}

void arret(int d) // función parar
{
digitalWrite (E1,0);
delay(d);
}

void attente(int d)  // funcion atención
{
delay(d);
}

void setup() // se ejecuta una sola vez
{
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(switchPin, INPUT); // Importante: El pin 2 está en el modo de entrada
Serial.begin(19200);
marche_avant(200);
}

void loop() // ejecutado en bucle
{
int etat_switch;
etat_switch=digitalRead(switchPin); // estado del pulsador (0 apagado  o 1 encendido)
Serial.print(“Lectura del estado del interruptor “);
Serial.println(etat_switch); // Mostrar el monitor serie el estado de interruptor 0 ó 1
delay(10); // temporizador de un bucle demasiado rápido
if (etat_switch == 1) { // si el interruptor pasa al estado 1 es que se le ha oprimido
arret(3000);
marche_arriere(120);      // marcha atrás à pequeña velocidad
delay(8000);
marche_avant (200);       // marche adelante rápida
}
}

Un pequeño v’ideo que muestra el movimiento obtenido.

Nota del traductor

La en las primeras instrucciones de la funcion “setap”’ se define que pines de la tarjeta se utilizarán y de que forma si de salida (OUPUT) o de entrada (INPUT) asi como el protocolo de comunicaciones entre la tarjeta y el PC a 19200 baudios, (mandato “Serial.bejín”). En la ultima instrucción hace avanzar el motor a la velocidad correspondiente al parámetro  invocando a la función “avant”,

La funcion “loop” inspecciona en cada ciclo si está pulsado o no el interruptor (mandato “digitalRead”). escribe,  (mandatos “Serial.println”), el estado en que se encuentra el interruptor en la pantalla del ordenador (0 si no se pulsó y 1 si se pulsó). y se espera un un segundo  (mandato “delay”) , para dar tiempo a retirar el dedo del pulsador.

Si se oprimió el pulsador, para el motor (función “arret”), durante tres segundos,  retrocede, a velocidad lemta (parámetro 120  en  la función “arrier” durante ocho segundos (“delay”)  y luego marcha rápido, ( parámetro 200), hasta que nuevamente se pulse el interruptor y se repita el proceso.

Félix Maocho

Post de esta serie editados en el blog

Todos los post de arduino apareceran en Robótica bajo el subepigrafe Arduino

Anuncios

23 junio 2013 - Posted by | General | ,

Aún no hay comentarios.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: