SISTEMA DE SEGURIDAD AUTOVIL

 









SOLO CON SENSOR DE ULTRASONIDO
#include <NewPing.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define TRIGGER_PIN  4  // Arduino pin tied to trigger pin on the ultrasonic sensor.
#define ECHO_PIN     3  // Arduino pin tied to echo pin on the ultrasonic sensor.
#define MAX_DISTANCE 400 // Maximum distance we want to ping for (in centimeters). Maximum sensor distance is rated at 400-500cm.
long previousMillis = 0;  
long previousPanico = 0;      
long Tespera1 = 30000;
long Tespera2 = 10000;
long intervalEspera = 10000;
long tiempoBoton = 3000;
int Pot = A0;
int Dist = 0;
int Led = 11; // 10 ** CAMBIAR POR D11 EN PCB MEJORADO
int Buzzer = 9;
int Rele1 = A1;
int Rele2 = A3;
int Boton1 = 6;
int EstadoBoton1 = 0;
int EstadoBoton2 = 0;
int Boton2 = 10; //9 CAMBIAR POR D10 EN PCB MEJORADO
int Presencia = 1;
int Panico = 0;
int EstadoA = 0;
int EstadoB = 0;
int Estadooled = 0;
int Modo = 1;
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // NewPing setup of pins and maximum distance.

#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
#define OLED_RESET     -1 // Reset pin # (or -1 if sharing Arduino reset pin)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

void setup() {
  Serial.begin(9600); // Open serial monitor at 115200 baud to see ping results.
  pinMode(Pot, INPUT);
  pinMode(Boton1, INPUT_PULLUP); //INPUT_PULLUP
  pinMode(Boton2, INPUT_PULLUP); //INPUT_PULLUP
  pinMode(Led, OUTPUT);
  pinMode(Buzzer, OUTPUT);
  digitalWrite(Led, LOW);
  digitalWrite(Buzzer, LOW);
  pinMode(Rele1, OUTPUT);
  pinMode(Rele2, OUTPUT);
  digitalWrite(Rele1, LOW);
  digitalWrite(Rele2, LOW);
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  delay(2000);
  display.clearDisplay();
  display.setTextColor(WHITE);
  //sonar.ping_cm();
}

void loop() {
  Dist = map(analogRead(Pot), 0, 1023, 0, 150);
     
  EstadoBoton1 = digitalRead(Boton1);
  EstadoBoton2 = digitalRead(Boton2);
  delay(50);                     // Wait 50ms between pings (about 20 pings/sec). 29ms should be the shortest delay between pings.
 
  if(Estadooled == 0){
  display.clearDisplay();
  display.setTextSize(2);
  display.setCursor(10,20);
  display.print(sonar.ping_cm());
  display.setTextSize(2);
  display.setCursor(60, 20);
  display.print("CM");
  display.setTextSize(2);
  display.setCursor(10,50);
  display.print(Dist);
  display.setTextSize(2);
  display.setCursor(60, 50);
  display.print("POT");
  display.display();
  }
  if(sonar.ping_cm() <= Dist){
    digitalWrite(Led, HIGH);
  }
  else{
    digitalWrite(Led, LOW);
  }
 
  if((sonar.ping_cm() <= Dist) && Panico == 0 && Presencia == 1){ //NO SE EJECUTARA NUEVAMENTE HASTA QUE PANICO = 0
    //Presencia = 0;
    delay(1000); // SI DETECTA CONDUCTOR EN MAS DE 1 SEGUNDO .... ENTONCES ...
    if((sonar.ping_cm() <= Dist) && Panico == 0){
    previousMillis = millis();
    Panico = 1;
    EstadoA = 1;
    Estadooled = 1;
    display.clearDisplay();
    display.setTextSize(2);
    display.setCursor(10,20);
    display.print("CONDUCTOR");
    display.setTextSize(2);
    display.setCursor(10,50);
    display.print("DETECTADO");
    display.display();
    }
  }

  if((millis() - previousMillis >= Tespera1) && Panico == 1 && EstadoA == 1){   //
     Panico = 1;
     EstadoA = 0;
         
     digitalWrite(Buzzer, HIGH);
     previousPanico = millis();
     EstadoB = 1;
     display.clearDisplay();
    display.setTextSize(2);
    display.setCursor(10,20);
    display.print("BUZZER");
    display.setTextSize(2);
    display.setCursor(10,50);
    display.print("ENCENDIDO");
    display.display();
     }

  if((millis() - previousPanico >= Tespera2) && EstadoB == 1 && Panico == 1){
    digitalWrite(Buzzer, LOW);
    Panico = 1;
    EstadoA = 0;
    EstadoB = 0;
    digitalWrite(Rele1, HIGH);
    digitalWrite(Rele2, HIGH);
    display.clearDisplay();
    display.setTextSize(2);
    display.setCursor(10,20);
    display.print("RELES");
    display.setTextSize(2);
    display.setCursor(10,50);
    display.print("ENCENDIDOS");
    display.display();
  }


  if(EstadoBoton1 == LOW){ //LOW YA QUE SERA INPUT PULLUP
   delay(tiempoBoton);
   EstadoBoton1 = digitalRead(Boton1);
   if(EstadoBoton1 == LOW){
    Panico = 0;
    EstadoA = 0;
    EstadoB = 0;
    Presencia = 0;
    Estadooled = 0;
    digitalWrite(Rele1, LOW);
    digitalWrite(Rele2, LOW);
    digitalWrite(Buzzer, LOW);
    }
  }

if((sonar.ping_cm() >= Dist) && Presencia == 0){
  delay(1000); // SI NO DETECTA CONDUCTOR EN MAS DE 1 SEGUNDO .... ENTONCES ...
    if((sonar.ping_cm() >= Dist) && Presencia == 0){
   Presencia = 1;
  }  
}

}//FINAL DEL LOOP


***************************************************************************
***************************************************************************
***************************************************************************
***************************************************************************
CODIGO COMBINADO - SENSOR DE ULTRA SONIDO O SENSOR VLX

#include <NewPing.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Wire.h>
#include <VL53L0X.h>
VL53L0X sensor;
#define TRIGGER_PIN  4  // Arduino pin tied to trigger pin on the ultrasonic sensor.
#define ECHO_PIN     3  // Arduino pin tied to echo pin on the ultrasonic sensor.
#define MAX_DISTANCE 400 // Maximum distance we want to ping for (in centimeters). Maximum sensor distance is rated at 400-500cm.
long previousMillis = 0;  
long previousPanico = 0;      
long Tespera1 = 30000;
long Tespera2 = 10000;
long intervalEspera = 10000;
long tiempoBoton = 3000;
int Pot = A0;
int Dist = 0;
int Led = 11; // 10 ** CAMBIAR POR D11 EN PCB MEJORADO
int Buzzer = 9;
int Rele1 = A1;
int Rele2 = A3;
int Boton1 = 6;
int EstadoBoton1 = 0;
int EstadoBoton2 = 0;
int Boton2 = 10; //9 CAMBIAR POR D10 EN PCB MEJORADO
int Presencia = 1;
int Panico = 0;
int EstadoA = 0;
int EstadoB = 0;
int Estadooled = 0;
int Modo = 1;
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // NewPing setup of pins and maximum distance.

#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
#define OLED_RESET     -1 // Reset pin # (or -1 if sharing Arduino reset pin)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

void setup() {
  Serial.begin(9600); // Open serial monitor at 115200 baud to see ping results.
  pinMode(Pot, INPUT);
  pinMode(Boton1, INPUT_PULLUP); //INPUT_PULLUP
  pinMode(Boton2, INPUT_PULLUP); //INPUT_PULLUP
  pinMode(Led, OUTPUT);
  pinMode(Buzzer, OUTPUT);
  digitalWrite(Led, LOW);
  digitalWrite(Buzzer, LOW);
  pinMode(Rele1, OUTPUT);
  pinMode(Rele2, OUTPUT);
  digitalWrite(Rele1, LOW);
  digitalWrite(Rele2, LOW);
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  delay(2000);
  display.clearDisplay();
  display.setTextColor(WHITE);
  //sonar.ping_cm();

  Wire.begin();
  sensor.setTimeout(500);
  sensor.init();
  //if (!sensor.init())
  //{
   // Serial.println("Failed to detect and initialize sensor!");
   // while (1) {}
  //}

#if defined LONG_RANGE
  sensor.setSignalRateLimit(0.1);
  sensor.setVcselPulsePeriod(VL53L0X::VcselPeriodPreRange, 18);
  sensor.setVcselPulsePeriod(VL53L0X::VcselPeriodFinalRange, 14);
#endif

#if defined HIGH_SPEED
  sensor.setMeasurementTimingBudget(20000);
#elif defined HIGH_ACCURACY
  sensor.setMeasurementTimingBudget(200000);
#endif
}

void loop() {
  Dist = map(analogRead(Pot), 0, 1023, 0, 150);
  Modo = digitalRead(Boton2);
 
  if(Modo == 1){
   
  EstadoBoton1 = digitalRead(Boton1);
  EstadoBoton2 = digitalRead(Boton2);
  delay(50);                     // Wait 50ms between pings (about 20 pings/sec). 29ms should be the shortest delay between pings.
 
  if(Estadooled == 0){
  display.clearDisplay();
  display.setTextSize(2);
  display.setCursor(10,20);
  display.print(sonar.ping_cm());
  display.setTextSize(2);
  display.setCursor(60, 20);
  display.print("CM");
  display.setTextSize(2);
  display.setCursor(10,50);
  display.print(Dist);
  display.setTextSize(2);
  display.setCursor(60, 50);
  display.print("POT");
  display.display();
  }
  if(sonar.ping_cm() <= Dist){
    digitalWrite(Led, HIGH);
  }
  else{
    digitalWrite(Led, LOW);
  }
 
  if((sonar.ping_cm() <= Dist) && Panico == 0 && Presencia == 1){ //NO SE EJECUTARA NUEVAMENTE HASTA QUE PANICO = 0
    //Presencia = 0;
    delay(1000); // SI DETECTA CONDUCTOR EN MAS DE 1 SEGUNDO .... ENTONCES ...
    if((sonar.ping_cm() <= Dist) && Panico == 0){
    previousMillis = millis();
    Panico = 1;
    EstadoA = 1;
    Estadooled = 1;
    display.clearDisplay();
    display.setTextSize(2);
    display.setCursor(10,20);
    display.print("CONDUCTOR");
    display.setTextSize(2);
    display.setCursor(10,50);
    display.print("DETECTADO");
    display.display();
    }
  }

  if((millis() - previousMillis >= Tespera1) && Panico == 1 && EstadoA == 1){   //
     Panico = 1;
     EstadoA = 0;
         
     digitalWrite(Buzzer, HIGH);
     previousPanico = millis();
     EstadoB = 1;
     display.clearDisplay();
    display.setTextSize(2);
    display.setCursor(10,20);
    display.print("BUZZER");
    display.setTextSize(2);
    display.setCursor(10,50);
    display.print("ENCENDIDO");
    display.display();
     }

  if((millis() - previousPanico >= Tespera2) && EstadoB == 1 && Panico == 1){
    digitalWrite(Buzzer, LOW);
    Panico = 1;
    EstadoA = 0;
    EstadoB = 0;
    digitalWrite(Rele1, HIGH);
    digitalWrite(Rele2, HIGH);
    display.clearDisplay();
    display.setTextSize(2);
    display.setCursor(10,20);
    display.print("RELES");
    display.setTextSize(2);
    display.setCursor(10,50);
    display.print("ENCENDIDOS");
    display.display();
  }


  if(EstadoBoton1 == LOW){ //LOW YA QUE SERA INPUT PULLUP
   delay(tiempoBoton);
   EstadoBoton1 = digitalRead(Boton1);
   if(EstadoBoton1 == LOW){
    Panico = 0;
    EstadoA = 0;
    EstadoB = 0;
    Presencia = 0;
    Estadooled = 0;
    digitalWrite(Rele1, LOW);
    digitalWrite(Rele2, LOW);
    digitalWrite(Buzzer, LOW);
    }
  }

if((sonar.ping_cm() >= Dist) && Presencia == 0){
  delay(1000); // SI NO DETECTA CONDUCTOR EN MAS DE 1 SEGUNDO .... ENTONCES ...
    if((sonar.ping_cm() >= Dist) && Presencia == 0){
   Presencia = 1;
  }  
}
  }

//***********************************************************
//***********************************************************
if(Modo == 0){
   
  EstadoBoton1 = digitalRead(Boton1);
  EstadoBoton2 = digitalRead(Boton2);
  delay(50);                     // Wait 50ms between pings (about 20 pings/sec). 29ms should be the shortest delay between pings.
 
  if(Estadooled == 0){
  display.clearDisplay();
  display.setTextSize(2);
  display.setCursor(10,20);
  display.print((sensor.readRangeSingleMillimeters()/10));
  display.setTextSize(2);
  display.setCursor(60, 20);
  display.print("CM");
  display.setTextSize(2);
  display.setCursor(10,50);
  display.print(Dist);
  display.setTextSize(2);
  display.setCursor(60, 50);
  display.print("POT");
  display.display();
  }
  if((sensor.readRangeSingleMillimeters()/10) <= Dist)
    digitalWrite(Led, HIGH);
  if((sensor.readRangeSingleMillimeters()/10) >= Dist+1)
    digitalWrite(Led, LOW);

 
  if(((sensor.readRangeSingleMillimeters()/10) <= Dist) && Panico == 0 && Presencia == 1){ //NO SE EJECUTARA NUEVAMENTE HASTA QUE PANICO = 0
    //Presencia = 0;
    delay(1000); // SI DETECTA CONDUCTOR EN MAS DE 1 SEGUNDO .... ENTONCES ...
    if(((sensor.readRangeSingleMillimeters()/10) <= Dist) && Panico == 0){
    previousMillis = millis();
    Panico = 1;
    EstadoA = 1;
    Estadooled = 1;
    display.clearDisplay();
    display.setTextSize(2);
    display.setCursor(10,20);
    display.print("CONDUCTOR");
    display.setTextSize(2);
    display.setCursor(10,50);
    display.print("DETECTADO");
    display.display();
    }
  }

  if((millis() - previousMillis >= Tespera1) && Panico == 1 && EstadoA == 1){   //
     Panico = 1;
     EstadoA = 0;
         
     digitalWrite(Buzzer, HIGH);
     previousPanico = millis();
     EstadoB = 1;
     display.clearDisplay();
    display.setTextSize(2);
    display.setCursor(10,20);
    display.print("BUZZER");
    display.setTextSize(2);
    display.setCursor(10,50);
    display.print("ENCENDIDO");
    display.display();
     }

  if((millis() - previousPanico >= Tespera2) && EstadoB == 1 && Panico == 1){
    digitalWrite(Buzzer, LOW);
    Panico = 1;
    EstadoA = 0;
    EstadoB = 0;
    digitalWrite(Rele1, HIGH);
    digitalWrite(Rele2, HIGH);
    display.clearDisplay();
    display.setTextSize(2);
    display.setCursor(10,20);
    display.print("RELES");
    display.setTextSize(2);
    display.setCursor(10,50);
    display.print("ENCENDIDOS");
    display.display();
  }


  if(EstadoBoton1 == LOW){ //LOW YA QUE SERA INPUT PULLUP
   delay(tiempoBoton);
   EstadoBoton1 = digitalRead(Boton1);
   if(EstadoBoton1 == LOW){
    Panico = 0;
    EstadoA = 0;
    EstadoB = 0;
    Presencia = 0;
    Estadooled = 0;
    digitalWrite(Rele1, LOW);
    digitalWrite(Rele2, LOW);
    digitalWrite(Buzzer, LOW);
    }
  }

if(((sensor.readRangeSingleMillimeters()/10) >= Dist) && Presencia == 0){
  delay(1000); // SI NO DETECTA CONDUCTOR EN MAS DE 1 SEGUNDO .... ENTONCES ...
    if(((sensor.readRangeSingleMillimeters()/10) >= Dist) && Presencia == 0){
   Presencia = 1;
  }  
}
  }

}//FINAL DEL LOOP


/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
CODIGO SOLO SENSOR VL53L0

#include <NewPing.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Wire.h>
#include <VL53L0X.h>
VL53L0X sensor;
#define TRIGGER_PIN  4  // Arduino pin tied to trigger pin on the ultrasonic sensor.
#define ECHO_PIN     3  // Arduino pin tied to echo pin on the ultrasonic sensor.
#define MAX_DISTANCE 400 // Maximum distance we want to ping for (in centimeters). Maximum sensor distance is rated at 400-500cm.
long previousMillis = 0;  
long previousPanico = 0;      
long Tespera1 = 30000;
long Tespera2 = 10000;
long intervalEspera = 10000;
long tiempoBoton = 3000;
int Pot = A0;
int Dist = 0;
int Led = 11; // 10 ** CAMBIAR POR D11 EN PCB MEJORADO
int Buzzer = 9;
int Rele1 = A1;
int Rele2 = A3;
int Boton1 = 6;
int EstadoBoton1 = 0;
int EstadoBoton2 = 0;
int Boton2 = 10; //9 CAMBIAR POR D10 EN PCB MEJORADO
int Presencia = 1;
int Panico = 0;
int EstadoA = 0;
int EstadoB = 0;
int Estadooled = 0;
int Modo = 1;
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // NewPing setup of pins and maximum distance.

#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
#define OLED_RESET     -1 // Reset pin # (or -1 if sharing Arduino reset pin)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

void setup() {
  Serial.begin(9600); // Open serial monitor at 115200 baud to see ping results.
  pinMode(Pot, INPUT);
  pinMode(Boton1, INPUT_PULLUP); //INPUT_PULLUP
  pinMode(Boton2, INPUT_PULLUP); //INPUT_PULLUP
  pinMode(Led, OUTPUT);
  pinMode(Buzzer, OUTPUT);
  digitalWrite(Led, LOW);
  digitalWrite(Buzzer, LOW);
  pinMode(Rele1, OUTPUT);
  pinMode(Rele2, OUTPUT);
  digitalWrite(Rele1, LOW);
  digitalWrite(Rele2, LOW);
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  delay(2000);
  display.clearDisplay();
  display.setTextColor(WHITE);
  //sonar.ping_cm();

  Wire.begin();
  sensor.setTimeout(500);
  sensor.init();
  if (!sensor.init())
  {
  Serial.println("Failed to detect and initialize sensor!");
  while (1) {}
  }

#if defined LONG_RANGE
  sensor.setSignalRateLimit(0.1);
  sensor.setVcselPulsePeriod(VL53L0X::VcselPeriodPreRange, 18);
  sensor.setVcselPulsePeriod(VL53L0X::VcselPeriodFinalRange, 14);
#endif

#if defined HIGH_SPEED
  sensor.setMeasurementTimingBudget(20000);
#elif defined HIGH_ACCURACY
  sensor.setMeasurementTimingBudget(200000);
#endif
}

void loop() {
  Dist = map(analogRead(Pot), 0, 1023, 0, 150);
   
  EstadoBoton1 = digitalRead(Boton1);
  EstadoBoton2 = digitalRead(Boton2);
  delay(50);                     // Wait 50ms between pings (about 20 pings/sec). 29ms should be the shortest delay between pings.
 
  if(Estadooled == 0){
  display.clearDisplay();
  display.setTextSize(2);
  display.setCursor(10,20);
  display.print((sensor.readRangeSingleMillimeters()/10));
  display.setTextSize(2);
  display.setCursor(60, 20);
  display.print("CM");
  display.setTextSize(2);
  display.setCursor(10,50);
  display.print(Dist);
  display.setTextSize(2);
  display.setCursor(60, 50);
  display.print("POT");
  display.display();
  }
  if((sensor.readRangeSingleMillimeters()/10) <= Dist)
    digitalWrite(Led, HIGH);
  if((sensor.readRangeSingleMillimeters()/10) >= Dist+1)
    digitalWrite(Led, LOW);

 
  if(((sensor.readRangeSingleMillimeters()/10) <= Dist) && Panico == 0 && Presencia == 1){ //NO SE EJECUTARA NUEVAMENTE HASTA QUE PANICO = 0
   
    delay(1000); // SI DETECTA CONDUCTOR EN MAS DE 1 SEGUNDO .... ENTONCES ...
    if(((sensor.readRangeSingleMillimeters()/10) <= Dist) && Panico == 0){
    previousMillis = millis();
    Panico = 1;
    EstadoA = 1;
    Estadooled = 1;
    display.clearDisplay();
    display.setTextSize(2);
    display.setCursor(10,20);
    display.print("CONDUCTOR");
    display.setTextSize(2);
    display.setCursor(10,50);
    display.print("DETECTADO");
    display.display();
    }
  }

  if((millis() - previousMillis >= Tespera1) && Panico == 1 && EstadoA == 1){   //
     Panico = 1;
     EstadoA = 0;
         
     digitalWrite(Buzzer, HIGH);
     previousPanico = millis();
     EstadoB = 1;
     display.clearDisplay();
    display.setTextSize(2);
    display.setCursor(10,20);
    display.print("BUZZER");
    display.setTextSize(2);
    display.setCursor(10,50);
    display.print("ENCENDIDO");
    display.display();
     }

  if((millis() - previousPanico >= Tespera2) && EstadoB == 1 && Panico == 1){
    digitalWrite(Buzzer, LOW);
    Panico = 1;
    EstadoA = 0;
    EstadoB = 0;
    digitalWrite(Rele1, HIGH);
    digitalWrite(Rele2, HIGH);
    display.clearDisplay();
    display.setTextSize(2);
    display.setCursor(10,20);
    display.print("RELES");
    display.setTextSize(2);
    display.setCursor(10,50);
    display.print("ENCENDIDOS");
    display.display();
  }


  if(EstadoBoton1 == LOW){ //LOW YA QUE SERA INPUT PULLUP
   delay(tiempoBoton);
   EstadoBoton1 = digitalRead(Boton1);
   if(EstadoBoton1 == LOW){
    Panico = 0;
    EstadoA = 0;
    EstadoB = 0;
    Presencia = 0;
    Estadooled = 0;
    digitalWrite(Rele1, LOW);
    digitalWrite(Rele2, LOW);
    digitalWrite(Buzzer, LOW);
    }
  }

if(((sensor.readRangeSingleMillimeters()/10) >= Dist) && Presencia == 0){
  delay(1000); // SI NO DETECTA CONDUCTOR EN MAS DE 1 SEGUNDO .... ENTONCES ...
    if(((sensor.readRangeSingleMillimeters()/10) >= Dist) && Presencia == 0){
   Presencia = 1;
  }  
}
  }



Comentarios

Entradas populares de este blog

CLASIFICADOR DE COLORES CON SENSOR TCS3472 (I2C) CON ARDUINO NANO

PROTOTIPO - CONTROL DE ACCESO CON RFID + TECLADO CON ALMACENAMIENTO EN MICRO SD

CONTROL DE ACCESO CON RFID YMODULO RTC DS3231