Archivo de la etiqueta: atmega

Arduino Robot: Lottie Lemon


Nuevo robot educativo gracias a la colaboración entre la Asociación de Robótica Educativa Complubot y del equipo de Arduino. Este robot, llamado Lottie Lemon, presenta dos procesadores ATMEGA32U4 (uno en cada una de sus placas) y se encargan tanto de controlar los motores que se encuentran en la placa inferior como de los sensores que se encuentran en la placa superior. La programación de este robot es similar a la programación de un Arduino Leonardo. Os dejo unas fotos de está maravilla educativa en el tema de la robótica.

ArduinoRobot

Robot Lottie Lemon

LottieLemon_figure_hardware_top

LottieLemon_figure_hardware_bottom_back

Para más información podéis visitar los siguientes enlaces: Página oficial Arduino Robot, primeros pasos con Arduino Robot y Librerías Arduino Robot.

Si te ha servido de ayuda esta entrada, puedes realizar un donativo para agradecer el tiempo que dedico al blog y ayudar a hacer más entradas.

donativo_paypal

sensor de temperatura tmp36 y arduino


En esta nueva entrada vamos a ver como usar un sensor de temperatura analógico (emplea uno de los pines analógicos) modelo TMP36 con nuestra placa Arduino, dicho sensor es de la casa Analog Devices y permite realizar unas medidas de temperatura bastante precisas y a un muy reducido coste.

Foto Sensor TMP 36 GZ

Como podéis ver el sensor empleado es de tipo TO-92 (encapsulado como el DS18B20 o el de algunos transistores). Además se caracteriza por ser un sensor que es muy empleado para realizar medidas de temperatura y es muy sencillo de emplear (no hacen falta librerías para su uso). Es un sensor que se puede alimentar entre un rango de voltaje que va desde los 2.7V hasta los 5.5V, viene calibrado directamente en grados centígrados (ºC), presenta un factor de escala lineal de 10 mV/ºC (esto es la relación entre el cambio en la señal de salida y el cambio en la señal de la medida, es decir, cada 10 mV aumenta 1 ºC). Las características generales son:

Caracteristicas TMP36

Aquí os dejo un enlace para que podáis descargaros el datasheet del sensor de temperatura, el esquema en fritzing de conexionado y el sketch de Arduino: http://www.mediafire.com/?c26yr7fk48my0fw

Os pongo el esquema para la conexión del sensor a Arduino:

Conexion Fritzing TMP36

Aquí tenéis un código de ejemplo, de como obtener tanto el voltaje leído por el sensor, como los grados centígrados y los grados fahrenheit, además de mostrar los valores máximos y mínimos para cada una de las medidas mencionadas.

/* Sketch de ejemplo para testear el sensor de temperatura analógico TMP36
 Escrito por Regata para www.tallerarduino.wordpress.com

 MODO DE CONEXIÓN DEL SENSOR

 Conectamos el pin 1 que corresponde a la alimentación del sensor con los 5V del Arduino
 Conectamos el pin 2 que corresponde al pin de datos del sensor con cualquier pin analógico del Arduino
 Conectamos el pin 3 que corresponde al pin de masa (GND) del sensor con el pin GND del Arduino

*/

int temp = 5;  //Pin analógico A5 del Arduino donde conectaremos el pin de datos del sensor TMP36
float maxC = 0, minC = 100, maxF = 0, minF = 500, maxV = 0, minV = 5;  //Variables para ir comprobando maximos y minimos

void setup()
{
  Serial.begin(9600);  //Iniciamos comunicación serie con el Arduino para ver los resultados del sensor
                        //a través de la consola serie del IDE de Arduino
}

void loop()
{
  float voltaje, gradosC, gradosF;  //Declaramos estas variables tipo float para guardar los valores de lectura
                                    //del sensor, así como las conversiones a realizar para convertir a grados
                                    //centígrados y a grados Fahrenheit
                                    
  voltaje = analogRead(5) * 0.004882814;  //Con esta operación lo que hacemos es convertir el valor que nos devuelve
                                           //el analogRead(5) que va a estar comprendido entre 0 y 1023 a un valor
                                           //comprendido entre los 0.0 y los 5.0 voltios
                                           
  gradosC = (voltaje - 0.5) * 100.0;  //Gracias a esta fórmula que viene en el datasheet del sensor podemos convertir
                                       //el valor del voltaje a grados centigrados
                                       
  gradosF = ((voltaje - 0.5) * 100.0) * (9.0/5.0) + 32.0;  //Gracias a esta fórmula que viene en el datasheet del sensor podemos convertir
                                                           //el valor del voltaje a grados Fahrenheit
                                                           
  //Mostramos mensaje con valores actuales de humedad y temperatura, asi como maximos y minimos de cada uno de ellos
  Serial.print("Medidas actuales\n");
  Serial.print("C: "); 
  Serial.print(gradosC);
  Serial.print("\tF: "); 
  Serial.print(gradosF);
  Serial.print("\tV: "); 
  Serial.print(voltaje);
  //Comprobacion de maximos y minimos de humedad y temperatura
  if (maxC < gradosC)
    maxC = gradosC;
  if (gradosC < minC)
    minC = gradosC;
  if (maxF < gradosF)
    maxF = gradosF;
  if (gradosF < minF)
    minF = gradosF;
  if (maxV < voltaje)
    maxV = voltaje;
  if (voltaje < minV)
    minV = voltaje;
  Serial.print("\nMedidas maximas\n");
  Serial.print("C: "); 
  Serial.print(maxC);
  Serial.print("\tF: "); 
  Serial.print(maxF);
  Serial.print("\tV: "); 
  Serial.print(maxV);
  Serial.print("\nMedidas minimas\n");
  Serial.print("C: "); 
  Serial.print(minC);
  Serial.print("\tF: "); 
  Serial.print(minF);
  Serial.print("\tV: "); 
  Serial.print(minV);
  Serial.print("\n\n");
  delay(2000);  //Usamos un retardo de 2 segundos entre lectura y lectura  
}

La salida que obtenemos a través de la consola serie del IDE de Arduino es la siguiente:

Muestra de datos TMP36

Espero que os sirva de ayuda para vuestros proyectos!!

Si te ha servido de ayuda esta entrada, puedes realizar un donativo para agradecer el tiempo que dedico al blog y ayudar a hacer más entradas.

donativo_paypal

Nueva placa Arduino: Arduino Esplora


arduino esplora delantera

Los chicos de Arduino nos traen una nueva placa: la Arduino Esplora, la cual viene con un procesador Atmega32U4, como el de la placa Arduino Leonardo, y que además trae incorporados varios sensores y actuadores en ella. También presenta un diseño un tanto especial, que puede recordar al de un mando de videoconsola. En la siguiente imagen podéis ver todos los sensores y actuadores de los que dispone:

arduino esplora

Aquí más información: Arduino Esplora

Si te ha servido de ayuda esta entrada, puedes realizar un donativo para agradecer el tiempo que dedico al blog y ayudar a hacer más entradas.

donativo_paypal

Sensor de nivel de liquido y arduino o pinguino pic


Como estoy metido en un proyecto sobre el control de unos depósitos de agua para la furgoneta vivienda de un amigo mio, me parece interesante hablar aquí de los sensores de nivel de liquido.

Los sensores de nivel de liquido de los que vamos a hablar son de este tipo:

La verdad es que son muy fáciles de usar, ya que cuando están activados puentean los dos cables que traen, así que funcionan como un interruptor. Os dejo las características de los mismos:

El ejemplo que hice para probarlo es muy básico y es el mismo tanto para arduino como para pinguino pic, lo único que cambia son los pines a donde he conectado tanto el sensor como el led de alarma (los podéis ver en el código de pinguino pic), os dejo una imagen del esquema de conexionado:

Aquí podéis ver un vídeo del funcionamiento del sensor (en un improvisado depósito de agua realizado con una botella de refresco):

El código para arduino:

/*Prueba sensor de nivel de liquido*/

int sensor=12;  //Indicamos el pin al que tenemos conectado el sensor de nivel de liquido
int led=11;      //Indicamos el pin al que tenemos conectado el led que indica alarma

void setup()
{                
	//Configuramos los pines correspondientes como entradas o salidas
  pinMode(sensor,INPUT);   //sensor de nivel de liquido
  pinMode(led, OUTPUT); //salida led
}

void loop()
{
  if(digitalRead(sensor)==LOW)
    digitalWrite(led,LOW);
  else
    digitalWrite(led,HIGH);
}

El código para pinguino pic:

/*Prueba sensor de nivel de liquido*/

int sensor=0;  //Indicamos el pin al que tenemos conectado el sensor de nivel de liquido
int led=1;      //Indicamos el pin al que tenemos conectado el led que indica alarma

void setup()
{                
	//Configuramos los pines correspondientes como entradas o salidas
  pinMode(sensor,INPUT);   //sensor de nivel de liquido
  pinMode(led, OUTPUT); //salida led
}

void loop()
{
  if(digitalRead(sensor)==LOW)
    digitalWrite(led,LOW);
  else
    digitalWrite(led,HIGH);
}

Espero que os sirva de ayuda!!!

Si te ha servido de ayuda esta entrada, puedes realizar un donativo para agradecer el tiempo que dedico al blog y ayudar a hacer más entradas.

donativo_paypal

Módulo de Relés


Como en un anterior tutorial hemos visto como usar y montar un circuito de relés para tu arduino/pinguino pic, aquí os dejo un sencillo tutorial para poder conectar módulos de relés que ya se compran montados a nuestros proyectos.

El módulo que voy a emplear es uno muy típico que podéis encontrar por ebay a un precio realmente muy atractivo, se trata de este:

Como podéis ver, en este módulo (que es el que he empleado para el tutorial) trae dos entradas para poder activar dos relés, pero podemos encontrar módulos con más relés e incluso de un solo relé, lo que necesitemos para nuestros proyectos.

Os dejo el esquema de conexión y paso a explicar un poco la conexión para que funcione todo correctamente:

Como podéis ver en la foto del módulo observamos que tenemos dos tiras de pines, una que es en la que esta el jumper, que tiene tres pines y podemos seleccionar alimentar todo el módulo de forma conjunta (es decir seleccionar con el jumper jd-vcc y vcc), o bien alimentar de forma independiente tanto optoacopladores como relés (quitando el jumper), yo he usado la forma de alimentar todo de manera conjunta, ya que me parece la forma más sencillo de hacerlo, así que he dejado el jumper uniendo jd-vcc y vcc. Y la otra tira de pines que es donde nos aparece en el siguiente orden: GND IN1 IN2 VCC, aquí es donde unimos la alimentación con nuestro arduino, es decir, GND del módulo con GND del arduino/pinguino pic, VCC del módulo con 5V del arduino/pinguino pic y las entradas IN1 e IN2 (se activan las bobinas de los relés cuando ponemos a GND dichas entradas) conectados a los pines que deseemos de nuestro arduino/pinguino pic, serán los encargados de activar las bobinas de los relés correspondientes. Como veis es una manera muy sencilla de poder emplear relés en nuestros proyectos sin necesidad de construirnos una pcb para realizar dicha tarea.

Por otro lado tenemos los conectores a los que conectaremos los aparatos eléctricos que queramos activar o desactivar mediante nuestro módulos de relés, como podéis observar en la imagen de arriba, tienen tres conectores cada relé, empezando por abajo observamos en este orden: Conector normalmente cerrado del relé 1 (está activo hasta que se activa la bobina del relé mediante la entrada IN1 poniéndola a LOW), el conector común del relé 1 y el conector normalmente abierto del relé 1 (está desactivado hasta que se activa la bobina del relé mediante la entrada IN1 y permanece activado hasta que se ponga a HIGH dicha entrada).

Os dejo un vídeo de funcionamiento utilizando el módulo con un arduino uno y una bombilla a 220V, donde se apaga/enciende con un intervalo de 5 segundos, empleando el ejemplo blink.

Código:

/*
Ejemplo de encendido/apagado de una bombilla de 220V con un módulo de relés
 */

void setup() 
{                
  // Indicamos el pin que va a activar o desactivar la bobina del relé
  pinMode(13, OUTPUT);     
}

void loop() 
{
  //Ojo las bobinas de los relés se activan cuando a las entradas del módulo tienen GND
  digitalWrite(13, HIGH);   // Desactivamos la bobina del relé
  delay(5000);              // Esperamos 5 segundos
  digitalWrite(13, LOW);    // Activamos la bobina del relé
  delay(5000);              // Esperamos 5 segundos
}

Si te ha servido de ayuda esta entrada, puedes realizar un donativo para agradecer el tiempo que dedico al blog y ayudar a hacer más entradas.

donativo_paypal

Si te ha servido de ayuda esta entrada, puedes realizar un donativo para agradecer el tiempo que dedico al blog y ayudar a hacer más entradas.

donativo_paypal

Relés y Arduino: Encendiendo una bombilla desde tu arduino.


En este nuevo post vamos a hablar de como hacer funcionar un relé con Arduino, en primer lugar necesitamos saber que un relé es un dispositivo que funciona como un interruptor, permitiendo la activación o des-activación de un circuito eléctrico independiente, es decir, podemos activar aparatos electrónicos de mayor voltaje y gran consumo a través de nuestros microcontroladores (como por ejemplo encender una bombilla que funciona a 220V a través de nuestro microcontrolador).

Yo para este tutorial he empleado unos relés de la casa HUI KE que funcionan a 5V y comprados por ebay a un precio muy reducido, en concreto HUI KE HK4100F-DC5V-SHG, os pongo unas imagenes y las conexiones interiores:

Como podéis ver estos relés son de muy reducido tamaño y perfectos para trabajar con nuestro microcontroladores, ya que funcionan a 5V, sin necesidad de disponer de fuentes externas para activar su bobina. Os dejo el esquema de conexión realizado en Fritzing y un esquemático realizado en Eagle:

Como podéis ver los componentes que necesitamos para realizar el circuito de control son muy pocos:

* Relé de 5V (En este caso de la casa HUI KE, vale cualquier otro).
* Transistor BC547.
* Resistencia de 10k.
* Diodo 1N4001.

Como siempre os dejo una foto del montaje del mismo y un vídeo del funcionamiento del circuito, en esta caso la bombilla se enciendo durante un segundo y permanece apagada durante diez segundos:

Y por último os dejo el código (aunque es muy sencillo):

/*Programa realizado por Javier Couto Rego "Regata" para
www.tallerarduino.wordpress.com

Encendiendo una bombilla a 220V con un Arduino y un relé
a 5V*/

int rele=8;

void setup()
{
  pinMode(rele,OUTPUT);
}

void loop()
{
  //Nota tenemos el relé conectado como Normalmente Abierto
  //así solo se activará la carga cuando activemos la bobina
  //del relé, para que funcione al revés cambiaremos el cable
  //a la posición Normalmente Cerrado
  digitalWrite(rele,HIGH);  //Activamos la bobina del relé y encendemos la bombilla
  delay(1000);              //durante 1 segundo
  digitalWrite(rele,LOW);   //Desactivamos la bobina del relé y apagamos la bombilla
  delay(10000);             //durante 10 segundos
}

Espero que os guste y que os sirva de ayuda!!!

Si te ha servido de ayuda esta entrada, puedes realizar un donativo para agradecer el tiempo que dedico al blog y ayudar a hacer más entradas.

donativo_paypal

led rgb, arduino y processing


Después de ver los videotutoriales de 0xDA_bit sobre Processing, me entró el gusanillo de probar de nuevo este maravilloso software, y decidí hacer el control de un led RGB conectado a Arduino pero modificando sus componentes de color mediante un programa realizado en Processing.

Para realizar dicho cometido me puse a buscar librerias de componentes para añadir a nuestros programas que vayamos realizando en Processing e ir haciendolos más profesionales y más complejos. Dicha librería la podéis descargar desde http://www.mediafire.com/?as8bnrkfk9v8kjf o bien desde la siguiente página web http://www.lagers.org.uk/g4p/.

Os dejo el esquemático de conexión del diodo led RGB a Arduino y también una imagen del software:

Aquí tenéis el video de funcionamiento:

Para el código basta con grabar en el Arduino el ejemplo que trae el IDE de Arduino que está en Firmata y es el StandardFirmata for Uno, y este es el código para processing (acordaros de copiar la librería guicomponents en processing):

//Añadimos las librerias necesarias
import processing.serial.*;
import cc.arduino.*;
import guicomponents.*;

Arduino arduino;
/*Programa simple que crea 3 selectores de color para controlar 
los componentes RGB de un diodo led conectado a Arduino.*/
GKnob knbRed, knbGreen, knbBlue;
int r, g, b; //variables donde guardaremos el valor correspondiente a cada componente de color
int kx, ky;

void setup() {
  size(400, 220);
  arduino = new Arduino(this,  Arduino.list()[2], 57600);  //Creamos el componente para trabajar con Arduino desde el programa 
  //Arriba donde pone Arduino.list()[], el 2 es donde me reconoce a mi el Arduino, puede ser 1 o 0, depende de las cosas conectadas
  //mediante puerto serie virtual
  r = g = b = 160;  //iniciamos cada componente a un valor de 160 (entre 0 y 255)
  arduino.analogWrite(10,r);  //Escribimos dichos valores en los 3 pines asignados para controlar nuestro diodo led RGB
  arduino.analogWrite(9,g);
  arduino.analogWrite(6,b);
  kx = 20;
  ky = 20;
  
  //Creacción y control del programa en processing, viene todo hecho en los ejemplos de la libreria guicomponents
  G4P.setMouseOverEnabled(true);
  G4P.cursor(HAND, CROSS);

  knbRed = new GKnob(this, kx, ky, 150, 150, 270);
  knbRed.setControlMode(GKnob.CTRL_ANGULAR);
  knbRed.setRotArcOnly(true);
  knbRed.setLimits(r, 0, 255);
  knbRed.setNbrTickMarks(9);
  knbRed.localColor = GCScheme.getColor(this, GCScheme.RED_SCHEME);

  knbGreen = new GKnob(this, kx + 8, ky, 150, 270, 20);
  knbGreen.setControlMode(GKnob.CTRL_ANGULAR);
  knbGreen.setRotArcOnly(true);
  knbGreen.setLimits(g, 0, 255);
  knbGreen.setNbrTickMarks(9);
  knbGreen.localColor = GCScheme.getColor(this, GCScheme.GREEN_SCHEME);

  knbBlue = new GKnob(this, kx + 4, ky + 9, 150, 20, 150);
  knbBlue.setControlMode(GKnob.CTRL_ANGULAR);
  knbBlue.setRotArcOnly(true);
  knbBlue.setLimits(b, 0, 255);
  knbBlue.setNbrTickMarks(9);

  stroke(0);
  strokeWeight(3);
  rectMode(CORNERS);
}

void draw() {
  background(220, 220, 255);
  fill(r, g, b);
  rect(kx + 190, 40, width - 40, height - 40);
  fill(0);
  text("Drag mouse in circular movement around the knobs centre", 10, height-10);
}


//En esta función es donde mando el valor pwm al arduino para cada color del led RGB
void handleKnobEvents(GKnob knob) {
  if (knob == knbRed){ 
    r = knob.getValue();
    arduino.analogWrite(10,r);}
  else if (knob == knbGreen){
    g = knob.getValue();
    arduino.analogWrite(9,g);}
  else if (knob == knbBlue){
    b = knob.getValue();
    arduino.analogWrite(6,b);}
}

Espero que os guste!!

Si te ha servido de ayuda esta entrada, puedes realizar un donativo para agradecer el tiempo que dedico al blog y ayudar a hacer más entradas.

donativo_paypal