Sistema de alarma simple con el Nano V3

Nuestra entrada de blog de hoy se basa en un proyecto que hemos creado recientemente como parte de un taller con una clase escolar.

El objetivo principal es construir y programar un dispositivo de trabajo con componentes existentes y las bibliotecas y ejemplos disponibles de varias fuentes.

Para la realización necesitamos los siguientes componentes:

AZ-Delivery Nano V3
Pensión de entrega AZ
AZ-Delivery Puentes enchufables m/m
Entrega AZ Teclado Matriz 4x4
Módulo de zumbador AZ-Delivery pasivo
Módulo detector de movimiento AZ-Delivery
AZ-Delivery Pantalla OLED I2C de 0,96 pulgadas

 

Pinout:

Nano V3

Módulo de teclado 4x4

Pantalla Oled

Zumbador

Movimiento

D2

1

 

 

 

D3

2

 

 

 

D4

3

 

 

 

D5

4

 

 

 

D6

5

 

 

 

D7

6

 

 

 

D8

7

 

 

 

D9

8

 

 

 

3V3

 

Vcc

 

 

Gnd

 

Gnd

-

Gnd

A4

 

Sda

 

 

A5

 

Scl

 

 

D11

 

 

S

 

5v

 

 

 

Vcc

D10

 

 

 

Medio

 

 

 

Paso 1: Configurar el teclado

Conecte los pines 1-8 del teclado a los pines D2 - D9 en Nano

Sketch -> Incluir biblioteca -> Administrar bibliotecas

Buscar "teclado"
Teclado de Mark Stanley, Alexander Brevig

Intallieren

Archivo -> Ejemplos -> Teclado -> HelloKeypad

Personalizar: ROWS y COLS cada 4
Añadir A, B, C y D

Compruebe la configuración en Herramientas:

Junta: Arduino Nano
Procesador: ATmega 328P (antiguo cargador de arranque)
Puerto: puerto SELECT COM

Abra el monitor serie, ajuste la velocidad en baudios a 9600.

#include <Keypad.h>

const byte ROWS n.o 4; cuatro filas
const byte COLS n.o 4; tres columnas
teclas char[ROWS][COLS] ?
'1','2','3','A',,
'4','5','6','B'',
'7','8','9','C',,
'*','0','''','D''
};
byte rowPins[ROWS] á .9, 8, 7, 6; conectar a los pines de fila del teclado
byte colPins[COLS] - .5, 4, 3, 2; conectar a los pines de columna del teclado

Teclado del teclado: teclado ( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

void setup()"
Serial.begin(9600);
}

void loop()"
char key á keypad.getKey();

si (clave)
Serial.println(clave);
}
}



Carga y prueba
Archivo -> Guardar en -> HelloKeypad


Paso 2: Configurar la pantalla
Conecte los pines de la siguiente manera:

Pantalla Nano V3
GND GND
VCC 3V3
SCL A5
ASD A4


Tomamos la biblioteca SSD1306Ascii y extendemos nuestro código de la siguiente manera:

#include <Wire.h>
#include "SSD1306Ascii.h"
#include "SSD1306AsciiWire.h"

#define I2C_ADDRESS 0x3C
#define RST_PIN -1

SSD1306AsciiWire oled;

en configuración void()

Wire.begin();
Wire.setClock(400000L);

#if RST_PIN >
oled.begin(&Adafruit128x64, I2C_ADDRESS, RST_PIN);
#else - RST_PIN > 0
oled.begin(&Adafruit128x64, I2C_ADDRESS);
#endif - RST_PIN > 0

oled.set2X(); el doble del tamaño de la fuente



Ahora vamos a crear una función que envía el carácter a nuestra pantalla:

void print2oled(char oledText)
oled.setFont(System5x7);
oled.clear();
oled.println(oledText);
retardo(500);
}

Y llame a esta función en el loop():

si (clave)
Serial.println(clave);
print2oled(clave);
}


Resultado: Al pulsar el botón, el botón pulsado aparece en la pantalla.


Siguiente paso: leemos el sensor IR

Conectar:

IR Sensor Nano V3
VCC 5V
Medio D10
GND GND


Agregaremos lo siguiente al código:

pinmode(10, INPUT); El pin D10 se utiliza como INPUT
bool detectado - falso; ¿Se detectó movimiento?



y hacer una función que consulta el sensor:

anular checkPIR()"
si digitalread(PIR)
detectado s verdadero;
Serial.println("Movimiento capturado");
}
Más
detectado: falso;
Serial.println("sin movimiento");
}


Den Buzzer f'r den Alarmton schlie-en wir wie folgt an:

Buzzer Nano V3
- GND
S D11

Wir f-gen folgendes zum Sketch hinzu:

Altavoz int 11; Pin digital 11
pinMode(speaker, OUTPUT);

und die folgende Funktion, um zu testen ob der Buzzer geht:

altavoz vacíoTest()
tono (altavoz, 600, 500);
retardo(100);
tono (altavoz, 700, 100);
retardo(100);
tono (altavoz, 800, 750);
retraso(200);
}

Nun sind alle ben-tigten Sensoren und Module soweit funktionsf-hig und ansprechbar/auslesbar.

Wir speichern den Sketch mittels "Datei" -> "Speichern unter" als Alarmanlage

 

Hier der komplette Quellcode von der Alarmanlage mit allen Funktionen:

 

 

#include <Teclado.H>
#include <Alambre.H>
#include "SSD1306Ascii.h"
#include "SSD1306AsciiWire.h"

#define I2C_ADDRESS 0x3C
#define RST_PIN -1

#define Pir 10

Bool Detectado = Falso;  wurde bewegung erfasst?
Bool Armadas = Falso; ist der Alarm scharf geschaltet?    SSD1306AsciiWire Oled;

Const Byte Filas = 4; cuatro filas
Const Byte COLS = 4; tres columnas
Char Llaves[Filas][COLS] = {   {'1','2','3','A'},   {'4','5','6','B'},   {'7','8','9','C'},   {'*','0','#','D'}
};

Byte rowPins[Filas] = {9, 8, 7, 6}; conectar a los pines de fila del teclado
Byte colPins[COLS] = {5, 4, 3, 2}; conectar a los pines de columna del teclado

Teclado Teclado = Teclado( makeKeymap(Llaves), rowPins, colPins, Filas, COLS );

Int Altavoz = 11; Pin digital 11

Char* Pincode = "1337";      Establezca el código PIN necesario.
Int currentPosition = 0;     Realiza un seguimiento de la posición del código introducido.

Vacío Configuración(){   Serial.Comenzar(9600);   Alambre.Comenzar();   Alambre.setClock(400000L);   #if RST_PIN >= 0     Oled.Comenzar(&Adafruit128x64, I2C_ADDRESS, RST_PIN);   #else RST_PIN > 0     Oled.Comenzar(&Adafruit128x64, I2C_ADDRESS);   #endif RST_PIN > 0   Oled.set2X(); doppelte gr'e der Schrift   pinMode(10, Entrada);   pinMode(Altavoz, Salida);   speakerTest();
}    Vacío Bucle(){   Char Clave = Teclado.getKey();   checkPIR();   Int L;   Si (Clave){     Señal sonora();     Serial.println(Clave);     print2oled(Clave);     Si (Int(Clave) != 0) {                    Compruebe si hay un valor presente.            Para (L=0; L<=currentPosition; ++L)     { }          Si (Clave == Pincode[currentPosition])        Si el valor es correcto, aumente la posición del código en uno.       {         ++currentPosition;                  Si (currentPosition == 4)                Si las cuatro partes del código son correctas, abra la puerta.         {           Oled.Claro();           unlockDoor();           currentPosition = 0;         }       }             Más {         invalidCode();                           Si alguna parte del código está mal, no abra la puerta.         currentPosition = 0;     }   }
}   Si (Armadas){ alarmanlage scharf?     Si (Detectado){       playAlarm();     }   }
}


Vacío print2oled(Char oledText){     Oled.Setfont(fixed_bold10x15);          Oled.Impresión(oledText);     Retraso(500);
}

Vacío checkPIR(){     Si (digitalRead(Pir)){       Detectado = Verdad;       Serial.println("Bewegung erfasst");       Retraso(50);     }     Más {       Detectado = Falso;       Serial.println("keine Bewegung");       Retraso(50);     }     }

Vacío speakerTest(){    Tono(Altavoz, 600, 50);    Retraso(100);    Tono(Altavoz, 700, 50);    Retraso(100);    Tono(Altavoz, 800, 200);    Retraso(200);
}    Vacío Señal sonora(){   Tono(Altavoz, 2000, 100);
}

Vacío beepOK(){   Tono(Altavoz, 3000, 50);   Retraso(50);   Tono(Altavoz, 3300, 50);
}

Vacío invalidCode()
{   Oled.Claro();   Oled.println("Fehler");   Tono(Altavoz, 300,150);   Retraso(250);   Tono(Altavoz, 220, 300);   Retraso(1000);   Oled.Claro();
}


Vacío unlockDoor()
{   Si (Armadas){     Armadas=Falso;     Serial.println("Deaktiviert de alarma");     Oled.Setfont(fixed_bold10x15);     Oled.Claro();     Oled.println("Aus");     Retraso(1000);     Oled.Claro();   }   Más{     Armadas=Verdad;     Serial.println("Alarma aktiviert!");     Oled.Setfont(fixed_bold10x15);     Oled.Claro();     Oled.println("Aktiv!");     Retraso(1000);     Oled.Claro();   }      Tono(Altavoz, 1000, 50);   Retraso(50);   Tono(Altavoz, 1200, 50);   Retraso(60);   Tono(Altavoz, 1300, 50);   Retraso(50);   Tono(Altavoz, 1000, 50);   Retraso(60);   Tono(Altavoz, 1200, 50);   Retraso(50);   Tono(Altavoz, 1300, 50);   Retraso(60);   Tono(Altavoz, 1000, 50);   Retraso(50);   Tono(Altavoz, 1200, 50);   Retraso(60);   Tono(Altavoz, 1300, 100);   Retraso(50);
}
Vacío playAlarm(){   Serial.println("La alarma! ¡Alarma! ¡La alarma!");   Tono(Altavoz, 2000, 400);   Retraso(500);   Tono(Altavoz, 2000, 400);   Retraso(500);   Tono(Altavoz, 2000, 400);   Retraso(500);   Tono(Altavoz, 2000, 400);   Retraso(500);   Oled.Setfont(fixed_bold10x15);     Oled.Claro();     Oled.println(" Alarma!!!");
}

 

 

Para arduinoProyectos para principiantesSensores

1 comentario

Rolando

Rolando

Le istruzioni del programma si scrivono in inglese: per esempio #include , non Filo.h. Tralascio tutti gli altri errori ; ci sarebbe da scriverci un romanzo,
Die Programmanweisungen sind in englischer Sprache verfasst: Zum Beispiel #include , nicht Filo.h. Ich lasse alle anderen Fehler weg; Es würde einen Roman geben, über den man schreiben könnte.
Scusami se nella traduzione in tedesco ci sono degli errori…
Entschuldigung, wenn die deutsche Übersetzung fehlerhaft ist …
Firmato: un principiante

Deja un comentario

Todos los comentarios son moderados antes de ser publicados

Artículos de blog

  1. Ahora instalamos el esp32 a través de la administración.
  2. Lüftersteuerung Raspberry Pi
  3. Arduino IDE - Programmieren für Einsteiger - Teil 1
  4. ESP32 - das Multitalent
  5. Transporte Aéreo - programación de ESP mediante redes locales inalámbricas