Felix Maocho

Para quien le interese lo que a nosotros nos interesa

Arduino – Atelier JCM, Capítulo Cuatro


Por Félix Maocho
12/7/2013

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

En este capítulo el autor nos muestra las particularidades de una resistencia interna de Arduino y el uso que podemos dar de ella para simplificar los montajes de pulsadores en “pull-up“, o sea, exactamente al contrario que como se expuso en el capítulo anterior  donde se explicó en detalle el montaje en “pull-down“.

En este caso el pin detecta estado de alta, en tanto no se pulse el botón, es decir exactamente al revés que con el montaje indicvado en ese capítulo.

Como en los capítulos anteriores, el autor utiliza para sus practicas un Dfrarduino una tarjeta compatible con Arduino, especialmente diseñada para el control de motores.

La ventaja de esta tarjeta, es que se aprovecha los desarrollos de software y hardware hechos para Arduino a la vez que integrada el control de 2 motores eléctricos,  que le permite iniciar de forma inmediata sin necesidad de un controlador de motor adicional cualquier proyecto de robótica o domótica. La fotografía de la entrada muetra a grandes rasgos el esquema de esta tarjeta

En este caso con nuestra tarjeta Arduino UNO podremos realizar las mismas prácticas que hace el autor, salvo en el último ejemplo porque nuestra tarjeta no maneja suficiente energía para mover motores, sin embargo, como además del movimiento del motor, el autor añade la posibilidad de seguir el proceso mediante mensajes en pantalla del PC, podemos simular el proceso en nuestro Arduino UNO aunque no conectemos motores a la placa.

Si comparan la placa Dfrarduino c que muestro a la entrada de este post con la placa Arduino UNO que muestro a continuación, observaremos junto a bastantes semejanzas muchas diferencias.

No voy a entrar a explicar en detalle cada uno de las semejanzas y diferencias entre ambas placas tan solo explicare aquellas que afectan a este último experimento.

La primera semejanza es que ambos tiene entrada para el cable USB, está en ambas en la parte superior del lado izquierdo, plateada para la tarjeta DFRduino y negra para el Arduino UNO.

Otra cosa que ambas tienen son 14 entradas/salidas digitales, en ambos casos están en la parte superior de la tarjeta, la diferencia es que en  DFRduino hay varias filas de salidas, la mas inferior de las filas, de color verde claro y algo más baja,  es la que coincide con las salidas del Arduino  UNO,

La superior de color rojo y otra paralela de color verde son los pines que realmente controlan los dos motores que se pueden conectar al costado derecho. Esto es lo que no tenemos en nuestro Arduino UNO por lo que solo nos conformaremos en este caso con seguir las trazas que el programa deja en el monitor del ordenador a través del cable USB y no moveremos motores

Los motorque maneja DFRduino, se alimentan mediante un circuito de potencia adecuada a su consumo, de forma independiente de la alimentación de la tarjeta que se conecta en el tercer puerto de ese costado.

Introducción al Arduino Capítulo 4

Continuamos nuestra exploración del mundo Arduino … En el capítulo 2 vimos que un pin en modo digital puede estar en el estado alto (1, HIGH, 5 v) o bajo (0, LOW, 0 v) .

Cuando se desea que el estado de un pin refleja la posición de un interruptor, lo que obviamente es muy útil para controlar nuestros modelos, son posibles numerosos montajes diferentes. Lo que es importante es tener cuidado de que el pin está en un estado estable 0 ó 1, y no en cualquier parte “de la naturaleza.”

En el capítulo 2   vimos un montaje posible

– Cuando no se pulsa el interruptor, el pin se encuentra en estado bajo mediante una resistencia de 10 k ohmios de resistencia “tira hacia abajo” o “pull-down. – Cuando se pulsa el interruptor, el pin pasa al estado alto.

Vamos a ver otro posible montaje que presenta el interés de poder simplificarse gracias a una propiedad especial de Arduino. Para cambiar un interruptor, vamos a utilizar un pulsador. (Atención, mira bien que se trata de un pulsador con un polarímetro y recordar como ha de ponerse las patas a ambos lados paralelos del borde de la ”protoboard” )

Nota del traductor

Una de las cosas que en su momento me llamó la atención, es la razón por la cual los pulsadores que se utilizan en circuitos electrónicos tiene cuatro patas, pues en el mundo que yo mejor conocía que es el de la electricidad, un timbre solo tiene dos cables uno de entrada y otro de salida. Cuando lo estudias en detalle, (si quiere puede ver el post “Como funciona y se utiliza un pulsador” https://felixmaocho.wordpress.com/2013/01/19/arduino-como-funciona-u-se-utiliza-un-pulsador/), tampoco se ve ventaja alguna en tener cuatro patas. La única respuesta racional que he encontrado, es dar al dispositivo mayor estabilidad, puesto que tiene que ser manipulado una vez montado. Indudablemente es más estable un aparato sujeto por cuatro puntos que a dos.

El problema que se plantea entonces es saber que patas corresponden al circuito que se cierra al apoyar el pulsador. Para resolver el problema construí un circuito que encendía un led cuando estaba cerrado pero indudablemente es más inteligente y elegante utilizar el polarímetro para descubrirlo. Sin embargo se me ha ocurrido otra solución más sencilla, las patas del pulsador no forman un cuadrado, sino un rectángulo. Aquella dirección en que la distancia permite montar el botón sobre el canal central de la protoboard son las que dejan de cada lado el circuito que se cierra al apretar el botón.

 En lo alto del  esquema una resistencia de “pull-up” de 10 k ohmios. Cuando el botón está en reposo, esta resistencia permite mover el pin 2 al estado alto. Este es un “recuerdo  a +“. Cuando se presiona el botón, el pin 2 cambia el estado bajo (tiene una baja resistencia de 220 ohms de protección que no interviene en la mecánica).

Nota del traductor

  • El cable rojo une la salida de 5V al bus rojo de la parte superior
  • En ese bus hunde una pata la resistencia de 10 kΩ las bandas que llevan serán de izquierda a derecha negro café amarillo y plata o oro, de acuerdo con este código
  • La otra pata de esta resistencia se hunde en una tira vertical de 5 agujeros
  • En esa misma tira se hunde una de las patas del pulsador
  • La otra parta contraria del pulsador se hunde en la tira vertical del otro lado del canal, (observar que en la otra dirección las patas no permiten “saltar” el canal).
  • En esa misma fila hunde la pata de la resistencia de seguridad (para evitar cortocircuitos accidentales) de 220 Ω, colores rojo, rojo, café, plata o oro
  • La otra pata de la resistencia de 220 Ω  en el bus azul que se destina a “tierra”
  • El cable verde une físicamente el bus azul con el pin de tierra de Arduino
  • El cable naranja es el que traslada la señal de HIGH o LOW al pin 2 (observe que conecta en la fila verde mas interior  pues aquí no es para controlar un motor sino un pin normal de entrada/salida)

/

//Chap 4 P1
int BP=2; // le bouton poussoir est relié à la Pin 2
int APPUI=0; // quand on appuie sur le bouton la Pin passe à l'état bas
void setup() {
  
  Serial.begin(19200); // on initialise la communication en fait USB
  
  pinMode(BP,INPUT); // la broche reliée au bouton poussoir est en mode INPUT
}
void loop() {
  
  if (digitalRead(BP) == APPUI) {
    
    Serial.println ("Appui !");
    
    delay (100) ; // ne pas relire tout de suite l'état : protection anti-rebond
    
  } else
  
  Serial.println ("============");
  
  }

Nota del traductor

Este esketch (progrma), tiene de novedad hasta lo ahora visto el uso del mandato condicional IF- ELSE que es una ampliacion del condiconal IF 

 En este caso,  si se cumple la codicion que se expresa en “if “(si) se ejecutan los mandato comprendidos entre el “{ “  y el “}” situado antes de ELSE y se salyan los mandatos contenidos entre el “else” (si no) y el último “}” . Si no se cumple la condicion indicada en el “if”, se hace lo contrario

El mismo montaje  pero una pequeña mejora: el control de botón de empuje sobre la iluminación de un LED (pequeña) que está soldada a la placa Arduino.

//Chap 4 P2
int BP=2; // le bouton poussoir est relié à la Pin 2
// c'est la led qui est soudée sur l'Arduino
// avec sa résistance intégrée
int ledPin=13;
// quand on appuie sur le bouton la Pin passe à l'état bas
int APPUI=0;
void setup() {
  // on initialise la communication en fait USB
  
  Serial.begin(19200);
  // la broche reliée au bouton poussoir est en mode INPUT
  
  pinMode(BP,INPUT);
 // pour allumer la led reliée à la Pin 13,
 // il faut que la Pin soit en OUTPUT
  
  pinMode (ledPin, OUTPUT);
  
}
void loop() {
  
  if (digitalRead(BP) == APPUI) {
    
    Serial.println ("Appui !");
    // allumer la led
    digitalWrite(ledPin, HIGH) ;
   // ne pas relire tout de suite l'état
   // protection anti-rebond   
    delay (100) ;
    
  } else
  
  Serial.println ("============");
  // eteindre la led 
  digitalWrite(ledPin, LOW) ;
  
  }

La verdadera mejora, aquí! no hay necesidad de sacar de vuestra caja de componentes la resistencia “pull-up“, porque  Arduino tiene una integrada, que puede ser puesto en servicio bajo demanda. Práctico, no?

Así que usted puede eliminar la resistencia de los 10 k ohmios que apareció en el montaje anterior (sólo guardaremos la pequeña resistencia de protección de 220 ohmios)

Nota del traductor

  • Se ha eliminado el cable rojo
  • Se ha eliminado la resistencia de 10 kΩ
  • En una tira vertical se hunde una de las patas del pulsador
  • La otra parta contraria del pulsador se hunde en la tira vertical del otro lado del canal,
  • En esa misma fila hunde la pata de la resistencia de seguridad (para evitar cortocircuitos accidentales) de 220 Ω, en el bus azul que se destina a “tierra”
  • El cable verde une físicamente el bus azul con el pin de tierra de Arduino
  • El cable naranja es el que traslada la señal de HIGH o LOW al pin 2
  • Consecuencia de todo ello siempre que podamos organicemos las entradas a controlar en montajes “pull up”

Para los curiosos:

– Puede pedir a Arduino crear una resistencia interna de pull-up, pero no hay ninguna resistencia interna pull-down prevista
– Para solicitar a Arduino que ponga en servicio la resistencia de pull-up para un pin  dado, mande digitalWrite HIGH en el pin concerniente, (es un poco confuso, de  escribir), sobre un pin que esté en el modo INPUT, pero eso es lo que debemos hacer.

El programa correspondiente:

//Chap 4 P3
// le bouton poussoir est relié à la Pin 2
int BP=2;
// c'est la led qui est soudée sur l'Arduino
int ledPin=13;
// quand on appuie sur le bouton la Pin passe à l'état bas
int APPUI=0;
void setup() {
  // on initialise la communication en fait USB
  
  Serial.begin(19200);
  // la broche reliée au bouton poussoir est en mode INPUT
  
  pinMode(BP,INPUT);
 // on active la resistance interne à l'Arduino
 // qui va ramener au + la Pin BP
 // quand on cesse d'appuyer sur le bouton
 // une sorte de "ressort de rappel"
 // la resistance est dite pull-up car on tire vers le haut, 5v
 // du coup on retire du montage la resistance 10 k ohms
 // qui faisait le meme travail
  
  digitalWrite(BP,HIGH) ;
                             
  pinMode (ledPin, OUTPUT);
  
}
void loop() {
  
  if (digitalRead(BP) == APPUI) {
    
    Serial.println ("Appui !");
    
    digitalWrite(ledPin, HIGH) ; // allumer la led
    
    delay (100) ; // ne pas relire tout de suite l'état
                  // protection anti-rebond
    
  } else
  
  Serial.println ("============");
  
  digitalWrite(ledPin, LOW) ; // eteindre la led
  
  }

 

===

Un programa para utilizar nuestro últimos conocimiento. Vamos a establecer un control de velocidad de un motor:

  • Pulse el botón izquierdo, la velocidad disminuye
  • Al pulsar el botón derecho, aumenta

Nos damos cuenta que funciona observando y escuchando el motor, pero por supuesto puede utilizar el monitor de serie que muestra la velocidad actual y las diferentes pulsaciones de los botones.

Nota del traductor

Con nuestra tarjeta Arduino UNO, seria complejo conectar un motor pues necesitamos unir a estar tarjeta otra tarjeta auxiliar que permita el manejo de motores,

Estas tarjetas de ampliación existen y las hay de dos tipos, unas que se conectan a la tarjeta mediante cables, como por ejemplo esta tarjeta que contiene cuatro relés para permitir pasar de circuitos electrónicos a circuitos eléctricos y controlar con ello aparatos a corriente alterna de 220 voltios.

Sin embargo hay otra tarjetas características de Arduino que se denominan shield_ (escudos)  diseñadas para ser extensiones de la placa Arduino (generalmente Arduino UNO o Arduino Pro 328) para expandir las posibilidades de la placa. Las hay de muchos tipos, desde luego para controlar motores, pero tambien módulos GSM, relés, comunicación con XBee y mucho mas.

Se colocan encima de muestra tarjeta Arduino Uno y ampliar sus capacidades.

 Solo por curiosidad les diré que la que están viendo es la Arduino Compatible Mega Motor Shield 13A, 5-28V  un “escudo” que se conecta a las entradas/salidas de Arduino UNO tanto digitales como analógicas y que puede apilarse de forma que  un solo Arduino Uno controle a través del apilamientos sucesivos un motor por cada piso que consuma hasta 30 A  y hasta 28Vots. Lo que supone motores realmente potentes que pueden ser utilizados en proyectos de robótica de gran envergadura.

Por poner un motor electrico que todos conozcamos, el motor de srranque de un coche mas o menos es de 300 amperios y funciona a unos 13,5 Volts-

Lo que indica que su tarjeta Arduino de 20 € puede controlar el funcionamiento, por ejemplo, de cuatro motores eléctricos más potentes que el motor de arraque de su coche. ¿deja con ello de considerar a Arduino un curioso juguetito? 


Lo lógico en 
n nuestro caso, es que en principio utilizaremos motores más modestos, podemos utilizar por ejemplo la Arduino Motor Shield que permite manejar dos motores con control de a velocidad y dirección de cada uno de forma independiente.

Arduino UNo junto con este sheild, sze puede equiparar más o menos con la tarjeta Dfrarduino que utiliza el autor de este artículo. Este, o uno similar es uno de los componentes que pienso comprar para mis proximos montajes. Cuando lo haya comprado insertaré en ester post el equivalente co Arduino UNO de la tarjeta Dfrarduino

(Por supuesto que tomamos elementos de los programas de los capítulos anteriores, no hay mucho nuevo)

//Gapítulo  4 P4  programa DFRduino Romeo V1.1int E1 = 5; // pin 5 control de la velocidad del motor M1int M1 = 4; // pin 4 control de la dirección de rotación del motor M1int pinMoins = 8; //  conectado al pulsador para disminuirint pinPlus = 9; // conectado al botón para acelerar

int vmin = 120; // "velocidad" mini

int vmax = 255; // "velocidad" max

int vact= 120; // "Velocidad" actuai

int appui= 0; // quando se oprime un boton pasa al estado bajo 0v

void marche_avant(int a)

{

  analogWrite (E1,a);

  digitalWrite(M1,HIGH);

}

void setup() // ejecutada una sola vez

{

    pinMode(4, OUTPUT); // controla la rotacion del motor

    pinMode(5, OUTPUT); // controla la velocidad del motor

    pinMode(pinMoins, INPUT); // Pin en modo entrada

    pinMode(pinPlus, INPUT); // Pin en mode entrada

    digitalWrite(pinMoins, HIGH); // Activacón de la resistancia interna pull-up (memoria en +)

    digitalWrite(pinPlus, HIGH); // Activacion de la resistancia interna pull-up (memoria en +)

 

    Serial.begin(19200);

    marche_avant(vmin); 

}

void loop() // ejecutado en bucke

{

  Serial.print("Lectura del estado del botón empuje: ");

  Serial.println(vact);

  if(digitalRead(pinMoins) == appui) { // oprimido el botón de frenar

      Serial.print("oprimido el botóm menos ");

      if(vact > vmin) {

         vact= vact -1 ;}

  }

  if (digitalRead(pinPlus) == appui) { // orimido el  bouton para acelerar

      Serial.print("oprimido el botó mas");

      if (vact < vmax) {

        vact= vact +1 ;}

   }    

       marche_avant(vact); // on torno  a 1/10 de segundo à esta velocidad

       delay (100);

}

Una foto del montaje:

Nota del traductor

  • El cable amarillo va desde el pin 4, abierto como  OUTPUT al boton que  controla la rotación del motor
  • El cable gris  va a desde el pin 5, abierto como  OUTPUT al boton que  controla la velocidad del  motor
  • Observen que en estos casos los cables no se insertan en la fila interior de pin turquesa (que se corresponden con los pins digitales de Arduino , sino en lospin exteriores verdes que son los que controlan el motor nº 1
  • En cada botón una pata  se hunde en una tira vertical y del otro lado del canal central una de las patas del pulsador
  • La otra parta contraria del pulsador se hunde en la tira vertical del otro lado del canal, y la otra se hunde en la fila vertical correspondiente con la resistencia de seguridad  de 220 Ω, en el bus azul que se destina a “tierra”unido al pin tierra de la tarjeta mediante un cable verde oscuro.
  • En la parte superior, la tarjeta se une a dos pares de cables formados por un hilo negro y otro rojo, los mas finos estarán unidos al motor eléctrico que controla la salida M1 y los más gruesos son los que transportan la energía que consumen estos motores.
  • Esto es lo que sin el correspondiente “Shield” de control de motores es lo que no podremos hacer en nuestro Arduino UNO, pero podremos simular el proceso porque por el cable USB se escribirá en la pantalla del ordenador las cosdas que la tarjeta detecta.

El montaje con un Arduino UNO sería tal como se ve en esta última imagen, donde el cable gris lo he cambiado por uno naranja, (lo siento no tenía gris), y lógicamente no hay ningún motor unido a la placa aunque por el cable USB tendremos puntual información de lo que hace nuestro programa.

Tambien verán otro pequeño secreto que yo uso, (aunque no soy el inventor), uno la placa Arduino a la protoboard, unas veces con una goma elástica y otras como en este caso con el típico alambre de cocina o jardinería  muy finito y forrado de plástico, en este casi de color verde que ven inmediatamente detrás de la entrada USB. Resulta muy cómodo por que al estar solidariamente unida la tarjeta y la protoboard los cables de unión una vez insertado no se mueven,

Félix Maocho

Post de esta serie editados en el blog

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

 

13 julio 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: