Quantcast
Channel: Luis Llamas
Viewing all 1123 articles
Browse latest View live

Controla tus proyectos con Arduino y Joystick analógico

$
0
0
arduino-joystick

arduino-joystick

¿Qué es un joystick analógico?

Un joystick analógico es un sencillo controlador que podemos añadir a nuestros proyectos de electrónica y Arduino, que tiene la ventaja de proporcionar una cantidad de información superior a la que podríamos obtener simplemente con pulsadores.

Estos joystick son similares a las palancas de analógicas que tienen muchos mandos de videoconsolas u ordenadores, como el mando de Playstation 2, o Xbox, que se emplean cuando se necesita un control más suave y preciso del que es posible con los mandos digitales.

Si queréis aprender a usar Arduino con el mando de la Playstation 2 podéis consultar esta entrada

Internamente los joystick están formados por un sistema de balancín con dos ejes ortogonales acoplados a dos potenciómetros. Estos potenciómetros realizan la medición de la posición de la palanca en ambos ejes.

Por otro lado, uno de los ejes está apoyado en un microrruptor, lo que permite detectar la pulsación de la palanca.

arduino-joystick-funcionamiento

Por tanto, los joystick facilitan una señal analógica para la posición de cada eje, más una señal digital para la detección de la pulsación del mando. Al disponer de la entrada en los ejes X e Y en forma analógica, podemos programar controles mucho más ricas y precisas de las que podríamos conseguir con un control digital todo/nada.

Por ejemplo, podemos aumentar la velocidad de movimiento de un brazo robótico cuanto mayor sea el valor de la medición, o hacer que un vehículo gire más o menos rápido. Si hiciéramos esto simplemente con pulsadores, sería imposible conseguir movimientos suaves, y el robot se movería “a saltos”.

Este tipo de joystick son dispositivos sencillos y cómodos de usar, y nos permiten añadir un control a nuestros proyectos. Por ejemplo, podemos usarlo para controlar un servo, un brazo robótico, una torreta con un laser, o incluso vehículos y robots completos.

Precio

Este tipo de Joystick analógicos son dispositivos baratos. Podemos encontrarlos por 0,75€ en vendedores internacionales de Ebay y Aliexpress.

arduino-joystick-componente

Esquema de montaje

El montaje de este tipo de dispositivos es sencillo. En primer lugar, alimentamos el módulo conectando Vcc y GND, respectivamente, a 5V y GND de Arduino.

Para la medida analógica en ambos ejes, conectamos las salidas VRx y VRy a dos entradas analógicas de Arduino.

Finalmente, si también queremos la señal digital del pulsador, conectamos la salida SW a una entrada digital de Arduino. Vamos a usas las resistencias de Pull-Up internas de Arduino, por lo que no es necesario resistencias adicionales.

El esquema de montaje del joystick quedaría de la siguiente forma

arduino-joystick-conexion

Mientras que el montaje, visto desde Arduino, sería el siguiente.

arduino-joystick-esquema

Ejemplos de código

El código para hacer funcionar el joystick es igualmente sencillo. Por un lado, leemos la posición de ambos potenciómetros mediante mediante las entradas analógicas.

Respecto al pulsador, usamos una entrada digital para leer el su estado.

Finalmente, mostramos la lectura por puerto serie. En un ejemplo real, en esta parte ejecutaríamos las acciones oportunas, como mover un servo, o un robot.

/* 
GND - GND
Vcc - 5v
VRx - A0
VRy - A1
SW -  D9
*/

const int pinLED = 13;
const int pinJoyX = A0;
const int pinJoyY = A1;
const int pinJoyButton = 9;

void setup() {
	pinMode(pinLED, INPUT_PULLUP);	//activar resistencia pull up 
	Serial.begin(9600);
}

void loop() {
	int Xvalue = 0;
	int Yvalue = 0;
	bool buttonValue = false;

	//leer valores
	Xvalue = analogRead(pinJoyX);
	delay(100);  					//es necesaria una pequeña pausa entre lecturas analógicas
	Yvalue = analogRead(pinJoyY);
	buttonValue = digitalRead(pinJoyButton);

	//mostrar valores por serial
	Serial.print("X:" );
	Serial.print(Xvalue);
	Serial.print(" | Y: ");
	Serial.print(Yvalue);
	Serial.print(" | Pulsador: ");
	Serial.println(buttonValue);
	delay(1000);
}

Si te ha gustado esta entrada y quieres leer más sobre Arduino puedes consultar la seccióntutoriales de Arduino

Reproducir sonidos con Arduino y un buzzer pasivo o altavoz

$
0
0
arduino-buzzer-altavoz

arduino-buzzer-altavoz

¿Qué es un buzzer o un altavoz?

Un buzzer pasivo o un altavoz son dispositivos que permiten convertir una señal eléctrica en una onda de sonido. Estos dispositivos no disponen de electrónica interna, por lo que tenemos que proporcionar una señal eléctrica para conseguir el sonido deseado.

En oposición, los buzzer activos disponen de un oscilador interno, por lo que únicamente tenemos que alimentar el dispositivo para que se produzca el sonido.

Pese a tener la complejidad de proporcionar y controlar nosotros la señal eléctrica, los buzzer pasivos y de los altavoces tienen la ventaja de que podemos variar el tono emitido modificando la señal que aplicamos al altavoz, lo que nos permite generar melodías.

Precio

Podemos encontrar modelos de pequeños buzzer pasivo para usar en nuestros montajes y proyectos por muy poco dinero, desde 0,45€ en vendedores internacionales de eBay y AliExpress.

arduino-buzzer-altavoz-componente

Frecuentemente, el buzzer pasivo se acompaña en una placa para facilitar su conexión, que incorpora un transistor y resitencias necesarias para hacer funcionar el buzzer pasivo o altavoz sin más que conectarlo.

Respecto a los altavoces, podemos encontrar de todo tipo de tamaños y precios. En general son más caros que los buzzer, y hay que tener en cuenta que frecuentemente requieren un amplificador de audio, lo que supone un coste adicional.

¿Cómo funciona un buzzer y un altavoz?

Técnicamente tanto buzzers como altavoces son transductores electroacústicos, es decir, dispositivos que convierten señales eléctricas en sonido. La diferencia entre ambos es el fenómeno en el que basan su funcionamiento.

Los buzzer son transductores piezoeléctricos. Los materiales piezoeléctricos tiene la propiedad especial de variar su volumen al ser atravesados por corrientes eléctricas.

arduino-buzzer-funcionamiento

Un buzzer aprovecha este fenómeno para hacer vibrar una membrana al atravesar el material piezoeléctrico con una señal eléctrica.

arduino-buzzer-funcionamiento2

Los buzzer son dispositivos pequeños y compactos, con alta durabilidad, y bajo consumo eléctrico. Por contra, la calidad de sonido es reducida.

Por su parte, un altavoz basa su funcionamiento en el magnetismo. Se dispone de un imán permanente que, normalmente, es fijo a la carcasa. Por otro lado, una bobina móvil se acopla a una membrana flexible.

arduino-altavoz-funcionamiento

Al hacer circular una corriente por la bobina el campo magnético resultante genera una atracción con el imán, haciendo vibrar la membrana.

Los altavoces, por presentan una mejor calidad de sonido pero, en general, necesitan mayor potencia y es necesario disponer de dispositivos de amplificación para su uso.

Esquema de montaje

Si usamos una de las placas comerciales para pequeños proyectos y hobbies, que incorporan la electrónica y terminales necesarios, la conexión con Arduino es realmente sencilla. Simplemente alimentamos el módulo conectando Vcc y GND a Arduino, y la entrada de señal a cualquier salida digital de Arduino.

El esquema de conexión visto desde el componente sería el siguiente

arduino-buzer-montaje

Mientras que el esquema de conexión visto desde Arduino quedaría así

arduino-buzzer-altavoz-conexion

Si queremos usar un altavoz, que consumen mayor corriente de la que puede proporcionar Arduino, tendremos que proporcionar una etapa de amplificación, como vimos en la entrada de transistores BJT.

arduino-altavoz-montaje

Aunque en general, en estos casos lo normal es que empleemos un amplificador específico diseñado para audio, en lugar de hacerlo nosotros mismos. Conseguiremos mejores niveles de calidad e incluso un menor coste.

Ejemplos de código

Arduino dispone de dos funciones que nos permiten generar fácilmente señales eléctricas para convertir en sonido, usando cualquiera de las salidas digitales disponibles.

Estas funciones son tone() y noTone() y, como su nombre indican, permiten generar o detener la señal del tono en un pin.

tone(pin, frecuencia); //activa un tono de frecuencia determinada en un pin dado
noTone(pin);           //detiene el tono en el pin

La función tone() también permite especificar la duración del sonido generado.

tone(pin, frequencia, duracion);  //activa un tono de frecuencia y duracion determinados en un pin dado

Pese a su sencillez, al usar las funciones para la generación de tone tenemos que asumir importantes limitaciones.

  • La función Tone emplea el Timer 2, por lo que mientras este funcionando no podremos usar las salidas PWM en los pines 3 y 11 en Arduino Nano y Uno (pines 9 y 10 en Arduino Mega).
  • No podemos usar la función tone() en dos pines de forma simultánea. Deberemos apagar el tono con la funcion noTone() antes de poder usarlo en otro pin.
  • Los rangos de la función tone son de 31 Hz a 65535 Hz.

El siguiente código muestra el uso de estas funciones estas funciones en un ejemplo simple, en el que empleamos el buzzer o altavoz conectado en el Pin9 para generar una función de 440Hz durante un segundo, pararlo durante 500ms, y finalmente un tono de 523Hz durante 300ms, para repetir el programa tras una pausa de 500ms.

const int pinBuzzer = 9;

void setup() 
{
}

void loop() 
{
  //generar tono de 440Hz durante 1000 ms
  tone(pinBuzzer, 440);
  delay(1000);

  //detener tono durante 500ms  
  noTone(pinBuzzer);
  delay(500);

  //generar tono de 523Hz durante 500ms, y detenerlo durante 500ms.
  tone(pinBuzzer, 523, 300);
  delay(500);
}

El siguiente, también muy básico, emplea un array con frecuencias que recorremos secuencialmente para realizar un barrido que aproxima las distintas notas musicales.

const int pinBuzzer = 9;

const int tonos[] = {261, 277, 294, 311, 330, 349, 370, 392, 415, 440, 466, 494};
const int countTonos = 10;
   
void setup()
{ 
}

void loop()
{
  for (int iTono = 0; iTono < countTonos; iTono++)
  {
   tone(pinBuzzer, tonos[iTono]);
   delay(1000);
  }
  noTone(pinBuzzer);
}

Si te ha gustado esta entrada y quieres leer más sobre Arduino puedes consultar la sección tutoriales de Arduino

Interruptor táctil con Arduino y sensor capacitivo touchless

$
0
0
arduino-sensor-capacitivo-touchless
arduino-sensor-capacitivo-touchless

¿Qué es un interruptor táctil?

Un sensor táctil capacitivo es un dispositivo que presenta un comportamiento similar a un pulsador, pero puede ser activado con poca o ninguna presión..

Este tipo de sensor táctil basa su funcionamiento en la medición de la variación de la capacitancia. La placa sensora y el cuerpo humano actúan como condensador y, por tanto, forman un sistema que almacena una carga electricidad.

Al reducir la distancia la capacitancia aumenta y el sistema almacena una carga superior. Esta acumulación de carga puede ser detectada en la placa sensora y generar una señal digital cuando supere un cierto valor. Esta señal de disparo puede a ser vez ser capturada con una entrada digital de Arduino.

La principal ventaja de este tipo de sensores es que no requieren de contacto físico para realizar el disparo, siendo suficiente acercar el dedo a 1-5mm del sensor. Por este motivo se les denomina dispositivos touchless.

De esta forma, es posible colocar el sensor táctil debajo de un vinilo, plástico, cartón, madera o cristal, siempre que el espesor no sea excesivo. Por contra no funcionarán debajo de materiales conductores, en particular debajo de metales.

Otra ventaja es que los sensores capacitivos es que carecen de partes móviles por lo que, en principio, tienen una durabilidad superior a la de un interruptor convencional.

Los sensores touchless son empleados a la hora de hacer interruptores eléctricos, por ejemplo, son frecuentes en baños y garajes. También pueden ser útiles, por ejemplo, para ubicar un pulsador táctil bajo un panel interactivo, de un vinilo con artes gráficas, o integrado bajo la madera de un mueble.

Precio

Este tipo de sensor táctil capacitivo son dispositivos baratos. Existen placas integradas listas para conectar a Arduino, con distintos tamaños y número de contactos. Podemos encontrar un sensor táctil de 1 pulsador por 0,40€, el de 1×4 pulsadores por 0,65€, y el de 4×4 pulsadores por 1€, en vendedores internacionales de eBay y AliExpress.

arduino-sensor-capacitivo-touchless-montaje

Esquema de montaje

El esquema eléctrico es sencillo. Alimentamos el módulo conectando GND y 5V a los pines correspondientes de Arduino.

arduino-sensor-capacitivo-touchless-esquema

Finalmente, para realizar la lectura digital conectamos la salida SIG a una de las entradas digitales de Arduino.

arduino-sensor-capacitivo-touchless-conexion

Ejemplos de código

El código necesario es igualmente sencillo. Si estamos empleando la señal digital, empleamos una entrada digital para leer el estado. En el ejemplo mostramos un mensaje por la pantalla, pero en un caso real ejecutaríamos las acciones oportunas.

const int sensorPin = 9;

void setup()
{
   Serial.begin(9600);
   pinMode(sensorPin, INPUT);
}

void loop()
{
   int estado = digitalRead(sensorPin);

   //mandar mensaje a puerto serie en función del valor leido
   if (estado == HIGH)
   {
      Serial.println("Contacto detectado");   
      //aquí se ejecutarían las acciones
   }
   delay(1000);
}

También podemos leer el estado mediante interrupciones. Para más información consultar la entrada Qué son y cómo usar interrupciones en Arduino y Leer un pulsador con interrupciones en Arduino
Si te ha gustado esta entrada y quieres leer más sobre Arduino puedes consultar la sección tutoriales de Arduino

Controlar grandes cargas con Arduino y transistor MOSFET

$
0
0
arduino-transistor-mosfet
arduino-transistor-mosfet

En una entrada anterior vimos como emplear un transistor BJT como un interruptor controlado eléctricamente, para alimentar cargas a niveles de tensión e intensidad muy superiores a los que podríamos alimentar con las salidas digitales o las salidas PWM de Arduino.

En esta entrada vernos cómo conseguir el mismo comportamiento empleando un transistor MOSFET. Los MOSFET disponen de ventajas en ciertos aspectos frente a los BJT pero, para lo que nos ocupa en esta entrada, la mayor ventaja es que nos permiten manipular grandes cargas.

Sin embargo los transistores MOSFET también tienen sus desventajas y peculiaridades, que veremos más adelante. De esta forma, aprenderemos cuándo resulta conveniente usar un transistor BJT o un transistor MOSFET, o incluso una combinación de ambos.

Durante esta entrada haremos constante referencia a los transistores BJT y su funcionamiento, que tomaremos como base para explicar los transistores MOSFET. Por lo que si aún no estáis familiarizados con su funcionamiento, es buen momento para repasar la entrada de transistores BJT.

¿Qué es un transistor MOSFET?

Un transistor MOSFET es un dispositivo electrónico ampliamente utilizado la electrónica moderna. Por ejemplo, es el principal integrante de la mayoría de procesadores, donde llega a haber millones de transistores en cada integrado.

Los MOSFET son una subfamilia de la familia de transistores FET (field effect transistor). Existen muchas otras subfamilias de FET, como los JFET (join field effect transistor), los CMOS, y los TFT.

Como los transistores BJT, los transistores FET son útiles en múltiples aplicaciones. Algunas de las principales son actuar como amplificador y actuar como interruptor controlado eléctricamente. En esta entrada estamos interesados en esta última función del transistor.

Otro similitud con los transistores BJT es que existen multitud de modelos de transistores FET, cada uno con sus propias características. Igualmente se presentan en una gran variedad de integrados, por lo que no es posible distinguir a simple vista las características de un transistor, debiendo consultar su Datasheet para saber sus características.

arduino-transistor-bjt-componente

Al igual que los transistores BJT un transistor FET dispone de tres terminales, aunque sus nombres son diferentes de los que encontramos en los transistores BJT.

  • Gate (puerta), similar a la base del BJT
  • Source (fuente), similar al emisor del BJT
  • Drain (drenaje), similar al colector del BJT

arduino-transistor-mosfet-curvas

También de forma similar a los transistores BJT los transistores FET presentan 3 modos de funcionamiento, aunque la zona activa del BJT es sustituida por la zona lineal u ohmnica. (Y no solo es un simple cambio de nombre, realmente ambas zonas presentan funcionamientos muy diferentes)

  • Corte, el transistor de comporta como un circuito abierto entre Source y Drain
  • Saturación, se comporta como un cortocircuito entre Source y Drain
  • Zona lineal, se comporta como una resistencia de valor variable

Y de forma similar al caso de los transistores BJT, para encender una carga estamos interesados en hacer funcionar el FET como un interruptor controlado eléctricamente, para lo cual usaremos los modos en los modos corte y saturación, evitando la zona lineal.

Sin embargo, los transistores FET tienen importantes diferencias con los transistores BJT. En primer lugar, su funcionamiento no se basa en la unión de materiales semiconductores, sino en la creación de un canal de conducción entre Source y Drain dentro de un único material semiconductor. El ancho de este canal es controlado por el terminal Gate.

Otra diferencia importante es que el estado de un transistor FET se controla por la tensión aplicada en Gate, a diferencia de los BJT cuyo estado dependía de la corriente que circulaba por la base. Por tanto, los FET son dispositivos controlados por tensión, mientras que los BJT son dispositivos controlados por corriente.

Otra gran ventaja es que en modo de saturación los transistores MOSFET se comportan como una resistencia de muy pequeño valor, mientras que los transistores BJT siempre imponían una caída de tensión. Esto permite a los transistores MOSFET manejar enormes cargas con poca disipación de energía.

Existen más diferencias entre ambos dispositivos que, aunque no influyan directamente en esta entrada, conviene repasar.

Los MOSFET son dispositivos mucho más simétricos que los BJT (el comportamiento de Drain a Source y viceversa es similar). Además, disponen de una alta impedancia desde Gate (del orden de 100MΩ), lo cual es una gran ventaja a la hora de combinarlos para formar circuitos digitales.

En general los tiempos de conmutación son más rápidos que los BJT. Además generan menos ruido y son menos sensibles a la temperatura.

Finalmente, los transistores MOSFET son más sencillos de fabricar, además de poder simular el comportamiento de una resistencia con ellos. Esto les convierte en grandes candidatos para formar integrados y procesadores.

DETERMINAR EL ESTADO DEL MOSFET

Si recordamos la entrada de transistores BJT, un transistor BJT se comporta como un amplificador lineal de la corriente en la base (Ib) y la intensidad del colector (Ic), con un cierto factor hFE, lo que da lugar a una serie de modelos y cálculos.

En el caso de los MOSFET, la intensidad que atraviesa el drenaje (Id) tiene una relación cuadrática con la tensión entre Gate y Source (Vgs). Dada esta relación cuadrática, en lugar de plantear un modelo matemático os recomendamos consultar las gráficas del Datasheet para determinar el punto de operación del transistor.

No obstante, para poder usar y, sobre todo, para poder escoger correctamente un modelo de transistor para nuestro montaje, debemos entender dos aspectos del funcionamiento de los FET.

Por un lado, el transistor MOSFET se comporta como una resistencia variable entre Drain y Source. En la zona lineal el valor de la resistencia depende de la tensión Vgs. Pasado el punto de saturación, la resistencia Rds disminuye drásticamente (a este valor de Rds en saturación se denomina frecuentemente Rdson)

Por otro lado, el Gate del transistor se comporta como un condensador. Es decir, el transistor necesita absorber una cierta cantidad de carga eléctrica (equivalentemente, de intensidad durante un cierto tiempo) para cambiar de modo de trabajo.

G_{capacitancia} = I_d \cdot Tiempo

Resumiendo, para llegar a saturar el MOSFET necesitaremos dos cosas

  • Superar un umbral en la tensión en la Gate (Vgs)
  • Proporcionar la carga suficiente para que el MOSFET sature

Estos dos hechos son fundamentales para entender el funcionamiento de un MOSFET y poder escoger el modelo apropiado para nuestro montaje, y cuando resulta preferible usar un transistor BJT.

POTENCIA DISIPADA EN EL MOSFET

Otro aspecto fundamental para el diseño de circuitos con MOSFET es la potencia soportada por el mismo, dado que el transistor deberá ser capaz de disipar esta energía sin dañarse.

La potencia soportada por el MOSFET es la resistencia del mismo, por el cuadrado de la corriente que lo atraviesa.

P_{Mosfet} = R_{ds} \cdot I_d ^ 2

De forma cuantitativa, para cada una de las zonas de trabajo posible

  • En la zona corte Rds es la determinada por Vgs, pero Ics es nula, por lo que la potencia disipada es cero
  • En la zona saturación Ids es grande, pero Rdson es muy pequeña, por lo que la potencia disipada es muy pequeña
  • En la zona lineal Ids puede ser grande, y Rds “no es pequeña”, por lo que la potencia disipada puede ser grande

Por tanto, un transistor MOSFET solo tiene que soportar una potencia realmente importante en la zona lineal, especialmente a medida que nos acercamos al punto de saturación. Una vez saturado, el MOSFET es capaz de soportar una gran intensidad, con pequeña disipación de energía.

Por tanto, si queremos usar el MOSFET como interruptor evitaremos la zona lineal porque en esta zona la energía disipada es elevada, la cual se convierte en calor y en un incremento de temperatura que puede dañar el transistor.

Si la potencia disipada por el MOSFTET es demasiado elevada, necesitaremos añadir un disipador.

USAR UN MOSFET CON ARDUINO

Llegamos a la parte de elegir un MOSFET que funcione correctamente con Arduino, y aquí es donde nuestra relación idílica con los transistores FET se complica.

Cuando vamos a elegir un MOSFET podemos dejarnos deslumbrar por los grandes valores de intensidad nominal (20-60A), que los hacen parecer mucho mejores que un transistor BJT o un par Darlington (0.5-4A).

Además, aunque algo más caros que los BJT, los MOSFET siguen siendo dispositivos baratos. Encontraremos todo tipo de precios, ya que hay multitud de modelos con diferentes características. Pero, en general, podemos decir que un rango habitual de precios es entre 0,10 a 0,60€.

Sin embargo para elegir un MOSFET para Arduino debemos tener en cuenta que las salidas de Arduino operan a la tensión nominal de 5V (o 3.3V, en función del modelo) y proporcionan una corriente máxima de 40 mA, siendo el máximo recomendable 20 mA.

La mayoría de MOSFET tiene una tensión nominal Vgs de 10V, por lo que a los 5V que proporciona la salida de Arduino la intensidad máxima que puede proporcionar MOSFET es mucho menor a su intensidad nominal. Incluso en algunos modelos de transistores puede no ser suficiente para saturar el MOSFET. Esta situación lógicamente, es incluso peor en el caso de modelos de Arduino de 3.3V.

Además, incluso aunque aceptemos esta corriente Id inferior a la nominal, hay que recordar que el MOSFET necesita absorber una cantidad de carga para cambiar de estado. Con la limitación de corriente de las salidas de Arduino las transiciones son más lentas y el tiempo que el transistor pasa en la zona lineal es mayor, lo que supone una mayor disipación de energía y calentamiento.

MODELOS DE MOSFET PARA ARDUINO

Existen muchos modelos de MOSFET disponibles pero no todos son recomendados para usar directamente con un procesador como Arduino por las limitación de tensión e intensidad en sus salidas.

Modelos habituales de MOSFET son el IRF520, IRF530 e IRF540, con una intensidad nominal Id de, respectivamente, 9.2A, 14A y 28A. Sin embargo, al emplear estos transistores con un Arduino y una Vgs de 5V, los valores de Id caen a 1A, 2A, y 11A.

Por otro lado la serie N, IRF520n, IRF530n e IRF540n, con una intensidad nominal Id de 9.7A, 17A y 33A, al conectarlos directamente con Arduino y una tensión Vgs de 5V,los valores de Id caen a 3A, 11A y 12A, mejor que los anteriores pero muy lejos de ser espectacular.

Para resolver esto, existe un tipo especial de condensadores MOSFET llamados transistores de nivel lógico (logic level), diseñados específicamente para conmutar a las bajas tensiones típicas en TTL. Por contra, precio es algo superior a los MOSFET habituales.

Así, la serie de transistores lógicos IRL520, IRL530 y IRL540 saturan sin problemas a 5V proporcionando una Id, respectivamente, de 9.2A, 15A, y 28A.

Pero no son los únicos transistores MOSFET lógicos disponibles. Entre los muchos modelos encontramos el IRLZ44 que proporciona una Id de 50A, o el IRLB3034PbF que proporciona una brutal Id de 190A

ESQUEMA DE MONTAJE

De forma similar a los transistores BJT, que se presentaban en dos subfamilias llamadas NPN y PNP, existen dos variantes de transistores FET llamados de Canal N y Canal P.

arduino-transistor-mosfet-esquema

El funcionamiento de ambos variantes es análogo, pero determina la posición en el montaje.

arduino-transistor-mosfet-montaje

Regla nemotécnica: El transistor Canal P se pone en la parte “Positiva” del circuito. El transistor Canal N se pone en la parte “Negativa” del circuito

Las dos resistencias empleadas en el montaje son necesarias para el correcto funcionamiento del sistema, y cumplen funciones diferentes.

Por un lado Rg, la resistencia en Gate, sirve para limitar la corriente que “demanda” Gate. Valores más altos suponen menores intensidades, y por tanto menor consumo en Arduino. Por contra, disminuir el valor de la resistencia favorece las transiciones más rápidas, con lo que el transistor pasa menos tiempo en la zona lineal, y se calienta menos en las conmutaciones. Valores habituales son 470 a 4k7.

Por otro lado, Rs simplemente pone el transistor a un estado conocido (GND) cuando el Pin está en un estado indeterminado (alta impedancia), por ejemplo, durante el arranque del programa, que podrían provocar encendidos y apagados del MOSFET. Un valor alto de resistencia, de 100K a 1M, es suficiente para poner el Gate a tierra.

MOSFET CON CARGAS INDUCTIVAS

Exactamente igual que con transistores BJT, en caso de emplear un MOSFET para alimentar cargas inductivas (motores, bobinas, electroimanes) deberemos añadir un dispositivo de seguridad denominado diodo de Flyback.

Este diodo proporciona un recorrido de mínima resistencia, que permite disipar las corrientes inducidas producidas por el campo magnético de la carga inductiva cuando esta es desconectada de la corriente, y que podrían dañar al transistor o a Arduino..

arduino-flyback

Por tanto, para cargas inductivas e incorporando el diodo de Flyback, el montaje sería el siguiente.

arduino-transistor-mosfet-montaje-inductiva

MOSFET CON SALIDAS PWM

En la entrada de los BJT vimos que resultaban apropiados para generar una señal PWM amplificada, sin más necesidad que conectarlos a una salida analógica de Arduino.

Podríamos pensar que los transistores MOSFET son incluso mejores para generar salidas PWM, dado que son capaces de alimentar mayores cargas y su tiempo de conmutación es mucho más rápido que los transistores BJT.

Sin embargo, no es así. En general, los transistores MOSFET no son apropiados para generar señales PWM simplemente conectándolos directamente a una salida de Arduino, ni siquiera en los modelos de transistores de nivel lógico.

Esto es debido a que tanto la tensión y, sobre todo, la intensidad proporcionada por una salida de Arduino no es suficiente para saturar rápidamente al MOSFET. Esto hace que el transistor pase excesivo tiempo en la zona lineal, aumentando las pérdidas.

Para lidiar con estas limitaciones podemos:

  • Limitarnos a cargas pequeñas, que demanden intensidades menores a la nominal
  • Plantearnos sustituirlo por un par Darlington
  • Hacer una etapa previa de amplificación de potencia con un BJT (lo vemos a continuación)
Antes de usar un MOSFET en un PWM conviene reflexionar un poco antes de hacer el montaje, y tener siempre en cuenta la potencia y temperatura soportada por el transistor.

USAR UNA ETAPA BJT COMO DRIVER

Hemos visto a lo largo de la entrada que las limitaciones en tensión y corriente que imponen las salidas de Arduino (y en general de cualquier procesador o autómata) nos obligan a reducir las cargas que podemos alimentar con un MOSFET, o a emplear transistores especiales de nivel lógico.

Esta situación es incluso peor en el caso de las salidas PWM, dado que la limitación de corriente obliga al MOSFET a estar más tiempo en la zona lineal, aumentando la potencia disipada y su temperatura.

Una forma de eliminar estas restricciones es emplear una etapa de preamplificación, entre la salida de Arduino y el MOSFET. Esta etapa, o driver, puede ser un circuito formado por un simple BJT de pequeño tamaño (N2222, BC337 o similar).

arduino-transistor-driver-bjt-mosfet

Esta etapa recibe la salida de Arduino, y proporciona al MOSFET la tensión e intensidad que necesita para saturar completamente, y con una velocidad de conmutación rápida.

Con este tipo de circuito aprovechar por completo el MOSFET, permitiendo proporcionar grandes intensidades incluso en salidas PWM. Pero, por contra, añade componentes y complejidad a los montajes.

Por tanto, no existe una solución única para escoger cuando es más apropiado un BJT, un MOSFET directamente, o un MOSFET con preamplificación. Es una decisión de diseño que debéis tomar de forma individual para cada uno de vuestros montajes, según todo lo que hemos visto en esta entrada.

Si te ha gustado esta entrada y quieres leer más sobre Arduino puedes consultar la seccióntutoriales de Arduino

Usar MOSFET como interruptor digital con Arduino y IRF520N

$
0
0
arduino-mosfet-irf520n
arduino-mosfet-irf520n

¿Qué es un MOSFET IRF520N?

El IRF520N es un modelo muy común de transistor MOSFET que podemos emplear para alimentar cargas a tensión e intensidad superiores a las que podemos proporcionar con las salidas de Arduino.

En la entrada anterior de transistores MOSFET en Arduino vimos en profundidad sus características y funcionamiento, y que podíamos usar el modo de corte y saturación para formar un interruptor controlado por corriente, con el que controlar grandes cargas.

Pero, como vimos, no todos los MOSFET son apropiados para su uso directamente con una salida de Arduino, dadas sus las limitaciones de tensión y corriente. El IRF520N no es el transistor MOSFET más indicado para emplear con Arduino.

La mayor ventaja del IRF520N es que existen placas comerciales que simplifican significativamente el montaje. Estas placas incluyen resistencias integradas, pines para conectar a Arduino y clemas de conexión para conectar la carga.

arduino-mosfet-irf520n-funcionamiento

En cuanto a las características eléctricas del IRF520N, el DataSheet indica que con una Vgs nominal de 10V puede alimentar una carga a tensiones de hasta 50V, proporcionando una intensidad máxima de 9.7A.

Sin embargo, al alimentar el Vgs con una salida de Arduino de tensión nominal 5V, el IRF520N proporciona una tensión de alimentación de 24V y una intensidad máxima de 4A. Los modelos de Arduino de 3.3V no pueden emplear un IRF520N sin preamplificación.

Para intensidades superiores a 1A es necesario añadir un disipador de calor.

Respecto a las aplicación en señales PWM, podemos usar el IRF520N en las salidas analógicas de Arduino, siempre que tengamos en cuenta que la conmutación supone un incremento de la potencia disipada en MOSFET, lo que requerirá que controlemos su temperatura y alimentar cargas menores si esta es excesiva.

Pese a estas limitaciones respecto a sus valores nominales, este tipo de placas proporcionan una forma sencilla de alimentar una carga de hasta 24V y 1A. Resultan muy cómodas para emplear en pequeños proyectos de electrónica o montajes rápidos. En una última instancia, en un montaje definitivo sustituiríamos estos componentes por nuestras propias etapas.

Para más información sobre etapas de mayor potencia en Arduino puedes consultar la entrada Transistores BJT en Arduino y Transistores MOSFET en Arduino

Precio

Podemos encontrar una placa comercial con un IRF520N para conectar por Arduino por 0.60€, en vendedores internacionales de eBay y AliExpress.

arduino-mosfet-irf520n-componente

Teniendo en cuenta que un transistor MOSFET IRF520N cuesta en torno a 0.25-0.30€ por unidad, sin contar la placa, resistencias y terminales de conexión, en general resulta más económico la placa comercial, sin tener en cuenta el tiempo que nos costaría montarlo.

Como hemos indicado, en un montaje definitivo o repetitivo analizaríamos hacer nuestro propio circuito. Pero como componente rápido para pruebas, estas placas comerciales son muy útiles y baratas.

Esquema de montaje

Incorporar este tipo de placas con IRF520N en nuestros proyectos no resulta difícil, solo necesitamos tener claro que es cada parte del componente y cuál es su función.

Así, encontramos dos partes diferenciadas.

  • Una fase primaria de baja potencia que recibe la señal desde Arduino y controla el estado del MOSFET.
  • Una fase secundaria de alta potencia que conecta la carga y la fuente de alimentación externa.

arduino-mosfet-irf520n.esquema

En la fase primaria, simplemente conectamos la alimentación Vcc y GND de la placa a los pines 5V y GND de Arduino, respectivamente. Finalmente, conectamos el pin de señal a una salida digital o analógica de Arduino.

En el secundario, conectamos la carga a la clema de conexión indicada. En la otra clema conectamos la fuente de alimentación externa que alimentará la carga, con una tensión máxima de 24V.

Al usar varias fuente de tensión recordar poner siempre en común todos los GND. De lo contrario podríais dañar algún componente.

La conexión, vista desde Arduino, sería la siguiente, donde se ha representado la salida D9, pero podríamos haber elegido cualquier otra salida de Arduino.

arduino-mosfet-irf520n-montaje

Cuando la salida de Arduino se ponga a HIGH, la carga quedará conectada a la fuente de alimentación externa. Arduino solo tendrá que proporcionar la intensidad suficiente para saturar el MOSFET en los cambios de estado.

De esta forma, el IRF520N está comportándose de forma similar a un interruptor que nos permite encender o apagar la carga, y cuyo estado e controlado por la salida de Arduino.

Ejemplos de código

Los códigos de ejemplo son sencillos. Cualquiera de los códigos que hemos visto al tratar salidas digitales o salidas analógicas funcionaran con este montaje.

Por ejemplo, el siguiente código simplemente enciende y apaga la carga en intervalos de 5 segundos.

const int pin = 9;
 
void setup() {
  pinMode(pin, OUTPUT);  //definir pin como salida
}
 
void loop(){
  digitalWrite(pin, HIGH);   // poner el Pin en HIGH
  delay(5000);               // esperar un segundo
  digitalWrite(pin, LOW);    // poner el Pin en LOW
  delay(5000);               // esperar un segundo
}

Si te ha gustado esta entrada y quieres leer más sobre Arduino puedes consultar la seccióntutoriales de Arduino

Manejar cargas de más de 220V con Arduino y salida por relé

$
0
0
arduino-salida-rele
arduino-salida-rele

¿Qué es un relé?

Un relé es un dispositivo electromecánico que permite a un procesador como Arduino controlar cargas a un nivel tensión o intensidad muy superior a las que su electrónica puede soportar.

Por ejemplo, con una salida por relé podemos encender o apagar cargas de corriente alterna a 220V e intensidades de 10A, lo cual cubre la mayoría de dispositivos domésticos que conectamos en casa a la red eléctrica.

Las salidas por relé son muy frecuentes en el campo de la automatización de procesos, y casi todos los autómatas incluyen salidas por relé para accionar cargas como motores, bombas, climatizadores, iluminación, o cualquier otro tipo de instalación o maquinaria.

Físicamente un relé se comporta como un interruptor “convencional” pero que, en lugar de accionarse manualmente, es activado de forma electrónica. Los relés son aptos para accionar cargas tanto de corriente alterna como continua.

Un relé dispone de dos circuitos:

  • El circuito primario se conecta con la electrónica de baja tensión, en nuestro caso Arduino, y recibe la señal de encendido y apagado.
  • El circuito secundario es el interruptor encargado de encender o apagar la carga.

Al ser dispositivos electromecánicos que requieren el movimiento de componentes interno para su funcionamiento el tiempo de conmutación de un relé es elevado, del orden de 10ms.

Como consecuencia los relés no pueden usarse con una señal PWM, ni otro tipo de señales de frecuencia media-alta. En caso de tener está necesidad deberéis usar otro dispositivo, como un transistor BJT, un MOSFET o relés de estado sólido, en función de las características de vuestro proyecto.

La vida útil del dispositivo está determinada por el número de conmutaciones. Sin embargo, típicamente es del orden de 100.000 a 1.000.000 de conmutaciones por lo que en un uso normal son componentes duraderos y fiables.

Existen gran multitud modelos de relés, con diferentes características eléctricas tanto para el circuito primario y secundario. Debemos elegir un relé que se adecue a las necesidades de nuestro diseño, es decir, que el primario tenga un rango de tensión compatible con nuestra electrónica y el secundario pueda soportar la tensión y corriente requerida por la carga.

Los relés son componentes fundamentales en nuestros proyectos de electrónica, domótica, e Internet de las cosas. Podemos usar salidas por relé para interactuar y controlar casi cualquier cualquier dispositivo que tengamos por casa.

Por ejemplo, podemos encender un tubo fluorescente desde el móvil, encender o apagar la caldera actuando sobre el termostato, desplegar un toldo o bajar una persiana, encender un sistema de riego, activar o apagar discos duros externos, entre un sinfín de aplicaciones.

Precio

Los relés son dispositivos baratos. Existen placas integradas listas para conectar a Arduino, con distintos tamaños y número de canales. Cada canal es un interruptor totalmente independiente de los demás, lo que permite controlar múltiples cargas con un mismo procesador.

Podemos encontrar un relé de un canal por 0,55€, de dos canales por 1,10€, cuatro canales por 2,20€ y ocho canales por 4,10€, en vendedores internacionales de eBay y AliExpress.

Estas placas comerciales montan relés con una limitación de 250V en corriente alterna (AC) o 30V en corriente continua (DC). La intensidad máxima que pueden soportar es de 10A. Esto es equivalente a una carga de 2.300W a 230V AC, y 300W en 30V DC.

arduino-salida-rele-componente

Siempre que sea posible elegiremos montajes con optoacoplador. El optoacoplador es un dispositivo que aísla galvánicamente el circuito primario y secundario, lo que supone una protección adicional para Arduino frente a un fallo catastrófico en la placa del relé.

Al ser un dispositivo sencillo también podemos montarlo nosotros mismos. En general no merece la pena ya que sólo el relé nos costarían más, sin contar el tiempo necesario y la calidad que podríamos obtener, por lo que lo normal es que usemos un modelo comercial.

Ensamblarlo por nosotros mismos solo tiene sentido cuando necesitemos integrarlo en nuestro proyecto, o necesitemos relés con mejores características eléctricas que los disponibles en estas placas.

¿Cómo funciona un relé?

El circuito primario de un relé, que recibe la señal de la electrónica de baja tensión, está formado por una bobina arrollado a un núcleo metálico, formando un electroiman.

El circuito secundario, encargado de alimentar la carga, está formado por unos contactos eléctricos, instalados en unas láminas de metal flexible.

Todos los elementos están fijados a una base aislante y rodeados de una envolvente, que impiden que exista el contacto eléctrico entre los distintos terminales o con el exterior.

De estos contactos uno o dos son contactos fijos, mientras que el restante es un contacto móvil encargado de cerrar el circuito con uno de los contactos fijos.

arduino-salida-rele-funcionamiento

Los relés normalmente disponen de tres contactos en el secundario C (común), NO (normalmente abierto) y NC (normalmente cerrado). Pero también encontramos modelos que prescinden del terminal NC.

Cuando se activa el relé, la corriente circula por la bobina del circuito primario generando un campo magnético que hace pivotar una armadura, que a su vez empuja al contacto móvil, cerrando el circuito con el contacto fijo NO. Mientras, se separa y abre el circuito con el terminal NC.

Cuando la corriente del circuito primario cesa el contacto móvil vuelve a su posición original, abriendo el circuito con el terminal NO, y cerrándolo con el terminal NC.

Por tanto, para controlar la carga con un relé como si fuera un interruptor siempre conectaremos uno de los polos al terminal C (común), que está unido al contacto móvil del secundario.

El otro polo de la carga deberemos conectarlo a uno de los terminales NO o NC, en función de si queremos que al entrar en funcionamiento el relé el circuito se cierre (carga encendida) o se abra (carga apagada).

  • El terminal NO (normalmente abierto) está aislado de C cuando el relé está apagado y conectado cuando el relé está encendido.
  • El terminal NC (normalmente cerrado) está conectado con C cuando el relé está apagado, y aislado cuando el relé está encendido.

Esquema de montaje

En caso de usar una placa comercial el montaje es realmente sencillo. En primer lugar alimentamos la electrónica del módulo Vcc y GND a Vcc y GND de Arduino mediante los terminales existentes.

Por otro lado conectamos la carga a la clema de tres conexiones. Siempre debemos conectar uno de los polos de la carga al terminal C, que habitualmente es el terminal del medio.

El otro polo de la carga lo conectaremos al terminal NO o NC, dependiendo de si cuando el relé este desactivado queremos que el secundario este abierto (NO), o cerrado (NC).

Finalmente conectamos el pin de señal a una salida digital de Arduino. Si empleamos una placa con varios canales, conectaríamos cada uno de los canales directamente a una salida digital.

arduino-salida-rele-esquema

La conexión, vista desde Arduino, sería la siguiente.

arduino-salida-rele-conexion

Si os decidís por hacer todo el montaje vosotros mismos, el esquema eléctrico tampoco es complicado. Las salidas de Arduino no disponen de corriente suficiente para activar un relé, por lo que empleamos una etapa de amplificación como vimos en la entrada de transitores BJT.

Alimentamos esta etapa mediante una salida digital, interponiendo un optoacoplador para aislar galvánicamente ambos circuitos. También añadimos un diodo de flyback, que también vimos en la entrada de transitores BJT, dado que el primario del relé es una carga inductiva.

arduino-salida-rele-detalles

Ejemplos de código

El código necesario es igualmente sencillo, y solo necesitamos tratarla como cualquier otra salida digital tal y como vimos en la entradasalidas digitales.

Por ejemplo, el siguiente código simplemente enciende y apaga la carga en intervalos de 10 segundos.

const int pin = 9;
 
void setup() {
  Serial.begin(9600);    //iniciar puerto serie
  pinMode(pin, OUTPUT);  //definir pin como salida
}
 
void loop(){
  digitalWrite(pin, HIGH);   // poner el Pin en HIGH
  delay(10000);               // esperar un segundo
  digitalWrite(pin, LOW);    // poner el Pin en LOW
  delay(10000);               // esperar un segundo
}

Si te ha gustado esta entrada y quieres leer más sobre Arduino puedes consultar la sección tutoriales de Arduino

Encender un diodo láser con Arduino

$
0
0
arduino-laser
arduino-laser

¿Qué es un diodo láser?

Un diodo láser es un dispositivo similar a un LED convencional, pero que en lugar de emitir luz convencional emite un haz de láser.

Como sabemos, a diferencia de un haz de luz convencional un haz de láser avanza en línea recta. Si el generador láser fuera perfecto y el haz estuviera en el vacío, la luz seguiría su camino hasta que encontrara un obstáculo.

Sin embargo al avanzar en un medio gaseoso (como el aire) o líquido, el choque con sus moléculas provoca la dispersión del haz haciendo que este se debilite progresivamente.

En el vacío el haz no es visible. Si lo vemos es, precisamente, porque colisiona con las moléculas del gas dispersando parte de la luz. El efecto es mayor, por ejemplo, en humo, lo que produce un efecto espectacular al hacer muy visible el haz.

Por otro lado ningún generador láser es perfecto, y menos aún los diodos baratos que usaremos en nuestros proyecto caseros, por lo que en realidad el haz deja de ser visible a los pocos metros en función de la calidad y la potencia del láser.

Los diodos láser son ampliamente empleados para la fabricación de punteros para presentaciones y efectos de luz en animaciones y espectáculos. También son componentes fundamentales de impresoras láser, escáneres y grabadores/reproductores de CD, DVD y Blu-Ray, entre otros.

En nuestros proyectos de electrónica y Arduino podemos utilizar un láser como dispositivo señalizador, por ejemplo colocándolo en una torreta con un sensor, o en el brazo de un robot bípedo.

Otro proyecto interesante para realizar con un diodo de haz lineal es un escáner 3D. También son frecuentes los proyectos que emplean láser de alta potencia para hacer aplicaciones de grabado en diversos materiales, como madera o plástico.

Y, en general, podemos ingeniárnosla para añadir un láser a casi cualquier robot o invento que se nos ocurra porque, para que negarlo… a todos nos gustan los láser.

Precio

Encontramos diodos láser para añadir a nuestros proyectos en una gran variedad de precios, en función fundamentalmente de su potencia.

Existen unas placas con un diodo láser rojo de 1mW, adecuadas para conectar directamente a Arduino. Son una buena opción para montajes pequeños y rápidos por su sencillez de uso. Podemos encontrar este tipo de placas por 0.55€, en vendedores internacionales de eBay o AliExpress.

arduino-diodo-laser

También podemos comprar directamente el diodo láser. Como decimos, hay un abanico enorme de precios en función de las características del diodo. Los diodos más pequeños, de 1mW (similares a los de la placa anterior) cuestan en torno a 0.15€. Por otro lado, a grandes rasgos y generalizando mucho, los diodos láser de potencia median cuestan en torno a 1€, y los de alta potencia de 10€ en adelante.

arduino-tipos-diodos-laser

Como consejo, no compréis láser caros (digamos más, de 10€) a fabricantes desconocidos y sin tener muy clara la calidad del diodo. Lo normal es que acabéis tirando el dinero.

Otra opción muy socorrida y en ocasiones más barata es comprar/reciclar directamente un puntero láser y aprovechar la electrónica, el cabezal y la carcasa, que integrados en un proyecto quedan muy bien. Podemos encontrar punteros de todos los colores por 1.5€ y punteros verdes realmente potentes e interesantes por 5-7€.

arduino-puntero-laser

La parte negativa de aprovechar un puntero es que para conectarlo tendremos que desmontarlo y soldar terminarles a su electrónica, lo que puede resultar algo más complicado y laborioso, y requerir cierta habilidad.

Por último, remarcar que no os fiéis de las especificaciones de potencia que incorporan en los anuncios los vendedores chinos porque, frecuentemente, no tienen nada que ver con la realidad.

¿Cómo funciona un diodo láser?

De forma resumida, un láser utiliza emisión inducida para generar un haz de luz coherente espacial y temporalmente. La coherencia espacial corresponde con la capacidad de la luz para viajar con poca divergencia, mientras que la coherencia temporal indica la emisión en un rango espectral estrecho.

arduino-laser-luz-coherente

Para conseguir la emisión láser un diodo cuenta con una unión PN de grandes dimensiones que favorece la emisión estimulada. Uno de las caras del cristal semiconductor es casi totalmente reflectante, mientras que la otra deja pasar la luz parcialmente. Esto constituye una guía de ondas que amplifica la luz, que sale por la cara parcialmente reflectante.

Adicionalmente los diodos láser disponen de una lente, o colimador, que rectifica la divergencia de la luz. Unido al hecho de que la luz tiene un alto grado de coherencia espacial, hace que el haz sea capaz de recorrer grandes distancias manteniendo un haz pequeño.

arduino-diodo-laser-funcionamiento

Existen diodos láser de todo tipo de potencia, desde los más pequeños de 1mW empleados en punteros, de 1W utilizados, por ejemplo, para realizar grabados en madera o plástico.

Los diodos de mayor potencia necesitan un disipador de calor para que no se rompan en su funcionamiento. Aún con disipador, normalmente no pueden estar encendidos continuamente, y hay que encenderos y apagarlos en ciclos de unos pocos segundos.

Cuidado con los diodos de alta potencia. Con potencias superiores de 50mW es obligatorio el uso de gafas protectoras. El simple reflejo en cualquier superficie que provoque el contacto con la retina puede causar una pérdida permanente de visión.

Los diodos láser disponen de un alto grado de monocromaticidad, existiendo diodos que emiten luz en diversos colores, rojo, verde, azul y violeta.

En forma resumida, los láser rojos son los más apropiados para generar calor y quemar. Es frecuente encontrar proyectos donde encienden cerillas, explotan globos negros o máquinas grabadoras.

Los verdes son los más visibles, dado que el ojo humano es muy sensible a la luz verde. En los diodos verdes es frecuente ver el propio haz de luz a lo largo su trayectoria.

arduino-laser-tipos-haz

También encontramos diodos láser con distintas formas de haz en función de la óptica que integran. Lo más habitual es un haz de tipo puntero, pero también podemos lineales o de múltiples puntos simultáneos.

Esquema de montaje

En el caso de que empleemos una placa comercial con láser de pequeña potencia integrado el esquema de conexión es muy sencillo. Simplemente alimentamos el módulo conectando Vcc y GND a 5V y GND en Arduino. Por otro lado, conectamos el pin de señal del módulo a cualquier salida digital de Arduino.

arduino-laser-esquema

Por el contrario, en el caso de usar un diodo de mayor potencia, las salidas de Arduino no van a poder proporcional la intensidad suficiente para encender el diodo, dado que la intensidad máxima que pueden proporcionar es de 40mA, siendo recomendable no exceder de 20mA.

En este caso necesitaremos una etapa de amplificación, para lo cuál podemos usar un transistor BJT o un transistor MOSFET. En este ejemplo, usaremos una placa comercial con MOSFET IRF520N, como vimos en esta entrada, para controlar la carga.

arduino-laser-esquema-mosfet

En ambos casos, la conexión vista desde Arduino es la misma. Simplemente empleamos una salida digital para encender el montaje, bien sea el diodo directamente o a través de una etapa de amplificación.

arduino-laser-conexion

En el caso de que el diodo incorpore algún tipo de controlador (driver), o al reaprovechar un puntero conservaremos toda la electrónica asociada al láser y simplemente usaremos la etapa MOSFET como interruptor para encender y apagar el diodo.

Ejemplo de códigode montaje

El código necesario es sencillo, ya que para a controlar el diodo únicamente necesitamos emplear una salida digital, tal y como vimos en la entrada salidas digitales.

Por ejemplo, el siguiente código simplemente encendería y apagaría el diodo láser 5 segundos, dejándolo descansar 20 segundos.

const int pin = 9;

void setup() {
  pinMode(pin, OUTPUT);  //definir pin como salida
}
 
void loop(){
  digitalWrite(pin, HIGH);   // poner el Pin en HIGH
  delay(10000);               // esperar un segundo
  digitalWrite(pin, LOW);    // poner el Pin en LOW
  delay(10000);               // esperar un segundo
}

Si te ha gustado esta entrada y quieres leer más sobre Arduino puedes consultar la sección tutoriales de Arduino

Atraer objetos metálicos con Arduino y un electroimán

$
0
0
arduino-electroiman

¿Qué es un electroimán?

Un electroimán es un dispositivo que permite atraer objetos ferromagnéticos mediante el empleo de un campo magnético. En ocasiones a estos dispositivos se les denomina ventosa magnética.

Un electroimán se comporta de forma similar a un imán permanente, pero tiene la gran ventaja de que puede ser activado o desactivado a voluntad y rápidamente, simplemente actuando sobre la corriente suministrada.

Por contra, los electroimánes convencionales tienen el inconveniente de requerir un suministro continuo de corriente para mantener la fuerza que ejerce.

Una variante de los electroimanes usa una combinación con imanes permanentes, cuyo efecto es contrarrestrado por el electroimán. De esta forma el dispositivo ejerce fuerza atractiva estando desconectando, y la corriente se aplica para separarlo. Este comportamiento es el opuesto a un electroimán convencional. A estos dispositivos se les denomina electroimán negativo o lapa.

Los electroimanes son dispositivos ampliamente empleados en la industria para accionar mecanismos, levantar cargas, mover objetos. Existe todo tipo de tamaños, desde los que pueden mover objetos de pocos gramos, a grandes grúas como las que podemos ver en los desguaces.

También son componentes fundamentales de un gran número de objetos cotidianos, como timbres, discos duros, motores, generadores, altavoces, reles, entre otros muchos.

Nosotros podemos usar electroimanes en nuestros proyectos de electrónica y robótica, por ejemplo, para incorporarlo en un brazo robótico, para construir una pequeña grúa, o acoplarlo a un robot para que pueda manipular objetos.

Precio

Podemos encontrar una gran variedad de electroimanes y precios, en función de la fuerza que son capaces de ejercer, en vendedores internacionales de eBay o AliExpress.

Así, encontramos pequeños electroimanes de 25N (2,5Kg) por unos 3 €, 50N (5Kg) por 5€, 100N (10Kg) por 6.5€, hasta los más grandes de 800 (80Kg) o 1000 (100Kg) por 12 o 20€

arduino-electroiman-componente

¿Cómo funciona un electroimán?

Es bien sabido desde la antigüedad que ciertos materiales disponen de la capacidad para atraer o repeler otros objetos. A estos materiales se les denomina imanes naturales, y su descubrimiento dio lugar al estudio del magnetismo.

A los materiales atraídos por los imanes naturales se les denomina materiales ferromagnéticos, y entre ellos tenemos el Hierro, Cobalto, Níquel, y la mayoría de sus aleaciones.

En realidad los campos magnéticos influyen en todo tipo de material, pero en el caso de materiales paramagnéticos y diamagnéticos el efecto es muy inferior, por lo que no es apreciable excepto en campos magnéticos enormes

El 1820 el danés Hans Christian Orsted descubrió que las corrientes eléctricas pueden generar campos magnéticos. Poco después, en 1824, el británico William Sturgeron fabricaba el primer electroimán, que fue perfeccionado por el estadounidense Joshep Henry en 1930.

arduino-electroiman-interior

Físicamente, un electroimán está constituido por una bobina arrollada en torno a un núcleo ferro magnético. Usualmente se dispone de una gran cantidad de espiras muy próximas entre sí. Las espiras normalmente se fabrican en cobre o aluminio, y disponen de un barniz aislante para impedir el contacto eléctrico entre ellas.

Al hacer circular corriente por una bobina en su interior se genera un campo magnético, de forma similar a lo que ocurre de forma natural en los imanes permanentes.

arduino-electroiman-funcionamiento

El núcleo ferromagnético del electroimán aumenta el efecto del campo magnético, además de concentrarlo y reducir las pérdidas por dispersión.

Los materiales ferrromagnéticos están constituidos por dominios magnéticos, cuyo origen es la rotación de los electrones que lo integran. En estado de reposo estos dominios se encuentran aleatoriamente orientados, siendo el efecto global nulo.

En presencia de un campo magnético los dominios se orientan en la misma dirección, por lo que el materíal pasa a comportarse de forma similar a un imán natural, potenciando los efectos del campo magnético aplicado.

arduino-electroiman-ferromagnetico

Pasado un cierto punto de intensidad de campo magnético, todos los dominios se encuentran orientados. Se dice que el material ha alcanzado la saturación. Pasado este punto, incrementar la corriente del electroimán supone un leve incremento en la fuerza ejercida por el electroimán.

Por otro lado, al cesar el campo magnético los dominios tienden a volver a orientarse de forma aleatoria, pero siguen teniendo una cierta orientación preferente. Este campo magnético residual se denomina magnetismo remanente. Para eliminar este magnetismo residual es necesario aplicar un campo cohercitivo en sentido opuesto, o elevar la temperatura del material por encima de la temperatura de Curie.

Esquema de montaje

El esquema de montaje no es demasiado complicado, simplemente vamos a usar un MOSFET como el IRF520N como interruptor para controlar el encendido del electroimán.

Existen modelos de electroimán de tensión nominal 6V, 12V o 24V. Los más habituales son de 12V, pero debéis ajustar este valor para el componente que hayáis comprado.

También debemos tener en cuenta la corriente requerida por el electroimán. En caso de consumir más de 1A, deberemos añadir un disipador de calor al IRF520N, o usar otro modelo de MOSFET o incluso una salida por relé.

arduino-electroiman-esquema

Por un lado, alimentamos el módulo con la tensión entre 6V a 24V, en función de nuestro modelo de electroimán, mediante GND y Vin.

Por otro lado, conectamos la carga mediante la clema de conexión. Al ser el electroimán una carga inductiva debemos añadir un diodo de protección flyback, como vimos en la entrada sobre MOSFET.

Finalmente, alimentamos la electrónica del módulo conectando Vcc y GND a 5V y GND en Arduino, y conectamos el Pin SIG a cualquiera de las salidas digitales de Arduino.

arduino-electroiman-conexion

Ejemplo de códigode montaje

El código necesario es sencillo, ya que para a controlar el electroimán únicamente necesitamos emplear una salida digital, tal y como vimos en la entrada salidas digitales.

Por ejemplo, el siguiente código simplemente encendería y apagaría el eletroimán cada 10 segundos.

const int pin = 9;

void setup() {
  pinMode(pin, OUTPUT);  //definir pin como salida
}
 
void loop(){
  digitalWrite(pin, HIGH);   // poner el Pin en HIGH
  delay(10000);               // esperar un segundo
  digitalWrite(pin, LOW);    // poner el Pin en LOW
  delay(10000);               // esperar un segundo
}

Si te ha gustado esta entrada y quieres leer más sobre Arduino puedes consultar la sección tutoriales de Arduino

Generar frío con Arduino y una placa Peltier

$
0
0
arduino-placa-peltier

¿Qué es una placa Peltier?

Una placa Peltier es un dispositivo electrotérmico que permite generar frio a partir de electricidad.

Una placa Peltier actúa como una bomba de calor de estado sólido, es decir, es capaz de emplear energía para transferir calor de un foco frío a uno caliente, oponiéndose al gradiente de temperatura.

arduino-placa-peltier-funcionamiento

Durante su funcionamiento una de las caras de una placa Peltier se calienta mientras que la otra se enfría. Dado que existen formas más sencillas y eficientes de generar calor, el uso habitual de estos dispositivos es la generación de frío.

Sin embargo, las leyes de la termodinámica insisten tozudamente en su obligado cumplimiento por lo que, si encendemos una placa Peltier directamente, el calor del lado frío y el lado caliente se igualan. Sumado a la disipación en forma de calor de la energía consumida por la placa hará que la temperatura de la placa se eleve rápidamente.

Para hacer funcionar una placa Peltier debemos dar salida al calor generado en la cara caliente para lo cual deberemos instalar un sistema de disipación. Cómo mínimo, debemos ubicar un disipador con ventilador en el lado caliente. También es recomendable un disipador en el lado frío.

arduino-placa-peltier-disipador

No hagáis funcionar una placa Peltier sin un sistema de sistema de disipación. Elevará su temperatura rápidamente y se fundirá en pocos segundos. Las temperaturas alcanzadas son suficientemente altas para ser peligrosas al contacto.

Las placas Peltier tienen la desventaja de requerir grandes corrientes para funcionar. Además, presentan una eficiencia relativamente baja como mecanismo de generación de frío.

Sin embargo, su sencillez, al no requerir partes móviles ni circuitos de fluidos, han hecho que se popularicen como mecanismos para la generación en equipos portátiles como pequeñas neveras o termos de bebidas.

Las bajas temperaturas alcanzadas en la cara fría pueden dar lugar a la condensación de agua. Esta agua puede dañar los elementos que deseamos refrigerar, sobre todo en el caso de componentes electrónicos.

Precio

Hasta hace poco tiempo las placas Peltier eran dispositivos prohibitivamente caros, pero en la actualidad han disminuido mucho su precio y son componentes asequibles.

Podemos encontrar placas Peltier como la TEC1 12706, por 1.55€ en vendedores internacionales de eBay y AliExpress.

La TEC1 12706 tiene unas dimensiones de 40x40x3mm y contiene 127 pares de uniones. La potencia eléctrica es de 60W, siendo la tensión nominal 12V y la corriente nominal 5A.

Puede alcanzar un diferencial de temperatura máximo de 65ºC entre ambas caras en condiciones ideales. El rango de temperaturas en el que puede trabajar sin dañarse es de -55ºC a 83ºC. La vida media de una placa Peltier supera los 200.000 horas, si la mantenemos en el rango de temperaturas apropiado.

La eficiencia de refrigeración de las placas, sin contar el gasto energético del ventilador, está en torno a un 20-25%. Es decir, la TEC1 12706 puede extraer unos 12-15W de calor. Sin embargo, el valor final depende enormemente de la temperatura ambiente y del sistema de disipación instalado.

Existen otros modelos dentro de la serie TEC1, como la 12710 con una potencia eléctrica de 100W por unos 3€, o la 12715 con una potencia eléctrica de 138W por unos 3.40€. Si embargo, tener en cuenta que el consumo de corriente de estos modelos es muy elevado y tendremos problemas para encenderlo con un relé normal de 10A.

arduino-placa-peltier-componente

Además, tendremos que sumar el sistema de disipación. Podemos usar un disipador barato de CPU de ordenador que podemos encontrar por unos 6€.

También podemos reciclar algún disipador antiguo, los disipadores tipo Pentium 4 encajan muy bien, y son fáciles de conseguir de segunda mano u ordenadores retirados.

arduino-placa-peltier-heatsink

¿Cómo funciona una placa Peltier?

El efecto Peltier es uno de los tres efectos termoeléctricos clásicos (SeedBeck, Peltier y Thomson).

El efecto Seebeck fue descubierto en 1821 por el físico alemán Thomas Johann Seebeck. Al establecer un circuito cerrado entre dos metales diferentes y aplicar una diferencia de temperaturas entre ambas uniones aparece una corriente eléctrica.

En 1832 el francés Jean Charles Athanase Peltier descubre el efecto contrario, es decir, en un circuito cerrado formado por dos metales diferentes, al hacer circular una corriente aparece una diferencia de temperatura entre ambas uniones.

El motivo en ambos fenómenos es la diferente concentración de electrones libres entre ambos metales que establecen dos barreras de potencial al paso de electrones, inversa en cada unión, lo que produce una emisión o absorción de calor.

Sin embargo, sus aplicaciones prácticas tuvieron que esperar ya que el efecto en metales es reducido. No fue hasta 1947 con la invención del transistor y el desarrollo de materiales semiconductores de alta pureza de dopado que se dispuso de materiales para aprovechar estos efectos.

Una placa Peltier está formada por múltiples celdas de materiales N y P ubicadas entre dos caras cerámicas. Habitualmente se emplea Telurio y Bismuto como semiconductores y óxido de aluminio para las placas cerámicas

arduino-placa-peltier-interior

Las distintas celdas están conectadas en serie, y las uniones dispuestas de forma que las uniones N-P están en contacto con una de las caras cerámicas de la placa Peltier y las uniones P-N con la otra cara.

Al hacer circular corriente por el dispositivo una de las caras absorbe calor y otra la emite. El papel de cada cara depende del sentido de la corriente. De hecho, es posible invertir el flujo de calor invirtiendo el sentido de la corriente.

Esquema de montaje

Las placas Peltier consumen una gran cantidad de corriente, por lo que para su encendido lo más sencillo es emplear un salida por relé.

arduino-placa-peltier-montaje

Conectamos la placa Peltier y el ventilador a 12V, interponiendo el relé como un interruptor.

Por otro lado, alimentamos la electrónica del relé conectando Vcc y GND respectivamente a 5V y GND de Arduino. Finalmente conectamos el pin IN a una de las salidas digitales de Arduino.

arduino-placa-peltier-conexion

Para montar los dispositivos podéis atornillarlos, si los disipadores tienen los agujeros empleados, o usar bridas plásticas formando un “sándwich” con la placa Peltier en medio.

Alternativamente, podemos usar un MOSFET adecuado, como vimos en la entrada Controlar grandes cargas con Arduino y transistor MOSFET

Ejemplo de códigode montaje

El código necesario es sencillo, ya que para a controlar nuestra placa Peltier únicamente necesitamos emplear una salida digital, tal y como vimos en la entrada salidas digitales.

Por ejemplo, el siguiente código simplemente encendería la placa 5 segundos, dejándola apagada 10 segundos.

const int pin = 9;

void setup() {
  pinMode(pin, OUTPUT);  //definir pin como salida
}
 
void loop(){
  digitalWrite(pin, HIGH);   // poner el Pin en HIGH
  delay(5000);               // esperar 5 segundos
  digitalWrite(pin, LOW);    // poner el Pin en LOW
  delay(10000);               // esperar 10 segundos
}

Lógicamente, esto no es muy interesante. Sin embargo, podemos combinarlo con uno de los múltiples sensores de temperatura que hemos visto (termistor, LM35, DS18B20, DHT11/DHT22) para encender la placa según la medición del sensor, manteniendo la temperatura constante.

Asumamos que tenemos una cierta función GetTemperature() que nos proporciona la medición del sensor. Deberemos sustituir esta función por el cálculo adecuado, en función del sensor que estemos empleando.

Ahora definimos una cierta histéresis mediante dos umbrales. Cuando la temperatura sobrepase el umbral superior provocará el encendido de la placa Peltier. Esta permanecerá encendida hasta que llegue a un umbral inferior, y finalmente se apagará al alcanzarlo.

Si definiéramos un único umbral para la activación y desactivación tendríamos múltiples encendidos y apagados, y el sensor sería muy sensible al ruido. Al final terminaríamos dañando el relé.

const int pin = 9;

const float thresholdLOW = 20.0;
const float thresholdHIGH= 30.0;

bool state = 0; //placa Peltier desacivada o desactivada

float GetTemperature()
{
  return 20.0;  //sustituir en función del sensor empleado
}

void setup() {
  pinMode(pin, OUTPUT);  //definir pin como salida
}
 
void loop(){
  float currentTemperature = GetTemperature();

  if(state == 0 && currentTemperature > thresholdHIGH)
  {
      state = 1;
      digitalWrite(pin, HIGH);   // encender la placa Peltier
  }
  if(state == 1 && currentTemperature > thresholdHIGH)
  {
      state == 0;
      digitalWrite(pin, LOW);   // apagar la placa Peltier
  }

   delay(5000);  // esperar 5 segundos entre medicioens
 }

Si te ha gustado esta entrada y quieres leer más sobre Arduino puedes consultar la sección tutoriales de Arduino

Alarma con Arduino y buzzer activo (zumbador)

$
0
0
arduino-buzzer-activo

¿Qué es un buzzer activo?

Los buzzer activos, en ocasiones denominados zumbadores, son dispositivos que generan un sonido de una frecuencia determinada y fija cuando son conectados a tensión.

Un buzzer activo incorpora un oscilador simple por lo que únicamente es necesario suministrar corriente al dispositivo para que emita sonido. En oposición, los buzzer pasivos necesitan recibir una onda de la frecuencia.

Al incorporar de forma interna la electrónica necesaria para hacer vibrar el altavoz un buzzer activo resulta muy sencillo de conectar y controlar. Además, no suponen carga para el procesador ya que no este no tiene que generar la onda eléctrica que se convertirá en sonido.

En contra posición, tienen la desventaja de que no podremos variar el tono del sonido emitido, por lo que no podremos realizar melodías, cosa que si podremos hacer con los buzzer pasivos.

Físicamente pueden ser muy parecidos, o incluso idénticos, a los buzzer pasivos, por lo que puede llegar a ser difícil determinar a simple vista si un buzzer es activo o pasivo.

Existen buzzer activos en un gran abanico de tamaños y potencias, desde tonos casi imperceptibles hasta alarmas realmente estridentes. El consumo eléctrico, lógicamente, también varia con la potencia del buzzer.

Podemos emplear los buzzer activos de menor potencia, por ejemplo, para dar avisos al usuario o proporcionar un feedback ante alguna acción, como pulsar un botón, para que el usuario compruebe que su acción ha sido recibida.

Por su parte, los buzzer de mayor potencia son adecuados para generar alarmas de forma sencilla, por ejemplo, combinados con un sensor de movimiento, un sensor de agua, o un sensor de llama, entre otros.

Precio

Existen una gran variedad de buzzer activos que podemos usar en nuestros proyectos de Arduino. Por ejemplo, podemos encontrar unas placas con un buzzer activo y la electrónica necesaria para hacerlo funcionar por 0.45€, en vendedores internacionales de eBay y AliExpress.

arduino-buzzer-activo-modulo

Respecto a los buzzer activos de mayor potencia, podemos encontrar de 90 a 110 dB por 2 a 3€.

arduino-buzzer-activo-componente

En este caso, necesitaremos una etapa de potencia para poder activar suministrar la potencia requerida por el buzzer.

Esquema de montaje

Si usamos una placa con la electrónica integrada el montaje es realmente sencillo, ya que el propio módulo incorpora los componentes necesarios para proporcionar la corriente necesaria al buzzer activo.

Por tanto, simplemente alimentamos el módulo conectando Vcc y GND a 5V y GND de Arduino, y finalmente

arduino-buzer-montaje

Si necesitamos conectar un buzzer activo de mayor potencia, deberemos emplear un transistor BJT, o MOSFET para amplificar la corriente, o emplear una salida por relé.

Por ejemplo, si usamos un módulo con un MOSFET IRF520N el montaje sería el siguiente.

arduino-buzzer-activo-mosfet-montaje

En ambos casos la conexión vista desde Arduino es la misma, ya que únicamente necesitamos usar una salida digital para encender el módulo.

arduino-buzzer-activo-conexion

Ejemplo de códigode montaje

El código necesario es sencillo, ya que para a controlar el buzzer únicamente necesitamos emplear una salida digital, tal y como vimos en la entrada salidas digitales.

Por ejemplo, el siguiente código simplemente encendería y apagaría el diodo láser 5 segundos, dejándolo descansar 20 segundos.

const int pin = 9;

void setup() {
  pinMode(pin, OUTPUT);  //definir pin como salida
}
 
void loop(){
  digitalWrite(pin, HIGH);   // poner el Pin en HIGH
  delay(5000);               // esperar 5 segundos
  digitalWrite(pin, LOW);    // poner el Pin en LOW
  delay(20000);               // esperar 20 segundos
}

En el siguiente ejemplo, queremos que el buzzer se active como alarma ante un determinado evento. Supongamos que tenemos una cierta función GetSystemState() que realiza las mediciones de sensores y cálculos necesarios para determinar si la alarma tiene que ser encendida.

Simplemente realizamos la llamada a la función, y encendemos la alarma si es necesario, manteniéndola encendida un mínimo de 5 segundos.

const int pin = 9;

bool isAlarmOn = 0;     //almacena el estado de la alarma

void setup() {
  pinMode(pin, OUTPUT);  //definir pin como salida
}

bool GetSystemState()
{
    return true;  //cambiar en función del sensor usado
}
 
void loop(){
  isAlarmOn = GetSystemState();

  if(isAlarmOn)
  {
     digitalWrite(pin, HIGH);    // poner el Pin en HIGH
     delay(5000);               // esperar 5 segundos
  }
  else
  {
     digitalWrite(pin, LOW);    // poner el Pin en LOW
  }
  delay(1000);
}

Si te ha gustado esta entrada y quieres leer más sobre Arduino puedes consultar la sección tutoriales de Arduino

Guía de selección motores y accionadores para Arduino

$
0
0
arduino-seleccion-motores

Cuando vayamos a empezar un proyecto de robótica, un vehículo, o cualquier otro dispositivo móvil, una de las primeras decisiones será elegir los tipos de accionadores que vamos a emplear.

Un accionador es el nombre genérico que empleamos para cualquier dispositivo capaz de realizar acciones en el mundo físico y que podremos controlar desde un autómata o procesador como Arduino. En particular, usamos el nombre accionador para los dispositivos que son capaces de generar movimiento.

Seleccionar el accionador correcto para nuestro proyecto es una tarea complicada ya que disponemos de un gran abanico de opciones (motores de corriente continua, servos, motores paso a paso, motores brushless..) cada uno de los cuales tiene sus ventajas y desventajas.

Explicar todos los accionadores en una única entrada sería demasiado larga, así que en esta entrada veremos los factores y criterios que condicionan la elección de uno u otro

En la entrada siguiente veremos las características y funcionamiento de los principales tipos de motores rotativos, y en la última entrada de la serie otros tipos de accionadores disponibles.

Factores para elegir un motor o accionador

En general, al seleccionar un accionador deberemos contemplar las características mecánicas y eléctricas, el control que vamos a poder disponer y, por supuesto, el precio.

Sin embargo, conviene tener claro que las características de un motor no son mejores o peores que las del otro. Por ejemplo, en principio tener una velocidad o par pequeño puede parecer algo malo, pero no tiene porqué ser necesariamente así.

Imaginar que estamos haciendo un proyecto para hacer girar un cartel publicitario. Seguramente hacerlo girar a 12000 rpm no conseguirá el efecto que buscamos. O imaginar que queremos un motor con un par bajo para que, si alguien accidentalmente introduce un dedo, el motor se pare sin causar daños.

Con robots y vehículos también ocurre lo mismo. Lo mismo nos da que las ruedas puedan girar a gran velocidad si en cuanto tocan el suelo se paran. O que tenga el robot tenga par suficiente para subir una pared, pero a cambio se mueva a velocidad de tortuga.

Una vez refrescado esto, pasamos por fin a desglosar cada uno de los factores.

Características mecánicas

Las características mecánicas incluyen la velocidad, la fuerza o par que puede ejerce, la precisión y la carga máxima que puede soportar.

Velocidad

La velocidad es la relación entre el desplazamiento que realiza accionador y el tiempo, es decir

Velocidad= \frac{Posicion}{Tiempo}


Las unidades para la velocidad en el sistema internacional son m/s, y en ocasiones km/h para vehículos, o cm/min en el caso de accionadores lentos.

En el caso de accionadores rotativos usaremos la velocidad angular, que es la relación entre el ángulo girado y el tiempo

Velocidad \:\: angular = \frac{Angulo\:\:girado}{Tiempo}


Las unidades del sistema internacional para la velocidad angular son radianes / s, siendo frecuentes grados (º) / s, revoluciones por min (rpm), o vueltas por segundo (rev / s)

Fuerza / Par

La fuerza ejercida por un accionador aplicada a una cierta masa se emplea en acelerar a la misma, es decir, en modificar su velocidad. Un accionador con una determinada fuerza será capaz de acelerar rápidamente masas pequeñas, y lentamente masas grandes.

La expresión de la fuerza es,

Fuerza = Masa \cdot Aceleracion

Siendo,

Aceleracion = \frac{Velocidad}{Tiempo}


Las unidades para la fuerza en el sistema internacional son los Newton (N), siendo habitual en el ámbito técnico referirse a kilogramos-fuerza (Kgf), que es la fuerza ejercida sobre un Kg de masa por el campo gravitatorio terrestre (aceleración de 9.81 m/s2).
En muchas ocasiones se emplea Kg para referirse a la fuerza, incluso en hojas de especificaciones técnicas. Técnicamente incorrecto, porque Kg es una unidad de masa, es tan frecuente que os aconsejamos no perder la paciencia cuando lo veáis. En cualquier caso, cuesta poco ser técnicamente correcto simplemente usando Kgf.

Sin embargo, en el mundo real existen fuerzas de rozamiento, por lo que a efectos prácticos un accionador no podrá mover cualquier masa. Por encima de la fuerza disponible simplemente la carga no se moverá en absoluto e incluso podemos dañar el accionador.

En el caso de accionadores rotativos el equivalente de la fuerza es el par (en algunos sitios llamado torque)

La expresión para el par es la siguiente,

Par = Inercia \:\: rotacional \cdot Aceleracion \:\: angular


Las unidades para el Par N·m (Newton Metro) en el sistema internacional, aunque frecuentemente encontraremos Kgf·cm. 1 Kgf·cm equivale a 0.098N·m, y equivalentemente 1 N·m equivale a 10.2 Kgf·cm

Donde la aceleración angular es la variación por unidad de tiempo de la velocidad angular, y la inercia rotacional es un parámetro característico de la carga que vamos a girar que viene dada por la distribución geométrica de su masa.

Alternativamente, el par puede ser reescrito de la siguiente forma,

Par = Fuerza \cdot Distancia

Por ejemplo, un motor con un par máximo de 10 Kgf·cm al que acoplamos una polea con un radio de 1cm será capaz de levantar en vertical una masa de 10Kg, mientras que si el radio de la polea es de 2cm únicamente podrá levantar 5Kg.

Potencia mecánica

La potencia mecánica es la cantidad de energía por unidad de tiempo que el accionador es capaz de entregar a la carga.

La potencia mecánica viene dada por la siguiente expresión,

P_{mecanica} = Fuerza \cdot Velocidad

Mientras que en el caso de accionadores rotativos,

P_{mecanica} = Par \cdot Velocidad\:\:angular

Carga máxima

La carga máxima es el peso o esfuerzos que puede soportar el accionador sin romperse, que no es lo mismo que la carga máxima que puede mover.

Considerar un vehículo con ruedas, el eje podrá soportar, por ejemplo, 50Kg, pero no significa que el motor tenga que hacer una fuerza de 50 Kg, ya que la carga por rodadura es mucho menor.

Precisión

No todos los accionadores tienen la misma precisión en los movimientos. Independientemente de la calidad y control que empleemos, ciertos accionadores son más propicios a mayores niveles de precisión.

Por ejemplo, con un motor paso a paso obtener fácilmente precisiones de décimas de grados, algo que será mucho más difícil de obtener con un motor de corriente continua.

Características eléctricas

Las características eléctricas incluyen la potencia, la tensión y la corriente nominal. Esto condicionará el tamaño de los componentes, la sección de los conductores y la capacidad de las baterías.

Tensión nominal

Es la tensión a la que debemos alimentar el motor para un funcionamiento correcto, medida en Voltios. Frecuentemente también es la tensión máxima a la que podemos alimentar el dispositivo sin dañarlo.

En ocasiones la tensión nominal es un rango, en lugar de un único valor. El punto de trabajo variará en función de la tensión que apliquemos.

Valores frecuentes para motores y accionadores son 6V, 12V, y 24V.

Corriente nominal

Es la intensidad de corriente que debemos suministrar al motor para un funcionamiento correcto, medida en Amperios. De forma similar, frecuentemente la corriente nominal coincide con la corriente máxima a la que podemos alimentar el dispositivo sin dañarlo.

Algunos accionadores tienen una intensidad nominal inferior a la que circularía por la ley de Ohm según su tensión nominal y su resistencia. Por este motivo el controlador debe disponer de un dispositivo limitador de corriente.

Existen motores en un gran rango de intensidades nominales, desde unos pocos mA, hasta varias decenas en el caso de grandes motores.

Potencia eléctrica

La potencia eléctrica es la energía por unidad de tiempo absorbida por el accionador de la fuente de alimentación, medida en Watios (W), tiene la siguiente expresión,

P_{electrica} = V \cdot I

A la vez, la potencia mecánica está relacionada con la potencia eléctrica según,

 P_{mecanica} = \mu \cdot P_{electrica}

Donde μ es el rendimiento global del accionamiento, que engloba las pérdidas mecánicas por rozamiento, y las pérdidas eléctricas por perdidas en el cobre por efecto Joule, pérdidas por corrientes inducidas, pérdidas por histéresis magnéticas, y perdidas por dispersión de flujo magnético.

Por otro lado, la carga eléctrica consumida por el motor es

 Carga = P_{electrica} \cdot Tiempo

La unidad para la energía son los Julios (J), siendo unidades frecuentes Amperio-hora (Ah) y micro Amperio-hora (mAh).

Esta carga eléctrica es especialmente relevante al abastecer el accionador desde baterías, para determinar el tiempo de funcionamiento con una carga.

Otros factores

Existen otros factores a considerar a la hora de seleccionar un accionador para nuestro proyecto. No entraremos en detalles porque son bastante evidentes, pero merece al menos que los mencionemos brevemente.

  • Forma y dimensiones.
  • Fijaciones y soportes tanto del accionador al robot, como de la carga al accionador (por ejemplo, diámetro del eje de un rotor).
  • Peso tanto del propio accionador como de los componentes adicionales que requiere para operarlo (baterías, controladores).
  • Grado de protección (IP) que incluye la resistencia al agua, y la resistencia al polvo, y condiciona si el accionador puede ser usado en ambiente exteriores.
  • Rango de temperatura que debemos respetar si no queremos dañar el accionador
  • Vida útil entendido como el tiempo promedio que podemos esperar que funcione el accionador.

Características de control

Además de los criterios mecánicos y eléctricos, un factor que condiciona enormemente la elección del accionador (y frecuentemente es el más olvidado) es el control que vamos a disponer. De forma general, en un robot o vehículo tenemos interés en tres tipos de control:

  • Control de velocidad, saber a qué velocidad está avanzando el vehículo.
  • Control de posición, saber en qué punto está nuestro vehículo.
  • Control de orientación, saber la dirección a la que apunta el vehículo.

En principio, olvidaros de tener un control total sobre ninguna de estas variables. El mundo real no es perfecto, las ruedas patinan, los motores tienen respuestas no lineales, las cargas no están balanceadas, los componentes no son idénticos y perfectos, los sensores tienen deriva… Todos estos defectos hacen que, en general, no podamos tener una precisión total y absoluta.

El control de la velocidad es, en general, la más sencilla de medir o al menos estimar. En muchos accionadores actuamos directamente sobre su velocidad. Por otro lado, si sabemos la posición del accionador, podemos obtener su velocidad simplemente derivando (dividiendo) respecto al tiempo, y calcular su velocidad media.

La posición del vehículo es la más difícil de saber. Algunos accionadores permiten un buen control de posición, pero esto no garantiza saber la posición real del robot. En general, habrá que instalar sensores adicionales, como fotointerruptores o interruptores de fin de carrera, que nos permiten posicionar de forma absoluta el accionador.

Tenemos otro tipo de sensores que nos ayudan a determinar la posición de un robot, como los sensores de distancia por ultra sonidos o infrarrojos. El GPS nos permite obtener la posición real, pero tiene precisión de 0.5 metros, lo cual es demasiado alto para la mayoría de vehículos. Otras opciones incluyen sistemas de visión, o triangulación de balizas de radiofrecuencia.

Por otro lado, olvidaros de obtener la posición del vehículo por la integración de la velocidad (multiplicar velocidad x tiempo). Los errores en la medición de la velocidad se acumulan, y al final siempre tendréis una deriva en la posición. Usarlo sólo como última alternativa, o como interpolación entre posiciones dadas por sensores.

Por último, la orientación del robot es casi imposible de saber a través del control de los accionadores, por los mismos que la posición. Afortunadamente, en la mayoría de los casos podremos usar brújulas magnéticas y giroscopios para determinar con un alto grado de precisión la orientación del vehículo.

¿Sorprendido de no poder tener un control total de posición, velocidad y orientación de un robot? Aún te sorprenderá más que la mejor solución es no aspirar a un control total. En la naturaleza, los humanos y otros animales no necesitan una precisión total, simplemente les basta con una aproximación y responder a estímulos del entorno. Tu robot debería estar diseñado con la misma filosofía.

Añadir un encoder

La solución más extendida para mejorar el control de nuestros accionadores es añadir un encoder. Un encoder es un dispositivo que permite registrar la posición del accionador, lo que significa disponer de un control total de posición y velocidad.

arduino-tipos-encoder

Los encoder más frecuentes son ópticos o magnéticos. En los encoder ópticos se acopla un disco ranurado o transparente con zonas opacas al eje. Un fotointerruptor detecta el corte de un haz de luz al paso del disco. En los sensores magnéticos se acopla uno o varios imanes al accionador, y se emplea un sensor hall para detectar el paso del imán por el sensor.

Los encoder son componentes frecuentes, y casi inevitables, en los proyectos de electrónica y robótica tanto en el ámbito casero como industrial.

En ambos tipos de sensores, en los intervalos en los que no detectamos estamos “ciegos”, por lo que cuanto más fino sea el paso (ranuras más finas, o más imanes) tendremos mejor precisión.

Sin embargo, aunque mejorar enormemente la capacidad de control no nos hacen inmune ante, por ejemplo, el deslizamiento de las ruedas. Recordar, saber cuánto ha girado un motor no significa saber la posición del vehículo.

Conclusión

Todos estos factores están relacionados y el diseño debe ser abordado de forma global. Por ejemplo, aumentar el tamaño de un robot supone un mayor peso, lo que requiere motores y componentes más grandes, que requieren un mayor consumo, que supone mayores baterías, que a su vez implican un incremento de peso.

Es decir, a medida que aumentamos la potencia de un robot o vehículo todos los componentes tienen que crecer en consonancia y el precio se dispara rápidamente.

Seleccionar el motor o accionador que mejor se adecue a las condiciones particulares de nuestro diseño y, por supuesto, manteniendo el precio lo más bajo posible, no es una tarea sencilla y no hay una única solución posible.

Para ello lo necesario conocer las características, funcionamiento, ventajas y desventajas de cada tipo de accionador. Por este motivo en la próxima entrada veremos los distintos tipos de los motores rotativos, y en la siguiente otros tipos de accionadores, para conseguir seleccionar el accionador idóneo para nuestros proyectos de Arduino.

Si te ha gustado esta entrada y quieres leer más sobre Arduino puedes consultar la sección tutoriales de Arduino

Tipos de motores rotativos para proyectos de Arduino

$
0
0
arduino-tipos-de-motores

En la entrada anterior vimos los criterios a tener en cuenta para elegir un accionamiento o motor para usar en nuestros proyectos de Arduino.

Continuando con la guía de selección, en esta entrada vamos a analizar los principales motores giratorios que tenemos disponibles, con su funcionamiento, características, ventajas y desventajas.

La explicación del funcionamiento de cada tipo de motor será cuantitativa y sin ecuaciones, ya que cada entrar en detalles de cada uno de ellos daría para un capítulo de un libro de electrónica. El objetivo es exponer de forma sencilla cómo funcionan y sus ventajas y desventajas.

En la próxima entrada finalizaremos la guía de selección, y veremos los otros tipos de accionamientos no rotativos que podemos incorporar en nuestros montajes.

Motores de corriente continua

Los motores de corriente continua (motores DC) son unos de los accionadores más comunes. Su funcionamiento se basa en el alineamiento de dos campos magnéticos.

El estator, la parte fija del motor, dispone de un imán permanente que genera un campo magnético en el interior del motor.

arduino-motores-corriente-continua-funcionamiento

En su interior introducimos una espira y hacemos circular una corriente eléctrica, con lo que se genera un campo magnético. El desfase angular entre ambos campos magnéticos genera un par de giro, que hace que el rotor gire hasta que los dos campos magnéticos se alineen.

Cuando ambos campos magnéticos estuvieran alineados el motor se pararía. Para que el motor gire continuamente vamos a invertir uno de los campos magnéticos, para lo cuál necesitamos invertir el sentido de la corriente que atraviesa la espira.

Para ello los motores DC los contactos que alimentan la espira están constituidos por un anillo partido que desliza sobre unos contactos eléctricos que rozan contra el mismo, transmitiendo la electricidad. Al anillo divido unido al eje se le denomina colector de delgas, mientras que a los contactos deslizantes se les denomina escobillas.

Al pasar un cierto ángulo las escobillas pasaran de una delga a la siguiente. Esto provoca la inversión de la corriente en la espira. De esta forma el conjunto escobillas – colector de delgas actúa como un inversor mecánico y permite al motor girar de forma continua.

La ventaja de este sistema es que la sincronización es siempre perfecta independientemente de la velocidad y par ejercidos, ya que es el propio ángulo de giro del motor el que marca la inversión de la corriente. El lado negativo es que el rozamiento supone una pérdida de eficiencia y reducen la vida útil del motor.

Existen otras disposiciones de motores de corriente continua. En ocasiones el campo magnético del estator está generado por una bobina en lugar de un imán permanente. En otras ocasiones, las posiciones de los elementos se intercambian entre rotor y estator. También es posible que el estator sea el eje del motor, y el rotor es la carcasa del mismo.

En cualquiera de estas variaciones el funcionamiento del motor es el mismo, disponer de dos campos magnéticos desalineados de forma que giren para alinearse, y usar un sistema de colector de delgas y escobillas para invertir el campo magnético de uno de ellos cuando se alinean.

En un motor real, por supuesto, no se dispone de una única espira, si no de bobinas formadas por múltiples espiras. Además, frecuentemente se dispone de más de una bobina, lo que aumenta la potencia del motor sin incrementar su tamaño.

arduino-motores-corriente-continua-interior

Por otro lado, las bobinas se arrollan sobre núcleos ferromagnéticos, llamados armaduras, lo que aumenta la potencia del motor y disminuye las pérdidas por dispersión magnética. Las armaduras están compuestas por plaquitas aisladas entre si para reducir las pérdidas por corrientes de Foucault inducidas.

Los motores de corriente continua se encuentran disponibles en distintas tensiones nominales, siendo habituales 6V, 12V y 24V. En cuanto a potencia, encontramos motores de todo tipo de tamaños, desde apenas unos milímetros de largo hasta

arduino-motores-corriente-continua

Los motores tienen altas velocidades de giro y bajo bajo par. Podemos emplear las salidas PWM de Arduino para controlar la velocidad, pero esto mantendrá el par máximo disponible. Otra opción es emplear un reductor externo o intergado (ver a continuación “motores geared down”) que reduce la velocidad a la vez que aumenta el par y la precisión.

Para controlar un motor de corriente continua necesitaremos una etapa de amplificación, como un transitor BJT, oun transitor MOSFET. Si además queremos poder invertir el sentido de giro necesitaremos un controlador con puente-H. Aunque lo más conveniente es emplear un controlador como el L298N, que maneje las altas corrientes necesarias e incorporar protecciones contra voltajes inducidos.

Los motores DC tienen mal control de posición y mal control de la velocidad. Su comportamiento es fuertemente no lineal y depende mucho de la carga que soportan. Por este motivo suelen emplearse con un encoder que permite saber la posición del eje. Incluso algunos modelos de motores DC integran un encoder internamente.

Motores geared down motor

Un motor geared down es un motor de corriente continua que incorpora un reductor interno. Esto aumenta el par del motor y reduce su velocidad. Velocidades de giro habituales son 60, 120, 240 y 480 rpm, entre otras.

arduino-motores-geared-interior

Es frecuente que strong>algunos motores geared down incorporan un encoder interno. Este encoder suele estar aplicado en el lado de alta velocidad, por lo que la precisión es superior a añadir una encoder acoplado al eje.

Los motores geared down son frecuentes para accionar ruedas de robots y vehículos.

arduino-motores-geared

Motores brushless

Los motores brushless (sin escobillas) son otra variación de los motores de corriente continua que prescinde de las escobillas como sistema de rectificación de la corriente. En su lugar recurren a la electrónica para realizar la conmutación del campo magnético.

arduino-motores-brushless-funcionamiento

Al no disponer de escobillas los motores brushless tienen mayores velocidades, menor peso, y mayor durabilidad que los motores DC tradicionales.

arduino-motores-paso-a-paso-interior

Algunos motores brushless pequeños incorporan la electrónica necesaria para su funcionamiento de forma interna. Sin embargo, los motores más grandes necesitan de un controlador externo, llamado ESC (Electronic Speed Controller). Algunos ESC disponen además de una función BEC (Battery Elimination Circuit) que consiste en una salida de tensión regulada a 5V, normalmente de 1-3A, para alimentar otra electrónica.

arduino-motores-esc

Los motores brushless son ampliamente empleados en quadricopteros, y otros vehículos aéreos. También son empleados en hélices de barcos, ventiladores y, en general, en aplicaciones que requieren alta velocidad de giro.

arduino-motores-brushless

Servo motores

Los servos son otro accionador muy común en proyectos de robótica. Un servo recibe una señal pulsada generada por un procesador, que transmite la posición que deseamos y el servo autónomamente se posiciona en esa posición.

arduino-motores-servos

Un servo no puede dar una vuelta completa, siendo su rango habitual de 180º. A cambio, proporcionan un control total en posición y giro y de una alta precisión, y son muy sencillos de usar.

Internamente un servo está constituido por un motor DC acoplado a un reductor, junto con un controlador que se encarga de posicionar el eje en el ángulo indicado. Al estar acoplados a un reductor la velocidad de un servo es relativamente baja y proporcionan un alto par.

arduino-servo-interior

Los servos son ampliamente utilizados en proyectos de robótica, como brazos robóticos, hexápodos, o robots bípedos. También pueden usarse en torretas, o para posicionar un sensor, o un láser, por ejemplo.

Servo motores de rotación continua

Un servo de rotación continua es una variante de un servo convencional, en el que la electrónica se modifica para que la señal controle la velocidad en lugar de la posición.

arduino-motores-servo-rotacion-continua

Como su nombre indica, los servos de rotación continua son capaces de dar la vuelta completa, comportándose de forma similar a un motor DC, con control de velocidad integrado. A cambio perdemos el control de posición, por lo que si queremos controlarla deberemos añadir un encoder.

Sin embargo, los servos de rotación continua no ofrecen un control preciso sobre la velocidad de giro ya que, en general, no presentan una respuesta lineal respecto a la señal recibida. Para tener un buen control tendremos que calibrar el servo y ajustar la señal enviada, o nuevamente añadir un encoder.

Motores paso a paso

Los motores paso a paso (también llamados stepper) son otro tipo de motor muy empleado en robótica. En este tipo de motores el eje gira un ángulo fijo llamado “paso” cuando es indicado por un procesador. El paso varía del modelo de motor, siendo valores habituales 1.8º (200 pasos por vuelta) y 3.75º (96 pasos por vuelta)

arduino-motores-paso-paso

A rasgos generales, un motor paso a paso está formado por un estator con dos bobinas desfasadas a 90º y un rotor formado por un imán permanente instalado solidariamente al eje.

Aplicando una secuencia de encendido adecuada a las bobinas podemos hacer que el imán se oriente progresivamente, hasta dar un giro completo. Si la secuencia es incorrecta el motor no se moverá.

arduino-motores-paso-a-paso-secuencia

Por este motivo, un motor paso a paso necesita obligatoriamente un procesador para funcionar no siendo posible activarlos simplemente conectándolos a corriente.

En el mundo real, un motor que sólo es capaz a pasos de 90º no sería muy útil. Para conseguir un paso inferior podríamos pensar en añadir múltiples bobinas, pero añadiríamos peso sin incrementar la potencia.

Para conseguir el efecto de tener “múltiples bobinas” se emplea la variación de la reluctancia magnética. Se dispone de una rueda dentada acoplada al eje, con un número de dientes tal que el siguiente diente esté desfasado respecto a las restantes bobinas.

arduino-paso-paso-funcionamiento

Al activar una bobina, la rueda dentada es atraída por el campo magnético generado de forma que el rotor gira para minimizar la distancia del circuito magnético.

En la imagen superior puede parecer que hay “8 bobinas” pero en realidad solo hay 2 bobinas A y B, cada una con 4 polos. Al activar una bobina todos los polos funcionan de forma conjunta.

Existen motores unipolares o bipolares. La diferencia es que los motores bipolares tienen ambas bobinas divididas en dos, para lo cual disponen de un terminal adicional en cada fase.

arduino-motores-unipolar-bipolar

Los motores unipolares tienen cuatro conductores, y los bipolares cinco o seis (dependiendo si el terminal intermedio es común para ambas bobinas).

Los motores bipolares pueden ser más sencillos de operar, dado que si empleamos sólo media bobina podemos evitarnos tener que invertir el sentido de circulación de la bobina. Por el contrario, si operamos en modo bipolar tendremos menos potencia, dado que sólo estamos empleando media bobina para hacer funcionar el motor.

Con la electrónica actual y los controladores existentes invertir el sentido de la corriente no es ninguna dificultad, por lo que en general preferiremos motores unipolares. Sin embargo, todo motor bipolar puede ser operado como unipolar, simplemente dejando sin conectar el terminar intermedio.

arduino-paso-a-paso-interior

Los motores paso a paso tienen un control de posición y velocidad total. La precisión depende del paso del motor y del modo de control empleado. Así, podemos controlar el motor paso a paso con activación en cuatro etapas, o en ocho. Al activar en ocho etapas conseguiremos la mitad del paso nominal.

Por otro lado, algunos controladores disponen de microstepping, una técnica que consiste en variar la intensidad que se suministra a cada una de las bobinas. De esta forma se consiguen precisiones de paso de 1/16 a 1/32 el paso nominal del motor.

El par máximo generado por un motor paso a paso es intermedio siendo, en general, superior al de un motor DC y brushless, pero inferior a un motor DC con reductor o un servo.

La velocidad máxima también es intermedia, aunque resulta difícil determinar porque depende de los parámetros internos del motor y de las condiciones de trabajo. A modo de ejemplo, la velocidad máxima típica de un motor NEMA 17 está en torno a 600 rpm, pudiendo llegar hasta 4800 rpm en algunos modelos.

Antiguamente podíamos reciclar motores paso a paso de máquinas como escáneres e impresoras, pero progresivamente han sido sustituidos por motores DC.

Los motores paso a paso son ampliamente utilizados en proyectos de electrónica, como impresoras 3d, y máquinas de CNC. También resultan adecuados para vehículos pesados, o que requieran una gran sincronización entre ruedas, como vehículos con omni wheels o mecanum wheels.

Motor paso a paso BYJ48

El motor BYJ48 y es un motor paso a paso de pequeño tamaño y bajo precio. Eléctricamente es un motor de baja potencia, alimentado a 5V, y un paso de 5.624 (64 pasos). Pero tiene la peculiaridad de incorporar un reductor interno de 1/64.

arduino-motores-BYJ48

Esto significa que la precisión global es de menos de 0,087º (4096 pasos) y un par de 0,3kg/cm. Puede operar a una frecuencia máxima de 100Hz, por lo que la velocidad máxima es de 1 vuelta cada 40 segundos.

Que su pequeño precio y modestas características no os hagan descartar este motor. Su elevada precisión y bajo precio hace que sea interesante para aplicaciones de precisión, como girar la plataforma un escanear 3D, o direccionar un sensor o un láser.

Incluso puede ser un sustituto viable de servos en algunos robots articulados que requieran alta precisión y baja velocidad, como por ejemplo robots articulados que dibujan.

Tabla de resumen

La información anterior se resume en la siguiente tabla. Por supuesto, dependerán del modelo particular de cada motor elegido, pero a grandes rasgos y a modo de resumen,

Características Control (*)
Velocidad Fuerza/Par Posición Velocidad
Motor DC ▲Alto ▼Bajo ▼Malo ▼Malo
Motor DC Geared Down – Medio ▲Alto ▼Malo ▼Malo
Motor brushless ▲▲Muy alto ▼Bajo ▼Malo – Medio
Servo ▼Bajo ▲Alto ▲▲Absoluto ▲▲Absoluto
Servo rotación continua ▼Bajo ▲Alto ▼Malo – Medio
Motor paso a paso – Medio – Medio ▲▲Absoluto ▲▲Absoluto
Motor paso a paso BYJ48 ▼▼Muy bajo Bajo ▲▲Absoluto ▲▲Absoluto

(*) Con encoder todos pasan a control absoluto de posición y velocidad

Conclusiones

Los motores DC son una opción ganadora para vehículos con ruedas o cadenas. Para tener un control adecuado de velocidad necesitaremos añadir encoders.

Una alternativa es usar servos de corriente continua, que proporcionan un control sencillo de velocidad. También resulta una opción apropiada para robots con más de dos motores, como los robots con omniwheels o mecanum wheel.

Los servos convencionales son la opción destacada para robots con articulaciones como brazos robóticos, hexápodos, y bípedos.

Los motores brushless resulta más adecuados para proyectos que requieran altas velocidades con poco peso, como quadricpteros y otros vehículos aéreos o maritimos.

Por último, los motores paso a paso resultan adecuados para aplicaciones con alta precisión en velocidad y posición, como impresoras 3d, máquinas CNC, y vehículos avanzados.

Si te ha gustado esta entrada y quieres leer más sobre Arduino puedes consultar la sección tutoriales de Arduino

Tipos de accionadores lineales para proyectos de Arduino

$
0
0

arduino-accionadores

En las dos entradas anteriores hemos visto los criterios a tener en cuenta para elegir un accionamiento o motor para usar en nuestros proyectos de Arduino, y los principales tipos de motores rotativos que que tenemos disponibles, con sus ventajas y desventajas.

Finalizando con con la guía de selección viendo los principales tipos de accionamientos lineales disponibles, con su funcionamiento, características, ventajas y desventajas.

La explicación del funcionamiento de cada tipo de accionamiento será cuantitativa y sin ecuaciones, ya que cada entrar en detalles de cada uno de ellos daría para un capítulo de un libro de electrónica. El objetivo es exponer de forma sencilla cómo funcionan y sus ventajas y desventajas.

Electroimanes

Un electroimán es un dispositivo que permite atraer objetos ferromagnéticos, como el Fe y algunas de sus aleaciones.

Un electroimán está formado por una bobina arrollada en torno a un núcleo ferromagnético. Al aplicar una corriente a la bobina se genera un campo magnético en su interior, que genera una fuerza de atracción o repulsión sobre otros materiales.

arduino-electro-iman

El núcleo ferromagnético del electroimán aumenta la potencia del campo magnético, y reduce las pérdidas por dispersión.

Podemos usar un electroimán en nuestros proyectos para crear una pequeña grúa, o instalado en un brazo robótico para levantar objetos, o incluso para fijar un robot a una plancha metálica.

Accionadores magnéticos

Los accionadores magnéticos son similares a un electroimán, pero en el que el núcleo magnético es móvil. En el extremo frecuentemente se dispone de una pieza de plástico, por ejemplo, con una pequeña pinza.

arduino-accionador-magnetico

Al hacer circular la corriente, el núcleo es atraído al interior del electroimán. Se dispone de un muelle que devuelve el pasador interno a su posición original cuando cesa la corriente.

Este tipo de accionadores magnéticos son muy usados. Son muy rápidos, pero tienen la desventaja de tener un recorrido pequeño.

Accionadores lineales

Los accionadores lineales están formados por un motor de corriente continua y un vástago accionado por un torillo sin fin, en el interior de un integrado compacto.

arduino-accionador-lineal

Este tipo de accionadores están disponibles en una gran variedad de longitudes, algunas de ellas muy largas. Son capaces de ejercer grandes fuerzas. El inconveniente es que son dispositivos bastante lentos.

Este tipo de accionadores lineales son capaces de mover grandes cargas, y son empleados, por ejemplo, para mecanizar toldos, elevar cargas.

Motores con tornillo sin fin y corredera

Similares a los anteriores, estos accionadores también están formados por un motor de corriente continua que acciona un corriente sin fin. Pero en este caso, se dispone de un elemento intermedio que se desplaza a lo largo del recorrido.

arduino-motores-sinfin-corredera

La corredera está registrada para que no gire con el tornillo. Este registro puede ser mediante una o varias guías, o un registro lateral a uno o a ambos lados.

En este caso, podemos encontrar un motor DC o un motor de paso a paso.

Motores lineales

Los motores lineales funcionan de forma similar a un motor paso a paso, pero en lugar de hacer girar un rotor se desplaza una corredera de forma lineal.

arduino-motor-lineal

Están constituidos uno o varios railes, a lo largo del cual se disponen imanes de polaridades alternas. En función de la tipología del motor, sobre, entre, o alrededor del rail se dispone de una corredera con bobinas controladas electrónicamente.

Al hacer variar la polaridad del campo magnético generado en las bobinas instaladas de la corredera.

Los motores lineales disponen de una alta velocidad, alto par, y alta precisión en los desplazamientos. Son empleados, por ejemplo, como sustitutos de las correderas de sin fin en máquinas de CNC industriales. También podéis encontrarlos en trenes de levitación magnética, e incluso en armamento avanzado como los railgun.

Sin embargo, los motores lineales tienen un precio prohibitivo para los proyectos domésticos. (Si tenéis alguna vez tenéis acceso a uno de estos podéis prestármelo, tengo ganas de jugar con uno :D)

Hidráulica y neumática

Por supuesto, no podíamos hablar sobre accionadores sin hablar de dispositivos hidráulicos o neumáticos.

En estos sistemas un fluido (aceito o agua en hidráulicos, aire en neumáticos) se impulsa a lo largo de una serie de tubos y accionadores. El control se consigue actuando sobre las válvulas electrónicas ubicadas a lo

arduino-hidraulica-neumatica

Los sistemas hidráulicos son capaces de ejercer grandes fuerzas con gran precisión. Son ampliamente utilizados, desde excavadoras, prensas, y todo tipo de automatizaciones.

Los sistemas hidráulicos disponen de menor precisión y fuerza, ya que trabajan con gas y este es un fluido comprensible. Sin embargo, son más rápidos que los neumáticos. También son ampliamente utilizados en la industria, para accionar herramientas, expulsar piezas, o realizar movimientos.

Sin embargo, los sistemas hidráulicos y neumáticos requieren, en general, el uso de equipamientos caros y voluminosos, por lo que están fuera del alcance de la mayoría de proyectos caseros. En serio, no intentéis usar estos sistemas si no tenéis muy claro lo que estáis haciendo.

Tabla de resumen

La información anterior se resume en la siguiente tabla. Por supuesto, dependerán del modelo particular de cada motor elegido, pero a grandes rasgos y a modo de resumen,

Características Control (*)
Velocidad Fuerza/Par Posición Velocidad
Electroimán ▲Alto
Accionador magnético ▲Alto – Medio Nulo Nulo
Accionador lineal (1) ▼Bajo ▲Alto ▼Malo ▼Malo
Accionador lineal (2) ▼Bajo ▲Alto ▲▲Absoluto ▲▲Absoluto
Motor con tornillo sin fin y corredera (1) ▼Bajo ▲Alto ▼Malo ▼Malo
Motor con tornillo sin fin y corredera (2) ▼Bajo ▲Alto ▲▲Absoluto ▲▲Absoluto

(*) Con encoder todos pasan a control absoluto de posición y velocidad
(1) Accionados por motor DC
(2) Accionados por motor paso a paso

Conclusiones

La mayoría de las dispositivos inventados por la humanidad para generar movimiento son máquinas rotativas. Para generar un movimiento lineal lo más frecuente es emplear un motor rotativo acompañado de algún mecanismo que convierta el movimiento en lineal.

El electroimán es una máquina sencilla que podemos emplear para atraer objetos ferromagnéticos, y levantar cargas. Pueden ejercer grandes fuerzas, pero actuan a pequeñas distancias. Además, no tenemos ningún tipo de control de velocidad ni posición.

Los accionadores electromagnéticos usan un electroimán para atraer un pequeño accionador. Son muy rápidos, pero la distancia de acción es muy pequeña y la fuerza que pueden ejercer suele es pequeña.

Lo accionadores lineales permiten desplazar ejercer grandes cargas y pueden llegar a tener recorridos bastante largos. A cambio, son mecanismos lentos. Pueden ser combinados con otro tipo de mecanismos (palancas, tijeras, rótulas, etc) para ampliar su rango de acción y velocidad, pero disminuyendo la fuerza ejercida. Pueden ser empleados, por ejemplo, para retraer un toldo, elevar plataformas, abrir una puerta, por ejemplo.

Otro dispositivo habitual es un motor con tornillo sin fin y corredera. En general tienen baja velocidad, alta precisión y alto par, aunque depende en gran medida de si emplea un motor DC o un motor paso a paso. Son muy frecuentes en aplicaciones lineales que requieren alta precisión, como máquinas CNC o impresoras 3D..

Finalmente, los motores motores son raros y extremadamente caros. Por su parte, las soluciones hidráulicas y neumáticas sólo están recomendaras para profesionales e instaladores con experiencia ,ya que requieren de un gran número de elementos y medidas de seguridad.

Si te ha gustado esta entrada y quieres leer más sobre Arduino puedes consultar la sección tutoriales de Arduino

Controlar un servo de rotación continua con Arduino

$
0
0
arduino-servo-rotacion-continua

¿Qué es un servo de rotación continua?

Un servo de rotación continua es una variante de los servos normales, en los que la señal que enviamos al servo controla la velocidad de giro, en lugar de la posición angular como ocurre en los servos convencionales.

Otra diferencia con los servos convencionales, que tienen un rango limitado de movimiento de 0 a 180º, es que un servo de rotación continua puede girar 360 grados en ambos sentidos de forma continua.

Las características y el control de un servo de rotación continua son similares a los de un servo convencional De hecho es posible modificar un servo para convertirlo en rotación continua simplemente eliminado los topes internos y sustituyendo el potenciómetro interno por dos resistencias iguales. No obstante, el rendimiento será inferior a un servo de rotación continua comercial.

Muchos modelos de servo de rotación continua incluyen un potenciómetro de calibración que permite ajustar con precisión el punto neutro, es decir, el punto en el que el servo no gira en ninguno de los sentidos (siendo otra ventaja de usar un motor comercial en lugar de un servo convencional modificado).

Los servos de rotación continua, al igual que los servos convencionales, admiten tensiones de alimentación de entre 4,8V a 7,2V. También al igual que sus hermanos incorporan un reductor interno por lo que, en general, proporcionan un alto par y baja velocidad máxima, en torno a 1-2 rpm.

El control de un servo de rotación continua es idéntico al de un servo convencional, sólo varía el significado de la señal de control, que en lugar de transformarse en ángulo de posición se interpreta como velocidad angular, en ambos sentidos de giro.

arduino-servo-rotacion-continua-funcionamiento

Los servos de rotación continua son una forma sencilla de conseguir un motor con control de velocidad, sin tener que añadir dispositivos adicionales como controladores o encoders como ocurre en el caso en el caso de motores DC o paso a paso, ya que el control está integrado en el propio servo.

La principal desventaja de los servos de rotación continua es que sacrificamos el control de posición. Si queremos con precisión el ángulo girado tendremos que añadir un encoder.

Lamentablemente, pese a lo que podríamos pensar, tampoco disponemos de un control preciso de la velocidad de giro dado que la respuesta del sistema es fuertemente no lineal respecto a la entrada del servo. Si queremos un control de velocidad preciso deberemos calibrar el motor y corregir la señal enviada al servo, o nuevamente recurrir a añadir encoders.

arduino-servo-rotacion-continua-control

Los servos de rotación continua son una opción sencilla para construir robots de tamaño pequeño o mediano, especialmente cuando implican el movimiento de varias ruedas como en robots con omniwheel o mecanum wheel. También son útiles en otros sistemas donde necesitemos controlar de forma sencilla la velocidad de giro, como una plataforma para un escáner 3D.

Precio

En general, los servos de rotación continua son algo más caros que sus homólogos convencionales. Por ese motivo puede que decidamos

Como ejemplos de servo de rotación continua, tenemos el DM-S0090D, un servo de rotación continua de 9g, similar al servo SG90. Tiene un coste de 3,1€ (casi el doble que el SG90). Las características del DM-S0090D son,

  • Tensión: 3.7V ~ 6.0V
  • Torque: 1.5kg.cm (4.8V) a 1.6kg.cm (6V)
  • Velocidad: 0.10 seg/60º (4.8V) a 0.08 seg/60º (6.0 v)
  • Dimensiones: 22.9 x 12 x 22.5mm
  • Peso: 9g
  • Precio 7€

arduino-servo-rotacion-DM-S0090D

En un tamaño superior, tenemos el servo SM-S4306R y otros modelos de la misma familia, que son que son similares en características y dimensiones al MG-996R. En el caso del SM-S4306R las características son,

  • Tensión: 4.8V ~ 6.0V
  • Torque: 5kg•cm (4.8V) a 6.2kg•cm (6V)
  • Velocidad: 0.17 seg/60º (4.8V) a 0.13 seg/60º (6V)
  • Dimensiones: 40 x 19 x 43mm
  • Peso: 44g
  • Precio: 3.70€

arduino-servo-rotacion-SM-S4306R

Los otros modelos de la familia del SM-S4306R tienen características similares pero distinto par. Así, el SM-S4309R tiene un par de 7.9kg·cm (4.8V) a 8.7kg·cm (6V) y el SM-S4315R un par de 14.5kg·cm (4.8V) a 15.4kg·cm (6V).

Por último, veréis que también se venden servos modificados, como el SG90 o el MG996R. Como hemos dicho, incluso podemos modificar nosotros mismos estos servos. Sin embargo el rendimiento suele ser inferior a los servos de rotación continua, y carecen del potenciómetro para calibrar el punto neutro, por lo que tendremos algún tipo de deriva.

Esquema de montaje

La conexión es idéntica a la de un servo convencional. Alimentamos el servo aplicando una tensión de 4,8 a 7,2V. Excepto en el caso de servos muy pequeños, lo normal es que Arduino no disponga de potencia suficiente para accionar el servo, y deberemos usar una fuente de tensión externa.

arduino-servo-rotacion-continua-montaje

Por otro lado conectamos el pin de señal a una salida digital de Arduino.

arduino-servo-rotacion-continua-conexion

Al usar varias fuente de tensión recordar poner siempre en común todos los GND. De lo contrario podríais dañar algún componente.

Ejemplos de código

Como hemso dicho, el control de un servo de rotación continua es idéntico al control de un servo convencional, la única diferencia es el comportamiento del servo, que en el caso de un servo de rotación continua variará la velocidad en lugar de la posición.

por tanto, usamos la librería “servo.h”, incorporada en el IDE Standard, que nos permite controlar hasta 12 servos en Arduino Uno/Nano, y hasta 48 en Arduino Mega.

El siguiente ejemplo hace variar la velocidad del servo de rotación continua entre servo parado, servo al 100% de velocidad en un sentido, y servo al 100% en el sentido contrario, manteniendo cada velocidad 1.5 segundos.

#include 

Servo myservo;  // crea el objeto servo

int vel = 0;    // velocidad del servo

void setup() {
	myservo.attach(9);  // vincula el servo al pin digital 9
}

void loop() {
	//servo parado (equivalente a angulo 90º)
	pos = 90;
	myservo.write(pos);              
	delay(1500);    

	//servo 100% CW (equivalente a angulo 180º)
	pos = 180;
	myservo.write(pos);              
	delay(1500); 

	//servo 100% CCW (equivalente a angulo 0º)
	pos = 0;
	myservo.write(pos);              
	delay(1500); 
}

Si te ha gustado esta entrada y quieres leer más sobre Arduino puedes consultar la sección Tutoriales de Arduino

Motor paso a paso 28BYJ-48 con Arduino y driver ULN2003

$
0
0
arduino-motor-paso-paso-28byj-48-uln2033

¿Qué es un motor 28BYJ-48 y un ULN2003?

El 28BYJ-48 es un pequeño motor paso a paso bipolar de bajo precio. Las características eléctricas del 28BYJ-48 son modestas, pero incorpora un reductor integrado que lo convierte en un componente mucho más útil e interesante.

El 28BYJ-48 tiene un paso de 5.625 grados (64 pasos por vuelta). El reductor interno tiene una relación de 1/64. Combinados, la precisión total es de 4096 pasos por vuelta, equivalente a un paso de 0.088º, que es una precisión muy elevada.

En realidad la relación del reductor no es exactamente 1/64 por lo que el número de pasos es 4076 por vuelta (equivalente a un reductor de 1/63.6875)

La alimentación del motor es 5V o 12V según modelo, siendo más habitual el modelo de 5V. Físicamente ambos modelos son idénticos, por lo que para saber la tensión nominal deberemos mirar la etiqueta del motor.

El 28BYJ-48 tiene un par máximo tras el reductor de 3N•cm (0.3Kgf•cm). La frecuencia máxima es de 100Hz, lo que supone unos 40 segundos por vuelta, o equivalentemente una velocidad de giro máxima en torno a 1.5 rpm.

La resistencia y el consumo eléctrico varían con el modelo de 28BYJ-48. En los modelos de 5V es de 60 Ohm, lo que supone un consumo de 83mA. Los modelos de 12V tienen resistencias de 130-380 Ohm, y consumos de 71 a 32mA.

Para el control podemos emplear una placa con integrado ULN2003. Normalmente el 28BYJ-48 se suministra con esta placa, y ambos dispositivos disponen clemas para una conexión sencilla.

El 28BYJ-48 es un motor ampliamente utilizado en aplicaciones industriales, como el control de válvulas hidráulicas y neumáticas.

En el campo de los hobbies, podemos usar el 28BYJ-48 para hacer pequeños robots articulados, brazos robóticos, posicionar sensores, o girar la mesa de un escanner.

Puedes consultar más sobre los detalles del funcionamiento de un motor paso a paso, así como otros tipos de motores en

PRECIO

El 28BYJ-48 es un motor muy barato. Podemos encontrar 28BYJ-48 por unos 1.2€ en vendedores internacionales de eBay o AliExpress.

Normalmente querremos adquirirlo junto con el controlador ULN2003. Podemos encontrar kits con ambos componentes de forma conjunta por 1.60€.

arduino-motor-paso-paso-28byj-48-uln2033-componente

¿COMO FUNCIONA EL 28BYJ-48 CON ULN2003?

Para el control del 28BYJ-48 vamos a usar una placa con el integrado ULN2003. El ULN2003 es una agrupación de 7 Par Darlington de los cuales usaremos 4, uno por cada fase del motor paso a paso.

Un par Darlington es un dispositivo que nos permite suministrar una corriente superior a las que podríamos usando las salidas de Arduino directamente.

Más información en

El 28BYJ-48 es un motor bipolar, por lo que no necesitamos invertir la corriente que atraviesa las bobinas para hacerlo funcionar. Por tanto, no necesitamos un controlador complicado como el A4988 o el DRV8825, ni siquiera un simple puente-H como el L298N.

Aplicando un control todo o nada, es decir, encendiendo por completo o apagando por completo una bobina, únicamente tenemos que activar las bobinas en la secuencia correcta.

Existen varias secuencias posibles, y acontinuación vamos a ver las tres más empleadas.

Secuencia 1-fase

En secuencia de 1-fase encendemos una única bobina cada vez.

arduino-motor-paso-paso-secuencia-1-fase

Llevando esta secuencia de encendido a una tabla, que posteriormente usaremos para el código, la secuencia quedaría de la siguiente forma,

Paso A B A’ B’
1 ON OFF OFF OFF
2 OFF ON OFF OFF
3 OFF OFF ON OFF
4 OFF OFF OFF ON

Secuencia 2-fases

En la secuencia en 2-fases encendemos dos bobinas correlativas en cada fase. Al hacer trabajar dos bobinas simultáneamente en cada paso el campo magnético generado es superior (un 41% más) por lo que el motor tiene más par y, en general, presenta un mejor comportamiento. Como punto negativo, aumentamos el consumo energético al doble.

arduino-motor-paso-paso-secuencia-2-fases

Que expresado en forma de tabla resulta,

Paso A B A’ B’
1 ON OFF OFF ON
2 ON ON OFF OFF
3 OFF ON ON OFF
4 OFF OFF ON ON

Secuencia medio pasos

La última secuencia que vamos a ver es la secuencia en medio paso (half-step). Aquí encendemos alternativamente uno y dos bobinas.

Con esta secuencia conseguimos una precisión de la mitad del paso. El par desarrollado varía ya que en algunos pasos activamos dos bobinas y en otras solo una, pero a la vez el giro se encuentra más “guiado”, por lo que en general ambos efectos se compensan y el funcionamiento es bueno, salvo en aplicaciones donde estemos muy al límite del par máximo.

arduino-motor-paso-paso-secuencia-medio-paso

Expresando la secuencia en forma de tabla resulta

Medio-paso A B A’ B’
1 ON OFF OFF OFF
2 ON ON OFF OFF
3 OFF ON OFF OFF
4 OFF ON ON OFF
5 OFF OFF ON OFF
6 OFF OFF ON ON
7 OFF OFF OFF ON
8 ON OFF OFF ON

Esquema de montaje

La conexión del 28BYJ-48 a Arduino a través del módulo ULN2003 es bastante sencilla.

arduino-motor-paso-paso-28byj-48-uln2033-esquema

En primer lugar, conectamos el 28BYJ-48 a la placa con el integrado ULN2003 con la clema de conexión incorporada. Los terminales solo encajan en una posición, por lo que no hay riesgo de conectarlo incorrectamente.

Por otro lado, alimentamos el módulo aplicando la tensión de alimentación entre Vcc y GND del módulo. Existen modelos de 28BYJ-48 de tensiones nominales 5 o 12V. Deberéis aplicar la tensión que corresponde con vuestro motor.

En el caso de motores de tensión nominal 5V, podemos alimentar directamente desde la salida de 5V de Arduino.

No exceder la tensión de alimentación de vuestro modelo de 28BYJ-48, o lo dañaréis permanente.

Finalmente, conectamos los pines IN1, IN2, IN3 e IN4 a cuatro salidas digitales de Arduino. Al activar cada una de las señales activaremos el par Darlington correspondiente, provocando el encendido de la bobina.

La conexión, vista desde Arduino, quedaría de la siguiente manera,

arduino-motor-paso-paso-28byj-48-uln2033-conexion

EJEMPLOS DE CODIGO

Hacer funcionar un motor paso bipolar no es difícil, simplemente tenemos que emplear las secuencias que hemos visto correctamente.

Sin embargo, sí es un código en el que conviene que seamos (al menos) medianamente organizados, o puede empezar a crecer en número de líneas rápidamente, haciéndolo más lento, más difícil de usar y de mantener.

Por un lado, dado que vamos a que vamos a usar frecuentemente el código para cambiar de paso en uno u otro sentido, conviene que lo aislemos en dos funciones independientes, clockwise() y anticlockwise()

Por otro lado, vamos a almacenar la secuencia de encendido en una tabla de lookup. En el código aparecen las tres secuencias, simplemente descomentar la que queráis emplear. Por defecto está descomentada la de medio-paso, que es la recomendada por el fabricante.

Finalmente, tenemos una función setOutput() que fija la salida al motor en un paso determinado de la secuencia.

//definicion de pins
const int motorPin1 = 8;    // 28BYJ48 In1
const int motorPin2 = 9;    // 28BYJ48 In2
const int motorPin3 = 10;   // 28BYJ48 In3
const int motorPin4 = 11;   // 28BYJ48 In4
                   
//definicion variables
int motorSpeed = 1200;   //variable para fijar la velocidad
int stepCounter = 0;     // contador para los pasos
int stepsPerRev = 4076;  // pasos para una vuelta completa

//tablas con la secuencia de encendido (descomentar la que necesiteis)
//secuencia 1-fase
//const int numSteps = 4;
//const int stepsLookup[4] = { B1000, B0100, B0010, B0001 };

//secuencia 2-fases
//const int numSteps = 4;
//const int stepsLookup[4] = { B1001, B1100, B0110, B0011 };

//secuencia media fase
const int numSteps = 8;
const int stepsLookup[8] = { B1000, B1100, B0100, B0110, B0010, B0011, B0001, B1001 };


void setup()
{
  //declarar pines como salida
  pinMode(motorPin1, OUTPUT);
  pinMode(motorPin2, OUTPUT);
  pinMode(motorPin3, OUTPUT);
  pinMode(motorPin4, OUTPUT);
}

void loop()
{
  for (int i = 0; i < stepsPerRev * 2; i++)
  {
    clockwise();
    delayMicroseconds(motorSpeed);
  }
  for (int i = 0; i < stepsPerRev * 2; i++)
  {
    anticlockwise();
    delayMicroseconds(motorSpeed);
  }
  delay(1000);
}

void clockwise()
{
  stepCounter++;
  if (stepCounter >= numSteps) stepCounter = 0;
  setOutput(stepCounter);
}

void anticlockwise()
{
  stepCounter--;
  if (stepCounter < 0) stepCounter = numSteps - 1;
  setOutput(stepCounter);
}

void setOutput(int step)
{
  digitalWrite(motorPin1, bitRead(stepsLookup[step], 0));
  digitalWrite(motorPin2, bitRead(stepsLookup[step], 1));
  digitalWrite(motorPin3, bitRead(stepsLookup[step], 2));
  digitalWrite(motorPin4, bitRead(stepsLookup[step], 3));
}

Si te ha gustado esta entrada y quieres leer más sobre Arduino puedes consultar la seccióntutoriales de Arduino

Controlar dos motores DC con Arduino y driver TB6612FNG

$
0
0
arduino-TB6612FNG

¿Qué es un TB6612FNG ?

El TB6612FNG es un controlador (driver) de motores que nos permite manejar dos motores de corriente continua desde Arduino, variando tanto la velocidad como el sentido de giro.

El TB6612FNG puede ser considerado una versión mejorada del L298N. Al igual que esté, internamente está formado por dos puentes-H, junto con la electrónica necesaria para simplificar su uso, y eliminar posibles cortocircuito por errores de uso.

Sin embargo, en el caso del TB6612FNG los puentes-H están formados por transistores MOSFET, en lugar de transistores BJT como en el L298N. Esto permite que el TB6612FNG tiene mejor eficiencia y menores dimensiones que el L298N.

El TB6612FNG también permite controlar intensidades de corriente superiores, siendo capaz de suministrar 1.2A por canal de forma continua, y 3.2A de pico. Recordar que el L298N tiene una intensidad máxima teórica de 2A, pero las pérdidas hace que en la práctica sólo pueda suministrar 0.8-1A.

Además, el TB6612FNG no tiene la caída de tensión que sí tiene el L298N debido a sus transistores BJT, que podían llegar a ser superiores a 3V. En su lugar, el TB6612FNG se comporta como una pequeña resistencia de 0.5 Ohm.

Como puntos negativos, el TB6612FNG puede proporcionar tensiones inferiores, de hasta 13.5V (frente a los 35V del L298N). Además, es algo más difícil de montar, ya que las placas con L298N frecuentemente incorporan placas de conexión, que permiten conectar de forma sencilla el motor.

Finalmente, la protección contra corrientes inducidas son algo más limitadas que las del L298N, por lo que podemos tener algún reinicio de Arduino cuando alimentamos cargas medianas o grandes.

El TB6612FNG dispone de dos canales, por lo que es posible controlar dos motores de corriente continua de forma independiente. También puede controlar un único motor paso a paso aunque, en general, preferiremos usar controladores específicos.

En cada canal podemos controlar el sentido de giro y la velocidad, para lo cual admite una señal PWM de frecuencia máxima de 100 kHz (muy por debajo del rango normal de PWM en Arduino)

El TB6612FNG dispone de protecciones térmicas, de inversión de corriente en la fuente de suministro de los motores, condensadores de filtrado en ambas líneas de alimentación, detección de bajo voltaje, y protecciones contra las corrientes inducidas en los motores.

El TB6612FNG también incorpora un modo de Standby, que desactiva por completo el controlador, entrando en un modo de ahorro de energía.

El controlador TB6612FNG puede ser empleado en proyectos de electrónica y robótica. Es ampliamente usado en proyectos electrónico y robótica, por su sencillez de uso, bajo coste, y buena calidad precio

Precio

El controlador TB6612FNG es un dispositivo barato. En un principio el TB6612FNG era más caro que el L298N, pero los precios descendieron y en la actualidad el TB6612FNG es más barato que el L298N.

Podemos encontrar un TB6612FNG por 1,10€ en vendedores internacionales de AliExpress o eBay.

arduino-TB6612FNG-componente

Esquema de montaje

El esquema de montaje no es demasiado complicado. Por un lado, suministramos la tensión que alimentará el motor desde una fuente de alimentación externa, mediante el pin VM. La tensión máxima es de 15V.

Además, tenemos que alimentar la electrónica del módulo mediante el pin VCC. El rango de tensión para VCC es 2.7 a 5.5V.

Para el control del módulo Los pines AIN1, AIN2 Y PWMA controlan el canal A, mientras que los pines BIN1, BIN2, y PWMB controlan el canal B.

Finalmente, el pin STBY controla el modo Standby. Debemos ponerlo en HIGH para activar el motor. Podemos conectarlo a un pin digital de Arduino, si queremos poder activar el modo Standby, o conectarlo a VCC si queremos dejarlo permanentemente desconectado.

arduino-TB6612FNG-esquema

La conexión, vista desde Arduino quedaría de la siguiente forma.

arduino-TB6612FNG-conexion

Ejemplos de código

El código necesario es similar al que vimos al ver el L298N. Igualmente, conviene que agrupemos el código en funciones que podamos reutilizar, o el código crecerá rápidamente.

El siguiente código permite desplazar y girar un vehículo, actuando sobre ambos motores. Empleamos el modo Standby para reducir el consumo cuando esté parado, alargando la batería.

const int pinPWMA = 6;
const int pinAIN2 = 7;
const int pinAIN1 = 8;
const int pinBIN1 = 9;
const int pinBIN2 = 10;
const int pinPWMB = 11;
const int pinSTBY = 12;

const int waitTime = 2000;	//espera entre fases
const int speed = 200;		//velocidad de giro

const int pinMotorA[3] = { pinPWMA, pinAIN2, pinAIN1 };
const int pinMotorB[3] = { pinPWMB, pinBIN1, pinBIN2 };

enum moveDirection {
	forward,
	backward
};

enum turnDirection {
	clockwise,
	counterClockwise
};

void setup()
{
	pinMode(pinAIN2, OUTPUT);
	pinMode(pinAIN1, OUTPUT);
	pinMode(pinPWMA, OUTPUT);
	pinMode(pinBIN1, OUTPUT);
	pinMode(pinBIN2, OUTPUT);
	pinMode(pinPWMB, OUTPUT);
}

void loop()
{
	enableMotors();
	move(forward, 180);
	delay(waitTime);

	move(backward, 180);
	delay(waitTime);

	turn(clockwise, 180);
	delay(waitTime);

	turn(counterClockwise, 180);
	delay(waitTime);

	fullStop();
	delay(waitTime);
}

//Funciones que controlan el vehiculo
void move(int direction, int speed)
{
	if (direction == forward)
	{
		moveMotorForward(pinMotorA, speed);
		moveMotorForward(pinMotorB, speed);
	}
	else
	{
		moveMotorBackward(pinMotorA, speed);
		moveMotorBackward(pinMotorB, speed);
	}
}

void turn(int direction, int speed)
{
	if (direction == forward)
	{
		moveMotorForward(pinMotorA, speed);
		moveMotorBackward(pinMotorB, speed);
	}
	else
	{
		moveMotorBackward(pinMotorA, speed);
		moveMotorForward(pinMotorB, speed);
	}
}

void fullStop()
{
	disableMotors();
	stopMotor(pinMotorA);
	stopMotor(pinMotorB);
}

//Funciones que controlan los motores
void moveMotorForward(const int pinMotor[3], int speed)
{
	digitalWrite(pinMotor[1], HIGH);
	digitalWrite(pinMotor[2], LOW);

	analogWrite(pinMotor[0], speed);
}

void moveMotorBackward(const int pinMotor[3], int speed)
{
	digitalWrite(pinMotor[1], LOW);
	digitalWrite(pinMotor[2], HIGH);

	analogWrite(pinMotor[0], speed);
}

void stopMotor(const int pinMotor[3])
{
	digitalWrite(pinMotor[1], LOW);
	digitalWrite(pinMotor[2], LOW);

	analogWrite(pinMotor[0], 0);
}

void enableMotors()
{
	digitalWrite(pinSTBY, HIGH);
}

void disableMotors()
{
	digitalWrite(pinSTBY, LOW);
}

En un proyecto complejo, estas funciones estarían integradas en los objetos que integran nuestro modelo.

Si te ha gustado esta entrada y quieres leer más sobre Arduino puedes consultar la seccióntutoriales de Arduino

Motores paso a paso con Arduino y driver A4998 o DRV8225

$
0
0
arduino-a4988-drv8825

¿Qué es un A4988 o DRV8225?

El A4988 y el DRV8225 son controladores (drivers) que simplifican el manejo de motores paso a paso desde un autómata o procesador como Arduino.

Estos controladores nos permiten manejar los altos voltajes e intensidades que requieren estos motores, limitar la corriente que circula por el motor, y proporcionan las protecciones para evitar que la electrónica pueda resultar dañada.

Para su control únicamente requieren dos salidas digitales, una para indicar el sentido de giro y otra para comunicar que queremos que el motor avance un paso. Además permiten realizar microstepping, una técnica para conseguir precisiones superiores al paso nominal del motor.

El A4988 ha alcanzado una gran popularidad en sus últimos tiempos debido a su uso en proyectos como, por ejemplo, en impresoras 3D caseras. Por su parte el DRV8225 es una versión mejorada del A4988 y, por tanto, tiene unas características ligeramente superiores.

En particular, el DRV8225 permite trabajar con tensiones superiores al A4988 (45V frente a 35V), e intensidades superiores (2.5A frente a 2A). Además, añade un nuevo modo de microstepping (1/32) que no está presente en el A4988.

Por lo demás, aparte de unas pequeñas diferencias, ambos dispositivos son similares en su montaje y uso. Incluso pueden ser compatibles entre sí, es decir, bajo ciertas condiciones podemos usar indistintamente uno u otro, e incluso una combinación de ambos de forma simultánea.

Modelo A4988 DRV8225
Color Verde o Rojo Morado
Intensidad máxima 2A 2.5A
Tensión máxima 35V 45A
Microsteps 16 32
Rs típico 0.05, 0.1 o 0.2 0.1
Fórmulas I_max = Vref / ( 8 * Rs) I_max = Vref / ( 5 * Rs)
Vref = I_max * 8 * Rs Vref = I_max * 5 * Rs

Ambos controladores pueden alcanzar altas temperaturas durante su funcionamiento y es necesario disipar el calor para que el dispositivo no se dañe. Para intensidades superiores 1A en el A4988 y a 1.5A en el DRV8225 es necesario añadir un sistema de disipación de calor, e incluso ventilación forzada.

Disponen de protecciones contra sobreintensidad, cortocircuito, sobretensión y sobretemperatura. En general, son dispositivos robustos y fiables siempre que realicemos la conexión correctamente, e incorporemos disipación de calor si es necesario.

El A4988 y el DRV8225 son muy empleados en una gran variedad de proyectos que requieren el uso de motores paso a paso, como máquinas de CNC, plotters, robots que dibujan, impresoras 3D, y escáneres 3D.

También son un componente frecuente en proyectos para controlar robots y vehículos, especialmente en aquellos que requieren variar de forma individual la velocidad de cada rueda, como en vehículos con omniwheel o mecannum wheels.

Precio

Actualmente ambos controladores son dispositivos baratos ya que han visto bajar su precio gracias al aumento de su popularidad. Es posible encontrar un driver A4988 por 0.75€, y un DRV8255 por 1.15€, en vendedores internacionales en eBay o AliExpress.

arduino-a4988

Con una diferencia de precio tan estrecha lo normal es que elijamos el DRV8255, dado que tiene unas características técnicas superiores,

arduino-drv8825

¿Cómo funciona el A4988 y el DRV8225?

Como en la mayoría de los controladores de motores el componente fundamental es un puente-H. En el caso del A4988 y DRV8225, destinados a controlar motores paso a paso, se dispone de dos puentes-H (uno por canal) constituidos por transistores MOSFET.

Sin embargo, a diferencia de controladores más simples como el L298N o el TB6612FNG, que presenta una electrónica relativamente simple, el A4988 y el DRV8225 tienen una electrónica considerablemente más compleja.

A modo de ejemplo, la siguiente imagen tenemos el esquema del DRV8255 y, cómo vemos, los puentes-H (remarcados en azul) representan una parte muy pequeña del conjunto.

arduino-a4988-drv8825-funcionamiento

Uno de los motivos para esta complejidad es que únicamente requieren dos señales digitales de control para hacer funcionar el motor, y que incorporan las protecciones necesarias para su manejo.

El otro motivo de la complejidad de su electrónica es que incorporan funciones especialmente diseñadas para el control de motores paso a paso, como son el regulador de intensidad y el Microstepping. Veremos estas funcionalidades a continuación.

Regulación de intensidad (Chopping)

Ambos controladores disponen de reguladores de intensidad incorporados. El motivo es que los motores paso a paso de cierto tamaño y potencia, como por ejemplo los NEMA 17 o NEMA 23, necesitan tensiones superiores a las que podrían soportar las bobinas por su corriente nominal.

Por ejemplo, supongamos que tenemos un motor NEMA 17 con 1.2A de intensidad nominal y 1.5 Ohm de resistencia por fase. Según la ley de Ohm deberíamos aplicar 1.8V a cada bobina para que circule la intensidad nominal de 1.2A. Sin embargo, con esa tensión el motor ni se movería.

Para el que el motor funcione correctamente necesitamos aplicar una tensión superior. En este ejemplo, la tensión nominal podría ser 12V. Pero si aplicáramos 12V directamente, nuevamente por la ley de Ohm, pasarían 8A por la bobina, lo cual destruiría el motor en poco tiempo.

Por este motivo, los controladores incorporan un limitador de intensidad, que permiten alimentar el motor a tensiones nominales superiores a las que es posible por su resistencia e intensidad máxima admisible.

Por supuesto, la ley de Ohmn debe cumplirse en todo momento por lo que, continuando con nuestro ejemplo, cuando alimentemos el motor a 12V por la bobina pasará inevitablemente 8A.

El limitador interrumpe la señal proporcionando una señal pulsada PWM de forma que el valor promedio de la intensidad que atraviesa la bobina es la intensidad nominal del motor. Terminando nuestro ejemplo, el limitador de tensión aplicaría el pulso durante el 15% del tiempo y mantendrá el motor apagado el 85% restante.

A este mecanismo de limitación de intensidad se le denomina Chopping.

Para regular la intensidad que proporcionara el limitador y ajustarlo al valor del motor que vayamos a emplear ambas placas disponen de un potenciómetro que regula la intensidad del limitador.

Una forma de estimar la intensidad del regulador es medir la tensión entre el potenciómetro y GND y aplicar una fórmula que depende del modelo, que encontraréis en la tabla del principio de la entrada.

Estas fórmulas dependen el valor Rs de las resistencias ubicadas en la placa que pueden variar en función del fabricante. Los valores típicos también aparecen en la tabla, pero debéis comprobar el valor de las resistencias que monta vuestra placa.

Por ejemplo, con los valores de Rs habituales las fórmulas se reducen a:

Modelo Rs Fórmula reducida
A4988 50 I_max = 0,625 * V_ref
A4988 100 I_max = 1,25 * V_ref
A4988 200 I_max = 2 ,2* V_ref
DRV8825 100 I_max = 2 * V_ref

No obstante, el valor obtenido mediante esta medición es sólo una aproximación y puede ser inexacto, por lo que lo emplearemos sólo como una calibración inicial, y terminaremos el ajuste fino midiendo la corriente real que proporciona el controlador al motor mediante un amperímetro.

Microstepping

Como hemos dicho, el microstepping es una técnica que permite obtener pasos inferiores al paso nominal del motor paso a paso que vamos a controlar.

Cuando vimos las secuencias típicas de encendido de un paso a paso, vimos que aplicando un control todo a nada a las bobinas teníamos varias posibles combinaciones, de las cuales vimos las tres más habituales (1-fase, 2-fases, media-fase). Pero nadie ha dicho que tengamos que encender o apagar por completo las bobinas.

El microstepping hace variar la corriente aplicada a cada bobina emulando un valor analógico. Si pudiéramos a ambas bobinas dos señal eléctrica senoidal perfecta desfasadas 90º conseguiríamos un campo magnético rotatorio perfecto en el interior del motor.

arduino-motor-paso-a-paso-microstepping

Por supuesto el controlador digital no genera valores analógicos perfectos, si no valores discretizados (“a saltos”), por lo que la señal eléctrica que aplica es igualmente una función senoidal discretizada.

El resultado es un campo magnético un campo magnético rotativo con un paso inferior al paso nominal, que depende del número de niveles de discretos que podemos emplear en las señales de excitación de la bobina.

Cuando funcionamos sin microstepping (Modo full step), los controladores aplican una secuencia de 2-fases, por lo que aplican de forma permanente el 71% de la corriente del limitador a cada bobina. Únicamente varían el sentido en el que la corriente circula por la bobina.

arduino-motor-paso-paso-secuencia-2-fases

Sin embargo, si aplicamos microstepping en cualquier de sus modos de funcionamiento, el controlador llega a aplicar el 100% de la corriente a una de las bobinas en un determinado paso. La cantidad de corriente concreta aplicada a cada bobina varía con cada paso.

Por ejemplo, con resolución 1/4 de paso, en el primer paso de la secuencia tendremos una bobina al 100% y la bobina B al 0%, en el segundo paso la bobina A al 92% y la bobina B al 38%, en el tercer paso la bobina A al 71%, y así sucesivamente.

El hecho de que sin microstepping la corriente aplicada es siempre el 71%, y si aplicamos microstepping (en cualquier resolución) la corriente aplicada llegará a ser del 100% en algún paso, es muy importante a la hora de calibrar la intensidad que circula por las bobinas.

Finalmente, la resolución con la que queremos que funcione el controlador se controla aplicando tensión a los Pines M0, M1 y M2. Estos pines están puestos a tierra mediante resistencias de Pull-Up, por lo que si no conectamos nada estarán a Low, y sólo deberemos forzar los pines en High.

Resolucion Pines M0, M1 y M2
A4988 DRV8825 MODE0 MODE1 MODE2
Full step Full step Low Low Low
1/2 step 1/2 step High Low Low
1/4 step 1/4 step Low High Low
1/8 step 1/8 step High High Low
1/16 step Low Low High
1/32 step High Low High
1/32 step Low High High
1/16 step 1/32 step High High High

Dejar todos los pines desconectados dará lugar a usar modo Full Step

Esquema de montaje

El esquema de conexión de ambos controladores es muy similar. Incluso, como hemos dicho, bajo ciertas consideraciones ambos dispositivos son compatibles entre si.

En el caso del A4988 el esquema es el siguiente

arduino-a4988-esquema

Que visto desde Arduino quedaría de la siguiente forma.

arduino-a4988-conexion

En el caso del DRV8225 el esquema es muy similar, con la excepción de que el pin Vdd se sustituye por el pin Fault.

arduino-drv8825-esquema

El esquema desde Arduino sería idéntico al anterior.

arduino-drv8825-conexion

Observar que el potenciómetro está ubicado en extremos diferentes en ambos modelos. Por tanto a la hora de cambiar uno por otro, porque es fácil equivocarse en la orientación, y dañar el dispositivo.

Comprobar la orientación del controlador durante el montaje y antes de dar la alimentación al sistema

Proceso de montaje

El proceso de montaje del A4988 o el DRV8225 no es demasiado complicado. La única parte que resulta un poco peliaguda es el proceso de ajuste y calibración del regulador de intensidad.

Ambos controladores son bastante robustos y difíciles de romper cuando están trabajando, si respetamos las necesidades de disipación de calor (cuando sea necesario).

Pero son extremadamente sensibles a desconectar el motor cuando el controlador está alimentado. Hacer esto causará, casi con total seguridad, que dañemos el controlador.

En general, evitar conectar o desconectar cualquier cable mientras el controlador esté alimentado.

Por otro lado, el potenciómetro del regulador de intensidad no tiene tope físico, por lo que es posible pasar de cero al máximo de valor sin danos cuenta, y podríamos dañar accidentalmente el motor.

Para no dañar ni el controlador ni el componente, debemos seguir siempre el proceso rigurosamente sin saltarnos ningún paso.

  • Conectar el driver a tensión, sin el motor y sin microstepping
  • Medir con un voltímetro la tensión entre GND y el potenciómetro
  • Ajustar el potenciómetro hasta que la tensi´pn sea el valor proporcionado por la fórmula
  • Apagar el montaje
  • Conectar el motor, interponiendo en medio un amperímetro
  • Realizar con cuidado el ajuste fino del potenciómetro, hasta que la intensidad sea la nominal del motor
  • Apagar el montaje
  • Retirar el amperímetro, y conectar el motor definitivamente
  • Conectar Arduino al montaje

Como hemos dicho, el hecho de que vayamos a usar posteriormente microstepping influye en el valor limite que debemos fijar en el regulador de intensidad.

Si no vamos a usar Microstepping, podemos aplicar aumentar el límite del regulador de intensidad hasta el 100% de la intensidad nominal del motor.

Si vamos a usar Microstteping, el valor que hemos medido es el 71% del que luego circulará realmente por la bobina. Por tanto, en el amperímetro debemos ajustar el 71% de la intensidad nominal del motor.

Ejemplo de código

Aunque entender los pormenores del A4988 y el DRV8225 puede haber tenido su dificultad, las ventajas de su uso claras. El código necesario para su control es extremadamente sencillo, lo cual hace de ellos unos componentes muy prácticos y útiles de usar.

Simplemente tenemos que indicar mediante dos salidas digitales el instante en el que queremos que el motor avance un paso, y el sentido de giro. La velocidad de giro se controla por el tiempo que dejamos transcurrir entre paso y paso.

El siguiente ejemplo, hace girar el motor paso a paso una revolución en un sentido, y dos en sentido contrario a una velocidad ligeramente superior.

const int dirPin = 8;
const int stepPin = 9;

const int steps = 200;
int stepDelay;

void setup() {
	// Marcar los pines como salida
	pinMode(dirPin, OUTPUT);
	pinMode(stepPin, OUTPUT);
}

void loop() {
	//Activar una direccion y fijar la velocidad con stepDelay
	digitalWrite(dirPin, HIGH);
	stepDelay = 250;
	// Giramos 200 pulsos para hacer una vuelta completa
	for (int x = 0; x < 200; x++) {
		digitalWrite(stepPin, HIGH);
		delayMicroseconds(stepDelay);
		digitalWrite(stepPin, LOW);
		delayMicroseconds(stepDelay);
	}
	delay(1000);

	//Cambiamos la direccion y aumentamos la velocidad
	digitalWrite(dirPin, LOW);
	stepDelay = 150;
	// Giramos 400 pulsos para hacer dos vueltas completas
	for (int x = 0; x < 400; x++) {
		digitalWrite(stepPin, HIGH);
		delayMicroseconds(stepDelay);
		digitalWrite(stepPin, LOW);
		delayMicroseconds(stepDelay);
	}
	delay(1000);
}

Si te ha gustado esta entrada y quieres leer más sobre Arduino puedes consultar la seccióntutoriales de Arduino

Cómo usar un acelerómetro en nuestros proyectos de Arduino

$
0
0
arduino-acelerometro

En esta entrada vamos a introducir el uso del acelerómetro como componente fundamental en nuestros proyectos de electrónica y Arduino. En la siguiente entrada ampliaremos al uso de giroscopios para, finalmente, terminar presentando el uso de IMU’s para calcular la orientación, por ejemplo, de un vehículo o robot.

En entradas anteriores hemos visto distintas opciones disponibles para dotar de movimiento a nuestros proyectos con Arduino mediante motores rotativos o accionadores lineales. También hemos analizad los factores a tener en cuenta para escoger uno u otro en nuestro proyecto.

Si vamos a dotar de movimiento a nuestro proyecto, y medida que estos se vayan complicando, necesitaremos determinar la posición, velocidad y orientación. Tenemos muchos sensores que nos ayudarán a determinar la posición, velocidad y orientación, como brújulas magnéticas, GPS, barómetros, encoder ópticos y magnéticos o pulsadores de fin de carrera.

Pero entre este tipo de sensorse destacan por su importancia los acelerómetros, giroscopios e IMU’s. En los últimos años han experimentado un gran desarrollo y han pasado a convertirse en dispositivos pequeños, compactos, duraderos y baratos.

Esto es debido en gran medida a la aparición y mejora de sistemas microelectromecánicos (MEMS, Microelectromechanical Systems), dispositivos que aúnan comportamientos mecánicos y electrónicos a escalas microscópicas, típicamente del orden de nanómetros.

arduino-mens

Muchos dispositivos cotidianos disponen de uno de estos sensores. Por ejemplo, los móviles y tablets, los emplean para detectar la orientación de la pantalla.

Nosotros lo usaremos frecuentemente en nuestros proyectos de electrónica y robótica caseros con Arduino, por ejemplo, para medir la orientación de una pinza en un brazo robótico o una torreta con sensores, la dirección de avance de un vehículo, o detectar que nuestro robot se ha caído.

¿Qué es un acelerómetro?

Como su nombre indica, un acelerómetro es un dispositivo que permite medir la aceleración a la que está sometido.

Recordamos brevemente que la aceleración es la variación de la velocidad respecto del tiempo o, expresado matemáticamente,

\vec a = \frac{\partial^2 \vec v}{\partial t^2}


Las unidades para la aceleración en el sistema internacional son m^2/s.

Asimismo, recordamos que por la primera ley de Newton

\vec{F} = m \cdot \vec{a}

Es decir, que cualquier cuerpo con una masa m requiere una cierta fuerza para variar su velocidad. Equivalentemente, cualquier cuerpo sometido a una aceleración experimentará una cierta fuerza. Emplearemos este hecho para entender el funcionamiento del acelerómetro.

Imaginemos que queremos fabricar un dispositivo que quiera medir aceleración. Podríamos construir un sensor formado por un cuerpo sólido, en cuyo interior suspendemos una masa sujeta por muelles al cuerpo exterior.

arduino-acelerometro-funcionamiento

Al aplicar una aceleración al conjunto la masa suspendida ejercerá una fuerza sobre los muelles causando que uno se contraiga y otro se elongue, causando que la posición relativa de la masa dentro del sensor varié.

Este desplazamiento de la masa libre interior puede ser medido para determinar la magnitud de la aceleración. El desplazamiento será proporcional a la aceleración soportada, y se mantendrá constante mientras la aceleración sea constante.

Para construir este acelerómetro en un MEMS se emplea una estructura micromecanizada de polisilicio construida sobre una oblea de silicio. Los muelles de polisilicio suspenden la estructura sobre la oblea de silicio, a la vez que proporciona resistencia para soportar las aceleraciones a las que se verá sometido el sensor.

arduino-acelerometro

Al someter el dispositivo a aceleraciones la parte interior se deforma y se desplaza respecto a la parte fija, de deforma de forma similar a nuestro dispositivo imaginario basado en muelles. El desplazamiento es detectado por la variación de la capacitancia del sistema.

Los acelerómetros disponibles normalmente son de 3 ejes, es decir, son capaces de medir la aceleración a la que está sometido el sensor en X, Y y Z independientemente, lo que permite saber simultáneamente la magnitud y dirección de la aceleración medida.

La capacidad de medir medir la aceleración de un sistema proporciona en si misma funcionalidades interesantes, como registrar vibraciones o golpes. Por ejemplo, los podómetros emplean un acelerómetro para detectar los pasos que damos.

Pero no es la única función que podemos obtener de un acelerómetro. El sensor se ve afectado por la gravedad terrestre, que supone una aceleración de aproximadamente 9.81 m2/s en la superficie de la tierra, que por supuesto es registrada constantemente por el sensor.

Una primera consecuencia es que podemos detectar condiciones de caída libre, por ejemplo, cuando en sensor cae de una mesa, o un robot pierde el equilibrio y cae al suelo. Simplemente debemos comprobar que la aceleración resultante medida es inferior a 9.81 m^2/s.

El objeto podría estar cayendo mientras es sometido a otra aceleración, en cuyo caso sería mucho más difícil determinar la caída.

Incluso más interesante la medición de la gravedad puede emplearse para determinar la orientación del sensor. Dado que podemos registrar la aceleración en tres ejes, en ausencia de otras aceleraciones, podemos determinar la orientación del sensor con un poco de trigonometría.

En el caso de 2D, asumiendo que ponemos el sensor horizontal en su plano X-Y, con Z apuntando hacía arriba, y únicamente giramos en el eje Y, la ecuación para el ángulo resulta,

arduino-acelerometro-orientacion-inclinacion

\theta = atan \frac{A_x}{A_z}

De forma similar, en el caso 3D las ecuaciones resultan,

arduino-acelerometro-orientacion

\theta_x = atan \frac{A_x}{\sqrt{{A_y}^2+{A_z}^2}}

\theta_y = atan \frac{A_y}{\sqrt{{A_x}^2+{A_z}^2}}

\theta_z = atan \frac{\sqrt{{A_x}^2+{A_y}^2}}{A_z}

Sin embargo un acelerómetro no resulta un sensor adecuado para intentar determinar la velocidad de un sistema y mucho menos su posición. Podríamos estar tentados a estimar la velocidad, simplemente multiplicando la aceleración por el tiempo.

Como frecuentemente comentamos, este tipo de mediciones integradas respecto al tiempo acumulan los errores de medición y el ruido, lo que conlleva efectos de deriva. Debería ser siempre el último recurso y nunca tenerlo en consideración más allá de una estimación burda.

Como vemos, un acelerómetro es un dispositivo muy versátil, que no permite obtener mediciones de aceleraciones y orientación. Además son sensores absolutos es decir, que existe un punto 0,0,0 de medición, que correspondería con el sensor cayendo libremente en el vacío. Finalmente, la medición no es integrada, por lo que no presentan deriva en la medición a medio o largo plazo.

Como aspectos negativos, son dispositivos muy sensibles a las vibraciones, por lo que la medición presentará ruido de alta frecuencia. En general, deberemos filtrar la señal antes de poderla usar. En el caso más simple, simplemente hacer el promedio de varias mediciones será suficiente.

En la siguiente entrada abordaremos el uso de giroscopios, dispositivos que permiten medir la velocidad angular de un sensor, y que complementan muy bien las limitaciones en el cálculo de la orientación, algo que veremos en la última entrada sobre IMU’s.

Si te ha gustado esta entrada y quieres leer más sobre Arduino puedes consultar la sección tutoriales de Arduino

Cómo usar un giroscopio en nuestros proyectos de Arduino

$
0
0
arduino-giroscopio

En la entrada anterior hemos visto los fundamentos de los acelerómetros, un componente muy útil que nos permite determinar la aceleración y orientación de un dispositivo.

En esta entrada vamos a ampliar al uso de un giroscopio, otro sensor que por sus características complementa muy bien con el uso de un acelerómetro, algo que veremos en la última entrada de la serie sobre IMU’s.

¿Qué es un giroscopio?

Un giroscopio (también llamados giróscopo) es un dispositivo que permite medir el ángulo de rotación girado por un determinado mecanismo.

A diferencia de los acelerómetros, los giroscopios son dispositivos puramente diferenciales, es decir, no existe una referencia absoluta si no que siempre medimos ángulos relativos a una referencia arbitraria.

Existen diversos tipos de giroscopios (mecánicos, de anillo láser, de fibra óptica). Los que se emplean en MEMS son denominados giroscopios vibratorios de efecto Coriolis (CVG), que en cierta forma pueden considerarse una evolución del péndulo de Foucault

Recordamos que la fuerza de Coriolis es una fuerza ficticia que aparece sobre un cuerpo en movimiento cuando se encuentra en un sistema en rotación.

El valor de esta fuerza es,

{\displaystyle {\vec {F}}_{c}=-2m\left({\vec {\omega }}\times {\vec {v}}\right)}

No confundir con la fuerza centrípeta que es una fuerza real que hay que ejercer sobre un sistema para que rote, o con la fuerza centrífuga, que es una fuerza ficticia que se en sistemas no inerciales.

El principio de funcionamiento es un CVG es que un objeto vibratorio tiene a vibrar en el mismo plano incluso si este rota. El efecto Coriolis provoca que el objeto vibratorio ejerza una fuerza sobre el soporta, y midiendo esta fuerza podemos determinar la rotación a la que está sometido el giroscopio.

arduino-giroscopio-funcionamiento

Para registrar el efecto de la fuerza Coriolis un MEMS dispone de estructuras similares a las del acelerómetro. Ciertas partes del cuerpo se someten a vibración por resonancia y el efecto de la fuerza de Coriolis deforma la estructura, lo cuál puede ser medido por la variación de la capacitancia del sistema.

arduino-acelerometro-giroscopio

Al igual que en el caso de los acelerómetros, lo normal es que los giroscopios que empleemos sean de 3 ejes, es decir, que registran de forma independiente la rotación en X, Y, y Z, lo cual permite determinar la magnitud y dirección de la rotación.

arduino-yaw-pitch-roll

Una de las consecuencias de emplear la fuerza Coriolis es que los giroscopios vibratorios, a diferencia de otros tipos de giroscopios, no registran el ángulo girado si no la velocidad angular, que es la relación de variación del ángulo respecto del tiempo.

\omega = \frac{\partial \theta }{\partial t}


Las unidades en el sistema internacional son rad/s (equivalentemente s-1), aunque con frecuencia se emplean otras unidades como º/s, rev/s (rps) o rev/min (rpm).

Para obtener el ángulo de posición del sensor es necesario realizar la integración respecto del tiempo, algo que habitualmente hace la electrónica interna del sensor.

\theta_{gyro} = \omega_{gyro} \cdot \Delta t

No nos cansamos de repetir que las mediciones integrales nunca son una buena idea porque supone la acumulación de errores de medición y ruido, lo que provoca deriva en la medición (drift).

Efectivamente, el mayor problema que encontramos con los giroscopios de vibración es que a medio y largo plazo tienen deriva, es decir, que la medida se va desviando progresivamente del valor real (incluso con el sensor estático).

Por el contrario, los giroscopios son sensores de respuesta rápida y elevada precisión en tiempos cortos. Además, responden bien a cambios bruscos, y son relativamente inmunes al ruido, siempre en rangos temporales cortos.

Si habéis leído la entrada sobre el acelerómetro, veréis que sus características de la medición son opuestas a las de los giroscopios, por lo que (atención SPOILER) se complementan muy bien entre sí.

Esto lo veremos en profundidad en la próxima entrada, como medir la inclinación con IMU, Arduino y filtro complementario, donde finalmente juntaremos ambos dispositivos para hacer un sensor más robusto que ambos de forma independiente.

Si te ha gustado esta entrada y quieres leer más sobre Arduino puedes consultar la sección tutoriales de Arduino

¡Cumplimos 5 años!

$
0
0
cumplimos-5-anos

Un año más ha pasado desde el comienzo de la andadura de este pequeño rincón donde compartir inquietudes e intereses comunes. Como es costumbre, toca hacer una pequeña retrospectiva y presentar los planes de futuro para el próximo año.

En este año hemos acelerado el ritmo de publicación, especialmente en entradas de Arduino que, temporalmente, han pasado a monopolizar el blog. De una media de una entrada semanal hemos pasado a casi tres. Es necesario para poder terminar las entradas básicas e intermedias y poder empezar a hacer proyectos más complejos e interesantes.

Hablando de números, ha sido un año francamente espectacular. El número de visitas se ha incrementado en un 70%, hemos sobre pasado el millón de visitas, con casi dos millones de páginas vistas, con un ritmo actual de casi cien mil páginas vistas al mes. Sinceramente, un volumen muchísimo más grande de lo que podría haber imaginado al crear el blog.

No puedo más que dar las gracias a todos por vuestro tiempo, visitas, y comentarios. Resulta gratificante saber que alguien lee lo que escribes y sentir que, aunque supone un gran esfuerzo, estas ayudando a mucha gente a introducirse en el mundo de la electrónica y la informática.

Los planes para el próximo año son terminar las entradas de Arduino de nivel intermedio para poder empezar con proyectos complejos y dedicar más tiempo al resto de secciones, especialmente en programación y tutoriales de Raspberry/Linux. Si todo va según lo previsto, el próximo año a estas fechas deberíamos tener varios robots por ahí funcionando.

Eso es todo por ahora. Me despido otro año más, nuevamente agradeciendo a todos los que alguna vez os dejáis caer por el blog para compartir vuestros intereses y proyectos. ¡Gracias por vuestra visita!

Viewing all 1123 articles
Browse latest View live