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
Publicar un comentario