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