miércoles, 21 de enero de 2015


Control de belén
PRIMER PROYECTO: 
Se trata de controlar la iluminación y los motores de un belén.


Una profesora del centro nos pidió ayuda para automatizar las lámparas de varios puntos del belén y controlar la velocidad de 4 motores (noria, torno de alfarero, bomba de agua y molino).

Para el encendido de luces empleamos una placa de 8 relés y para la regulación de la velocidad de los motores hemos montado tres transistores controlados por otras tantas salidas analógicas (PWM) que se regulan mediante potenciómetro

El código del programa es el siguiente: 


MATERIALES:
  • Placa de Arduino
  • Cable USB de conexión
  • Placa de relés
  • Transistores
  • Resistencias
  • Potenciómetro

CÓDIGO:
//CONTROL DE BELÉN CON PLACA DE RELÉS Y SALIDAS ANALÓGICAS (PWM)
// Cuatro salidas a relé programadas aleatoriamente y 3 salidas PWM para control de motores
//Definición de un array con las salidas 0 a 3 para controlar 4 salidas ON/OFF. Asignación de pines digitales de salida
byte salida[]={0,1,2,3};  
//Asignación de la duración de cada periodo de activación en los que va a mantenerse una determinada secuencia de salidas digitales, en segundos
int t1=2, t2=3, t3=5;
//Asignación de las secuencias de activación de las salidas digitales
  int sec1[ ]={1,0,1,0};
  int sec2[ ]={0,1,0,1};
  int sec3[ ]={1,0,1,0};

// Declaración de las variables y asignación de las salidas reguladas
const int analogOutPin[]={9,10,11};
// Declaración de las variables y asignación de las entradas de potenciometros para ajustar el valor regulado
const int analogInPin1 = A0;
const int analogInPin2 = A1;
const int analogInPin3 = A2;  
//Declaración y asignación de las variables de salida analógicas PWM. Lo hacemos en una sola instrucción separandolas con coma
int outputValue1, outputValue2, outputValue3 = 0;
//Declaración variables con los valores medidos
int sensorValue1, sensorValue2, sensorValue3;
void setup()
{
  //Declaramos los pines del array salida[] como salidas digitales mediante un bucle
  for(int f=0; f<4 ; f++)
{
  pinMode(salida[f],OUTPUT);
  }
  //Declaramos pines del analogInPin como salidas analógicas
pinMode(analogOutPin[0],OUTPUT);
pinMode(analogOutPin[1],OUTPUT);
pinMode(analogOutPin[2],OUTPUT);
}
void loop ()
{
   /* Escritura de las tres salidas analógicas */
  // lee el valor de la entrada analógica, lo mapea a 256 valores y lo escribe a la salida analógica

   sensorValue1 = analogRead(analogInPin1);
   outputValue1 = map(sensorValue1, 0, 1023, 0, 255);
   analogWrite(analogOutPin[0], outputValue1);
   delay(500);
    sensorValue2 = analogRead(analogInPin2);
    outputValue2 = map(sensorValue2, 0, 1023, 0, 255);
    analogWrite(analogOutPin[1], outputValue2);
    delay(500);
    sensorValue3 = analogRead(analogInPin3);
    outputValue3 = map(sensorValue3, 0, 1023, 0, 255);
    analogWrite(analogOutPin[2], outputValue3);
    delay(500);
for(int i=0;i<4;i++)
{
digitalWrite(salida[i],sec1[i]);
}
delay (t1*1000);
for(int i=0;i<4;i++)
{
digitalWrite(salida[i],sec2[i]);
}
delay (t2*1000);
for(int i=0;i<4;i++)
{
  digitalWrite(salida[i],sec3[i]);
}
delay (t3*1000);
}

"Fritzing"                                       
FOTOS: 
                 
        
OBSERVACIONES:
El alumbrado se hizo con lamparitas incandescentes de 4,5V que se alimentan con una fuente de alimentación externa conectada a las salidas del módulo de relés. Las entradas del módulo de relés se pueden conectar directamente a las salidas digitales 0,1,2 y 3 y a +5V y GND de la placa Arduino.
Los motores se alimentaron mediante una fuente de alimentación externa y se conectaron a la placa Arduino mediante un transistor actuando como interruptor controlado por las salidas PWM 9, 10 y 11 de Arduino, permitiendo regular la velocidad de los motores mediante la señal de entrada de los potenciómetros.
Las corrientes de los motores pueden llegar a los 2 o 3 amperios por lo que fue necesaria una fuente de 5A.
AUTOR: Mario Baselga Carreras.  IES “Ciudad Jardín”. Badajoz

No hay comentarios:

Publicar un comentario