Felix Maocho

Para quien le interese lo que a nosotros nos interesa

Arduino – Atelier JCM, Capítulo cero

Por Félix Maocho
29/5/2013

Continúo haciendo una traducción del francés comentada de los post de Ateleier JMC sobre Arduino . Para ello he elegido una introducción de Arduino que recoge sus primeras experiencias con una placa de la extensa familia Arduino llamada DFRduino especialmente diseñada para el control de motores eléctricos. Sin más preambulo paso a la traducción

Capítulo cero

Este es el primer ejemplo. Es muy pequeño, usted tiene que comenzar con algo!

Nota del traductor

La práctica de este capítulo se realiza sobre una tarjeta controladora DFRduino, compatible con Arduino UNO, la tarjeta que habitualmente utilizamos, pero que está especialmente diseñada para el manejo sencillo de motores eléctricos, Para hacer con una tarjeta Arduino UNO  lo que se hace aquí directamente en la tarjeta, habría que complementarla con tarjetas de extensión para el control de motores, similares a la tarjeta de control de relés, que hemos utilizado con nuestro Arduino UNO en un post anterior.

Lo primero a ver las conexiones:

– Conectado con el cable USB del PC (el cable es del mismo tipo que el cable de la impresora lado cuadrados DFRduino El PC puede ser Windows o Linux Si es un Mac, no hay problema tampoco).

– La alimentación: aquí pongo una fuente de alimentación de 12V DC. [Muy importante: hay que identificar el polo positivo de la fuente de alimentación: para esto he utilizado un voltímetro, yo marque el hilo del “+” con una etiqueta roja. El “+” debe estar conectado a al borne M_VIN, el ” – ” a  GND, (tierra)  (si invertimos este orden podría arruinar la tarjeta  controladora]

En la tarjeta DFRduino Romeo, lo mejor es quitar el puente  VIN = M_VIN, de esta forma dicen que no quieren que la tarjeta obtenga su energía del motor. En la imagen el puente está colocado, (busque cerca de la fuente de alimentación del motor), es mejor retirarse, así una recarga o un error en la alimentación del motor no pone en peligro el mapa.

La tarjeta es complicada … a continuación, dirige la fuente de alimentación al puerto USB. Así separa la fuente de alimentación y la alimentación del motor. (Si usted no desea utilizar el puerto USB para alimentar la tarjeta, puede utilizar también otra fuente de alimentación y conéctela a la toma (cerca del puerto USB.) Consulte la siguiente sección para más detalles

Nota del traductor

La mayoría de las tarjetas Arduino tiene la posibilidad de ser alimentadas de corriente conectarse al menos de dos formas, a través del cable USB que suministra una corriente a 5 Voltios, o a través de una fuente de alimentación, que puede ser un transformador de corriente continua, o una pila, En este caso lo ideal es que sea de 7,5 bolas pero casi todas las tarjetas Arduino  admiten un margen de holgura de 7 a 12 voltios, (comprueba que alimentación es para tu tarjeta específica, por lo que habitualmente se conectan a pilas que tiene nominalmente 12 voltios, pero que su tensión efectiva suele ser menor y que desciende a medida que se descarga, los transformadores que se utilicen como fuentes de alimentación ha de intentarse que sean de 7,5 Volts-

– El motor está conectado a los terminales M. y el sentido de conexión no importa

Bueno esto es lo que nos proponemos hacer:

  1. – Arrancar el motor
  2. – Dejarlo funcionan durante 5 segundos
  3. – Pararlo

Nota del traductor,

Para programar este sketch se utiliza una técnica muy útil que consiste en definir funciones que hacen cosas concretas y llamarlas desde el programa principal. Una función puede necesitar que se le suministren parámetros para su uso, y puede generar a su vez valores que utilice el programa.

En este primer ejemplo ninguna de las tres funciones utilizadas (“marche”, (marcha) “arret”, (retroceso) y “attente” parada tiene parámetros de entrad ni de salida. Cuando la función no tiene parámetros de salida se indica con la palabra “void” y cuando no tiene parámetros de entrada, los paréntesis de la derecha se cierran sin nada dentro “()” así pues en este caso las tres funciones tiene la estructura  void nombre-funcion ()   

Las funciones “setup” y “loop” que son también sin parámetros de entrada ni de salida, son las únicas que recorre el sketch, primero “setup”, una única vez y a continuación “loop” un numero indefinido de veces. Las otras funciones son recorridas si se las invoca desde estas funciones.

Las funciones se pueden definir en cual cualquier parte del Sketch generalmente se definen antes de “setup” pero hay quien las define después de “loop”

//Premier programme sur DFRDuino Romeo V1.1
// Partie déclarations initiales

int E1 = 5; // Pin 5 controle de la vitesse du moteur M1
int M1 = 4; // Pin 4 controle du sens de rotation du moteur M1

void marche()
{
analogWrite (E1,100);
digitalWrite(M1,HIGH);
}

void arret()
{
digitalWrite(E1,LOW);
}

void attente()
{
delay(5000);
}

// Partie setup()
void setup() // executée une seule fois
{
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);

marche();
attente();
arret();
}

// Partie loop()
void loop(void) // executée en boucle
{
}

Bueno, si digo que (es sketch) es intuitivo sería mentira. Voy a tratar de explicar esto un poco, comenzando por una aproximación técnica y no informática. (Hay un montón de formas diferentes de explicarlo y no trato hacerlo todo a la vez)
Vamos a ver, lo primero que hay que entender es que en este programa, cuenta con comentarios, la línea de piezas después de / / sólo están ahí para explicar el programa, si se borran funciona igual!

int E1 = 5; // Pin 5 controle de la vitesse du moteur M1
int M1 = 4; // Pin 4 controle du sens de rotation du moteur M1

 Leemos en el documento que el contacto 5 controla la velocidad del motor y el contacto  4 el sentido de giro

void marche()
{
analogWrite (E1,100);
digitalWrite(M1,HIGH);
}

 Para arrancar el motor se le pide que este conectado al contacto  E1  (el 5) con una  determinada señal, Luego veremos el sentido del número 100. (Si no ocurre nada, reemplace 100 por 200 a ver si se pone mejor)

La dirección de rotación se selecciona mediante el envío de la M1 contacto con una señal alta  HIGH (es decir, 5 V).

void arret()
{
digitalWrite(E1,LOW);
}

Para detener el motor, se envía al contacto una señal baja LOW (o 0 voltios)

void attente()
{
delay(5000);
}

5000 ms o 5 segundos que se espera

void setup() // executée une seule fois
{
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);

marche();
attente();
arret();
}

Todas las declaraciones anteriores se ejecutan , lo vamos a poner en música ahora.
Decidiremos que los contactos 4 y 5 se utilizan como salida (OUTPUT)

  1. Vamos a lanzar el proceso marcha
  2. Vamos a lanzar el proceso espera
  3. Vamos a iniciar el proceso de parada

A continuación, el programa se detiene. En particular, el motor arranca, ejecuta 5 segundos y luego se detiene.

Pongo en cursiva porque los procesos “marche”, “attente” y”arret”. (marcha, espera y parada).  no se no se ejecutan. Porque ellos se lanzan en la parte setup (), y vamos a ver más adelante que deben lanzarse en la parte loop ()

Eso es todo!

Nota del Traductor

Con este primer programa el autor nos muestra que las funciones solo se pueden evocar desde la función “loop”. Ha p aprovechado para explicarnos la utilidad de algunos mandatos pero será a continuación cuando escriba el ejercicio correcto

Chapitre zéro : deuxième version du programme

//P1 programme sur DFRDuino Romeo V1.1

int E1 = 5; // Pin 5 controle de la vitesse du moteur M1
int M1 = 4; // Pin 4 controle du sens de rotation du moteur M1

void marche(int a)
{
analogWrite (E1,a);
digitalWrite(M1,HIGH);
}

void arret(int d)
{
digitalWrite (E1,0);
delay(d);
}

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

void setup() // executée une seule fois
{
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
}

void loop() // executée en boucle
{
marche(100);
attente(5000);
arret(1000);

marche(150);
attente(5000);
arret(1000);

marche(200);
attente(5000);
arret(1000);

marche(250);
attente(5000);
arret(1000);
}

No hay mucho nuevo en el programa, vemos el nuevo procedimiento marche_arriere. (marcha atrás)

Nota del traductor

En este caso las funciones definidas utilizan un parámetro de entrada, para ello es necesario definir que tipo de dato vamos a traspasar del programa a la función, entero, carácter, byte etc., en nuestro caso son siempre números enteros por lo que se declara como (inf  x) siendo x la variable a introducir esta variable solo tiene valor dentro de la función por lo que se puede utilizar sin confusiones en varias funciones (la costumbre hace que las variables locales se indiquen con un solo carácter en nuestro caso “a y “d” pero las podría haber nombrado por ejemplo “vel” en vez de a o d y en la de espera “tiem”

Así pues la estructura de las funciones en este caso es por tener un parámetro de entrada que es un numero entro entero y no tener parámetro de salida  void nombre_funcion (int variable)

Precisión en analogWrite: el valor máximo es 255, el valor mínimo 0, pero para tener el motor en marcha no se puede poner valores muy bajos. El valor 100 para que un motor ande es un mínimo práctico. A menor número el motor “canta”, pero no gira.

Otra nota, el microcontrolador soporta 2A (amperios) de salida máxima. No hay problema con el motor de 6 velocidades más robusto, pero otros podrían superar este valor.

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

29 mayo 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: