miércoles, 12 de noviembre de 2014

Barrera de Parking con Arduino Leonardo

El presente proyecto simula la barrera de un parking con Arduino Leonardo.  

  montaje_real_jddmontaje_jdd   





 El programa es el siguiente:

 // Barrera de entrada a Parking
// Ejemplo elaborado por Jesús Díaz Díaz
// El sistema simula la barrera de entrada a un parking
// Al comienzo del programa la barrera está baja y el led ROJO encendido
// Cuando un sujeto aprieta el pulsador, la barrera comienza a subir y en la parte alta se enciende el led VERDE
// Al mismo tiempo se oye un sonido que cambia de tono cuando está a punto de bajar la barrera
// Se apaga y comienza a bajar la barrera y se enciende el LED rojo
#include <Servo.h> // incluyo la librería servo.h
Servo miservo; // Definimos “miservo” para controlar un servomotor
int ledverde = 12; // utilizo el pin 12 para led verde
int ledrojo = 11; // utilizo el pin 11 para led rojo
int salidaaudio = 6;// utilizo el pin 6 emitir un tono de audio
int pulsador = 2; // utilizo el pin 2 como botón de entrada
int pos = 0; // variable para almacenar la posición del servo
int ESTADOpulsador = 0; // variable para almacenar la lectura del estado del pulsador
void setup()
{
miservo.attach(9); // Convierte el pin 9 en el controlador (driver) del servo denominado “miservo”
// Inicializa los pin digitales como salida
pinMode(ledverde, OUTPUT);
pinMode(ledrojo, OUTPUT);
pinMode(salidaaudio, OUTPUT);
// defino el pulsador como entrada:
pinMode(pulsador, INPUT);
miservo.write(0); // Fija en el servo la posición 0 grados y hace que inicialmente la barrera esté baja
}
void loop()
{
digitalWrite(ledverde, LOW); // inicialmente led verde apagado
digitalWrite(ledrojo, HIGH); // inicialmente led rojo encendido
ESTADOpulsador = digitalRead(pulsador); // leo el estado del botón del pulsador y lo guardo en la variable ESTADOpulsador
if (ESTADOpulsador == HIGH) { // Si ESTADOpulsador está activo (HIGH) comienza a levantar la barrera
for(pos = 0; pos < 90; pos += 1) // La variable “pos” se incrementa desde 0 a 90 grados
{ // en pasos de 1 grado
miservo.write(pos); // indica al servo que vaya la la posición almacenada en la variable “pos”
delay(20); // espera 20ms hasta que el servo alcance la posición
}
digitalWrite(ledrojo, LOW); // con la barrera subida el led rojo se apaga
digitalWrite(ledverde, HIGH); // turn the LED on (HIGH is the voltage level)
//Emite sonido que cambia su frecuencia unos segundos antes de comenzar a bajar como aviso
// sintaxis de tone: tone(pin, frequency)
tone(salidaaudio, 440);
delay(4000);
noTone(salidaaudio);
tone(salidaaudio, 840);
delay(500);
noTone(salidaaudio);
tone(salidaaudio, 440);
delay(500);
noTone(salidaaudio);
tone(salidaaudio, 840);
delay(500);
noTone(salidaaudio);
tone(salidaaudio, 440);
delay(500);
noTone(salidaaudio);
tone(salidaaudio, 840);
delay(500);
noTone(salidaaudio);
tone(salidaaudio, 440);
delay(500);
noTone(salidaaudio);
// Se termina el sonido de aviso
digitalWrite(ledverde, LOW); // se apaga el led verde
digitalWrite(ledrojo, HIGH); // se enciendo el led rojo
for(pos = 90; pos>=1; pos-=1) // comienza a bajar la barrera desde la posición 90 hasta 0 grados
{
miservo.write(pos); // indica al servo que vaya a la posición almacenada en la variable
delay(20); // espera 20ms para que el servo alcance la posición
}
}
}

esquema_jdd

No hay comentarios:

Publicar un comentario