Archivo por días: 14 septiembre, 2014

Barrera de Parking con Arduino Leonardo

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

 

montaje_real_jdd

montaje_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