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

 

 

Per arduinoProgetti per principiantiSensori

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

Post di blog consigliati

  1. Installa ESP32 ora dal gestore del consiglio di amministrazione
  2. Lüftersteuerung Raspberry Pi
  3. Arduino IDE - Programmieren für Einsteiger - Teil 1
  4. ESP32 - das Multitalent
  5. OTA - Over the Air - Programmazione ESP tramite WLAN