Felix Maocho

Para quien le interese lo que a nosotros nos interesa

Arduino – Atelier JCM, Capítulo uno

Por Félix Maocho
9/6/2013

Continúo con la traducción comentada de los post de Introduccion a Arduino de Ateleier JMC.

Este capítulo nos explica la relación entre el PC y Arduino, como la placa Arduino es autónoma en su funcionamiento, es decir para que funcione no precisa estar conectada al PC, pero a su vez, como existe la posibilidad de interacción entre ambos equipos , en el ejemplo que presenta lo hace a través del cable USB, pero podríámos  conectarlos por otros medios, como puede ser mediante rayos infrarojos, (como se conecta el mando de la televisión), o a través del wifi, lo que permite tener un PC a miles de kilómetros de la tarjeta.. Todas estas posible interacción entre el del Pc y Arduino multiplican las posibilidades de la placa para casi cualquier uso que podamos pensar.

Por otra parte, en los ejemplos de este post, tenemos otro ejemplo de utilización de funciones dentro de los sketch, (programas). Las funciones son una especie de cajas negras que realizan acciones determinadas. Su uso es aconsejable pues se crean módulos que permiten e localizar que parte del programa falla cundo en las pruebas se detecta una acción defectuosa facilitando de esta forma la puesta a punto del sketch.

Por otra parte las funciones pueden integrarse en bibliotecas para su reutilización en otros programas que realizan las mismas acciones, con la ventaja que no habrá que ponerlas a punto. pues si  funcionaron correctamente en otro programa funcionarán en cualquier programa que las evoque. Lo que hace que aumente la velocidad de programación y puesta a punto de los programas.

Por último hay que 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 pero que tiene integrada la circuitería para el manejo de motores eléctricos, algo que la Arduino UNO no tiene de fábrica.

Introducción al Arduino Capítulo 1

En este capítulo, vamos a tratar de comprender mejor lo que está pasando entre el PC y el Arduino.

Primer idea errónea:  Es el PC quien controla el Arduino. Cuando se inicia el programa, sería el PC quien comandara al Arduino enviándolo las órdenes. El cable USB sirve de enlace para que el PC envía los comandos a medida que se ejecuta el programa.

De hecho, no sucede así. El software de Arduino que está instalado en el PC permite:

  • – Escribir pequeños programas
  • – Transformar estos programas en código comprensible por el Arduino
  • – Enviar el código al Arduino a través del cable USB

Una vez cargado el código,, (tarda unos segundos), en el Arduino, la placa comienza a ejecutarlos.

Nota del traductor

Lo que el autor nos quiere resaltar es que Arduino es una tarjeta autónoma, El ordenador se utiliza  como un entorno amigable para que el usuario pueda escribir con facilidad los programas en un lenguaje de programación, (derivado del lenguaje C), que posteriormente en el PC trasforma, (etcnicamente se llama compilar), en un lenguaje máquina comprensible por el procesador que tiene incluido la tarjeta Arduino., A través del cable USB, este lenguaje se traspasa a la tarjeta y cuando termina de cargarse, le tarjeta automáticamente comienza a ejecutar ese programa y para nada precisa del PC.

Segundo error: si el cable USB se desconecta el programa se detiene

Es más complicado que eso … Hay varias formas de alimentar eléctricamente a la placa Arduino. Una de estas formas es usar un cable USB. Si este es la única alimentación de la tarjeta, entonces sí, si el cable se desconecta el programa se detiene.

Pero la tarjeta puede ser alimentada de otras formas: se puede utilizar por ejemplo, adaptador de 3-12v, (regularlo a  7.5V) con un enchufe de 2,1 mm que tenga el + en el centro, y enchufar el conector a la toma especial cerca del puerto USB, también hay adaptadores para baterías de 9V.

En ciertos modelos, es la alimentación del motor  la que puede alimentar la tarjeta, (atención a no introducir una tensión muy elevada bajo el riesgo de quemar la tarjeta). En la tarjeta DFRduino Romeo, es preferible retirar la clavija de conexion del pin  VIN = M_VIN, de esta forma decimos que no queremos que la tarjeta obtenga su alimentación de los motores. Mi consejo es alimentar Arduino por una fuente de alimentación independiente, que no es ni el puerto USB del PC ni la alimentación de los motores, (para los modelos que disponen de ello), y  desconecte el cable USB si no es  necesario. Así si el Arduino es eléctricamente independiente ny al desconectar el cable USB no se detiene el programa.

Si se corta la alimentación del Arduino, el programa permanece en la memoria, no se elimina. Tan pronto como el se reanude la corriente el programa arranca.

Nota del traductor

Una vez cargado el programa compilado  en la memoria de Arduino, la tarjeta es autosuficiente, con sólo proporcionarle una fuente de energía por ejemplo una Pila de 9v  Así por ejemplo es como puede funcionar desligada del PC controlando aparatos autónomos como pueden ser aparatos de domótica o vehículos que esquivan obstáculos. Por otra parte la falta de energía, para la ejecución del programa, pero no le borra de su memoria, cuando vuelva a conectarse, la placa volverá a reiniciar el programa desde el principio. En la tarjeta DFRduino Romeo, una forma alternativa de alimentsr la tarjeta es con la energía que mueve los motores.electricos. Siendo posible hacerlo así el autor descanseja hacerlo eliminando la conexión entre los pines. La tarjeta Arduino UNO al no estar específicamente pensada para manejar motores no tiene esta posibilidad de conexion y tan solo admite energía del PC a través del cable USB o de una fuente externa sea un transformador o una pila. 

Actualización  a 15/6/13

Hay una pocas tarjetas Arduino antiguas (unas 1000 de los modelos Diecimila o anterior), que presentan el problema de tener una versión del bootloader que tiene el pin RX sin conectar la resistencia de pull-up interna. Esto se puede solucionar actualizando el bootloader a la última versión o conectando el pin RX con una resistencia de 10K a tierra.

Tercer error: una vez que el programa está cargado y el Arduino alimentado eléctricamente independiente, cable USB ya no vale para nada

Podemos prescindir, pero en algunos programas de este cable es muy útil : en efecto el permite, en el curso de la ejecución del programa, el diálogo entre el PC y la tarjeta. por ejemplo, mostrar un mensaje en la pantalla del PC, pulsar una tecla del PC y desencadenar una acción determinada … Lo veremos pronto en el la siguiente parte de este capítulo.

Nota del traductor

El autor resalta que el cable USB vale para algo más que cargar o programas a la tarjeta Arduino y proporcionar la energía, puede ser utilizada como vinculo de conexión entre la tarjeta y el ordenador de modo que se pueda establecer un diálogo entre ambos aparatos, de forma que por un lado podemos  enviar códigos del Pc a Arduino que influyan en el funcionamiento del programa que previamente le hemos cargado, como recibir información captada por la tarjeta. A continuación escribe unos ejemplos de este posible diálogo. 

Capitulo uno :  Enviar datos al PC

/* Bonjour le monde  (Buenos días mundo)
*
* Capítulo uno : P1 como mostrar datos en ordena
*/
void setup()     // ejecutada una sola vez al arrancar el programa

{
Serial.begin(19200); // inicializamos la comunicación Arduino-PC a la velocidad de  19200 bps
Serial.println(“Bonjour le monde !”);  // escribir el mensaje con salto de línea al finalizar
}

void loop() // ejecutado sin fin, en bucle
{

// aquí el procedimiento loop esta vacío, no hace nada

}

Aparece el mensaje “Bonjour le monde !” es una ventana de salida , a continuación de una línea de entrada seguido de un botón “Enviar”. Veremos que es en esta línea donde se pueden introducir valores que se enviarán a la Arduino, mientras que el programa se está ejecutando.

Nota del traductor

Conseguir escribir en pantalla “Buenos días mundo”, es tradicionalmente lo primero que hacemos cuando aprendemos un nuevo lenguaje de programación.

Observe que para ello el autor utiliza dos comandos que desconocíamos “Serial.begin (N)” mandato que informa a Arduino que en el programa entrará en conexión con el  PC ( en este caso a la velocidad de 19200 bps) y “Serial.println(“XXXXXXXX”)” el mandato que hace aparecer en la pantalla del PC una línea con el texto   colocado entre los paréntesis

Como lo único que pretende este programa es demostrar la conexión de Arduino con el PC solo envía ese mandato una única vez, por lo que coloca la instrucción en la función “setup” y no hay trabajo que hacer para la función “loop” por lo que queda vacía y no hace nada, Si por ejemplo quisieramos mandar la temperatura de un sensor termométrico, esa instrucción la situaríamos en la función “loop” cargada con la lectura del termómetro, que al enciarla al PC cada vez  que la función loop pasara por ese mandato, nos daría una secuencia de  temperatura medidas por el termómetro en cada instante.

Capitulo uno :   Introduzca  caracteres con el teclado

A partir de un programa del capítulo del cero, aquí una mejora que lee el teclado, al introducimos un carácter en la ventana de entrada del monitor de serie y pulsamos el botón Enviar. (Ver la imagen anterior). Si escribe  un “+”, el motor avanza, un “0”, lo detiene,  un “ –“ le pone marcha atrás.

// Capitulo 1 P2 programa sobre DFRDuino Romeo V1.1

int E1 = 5; // Pin 5 control de la velocidad del motor M1
int M1 = 4; // Pin 4 control del sentido de rotación del motor M1
int car_tape; // el carácter escrito en la ventana del monitor serie (No olvide presionar “Enviar”)

void marche_avant(int a)
{

analogWrite (E1,a);
digitalWrite(M1,HIGH);

}
void marche_arriere(int a)
{

analogWrite (E1,a);
digitalWrite(M1,LOW);

}
void arret(int d)
{

digitalWrite (E1,0);
delay(d);

}
void attente(int d)
{
delay(d);
}

void setup() // ejecutada una sola vez
{

pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
Serial.begin(19200);

}

void loop() // ejecutada en bucle
{
// ¿hay algo que leer procedente de la interface de serie? (en realidad USB)

if (Serial.available() > 0) {

// Lo que hay para leer lo ponemos en la car_tape
car_tape = Serial.read();
// si se ha escrito el carácter + en el monitor serie: marcha adelante
if (car_tape == ‘+’) {

marche_avant(120);

}
// si se ha escrito el carácter 0 en el monitor serie: parar el motor
if (car_tape == ‘0’) {

arret(1000);

}
// si se ha escrito el carácter –  en el monitor serie: marcha atrás
if (car_tape == ‘-‘) {

marche_arriere(120);

}

} // fin if serial.available

} // fin loop

Nota del traductor

Este programa es un buen ejemplo de cómo se utilizan las funciones en la confección de un programa. Después de definir dos parámetros (“EI” con valor y “MI” con valor 5) y un variable alfanuméricacar_tape” que necesitaremos para el funcionamiento del programa  definimos varias funciones que utilizaremos en el programa, “marche_avant” (marcha_adelante), “marche_arriere” (marcha_atrás) y “arret”, (para), tres funciones que no devuelven ningún parámetro al sistema, por lo que a la derecha tiene el parámetro estándar de vacio “void”  que informa que son sin respuesta, de la misma forma que lo son las variables “setup” y “loop” ya conocidas, pero a diferencia de estas funciones si necesitan recibir parámetros, en dos de ellas el numero entero “a” (int a) y en la otra el número entero “d” (int d). Adicionalmente se crea otra función “atent” que deja en suspenso la ejecución del programa que tampoco entrega parámetros ( a la derecha “voip”) y necesita el parámetro de espera, el entero “d” 

Estas funciones las define al inicio del programa después de haber definido los parámetros que va a utilizar en el programa,  E1 pin que controla la velocidad del motor de forma analógica   y M1 que controla d la dirección de giro del motor

Por más funciones que hayamos definido, el programa interno de Arduino solo ejecuta dos funciones y además en un orden preestablecido “setup” que la recorre al principio y una sola vez y “loop” que recorre de principio a final indefinidas veces como un bucle. el resto de las funciones se ejecutan solo si se evoca desde la función “loop” 

Por tanto, definidos las funciones que vamos a utilizar pasamos a definir las funciones estándar obligatorias  

La función “setup” aparte de preparar como de salida los PIN 4 y 5, informa que Arduino y el PC se comunicarán a 19200 bps mediante el mandato”Serial.begin(19200)”

La función “loop”  lo primero que hace es comprobar si han escrito algo en pantalla, en cuyo caso “Serial.available” tendrá un mayor que “0” en el caso que se haya escrito algo (y pulsado “intro”),  sino se escribió nada ( o no se pulsó “Enviar”)  “Serial.available” tendrá el valor 0 y entonces en este ciclo no se har´ça nada más, volviendo a preguntar nuevamente en el siguiente ciclo

Cuando se escriba algo, lo escrito se carga en la variable de caracteres “car-tape”.

  • Si “car-tape” es igual a “+” invoca a la función “marche_avant” con parámetro 120 (a=120) que hará avanzar a velocidad 120, ( bastante baja), al motor controlado por los  pines 5 (velocidadn) y 4 dirección HIGH (adelante)
  • Si “car-tape” es igual a “-” invoca a la función “marche_arriere” con parámetro 120 (a=120) que hará retroceder a velocidad 120, el motor controlado por los pines 5 (velocidad) y 4 dirección LOW (atrás)
  • Si “car-tape” es igual a “0” invoca a la funcion “arret” con parámetro 1000 (d=1000) que parará el motor durante un segundo (1000 milisegundos parados), a velocidad 0

Félix Maocho

Post de esta serie editados en el blog

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

9 junio 2013 - Posted by | Robotica | ,

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: