Einfache Alarmanlage mit dem Nano V3 - AZ-Delivery

vandaag blogpost is gebaseerd op een project dat we recentelijk, in het kader van een workshop met een klas hebt gemaakt.

Het is allemaal over het gebruik van bestaande componenten, en de beschikbare bibliotheken en voorbeelden van de verschillende energiebronnen voor het bouwen van een werkend apparaat en programma.

Voor de realisatie moeten we de volgende onderdelen:

AZ-Levering Nano V3
AZ-Levering Breadboard
AZ-Levering van de plug-in jumpers, m/m,
AZ-Levering4x4 Matrix Toetsenbord,
AZ-Levering Zoemer module, Passief,
AZ-Levering motion sensor module
AZ-Levering 0.96 inch OLED-Display I2C

 

Pinout:

Nano V3

Toetsen module, 4x4

Oled-Display,

een Buzzer,

bewegingsmelder

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

 

 

 

het midden van

 

 

 

stap 1: Toetsen het opzetten van de

Pennen 1-8 van de Toetsen sluiten aan op pin D2 - D9 op de Nano

Schets -> library-project -> het beheren van bibliotheken

en Zoek naar "toetsenbord"
het Toetsenbord door Mark Stanley, Alexander Brevig

Installeren

op bestand> voorbeelden -> Toetsenbord -> Hallo toetsenbord

aan te Passen: RIJEN en KOLOMMEN, elk van de 4
A, B, C, en D voor het toevoegen van een

controle-instellingen onder hulpmiddelen:

Raad van bestuur: Arduino Nano
processor: atmega 328 p(oude bootloader)
Poort: COM-poort selecteren

Serial Monitor te openen de baudrate op 9600 ingesteld.

#include <Toetsenblok.h>

const byte ROWS = 4; //vier rijen
const byte COLS = 4; //de drie kolommen
char toetsen[RIJEN][COLS] = {
{'1','2','3','EEN'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte rowPins[RIJEN] = {9, 8, 7, 6}; //sluit de rij van pinouts van de toetsen
byte colPins[COLS] = {5, 4, 3, 2}; //sluit de kolom pinouts van het toetsenbord

Toetsenbord Toetsenbord = Keypad( make-keymap(toetsen), rowPins, colPins, RIJEN, KOLOMMEN );

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

void loop(){
char toets = toetsenblok.getKey();

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



Uploaden en Testen plaats in de
bestand -> Opslaan als -> Hallo toetsenblok


stap 2: Weergave van het opzetten van de
Pennen als volgt te werk:sluit het

Scherm Nano V3
GND GND
VCC 3V3
SCL-A5
SDA A4


, nemen We de bibliotheek SSD1306Ascii en uitbreiden van onze code als volgt uit:

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

#define I2C_ADDRESS 0x3C
#define RST_PIN -1

SSD1306AsciiWire oled;

in de void setup()

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

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

oled.set2X(); // dubbele van de grootte van het lettertype



Nu maken we een functie die de tekens op het Display uitgangen:

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

En deze functie te gebruiken in een loop() aan:

als (key){
Serial.println(sleutel);
print2oled(sleutel);
}


resultaat: Wanneer u drukt op de toets, de toets in de Display.


Volgende stap: we lezen de IR-Sensor

Aansluiten

IR-Sensor Nano V3
VCC 5V
center D10
GND GND


voegen We de Code het volgende:

pinmode(10, INPUT); // Pin-D10 als INPUT gebruikt
bool gedetecteerd = false; // is bewegingsdetectie?



en een functie van de Sensor sensing:

void checkPIR(){
als digitalread(PIR){
gedetecteerd = true;
Serial.println("beweging gedetecteerd");
}
else {
gedetecteerd = false;
Serial.println("geen beweging");
}


De Zoemer voor het alarmsignaal in, concluderen we als volgt:

Zoemer Nano-V3
- GND
S D11

, voegen We het volgende toe aan de Sketch toe te voegen:

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

en de volgende functie om te testen of de Zoemer is:

void luidspreker test(){
toon(speaker, 600, 500);
delay(100);
toon(speaker, 700, 100);
delay(100);
toon(speaker, 800, 750);
delay(200);
}

Nu al de benodigde Sensoren en modules, zo ver als functioneel en toegankelijk/leesbaar.

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

 

Hier der komplette Quellcode von der Alarmanlage mit allen Funktionen:

 

 

#include <Toetsen.h>
#include <Draad.h>
#include "SSD1306Ascii.h"
#include "SSD1306AsciiWire.h"

#define I2C_ADDRESS 0x3C
#define RST_PIN -1

#define PIR 10

bool gedetecteerd = false;  // wurde bewegung erfasst?
bool gewapende = false; // ist der Alarm scharf geschaltet?    SSD1306AsciiWire oled -;

const byte RIJEN = 4; //vier rijen
const byte COLS = 4; //drie kolommen
char toetsen[RIJEN][COLS] = {   {'1','2','3','A'},   {'4','5','6','B'},   {'7','8','9','C'},   {'*','0','#','D'}
};

byte rowPins[RIJEN] = {9, 8, 7, 6}; //sluit de rij van pinouts van de toetsen
byte colPins[COLS] = {5, 4, 3, 2}; //sluit de kolom pinouts van het toetsenbord

Toetsenbord toetsenbord = Toetsenbord( makeKeymap(toetsen), rowPins, colPins, RIJEN, COLS );

int speaker = 11; // Digitale Pin 11

char* pinCode = "1337";      // Stel de vereiste PIN-code.
int currentPosition = 0;     // Houdt de sporen bij van de positie van de code ingevoerd.

void setup(){   Seriële.beginnen(9600);   Draad.beginnen();   Draad.setClock(400000L);   #als RST_PIN >= 0     oled.beginnen(&Adafruit128x64, I2C_ADDRESS, RST_PIN);   #else // RST_PIN >= 0     oled.beginnen(&Adafruit128x64, I2C_ADDRESS);   #endif // RST_PIN >= 0   oled.set2X(); // doppelte größe der Schrift   pinMode(10, INGANG);   pinMode(luidspreker, UITGANG);   speakerTest();
}    void loop(){   char toets = toetsenblok.getKey();   checkPIR();   int l;   als (key){     beep();     Seriële.println(toets);     print2oled(toets);     als (int(- toets) != 0) {                    // Check om te zien of er een waarde aanwezig is.            voor (l=0; l<=currentPosition; ++l)     { }          als (toets == pinCode[currentPosition])        // Als de waarde correct is, verhoogt hij de code voor positie met één.       {         ++currentPosition;                  als (currentPosition == 4)                // Als alle vier de onderdelen van de code correct zijn, is het openen van de deur.         {           oled.duidelijk();           unlockDoor();           currentPosition = 0;         }       }             anders {         invalidCode();                           // Als alle onderdelen van de code verkeerd is, doen de deur niet open.         currentPosition = 0;     }   }
}   als (gewapend){ // alarmanlage scharf?     als (gedetecteerd){       playAlarm();     }   }
}


void print2oled(char oledText){     oled.setFont(fixed_bold10x15);          oled -.print(oledText);     vertraging(500);
}

void checkPIR(){     als (digitalRead(PIR)){       gedetecteerd = true;       Serial.println("Bewegung erfasst");       delay(50);     }     anders {       gedetecteerd = false;       //Serial.println("keine Bewegung");       vertraging(50);     }     }

void speakerTest(){    toon(luidspreker, 600, 50);    vertraging(100);    toon(luidspreker, 700, 50);    vertraging(100);    toon(luidspreker, 800, 200);    vertraging(200);
}    void beep(){   toon(luidspreker, 2000, 100);
}

void beepOK(){   toon(luidspreker, 3000, 50);   vertraging(50);   toon(luidspreker, 3300, 50);
}

void invalidCode()
{   oled.duidelijk();   oled.println("Fehler");   toon(luidspreker, 300,150);   vertraging(250);   toon(luidspreker, 220, 300);   vertraging(1000);   oled.duidelijk();
}


void unlockDoor()
{   als (gewapend){     gewapend=valse;     Seriële.println("Alarm deaktiviert");     oled.setFont(fixed_bold10x15);     oled.duidelijk();     oled.println("Aus");     vertraging(1000);     oled.duidelijk();   }   anders{     gewapende=true;     Serial.println("Alarm aktiviert!");     oled.setFont(fixed_bold10x15);     oled.duidelijk();     oled.println("aktiv!");     vertraging(1000);     oled.duidelijke();   }      toon(luidspreker, 1000, 50);   vertraging(50);   toon(luidspreker, 1200, 50);   vertraging(60);   toon(luidspreker, 1300, 50);   vertraging(50);   toon(luidspreker, 1000, 50);   vertraging(60);   toon(luidspreker, 1200, 50);   vertraging(50);   toon(luidspreker, 1300, 50);   vertraging(60);   toon(luidspreker, 1000, 50);   vertraging(50);   toon(luidspreker, 1200, 50);   vertraging(60);   toon(luidspreker, 1300, 100);   vertraging(50);
}
void playAlarm(){   Serie.println("Alarm! Alarm! Alarm!");   toon(spreker, 2000, 400);   vertraging(500);   toon(spreker, 2000, 400);   vertraging(500);   toon(spreker, 2000, 400);   vertraging(500);   toon(spreker, 2000, 400);   vertraging(500);   oled.setFont(fixed_bold10x15);     oled.Doorzichtig();     oled.println(" Alarm!!!");
}

 

 

Für arduinoProjekte für anfängerSensoren

1 Reactie

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

Laat een reactie achter

Alle opmerkingen worden voor publicatie gecontroleerd door een moderator

Aanbevolen blogberichten

  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