ASSISTECH - ASISTENTE PARA PERSONAS CON DISCAPACIDADES VARIAS
CODIGO PARA PLACA #1 (ESP32S)
//CODIGO PARA PLACA D1 MINI EN PROYECTO "ASISTENTE PARA PERSONAS
//CON MOVILIDAD REDUCIDA" PLACA V 2.0
#include <GyverOLED.h>
GyverOLED<SSH1106_128x64> oled;
#ifdef ENABLE_DEBUG
#define DEBUG_ESP_PORT Serial
#define NODEBUG_WEBSOCKETS
#define NDEBUG
#endif
#include <Arduino.h>
#ifdef ESP8266
#include <ESP8266WiFi.h>
#endif
#ifdef ESP32
#include <WiFi.h>
#endif
#include "SinricPro.h"
#include "SinricProSwitch.h"
#define WIFI_SSID "Oficina_Royero"
#define WIFI_PASS "@*Jerv*Jroyero*1209@"
#define APP_KEY "d5dc9adc-91d7-4e49-a3b0-9f5a17e19e45" // Should look like "de0bxxxx-1x3x-4x3x-ax2x-5dabxxxxxxxx"
#define APP_SECRET "cf5f0225-2825-48f5-a442-6bb90a99929a-e8571a4f-360d-4ba9-8f4b-478533c8803c" // Should look like "5f36xxxx-x3x7-4x3x-xexe-e86724a9xxxx-4c4axxxx-3x3x-x5xe-x9x3-333d65xxxxxx"
#define SWITCH_ID_1 "63c5b1ad22e49e3cb5e671d9" // Señal 1 - de cuenta dronactivos
#define SWITCH_ID_2 "63c5b20e07e1833ecb428ccb" // Señal 2 - de cuenta dronactivos
#define SWITCH_ID_3 "63ca9f6f07e1833ecb45f1fb" // Alarma
#define SWITCH_ID_4 "63fe827c1bb4e19c11aa572a" // SEÑAL 3
#define SWITCH_ID_5 "63fe88ca5ec7d92a471988d0" //SEÑAL 4 63fe88ca5ec7d92a471988d0
#define SWITCH_ID_6 "63fe9a791bb4e19c11aa5d91" //EMERGENCIA - ACTIVA SIRENA
int Salida1 = 23; //P23
int Salida2 = 19; //P19
int Salida3 = 18; //P18
int Salida4 = 17; //P17
int Salida5 = 16; //P16
int Salida6 = 0; //P0
int Entrada1 = 5;
int SensoresRf = 35; //P35 (GPIO)
int Armado = 12; //P12 (GPIO)
int Desarmado = 14; //P14 (GPIO)
int LedR = 33; //P33 LED ROJO
int LedV = 25; //P25 LED VERDE
int LedA = 26; //P26 LED AZUL
int Sirena = 15; //P15 (GPIO)
int Varsinric = LOW;
int estIOT = LOW;
int estadoRF = LOW;
int estado1 = LOW;
int estado2 = LOW;
int estado3 = LOW;
int t1 = 4000;
long previousMillis = 0;
long intervalOn = 120000;
bool myPowerState1 = false; //SALDA 1 - AGUA - PIN 23
bool myPowerState2 = false; //SALIDA 2 - INSULNA - PIN 19
bool myPowerState3 = false; //ALARMA
bool myPowerState4 = false; //SALIDA 3 - PIN 18
bool myPowerState5 = false; //SALIDA 4 - PIN 17
bool myPowerState6 = false; //SALIDA 5 - PIN 16
#define BAUD_RATE 9600 // Change baudrate to your need
bool onPowerState1(const String &deviceId, bool &state) {
Serial.printf("Device 1 turned %s\r\n", state?"on":"off");
myPowerState1 = state;
digitalWrite(Salida1, !myPowerState1?LOW:HIGH);
if (myPowerState1 == HIGH){
oled.clear();
oled.setScale(1);
oled.setCursor(2, 2); //Columna, Fila .... 128 columnas y 64 filas
oled.print("FAVOR LLEVAR AGUA");
oled.setCursor(2, 4); //Columna, Fila .... 128 columnas y 64 filas
oled.print("AL SEÑOR PEDRO");
oled.setCursor(10, 6); //Columna, Fila .... 128 columnas y 64 filas
oled.print("MUCHAS GRACIAS.");
oled.update();
delay (t1);
}
return true; // request handled properly
}
bool onPowerState2(const String &deviceId, bool &state) {
Serial.printf("Device 2 turned %s\r\n", state?"on":"off");
myPowerState2 = state;
digitalWrite(Salida2, !myPowerState2?LOW:HIGH);
if (myPowerState2 == HIGH){
oled.clear();
oled.setScale(1);
oled.setCursor(3, 2); //Columna, Fila .... 128 columnas y 64 filas
oled.print("FAVOR ADMINISTRAR");
oled.setCursor(1, 4); //Columna, Fila .... 128 columnas y 64 filas
oled.print("INSULINA AL SEÑOR");
oled.setCursor(1, 6); //Columna, Fila .... 128 columnas y 64 filas
oled.print("PEDRO. GRACIAS");
oled.update();
delay (t1);
}
return true; // request handled properly
}
bool onPowerState3(const String &deviceId, bool &state) {
Serial.printf("Device 3 turned %s\r\n", state?"on":"off");
myPowerState3 = state;
Varsinric = !myPowerState3?LOW:HIGH;
estIOT = Varsinric;
return true; // request handled properly
}
bool onPowerState4(const String &deviceId, bool &state) {
Serial.printf("Device 4 turned %s\r\n", state?"on":"off");
myPowerState4 = state; //ASISTIR CON EXTREMA URGENCIA A LA HABITACION DEL SEÑOR PEDRO
digitalWrite(Salida3, !myPowerState4?LOW:HIGH);
if (myPowerState4 == HIGH){
oled.clear();
oled.setScale(1);
oled.setCursor(3, 2); //Columna, Fila .... 128 columnas y 64 filas
oled.print("ASISTIR CON EXTREMA");
oled.setCursor(1, 4); //Columna, Fila .... 128 columnas y 64 filas
oled.print("URGENCIA A LA HABITACION");
oled.setCursor(1, 6); //Columna, Fila .... 128 columnas y 64 filas
oled.print("DEL SEÑOR PEDRO");
oled.update();
delay (t1);
}
return true; // request handled properly
}
bool onPowerState5(const String &deviceId, bool &state) {
Serial.printf("Device 5 turned %s\r\n", state?"on":"off");
myPowerState5 = state; //ASISTENCIA EN LA HABITACION LO ANTES POSIBLE. GRACIAS
digitalWrite(Salida4, !myPowerState5?LOW:HIGH);
if (myPowerState5 == HIGH){
oled.clear();
oled.setScale(1);
oled.setCursor(3, 2); //Columna, Fila .... 128 columnas y 64 filas
oled.print("ASISTENCIA EN LA HABITACION");
oled.setCursor(1, 4); //Columna, Fila .... 128 columnas y 64 filas
oled.print("LO ANTES POSIBLE");
oled.setCursor(1, 6); //Columna, Fila .... 128 columnas y 64 filas
oled.print("GRACIAS");
oled.update();
delay (t1);
}
return true; // request handled properly
}
bool onPowerState6(const String &deviceId, bool &state) {
Serial.printf("Device 6 turned %s\r\n", state?"on":"off");
myPowerState6 = state; //ASISTENCIA EN LA HABITACION LO ANTES POSIBLE. GRACIAS
digitalWrite(Salida5, !myPowerState6?LOW:HIGH);
if (myPowerState6 == HIGH){
oled.clear();
oled.setScale(1);
oled.setCursor(3, 2); //Columna, Fila .... 128 columnas y 64 filas
oled.print("EMERGENCIA...");
oled.setCursor(1, 4); //Columna, Fila .... 128 columnas y 64 filas
oled.print("SEÑOR PEDRO..");
oled.setCursor(1, 6); //Columna, Fila .... 128 columnas y 64 filas
oled.print("EN PELIGRO");
oled.update();
delay (t1);
//delay (3000);
//digitalWrite(Sirena, HIGH);
//delay (10000);
//digitalWrite(Sirena, LOW);
}
return true; // request handled properly
}
// setup function for WiFi connection
void setupWiFi() {
Serial.printf("\r\n[Wifi]: Connecting");
WiFi.begin(WIFI_SSID, WIFI_PASS);
while (WiFi.status() != WL_CONNECTED) {
Serial.printf(".");
delay(250);
}
Serial.printf("connected!\r\n[WiFi]: IP-Address is %s\r\n", WiFi.localIP().toString().c_str());
digitalWrite(LedA, LOW);
digitalWrite(LedR, HIGH); //ENCIENDE LED INTEGRADO UNA VEZ QUE SE CONECTE A LA RED WIFI
delay (300);
digitalWrite(LedR, LOW);
delay (300);
digitalWrite(LedR, HIGH); //ENCIENDE LED INTEGRADO UNA VEZ QUE SE CONECTE A LA RED WIFI
delay (300);
digitalWrite(LedR, LOW);
delay (300);
digitalWrite(LedR, HIGH); //ENCIENDE LED INTEGRADO UNA VEZ QUE SE CONECTE A LA RED WIFI
delay (300);
digitalWrite(LedR, LOW);
oled.clear();
oled.setScale(1);
oled.setCursor(1, 2); //Columna, Fila .... 128 columnas y 64 filas
oled.print("CONECTADO A INTERNET");
oled.update();
}
// setup function for SinricPro
void setupSinricPro() {
// add devices and callbacks to SinricPro
SinricProSwitch& mySwitch1 = SinricPro[SWITCH_ID_1];
mySwitch1.onPowerState(onPowerState1);
SinricProSwitch& mySwitch2 = SinricPro[SWITCH_ID_2];
mySwitch2.onPowerState(onPowerState2);
SinricProSwitch& mySwitch3 = SinricPro[SWITCH_ID_3];
mySwitch3.onPowerState(onPowerState3);
SinricProSwitch& mySwitch4 = SinricPro[SWITCH_ID_4];
mySwitch4.onPowerState(onPowerState4);
SinricProSwitch& mySwitch5 = SinricPro[SWITCH_ID_5];
mySwitch5.onPowerState(onPowerState5);
SinricProSwitch& mySwitch6 = SinricPro[SWITCH_ID_6];
mySwitch6.onPowerState(onPowerState6);
// setup SinricPro
SinricPro.onConnected([](){
Serial.printf("Connected to SinricPro\r\n");
digitalWrite(LedV, HIGH); //LED VERDE
delay (300);
digitalWrite(LedV, LOW);
delay (300);
digitalWrite(LedV, HIGH);
delay (300);
digitalWrite(LedV, LOW);
delay (300);
digitalWrite(LedV, HIGH);
oled.clear();
oled.setScale(1);
oled.setCursor(1, 2); //Columna, Fila .... 128 columnas y 64 filas
oled.print("CONECTADO A SINRIC");
oled.update();
delay (1000);
});
SinricPro.onDisconnected([](){
Serial.printf("Disconnected from SinricPro\r\n");
digitalWrite(LedR, LOW);
oled.clear();
oled.setScale(1);
oled.setCursor(1, 2); //Columna, Fila .... 128 columnas y 64 filas
oled.print("DESCONECTADO DE SINRIC");
oled.update();
});
SinricPro.begin(APP_KEY, APP_SECRET);
}
// main setup function
void setup() {
oled.init();
oled.clear();
oled.update();
oled.setScale(2);
oled.setCursor(8, 3);
oled.print("ASSISTECH");
oled.setScale(1);
oled.setCursor(8, 6);
oled.print("ON LINE");
oled.update();
pinMode (Salida1, OUTPUT);
pinMode (Salida2, OUTPUT);
pinMode (Salida3, OUTPUT);
pinMode (Salida4, OUTPUT);
pinMode (Salida5, OUTPUT);
pinMode (Salida6, OUTPUT);
pinMode (Entrada1, INPUT);
pinMode (SensoresRf, INPUT);
pinMode (Armado, INPUT);
pinMode (Desarmado, INPUT);
pinMode (LedR, OUTPUT);
pinMode (LedV, OUTPUT);
pinMode (LedA, OUTPUT);
pinMode (Sirena, OUTPUT);
digitalWrite (Salida1, LOW);
digitalWrite (Salida2, LOW);
digitalWrite (Salida3, LOW);
digitalWrite (Salida4, LOW);
digitalWrite (Salida5, LOW);
digitalWrite (Salida6, LOW);
digitalWrite (LedR, LOW);
digitalWrite (LedV, LOW);
digitalWrite (LedA, HIGH);
digitalWrite (Sirena, LOW);
delay (500);
Serial.begin(BAUD_RATE); Serial.printf("\r\n\r\n");
setupWiFi();
setupSinricPro();
}
void loop() {
SinricPro.handle();
if((estado1 == LOW) && (estado2 == LOW)&& (estado3 == LOW)){ //SI ESTA DESARMADO
digitalWrite(LedR, LOW); //LED ROJO
digitalWrite(LedV, HIGH); //LED VERDE ENCENDIDO
digitalWrite(LedA, LOW); //LED AZUL
oled.clear();
oled.setScale(2);
oled.setCursor(6, 2); //Columna, Fila .... 128 columnas y 64 filas
oled.print("ASSISTECH");
oled.setScale(1);
oled.setCursor(6, 6); //Columna, Fila .... 128 columnas y 64 filas
oled.print("SISTEMA DESARMADO");
oled.update();
}
if((estado1 == HIGH) && (estado2 == HIGH)&& (estado3 == LOW)){ //SI ESTA DISPARADA LA ALARMA SIN GAS
digitalWrite(LedR, LOW); //LED ROJO
digitalWrite(LedV, LOW); //LED VERDE
digitalWrite(LedA, HIGH); //LED AZUL ENCENDIDO
}
if((estado1 == HIGH) && (estado2 == LOW)&& (estado3 == LOW)){ //SI ESTA ARMADO Y NO HA DETECTADO MOVIMIENTO Y NO HAY SEÑAL DE GAS
oled.clear();
oled.setScale(2);
oled.setCursor(6, 2); //Columna, Fila .... 128 columnas y 64 filas
oled.print("ASSISTECH");
oled.setScale(1);
oled.setCursor(6, 6); //Columna, Fila .... 128 columnas y 64 filas
oled.print("SISTEMA ARMADO");
oled.update();
digitalWrite(LedR, HIGH); //LED ROJO ENCENDIDO
digitalWrite(LedV, LOW); //LED VERDE
digitalWrite(LedA, LOW); //LED AZUL
delay (500);
digitalWrite(LedR, LOW);
delay (1000);
}
if (digitalRead(Entrada1) == HIGH){ //SI ENTRA SEAL DE FUGA DE GAS DETECTADO
estado3 = HIGH;
oled.clear();
oled.setScale(2);
oled.setCursor(6, 2);
oled.print("PELIGRO");
oled.setScale(1);
oled.setCursor(0, 5);
oled.print("FUGA DE GAS DETECTADA");
oled.update();
digitalWrite(Sirena, HIGH);
digitalWrite(LedR, LOW); //ROJO
digitalWrite(LedV, LOW); //VERDE
digitalWrite(LedA, HIGH); //AZUL ENCENDIDO
delay (300);
digitalWrite(Sirena, LOW);
digitalWrite(LedR, HIGH); //ROJO ENCENDIDO
digitalWrite(LedV, LOW);
digitalWrite(LedA, LOW);
delay (300);
digitalWrite(Sirena, HIGH);
digitalWrite(LedR, LOW);
digitalWrite(LedV, LOW);
digitalWrite(LedA, HIGH); //AZUL ENCENDIDO
delay (300);
digitalWrite(Sirena, LOW);
digitalWrite(LedR, HIGH); //ROJO ENCENDIDO
digitalWrite(LedV, LOW);
digitalWrite(LedA, LOW);
delay (300);
estado3 = LOW;
delay (300);
}
if (digitalRead(Armado) == HIGH){
estIOT = HIGH;
}
if (estIOT == HIGH){
armado();
}
if (digitalRead(Desarmado) == HIGH) {
desarmado();
}
if (Varsinric == LOW) {
desarmado();
}
if (digitalRead(SensoresRf) == HIGH){
estadoRF = HIGH;
}
if((estado1 == HIGH) && (estadoRF == HIGH)){
estado2 = HIGH;
digitalWrite(Sirena, HIGH);
digitalWrite(LedR, LOW);
digitalWrite(LedV, LOW);
digitalWrite(LedA, HIGH); //LED AZUL ENCENDIDO
oled.clear();
oled.setScale(2);
oled.setCursor(6, 2); //Columna, Fila .... 128 columnas y 64 filas
oled.print("INTRUSION");
oled.setScale(1);
oled.setCursor(1, 5); //Columna, Fila .... 128 columnas y 64 filas
oled.print("MOVIMIENTO DETECTADO");
oled.update();
previousMillis = millis(); //Solo pasara si en boton esta en HIGH. Si esta en LOW el bucle no hara esta accion.
estadoRF = LOW;
}
if(millis() - previousMillis >= intervalOn) { // Mientras (estado = 1) millis aumentara con cada pasada del bucle y previusMillis se mantendra
digitalWrite (Sirena, LOW); // hasta que llegue a ser mayor o igual a intervalOn
estadoRF = LOW;
estado2 = LOW;
}
}
void armado(){
estado1 = HIGH;
estado2 = LOW;
estadoRF = LOW;
estIOT = LOW;
Varsinric = HIGH;
digitalWrite (LedR, HIGH); //LED ROJO ENCENDIDO
digitalWrite (LedV, LOW);
digitalWrite (LedA, LOW);
digitalWrite(Sirena, HIGH); // RELE QUE ACTIVA LA SIRENA
delay (600);
digitalWrite(Sirena, LOW);
digitalWrite (LedR, LOW);
delay (600);
digitalWrite(Sirena, HIGH);
digitalWrite (LedR, HIGH);
delay (600);
digitalWrite(Sirena, LOW);
digitalWrite (LedR, LOW);
delay (5000); //ESPERA 5 SEGUNDOS PARA SALIR Y ARMAR
digitalWrite(Sirena, HIGH);
digitalWrite (LedR, HIGH);
delay (200);
digitalWrite(Sirena, LOW);
digitalWrite (LedR, LOW);
delay (200);
digitalWrite(Sirena, HIGH);
digitalWrite (LedR, HIGH);
delay (200);
digitalWrite(Sirena, LOW);
digitalWrite (LedR, LOW);
delay(200);
digitalWrite (LedR, HIGH);
}
void desarmado(){
estado1 = LOW;
estado2 = LOW;
estado3 = LOW;
estadoRF = LOW;
Varsinric = HIGH;
digitalWrite (LedR, LOW);
digitalWrite (LedV, HIGH); //LED VERDE ENCENDIDO
digitalWrite (LedA, LOW);
digitalWrite(Sirena, HIGH);
delay (100);
digitalWrite(Sirena, LOW);
digitalWrite (LedV, LOW);
delay (100);
digitalWrite(Sirena, HIGH);
digitalWrite (LedV, HIGH);
delay (100);
digitalWrite(Sirena, LOW);
digitalWrite (LedV, LOW);
delay (100);
digitalWrite(Sirena, HIGH);
digitalWrite (LedV, HIGH);
delay (100);
digitalWrite(Sirena, LOW);
digitalWrite (LedV, LOW);
delay(100);
digitalWrite (LedV, HIGH);
delay(100);
}
************************************************************************
************************************************************************
CODIGO PARA PLACA #2 (ARDUINO NANO)
#include "Arduino.h"
#include "SoftwareSerial.h"
#include "DFRobotDFPlayerMini.h"
SoftwareSerial mySoftwareSerial(10, 11); // RX, TX
DFRobotDFPlayerMini myDFPlayer;
void printDetail(uint8_t type, int value);
int Entrada1 = 2;
int Buzer = 3;
int Entrada2 = 4;
int Entrada3 = 7;
int Entrada4 = 5;
int Entrada5 = 8; //NO USAR
int Entrada6 = 9; //NO USAR
int Salida1 = 6;
int Gas = A0;
int Estado1 = 0;
int Estado2 = 0;
int Estado3 = 0;
int Estado4 = 0;
int Estado5 = 0; //NO USAR
int Estado6 = 0; //NO USAR
int lectura = 0;
long previousMillis = 0;
long intervalOn = 120000;
int estadoGas1 = LOW;
void setup() {
Serial.begin(115200);
mySoftwareSerial.begin(9600);
previousMillis = millis();
pinMode (Entrada1, INPUT);
pinMode (Entrada2, INPUT);
pinMode (Entrada3, INPUT);
pinMode (Entrada4, INPUT);
pinMode (Entrada5, INPUT);
pinMode (Entrada6, INPUT);
pinMode (Gas, INPUT);
pinMode (Salida1, OUTPUT);
pinMode (Buzer, OUTPUT);
digitalWrite (Salida1, LOW);
digitalWrite (Buzer, HIGH);
delay (200);
digitalWrite (Buzer, LOW);
delay (200);
digitalWrite (Buzer, HIGH);
delay (200);
digitalWrite (Buzer, LOW);
delay (200);
digitalWrite (Buzer, HIGH);
delay (200);
digitalWrite (Buzer, LOW);
Serial.println();
Serial.println(F("DFRobot DFPlayer Mini Demo"));
Serial.println(F("Initializing DFPlayer ... (May take 3~5 seconds)"));
if (!myDFPlayer.begin(mySoftwareSerial, false)) { //Use softwareSerial to communicate with mp3.
Serial.println(F("Unable to begin:"));
Serial.println(F("1.Please recheck the connection!"));
Serial.println(F("2.Please insert the SD card!"));
while(true){
delay(0); // Code to compatible with ESP8266 watch dog.
}
}
Serial.println(F("DFPlayer Mini online."));
myDFPlayer.volume(30); //Set volume value. From 0 to 30
myDFPlayer.play(8); //Play the first mp3
}
void loop() {
if(millis() - previousMillis >= intervalOn) { // Mientras (estado = 1) millis aumentara con cada pasada del bucle y previusMillis se mantendra
estadoGas1 = HIGH;
}
Estado1 = digitalRead (Entrada1);
Estado2 = digitalRead (Entrada2);
Estado3 = digitalRead (Entrada3);
Estado4 = digitalRead (Entrada4);
Estado5 = digitalRead (Entrada5);
Estado6 = digitalRead (Entrada6);
lectura = analogRead (Gas);
Serial.println(lectura);
if (lectura >= 90 && lectura <= 149 && estadoGas1 == HIGH){
digitalWrite (Salida1, LOW);
digitalWrite (Buzer, HIGH);
delay (100);
digitalWrite (Buzer, LOW);
delay (100);
}
if (lectura >= 150 && lectura <= 300 && estadoGas1 == HIGH){
digitalWrite (Salida1, LOW);
digitalWrite (Buzer, HIGH);
delay (50);
digitalWrite (Buzer, LOW);
delay (50);
}
if (lectura >= 300 && estadoGas1 == HIGH){
digitalWrite (Buzer, HIGH);
digitalWrite (Salida1, HIGH);
}
if (Estado1 == HIGH){
//Serial.println("Hola, el señor Pedro necesita que por favor le lleven agua a la habitación, gracias.");
myDFPlayer.play(1);
delay (7000);
}
if (Estado1 == LOW){
Serial.println("ENTRADA 1 EN BAJO");
}
if (Estado2 == HIGH){
//Serial.println("Hola, el señor Pedro necesita que por favor le administren la insulina. Gracias");
myDFPlayer.play(2);
delay (7000);
}
if (Estado2 == LOW){
Serial.println("ENTRADA 2 EN BAJO");
}
if (Estado3 == HIGH){
//Serial.println("Se ha presentado una emergencia en la habitacion del señor pedro");
myDFPlayer.play(3);
Serial.println("ENTRADA 3 EN ALTO");
delay (7000);
}
if (Estado3 == LOW){
Serial.println("ENTRADA 3 EN BAJO");
}
if (Estado4 == HIGH){
myDFPlayer.play(4);
Serial.println("ENTRADA 4 EN ALTO");
delay (7000);
}
if (Estado4 == LOW){
Serial.println("ENTRADA 4 EN BAJO");
}
if (Estado5 == HIGH){
myDFPlayer.play(5);
Serial.println("ENTRADA 5 EN ALTO");
delay (7000);
myDFPlayer.play(6);
delay (7000);
}
if (Estado5 == LOW){
Serial.println("ENTRADA 5 EN BAJO");
}
delay (100);
}
Comentarios
Publicar un comentario