Sistema de detección de paso por un camino con Arduino
Descripción
La finalidad del proyecto es detectar el paso de coches y personas a la entrada de un huerto y avisar con una señal sonora dentro de la casa de este. Por esto este proyecto está compuesto por 2 módulos:
- Módulo de detección de paso, ya sea de personas o de coches.
- Módulo de aviso de paso.
Los requerimientos son los siguientes:
- El módulo de detección de paso, al estar en el huerto, ha de tener una fuente de alimentación independiente, en este caso le hemos puesto una placa solar y una batería.
- El módulo de aviso ha de sonar cuando el módulo de detección le avise.
- El módulo de detección está a la entrada del huerto.
- El módulo de aviso está dentro de la casa.
Instrucciones
Componentes usados
Los componentes usados han sido, por módulo:
- Módulo de detección
- Módulo de aviso
- Arduino Nano
- PCB 5x7 cm
- Módulos inalámbricos RF APC220
- Buzzer pasivo / relé.
Montaje del circuito
El esquema en Fritzing es el siguiente:
- Módulo de detección
En este esquema no se ha añadido la parte de conexión al Lipo Rider Pro, la batería y la placa solar, por no tener los diseños para el Fritzing.
- Módulo de aviso
Imágenes del sistema montado dentro del laboratorio:
- Módulo de detección
- Módulo de aviso
Software
Las librerías usadas han sido:
El código del arduino es el siguiente:
- Módulo de detección
/*
Título: Modulo_RF_APC220 --> Puerto serie
*/
#include <Ultrasonic.h>
//Pins ultrasonido
const int TRIG_PIN = 12;
const int ECHO_PIN = 13;
Ultrasonic ultrasonic(TRIG_PIN, ECHO_PIN);
void setup()
{
Serial.begin(9600); // Establecemos la velocidad del puerto serie (Igual que APC220)
}
void loop()
{
float cmMsec;
long microsec = ultrasonic.timing();
cmMsec = ultrasonic.convert(microsec, Ultrasonic::CM);
Serial.print(int(cmMsec));
Serial.println("=");
delay(1000);
}
- Módulo de aviso
// create notes for our song
int C = 131;
int D = 147;
int E = 165;
int F = 175;
int G = 196;
// create an array to hold note values
int songNotes[] = {E, E, E, E, E, E, E, G, C, D, E, F, F, F, F, F, E, E, E, G, G, F, D, C};
// create another array to hold note lengths
int noteDurations[] = {4, 4, 2, 4, 4, 2, 4, 4, 4, 4, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1};
byte byteRead; //Datos leídos por el puerto serie
long longitud; //Longitud recibida por el puerto serie
long longitudMaxima = 100;
String inString = ""; //This string is used to store the incoming data
unsigned int pitch; //This is the variable we will use to store the buzzers p
void setup()
{
Serial.begin(9600);
longitud = 0;
}
void loop()
{
while (Serial.available() > 0)
{
byteRead = Serial.read();
//listen for numbers between 0-9
if (byteRead > 47 && byteRead < 58) {
//number found
longitud = (longitud * 10) + (byteRead - 48);
}
if (byteRead == 61)
{
Serial.println(longitud);
if (longitud <= longitudMaxima)
{
melodia();
}
longitud = 0;
}
}
}
void melodia()
{
// iterate through arrays to play each note for its duration
// plays our jingle once
for (int i = 0; i < 24; i ++)
{
// calculate note duration
// 1 second divided by note length
// adjusting value of 1000 can change tempo
int noteDuration = 1000 / noteDurations[i];
// sends tone to pin 8
tone(8, songNotes[i], noteDuration);
// pause between notes a little to hear them better
// this can also be used to adjust tempo
int pauseBetweenNotes = noteDuration * 1.3;
delay(pauseBetweenNotes);
// once note is done, stop playing it
noTone(8);
}
}