Einfache Alarmanlage mit dem Nano V3 - AZ-Delivery

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

 

 

Für arduinoProjekte für anfängerSensoren

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