Programa Arduino para Controlar un Coche y Domotizar una Casa con LCD, PIR y Sensores
Programa Arduino para controlar un coche
Realiza un programa que controle un coche. Lo primero es encender y apagar el coche con un pulsador. Con el coche apagado se debe mostrar en el LCD "Coche apagado. Apriete el pulsador". Una vez el coche encendido tiene que realizar las siguientes funciones:
- Una vez encendido el coche, mostrar por el LCD "Coche encendido".
- Si es de noche (usar sensor de luminosidad), encender las luces del coche (un LED). Si es de día, nada.
- Si la temperatura es menor de 20 ºC, encender la calefacción (LED de calefacción).
- Si detecta que cruza una persona o un obstáculo (se puede usar el sensor de proximidad para ambas), que muestre por LCD "Cuidado obstáculo" y suene el buzzer.
Código del control del coche
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
LiquidCrystal_I2C lcd_1(0x27, 16, 2);
int pulsador1 = 2;
int pir = 3;
int altavoz = 4;
int luzcalefactor = 12;
int sensorluz = A0;
int sensortemp = A1;
int luces = 13;
int segundos = 0;
int contador = 0;
int estadoluces = 0;
int estadotemp = 0;
void setup() {
pinMode(pulsador1, INPUT);
pinMode(pir, INPUT);
pinMode(sensorluz, INPUT);
pinMode(sensortemp, INPUT);
pinMode(altavoz, OUTPUT);
pinMode(luzcalefactor, OUTPUT);
pinMode(luces, OUTPUT);
lcd_1.init();
lcd_1.backlight();
lcd_1.print("Apriete para enc");
Serial.begin(9600);
}
void loop() {
int leerboton1 = digitalRead(pulsador1);
if ((leerboton1 == 1) && (contador % 2 == 0)) {
lcd_1.clear();
lcd_1.print("Vehiculo encendido");
contador += 1;
Serial.println("test");
} else {
if ((leerboton1 == 1) && (contador % 2 == 1)) {
lcd_1.clear();
lcd_1.print("Vehiculo apagado");
contador += 1;
digitalWrite(luces, LOW);
digitalWrite(luzcalefactor, LOW);
}
}
// Control de luces
if (contador % 2 == 1) { // Solo si el vehículo está encendido
int leersensorluz1 = analogRead(sensorluz);
if (leersensorluz1 >= 594) {
digitalWrite(luces, HIGH);
} else {
if (leersensorluz1 <= 594) {
digitalWrite(luces, LOW);
}
}
// Control calefacción
int leersensortemp = analogRead(sensortemp);
if (leersensortemp <= 143) {
digitalWrite(luzcalefactor, HIGH);
} else {
if (leersensortemp >= 144) {
digitalWrite(luzcalefactor, LOW);
}
}
// Sensor PIR
int leerpir = digitalRead(pir);
Serial.println(leerpir);
if (leerpir == 1) {
lcd_1.clear();
lcd_1.print("Obstaculo enfrente");
tone(altavoz, 100, 100);
}
}
}Programa Arduino para domotizar la entrada de una casa
Se va a domotizar una casa. En la entrada ponemos un timbre (buzzer) que sonará cada vez que alguien pulse el timbre. Después de que se pulse el timbre (2 veces) se encenderá un LED y se mostrará en el LCD "Puerta abierta, puede pasar", siempre que haya una persona dentro. Si no hay nadie, se escribirá en el LCD "No hay nadie. Vuelva otro día". En el pasillo habrá un PIR que, cuando detecte a la persona, si es de noche, le encenderá la luz.
Código de la domótica de entrada
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
int pulsadortimbre = 2;
int pulsadorsalida = 3;
int pir = 7;
int sensorluz = 4;
int sensortemp = A0;
int luzpasillo = 11;
int luzcalefa = 10;
int altavoz = 12;
int luz = 13;
int contadortimbre = 0;
int personadentro = 1;
void setup() {
pinMode(pulsadortimbre, INPUT);
pinMode(pulsadorsalida, INPUT);
pinMode(pir, INPUT);
pinMode(sensorluz, INPUT);
pinMode(sensortemp, INPUT);
pinMode(luzpasillo, OUTPUT);
pinMode(luzcalefa, OUTPUT);
pinMode(altavoz, OUTPUT);
pinMode(luz, OUTPUT);
lcd.init();
lcd.backlight();
lcd.print("Hola");
Serial.begin(9600);
}
void loop() {
int leerpulsador = digitalRead(pulsadortimbre);
// Entrada
if ((leerpulsador == 0) && (personadentro % 2 == 1)) {
tone(altavoz, 100, 800);
contadortimbre += 1;
delay(1000); // Abrir la puerta al 2.º timbre + persona dentro
if ((contadortimbre == 2) && (personadentro % 2 == 1)) {
lcd.clear();
lcd.print("Puerta abierta.");
digitalWrite(luz, HIGH);
}
} else { // Si no hay nadie, bye bye
if ((leerpulsador == 0) && (personadentro % 2 == 0)) {
tone(altavoz, 100, 800);
lcd.clear();
lcd.print("No hay nadie.");
lcd.setCursor(0, 1);
lcd.print("Vuelva otro dia");
}
}
if ((contadortimbre >= 2) && (personadentro % 2 == 1)) {
int leerpir = digitalRead(pir); // 1 detecta | 0 no detecta
int leerluz = digitalRead(sensorluz); // 0 día | 1 noche
int leertemp = analogRead(sensortemp); // 139 menos de 18 ºC
int leerpulsadorsalida = digitalRead(pulsadorsalida);
if ((leerpir == 1) && (leerluz == 1)) {
digitalWrite(luzpasillo, HIGH);
} else {
digitalWrite(luzpasillo, LOW);
}
if (leertemp <= 139) {
digitalWrite(luzcalefa, HIGH);
} else {
digitalWrite(luzcalefa, LOW);
}
if (leerpulsadorsalida == 0) {
personadentro += 1;
contadortimbre = 0;
lcd.clear();
lcd.print("Puerta cerrada.");
digitalWrite(luzcalefa, LOW);
digitalWrite(luzpasillo, LOW);
digitalWrite(luz, LOW);
}
}
}