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