Programa Arduino para Controlar un Coche y Domotizar una Casa con LCD, PIR y Sensores

Informática5,47 KB

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);
    }
  }
}

Descargar

PDF Word HTML