Einfache Alarmanlage mit dem Nano V3 - AZ-Delivery

aujourd'hui, le Blog est basé sur un Projet que nous avons récemment dans le Cadre d'un Atelier avec une Classe d'école avez créé.

Il s'agit avant tout de Composants existants et disponibles, des Bibliothèques et des Exemples provenant de différentes Sources, un Appareil qui fonctionne à construire et à programmer.

Pour la Réalisation, nous avons besoin les Éléments suivants:

AZ-Remise Nano V3
AZ-Remise platine d'essai
AZ-Remise Cavaliers m/m
AZ-Remise4x4 Matrice Clavier
AZ-Remise Buzzer Module Passif
AZ-Remise Détecteur de mouvement Module
AZ-Remise 0,96 Pouces I2C Écran OLED

 

affectation des Broches:

Nano V3

Pavé Module 4x4

Écran Oled

Buzzer

Détecteur

D2

1

 

 

 

D3

2

 

 

 

D4

3

 

 

 

D5

4

 

 

 

D6

5

 

 

 

D7

6

 

 

 

D8

7

 

 

 

D9

8

 

 

 

3C3

 

VCC

 

 

GND

 

GND

-

GND

A4

 

SDA

 

 

A5

 

SCL

 

 

D11

 

 

S

 

5V

 

 

 

VCC

D10

 

 

 

milieu de

 

 

 

l'Étape 1: Pavé de configurer

les Broches 1 à 8 de Pavé connecter avec des Broches D2 D9 sur le Nano

Sketch -> Bibliothèque de l'intégrer -> gérer les Bibliothèques

à la Recherche de "keypad"
Keypad by Mark Stanley, Alexandre Brevig

Installez

Fichier -> Exemples -> Clavier -> HelloKeypad

Personnaliser: ROWS et COLS de 4
A, B, C et D ajouter

de vérifier les Paramètres de la section "Outils":

Board: Arduino Nano
processeur: Processeur ATmega 328P(old bootloader)
Port: COM de sélectionner le port

Série du Moniteur pour ouvrir, la vitesse de transmission de 9600 régler.

#include <Pavé.h>

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

Pavé pavé = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

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

void loop(){
char key = clavier.getKey();

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



Télécharger & Tester
Fichier -> Enregistrer sous -> HelloKeypad


Étape 2: configuration de l'Affichage
Pins comme suit:relier

Écran Nano V3
GND GND
VCC 3C3
SCL A5
SDA A4,


Nous prenons la Bibliothèque SSD1306Ascii et d'élargir notre code comme suit:

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

#define I2C_ADDRESS 0x3C
#define RST_PIN -1

SSD1306AsciiWire oled;

dans le 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(); // double de la taille de la Police



Maintenant, nous allons créer une Fonction qui le Signe sur notre Écran émet:

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

Et d'appeler cette Fonction dans le loop() sur:

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


Résultat: Lorsque vous appuyez sur la Touche la Touche à l'Écran.


Prochaine Étape: nous avons lu le Capteur IR de

Connexion:

IR Capteur Nano V3
VCC 5V
Mi-D10
GND GND


, Nous allons ajouter le Code suivant ajoute:

pinmode(10, INPUT); // Broche D10 est comme INPUT utilisé
bool detected = false; // a été un mouvement?



et de faire une fonction qui interroge le Capteur:

void checkPIR(){
if digitalread(PIR){
detected = true;
Serial.println("Mouvement");
}
else {
detected = false;
Serial.println("aucun Mouvement");
}


Le Buzzer de l'Alarme, nous concluons comme suit:

Buzzer Nano V3
- GND
S D11

, Nous allons ajouter ce qui suit au Sketch d'ajouter:

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

et la Fonction suivante pour tester si le Buzzer va:

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

Maintenant, tous les Capteurs nécessaires et des Modules dans la mesure où fonctionnel et accessible exploitable.

Wir speichern den Esquisse mittels "Fichier" -> "Speichern unter" als Alarmanlage

 

Hier der komplette Quellcode von der Alarmanlage mit allen Funktionen:

 

 

#include <Clavier.h>
#include <Fil.h>
#include "SSD1306Ascii.h"
#include "SSD1306AsciiWire.h"

#define I2C_ADDRESS 0x3C
#define RST_PIN -1

#define PIR 10

bool détecté = false;  // wurde bewegung erfasst?
bool armés = de faux; // ist der Alarme scharf geschaltet?    SSD1306AsciiWire oled;

const byte LIGNES = 4; //quatre lignes
const byte COLS = 4; //trois colonnes
char touches de[LIGNES][COLS] = {   {'1','2','3','A'},   {'4','5','6','B'},   {'7','8','9','C'},   {'*','0','#','D'}
};

octets rowPins[LIGNES] = {9, 8, 7, 6}; //connexion à la ligne de brochage du clavier
octet colPins[COLS] = {5, 4, 3, 2}; //se connecter à la colonne brochage de la clavier

Clavier clavier = Clavier( makeKeymap(clés), rowPins, colPins, LIGNES, de COLS, );

int haut-parleur = 11; / Numérique/ Broche 11

char* code pin = "1337";      // le code PIN.
int currentPosition = 0;     // Conserve la trace de la position du code saisi.

void setup(){   de Série.commencent(9600);   Fil de.commencer à();   Fil.setClock(400000L);   #si RST_PIN >= 0     oled.commencer(&Adafruit128x64, I2C_ADDRESS, RST_PIN);   #else // RST_PIN >= 0     oled.commencer(&Adafruit128x64, I2C_ADDRESS);   #endif // RST_PIN >= 0   oled.set2X(); // doppelte größe der Schrift   pinMode(10, ENTRÉE);   pinMode(haut-parleur, de SORTIE);   speakerTest();
}    void loop(){   char touche = du clavier.getKey();   checkPIR();   int l;   si (la clé){     bip();     Série.println(clé);     print2oled(clé);     si (int(clé) != 0) {                    // Vérifier pour voir si il y a une valeur.            pour (l=0; l<=currentPosition; ++l)     { }          si (la clé de == code pin[currentPosition])        // Si la valeur est correcte, augmenter il position dans le code par un.       {         ++currentPosition;                  si (currentPosition == 4)                // Si toutes les quatre parties du code sont correct, déverrouiller la porte.         {           oled.clair();           unlockDoor();           currentPosition = 0;         }       }             d'autre {         invalidCode();                           // Si l'une des parties du code sont mauvais, ne pas ouvrir la porte.         currentPosition = 0;     }   }
}   si (armées){ // alarmanlage scharf?     si (détecté){       playAlarm();     }   }
}


vide print2oled(char oledText){     oled.setFont(fixed_bold10x15);          oled.impression(oledText);     retard(500);
}

nulle checkPIR(){     si (digitalRead(PIR)){       détecté = vrai;       Série.println("Bewegung erfasst");       délai(50);     }     d'autre {       détecté = false;       //Serial.println("keine Bewegung");       retard(50);     }     }

nulle speakerTest(){    ton(haut-parleur, 600, 50);    de retard(100);    ton(haut-parleur, 700, 50);    de retard(100);    ton(haut-parleur, 800, 200);    retard(200);
}    nulle bip(){   ton(haut-parleur, 2000, 100);
}

vide beepOK(){   ton(haut-parleur, 3000, 50);   de retard(50);   ton(haut-parleur, 3300, 50);
}

vide invalidCode()
{   oled.clair();   oled.println("Erreur");   ton(haut-parleur, 300,150);   de retard(250);   ton(haut-parleur, 220, 300);   retard(1000);   oled.clair();
}


nulle unlockDoor()
{   si (armées){     armées=de faux;     Série.println("Alarme deaktiviert");     oled.setFont(fixed_bold10x15);     oled.clair();     oled.println("Aus");     retard(1000);     oled.clair();   }   d'autre{     armées=vrai;     Série.println("Alarme aktiviert!");     oled.setFont(fixed_bold10x15);     oled.clair();     oled.println("aktiv!");     retard(1000);     oled.clair();   }      ton(haut-parleur, 1000, 50);   de retard(50);   ton(haut-parleur, 1200, 50);   de retard(60);   ton(haut-parleur, 1300, 50);   de retard(50);   ton(haut-parleur, 1000, 50);   de retard(60);   ton(haut-parleur, 1200, 50);   de retard(50);   ton(haut-parleur, 1300, 50);   de retard(60);   ton(haut-parleur, 1000, 50);   de retard(50);   ton(haut-parleur, 1200, 50);   de retard(60);   ton(haut-parleur, 1300, 100);   retard(50);
}
nulle playAlarm(){   En série.println("Alarme! Alarme! Alarme!");   Ton(orateur, 2000, 400);   retard(500);   Ton(orateur, 2000, 400);   retard(500);   Ton(orateur, 2000, 400);   retard(500);   Ton(orateur, 2000, 400);   retard(500);   oled.setFont(fixed_bold10x15);     oled.clair();     oled.println("Alarme !!!");
}

 

 

Für arduinoProjekte für anfängerSensoren

1 commentaire

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

Laisser un commentaire

Tous les commentaires sont modérés avant d'être publiés

Articles de blog recommandés

  1. ESP32 jetzt über den Boardverwalter installieren - AZ-Delivery
  2. Internet-Radio mit dem ESP32 - UPDATE - AZ-Delivery
  3. Arduino IDE - Programmieren für Einsteiger - Teil 1 - AZ-Delivery
  4. ESP32 - das Multitalent - AZ-Delivery