Sistema di allarme semplice con Nano V3

Nostro attuale, Post di Blog, si basa su un Progetto che abbiamo recentemente nell'Ambito di un Workshop e di una Classe creata.

Si tratta, prima di tutto con i Componenti e le Librerie disponibili e di Esempi da diverse Fonti in un Dispositivo di lavoro per costruire e programmare.

Per la Realizzazione abbiamo bisogno delle seguenti Componenti:

AZ-Delivery Nano V3
AZ-Delivery Breadboard
AZ-Delivery Ponticelli m/m
AZ-Deliverya Matrice 4x4 Keypad
AZ-Delivery Buzzer Modulo Passivo
AZ-Delivery Movimento Modulo
AZ-Delivery 0,96 Pollici I2C Display OLED con

 

Piedinatura:

Nano V3

Keypad Modulo 4x4

Oled Display,

Buzzer

Movimento

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

 

 

 

mezzo

 

 

 

Passo 1: Tastierino numerico per impostare

i Pin 1-8 di Keypad connettersi con Pin D2 - D9 al Nano

Sketch -> Libreria montare -> gestisci Librerie

, la Ricerca di "keypad"
Keypad by Mark Stanley, Alexander Brevig

Intallieren

File> Esempi> Tastierino numerico -> HelloKeypad

Personalizzazione: ROWS e COLS 4
A, B), C) e D), aggiungere

controllare le Impostazioni sotto "Strumenti":

Board: Arduino Nano
Processore: ATmega 328P(old bootloader)
Porta: COM selezionare la porta

Seriale del Monitor aprire il Baud rate a 9600 regolare.

#include <Tastierino numerico.h>

const byte ROWS = 4; //four rows
const byte COLS = 4; //three columns
char keys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte rowPins[ROWS] = {9, 8, 7, 6}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {5, 4, 3, 2}; //connect to the column pinouts of the keypad

Keypad Keypad = Tastierino numerico( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

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

void loop(){
char key = tastierino numerico.getKey();

if (key){
Serial.system.out.println(key);
}
}



Carica & Testare
File -> Salva con nome -> HelloKeypad


Passaggio 2: impostare lo Schermo
Pin come segue:collegamento

Display Nano V3
GND GND
VCC 3V3
SCL A5
SDA A4


prendiamo la Biblioteca SSD1306Ascii e ampliare il nostro codice come il seguente:

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

#define I2C_ADDRESS 0x3C
#define RST_PIN -1

SSD1306AsciiWire oled;

nel void setup()

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

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

oled.set2X(); // dimensione doppia della Scrittura,



Ora andiamo a creare una Funzione che il Segno sul nostro Display hdmi:

void print2oled(char oledText){
oled.setFont(System5x7);
oled.clear();
oled.system.out.println(oledText);
delay(500);
}

E chiamare questa Funzione loop() a:

if (key){
Serial.system.out.println(key);
print2oled(key);
}


Risultato: Quando si preme il Pulsante viene visualizzato il Tasto premuto sul Display.


Prossimo Passo: abbiamo letto il Sensore IR da

Collegare:

Sensore IR Nano V3
VCC 5V
Metà D10
GND GND


Possiamo aggiungere il Codice seguente aggiunge:

pinmode(10, INPUT); // Pin D10 come INPUT utilizzati
bool detected = false; // è stato rileva movimento?



e fare una funzione il Sensore di sicurezza:

void checkPIR(){
if digitalread(PIR){
detected = true;
Serial.system.out.println("rileva Movimento");
}
else {
detected = false;
Serial.system.out.println (nessun Movimento);
}


Il Cicalino di Allarme sonoro, possiamo concludere come segue:

Buzzer Nano V3
- GND
S D11

Possiamo aggiungere quanto segue al Sketch di aggiungere:

int speaker = 11; // Digital Pin 11
pinMode(speaker, OUTPUT);

e la Funzione riportata di seguito per verificare se il Cicalino va:

void speakerTest(){
tone(speaker, 600, 500);
delay(100);
tone(speaker, 700, 100);
delay(100);
tone(speaker, 800, 750);
delay(200);
}

Ora sono tutti i Sensori e Moduli se funzionante e accessibile leggibile.

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

 

Hier der komplette Quellcode von der Alarmanlage mit allen Funktionen:

 

 

#include <Tastiera.h>
#include <Filo.h>
#include "SSD1306Ascii.h"
#include "SSD1306AsciiWire.h"

#define I2C_ADDRESS 0x3C
#define RST_PIN -1

#define PIR 10

bool rilevato = false;  // wurde bewegung erfasst?
bool armate = false; // ist der Allarme scharf geschaltet?    SSD1306AsciiWire oled;

const byte RIGHE = 4; //quattro righe
const byte COLS = 4; //tre colonne
char chiavi[RIGHE][COLS] = {   {'1','2','3','A'},   {'4','5','6','B'},   {'7','8','9','C'},   {'*','0','#','D'}
};

byte rowPins[RIGHE] = {9, 8, 7, 6}; //connect per la fila di pin della tastiera
byte colPins[COLS] = {5, 4, 3, 2}; //collegare la colonna pin della tastiera

Tastiera tastiera = Tastiera( makeKeymap(chiavi), rowPins, colPins, RIGHE, COLS );

int altoparlante = 11; // Pin Digitale 11

char* pinCode = "1337";      // Impostare il codice PIN.
int currentPosition = 0;     // Tiene traccia della posizione del codice inserito.

void setup(){   di Serie.iniziano(9600);   Filo di.iniziare a();   Filo.setClock(400000L);   #se RST_PIN >= 0     oled.iniziare(&Adafruit128x64, I2C_ADDRESS, RST_PIN);   #else // RST_PIN >= 0     oled.iniziare(&Adafruit128x64, I2C_ADDRESS);   #endif // RST_PIN >= 0   oled.set2X(); // doppelte größe der Schrift   pinMode(10, INPUT);   pinMode(altoparlante, di USCITA);   speakerTest();
}    void loop(){   char key = tastiera.getKey();   checkPIR();   int l;   se (il tasto){     segnale acustico();     di Serie.println(chiave);     print2oled(chiave);     se (int(chiave) != 0) {                    // Controlla per vedere se c'è un valore presente.            per (l=0; l<=currentPosition; ++l)     { }          se (la chiave == pinCode[currentPosition])        // Se il valore è corretto, aumentare del codice posizione per uno.       {         ++currentPosition;                  se (currentPosition == 4)                // Se tutte e quattro le parti del codice sono corrette, sbloccare la porta.         {           oled.chiaro();           unlockDoor();           currentPosition = 0;         }       }             altro {         invalidCode();                           // Se tutte le parti del codice sono sbagliato, non aprire la porta.         currentPosition = 0;     }   }
}   se (armato){ // alarmanlage scharf?     se (rilevato){       playAlarm();     }   }
}


void print2oled(char oledText){     oled.setFont(fixed_bold10x15);          oled.stampa(oledText);     ritardo(500);
}

void checkPIR(){     se (digitalRead(PIR)){       rilevato = vera;       Seriale.println("Bewegung erfasst");       ritardo(50);     }     altro {       rilevato = false;       //Serial.println("keine Bewegung");       ritardo(50);     }     }

void speakerTest(){    tono(altoparlante, 600, 50);    ritardo(100);    tono(altoparlante, 700, 50);    ritardo(100);    tono(altoparlante, 800, 200);    ritardo(200);
}    void beep(){   tono(altoparlante, 2000, 100);
}

void beepOK(){   tono(altoparlante, 3000, 50);   ritardo(50);   tono(altoparlante, 3300, 50);
}

void invalidCode()
{   oled.chiaro();   oled.println("Fehler");   tono(altoparlante, 300,150);   ritardo(250);   tono(altoparlante, 220, 300);   ritardo(1000);   oled.chiaro();
}


void unlockDoor()
{   se (armati){     armati=false;     Seriale.println("Allarme deaktiviert");     oled.setFont(fixed_bold10x15);     oled.chiaro();     oled.println("Aus");     ritardo(1000);     oled.trasparente();   }   altro{     armati=vero;     Serial.println("Allarme aktiviert!");     oled.setFont(fixed_bold10x15);     oled.chiaro();     oled.println("aktiv!");     ritardo(1000);     oled.chiaro();   }      tono(altoparlante, 1000, 50);   ritardo(50);   tono(altoparlante, 1200, 50);   ritardo(60);   tono(altoparlante, 1300, 50);   ritardo(50);   tono(altoparlante, 1000, 50);   ritardo(60);   tono(altoparlante, 1200, 50);   ritardo(50);   tono(altoparlante, 1300, 50);   ritardo(60);   tono(altoparlante, 1000, 50);   ritardo(50);   tono(altoparlante, 1200, 50);   ritardo(60);   tono(altoparlante, 1300, 100);   ritardo(50);
}
void playAlarm(){   Seriale.println("Allarme! Allarme! Allarme!");   tono(altoparlante, 2000, 400);   ritardo(500);   tono(altoparlante, 2000, 400);   ritardo(500);   tono(altoparlante, 2000, 400);   ritardo(500);   tono(altoparlante, 2000, 400);   ritardo(500);   oled.setFont(fixed_bold10x15);     oled.chiaro();     oled.println(" Allarme!!!");
}

 

 

Für arduinoProjekte für anfängerSensoren

1 Kommentar

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

Einen Kommentar hinterlassen

Alle Kommentare werden vor der Veröffentlichung moderiert