This shows you the differences between two versions of the page.
pm:prj2022:robert:laser-tripwire-alarm [2022/05/26 21:20] mario_gabriel.mosor [Hardware Design] |
pm:prj2022:robert:laser-tripwire-alarm [2022/05/27 20:52] (current) mario_gabriel.mosor [Jurnal] |
||
---|---|---|---|
Line 40: | Line 40: | ||
- | <note tip> | + | Am lucrat in IDE oferit de Arduino. |
- | Descrierea codului aplicaţiei (firmware): | + | |
- | * mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR) | + | Biblioteci folosite: |
- | * librării şi surse 3rd-party (e.g. Procyon AVRlib) | + | keypad.h (https://github.com/Chris--A/Keypad) |
- | * algoritmi şi structuri pe care plănuiţi să le implementaţi | + | |
- | * (etapa 3) surse şi funcţii implementate | + | Codul de acces este stocat într-o matrice, am ales un cod de 4 cifre, îl putem face mai lung sau mai scurt, doar modificam dimensiunea matricei și adăugam sau eliminam valori. |
- | </note> | + | |
+ | <code cpp> | ||
+ | short code[4]={'1','3','6','6'}; | ||
+ | </code> | ||
+ | |||
+ | Pentru a opri alarma, trebuie să apăsam pe „*” de pe tastatură, apoi să introducem numerele 1, 3, 6, 6, codul va fixa soneria într-o singură frecvență (deranjantă) până când introducem 4 cifre, dacă acestea sunt corecte alarma se va opri, altfel se va declanșa din nou. | ||
+ | |||
+ | <code cpp> | ||
+ | void Getpass(){ | ||
+ | tone(13,2000); | ||
+ | for(short i=0 ; i<4 ; i++) | ||
+ | { | ||
+ | char keypressed = myKeypad.waitForKey(); | ||
+ | if (keypressed==code[i]) | ||
+ | a++; | ||
+ | } | ||
+ | } | ||
+ | </code> | ||
+ | |||
+ | De fiecare dată când introducem o cifră corectă, valoarea „a” crește, dacă este == 4, codul este considerat corect, altfel numărul nu va fi niciodată egal cu 4. | ||
+ | |||
+ | <code cpp> | ||
+ | if(a==4){ | ||
+ | noTone(13); | ||
+ | a=0; | ||
+ | detection=false; | ||
+ | } | ||
+ | </code> | ||
+ | |||
+ | ==CODUL== | ||
+ | <code cpp> | ||
+ | #include <Keypad.h> | ||
+ | |||
+ | #define Rec 0 | ||
+ | #define Laser 2 | ||
+ | #define Button 3 | ||
+ | |||
+ | bool detection; | ||
+ | short a=0; | ||
+ | short code[4]={'1','3','6','6'}; //codul de acces este stocat într-o matrice, îl putem face mai lung sau mai scurt | ||
+ | |||
+ | |||
+ | const byte numRows= 4; //Rândurile și coloanele tastaturii | ||
+ | const byte numCols= 4; | ||
+ | |||
+ | char keymap[numRows][numCols]= //Harta tastaturii | ||
+ | { | ||
+ | {'1', '2', '3', 'A'}, | ||
+ | {'4', '5', '6', 'B'}, | ||
+ | {'7', '8', '9', 'C'}, | ||
+ | {'*', '0', '#', 'D'} | ||
+ | }; | ||
+ | |||
+ | byte rowPins[numRows] = {11,10,9,8}; //Keypad 8 pins | ||
+ | byte colPins[numCols]= {7,6,5,4}; | ||
+ | |||
+ | Keypad myKeypad= Keypad(makeKeymap(keymap), rowPins, colPins, numRows, numCols); | ||
+ | |||
+ | void setup() { | ||
+ | |||
+ | pinMode(Laser, OUTPUT); | ||
+ | digitalWrite(Laser, HIGH); | ||
+ | delay(2000); | ||
+ | } | ||
+ | |||
+ | void loop() { | ||
+ | |||
+ | short Detect = analogRead(Rec); //Citirea constantă a valorii senzorului, pentru a detecta dacă cineva trece | ||
+ | |||
+ | |||
+ | if(Detect < 500) | ||
+ | detection = true; | ||
+ | |||
+ | if(detection==true) | ||
+ | { //Secvența de alarmă și așteptare constantă ca „*” să fie apăsat | ||
+ | tone(13,1000); | ||
+ | delay(50); | ||
+ | tone(13,200); | ||
+ | delay(50); | ||
+ | char keypressed = myKeypad.getKey(); | ||
+ | if (keypressed == '*') //dacă este apăsat „*” acceseaza funcția Getpass | ||
+ | Getpass(); | ||
+ | } | ||
+ | |||
+ | if(a==4){ //dacă a==4 înseamnă că codul este corect, alarma este oprită | ||
+ | noTone(13); | ||
+ | a=0; //setam a la 0, altfel alarma se va opri automat | ||
+ | detection=false; | ||
+ | } | ||
+ | |||
+ | | ||
+ | } | ||
+ | |||
+ | void Getpass(){ //Obținerea funcției de parolă | ||
+ | tone(13,2000); //Sunet cu frecvență constantă în timp ce introducem codul | ||
+ | for(short i=0 ; i<4 ; i++) | ||
+ | { | ||
+ | |||
+ | char keypressed = myKeypad.waitForKey(); | ||
+ | if (keypressed==code[i]) //Dacă secvența este corectă, a crește (4) înseamnă că toate valorile sunt corecte | ||
+ | a++; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | </code> | ||
===== Rezultate Obţinute ===== | ===== Rezultate Obţinute ===== | ||
Line 55: | Line 159: | ||
===== Concluzii ===== | ===== Concluzii ===== | ||
+ | Având un start mai lent decât ceilalți colegi (au întârziat destul de mult anumite piese), acest proiect s-a dovedit a fi o provocare unde | ||
+ | am învățat cum sa lucrez util într-un timp scurt. Acest dispozitiv este folosit pentru securizarea anumitor obiecte, alertând proprietarul cu ajutorul unui buzzer. Proiectul funcționează corespunzător dorințelor mele fiind util pentru oricine si in orice mediu. | ||
+ | Sursa inspirației mele fiind filmul Oceans Twelve | ||
+ | |||
===== Download ===== | ===== Download ===== | ||
+ | *{{:pm:prj2022:robert:laser_tripwire_alarm_keypad.7z|Source Code}} | ||
- | <note warning> | + | *{{:pm:prj2022:robert:wiring.png?linkonly|Electric diagram}} |
- | O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectului: surse, scheme, etc. Un fişier README, un ChangeLog, un script de compilare şi copiere automată pe uC crează întotdeauna o impresie bună ;-). | + | |
- | + | ||
- | Fişierele se încarcă pe wiki folosind facilitatea **Add Images or other files**. Namespace-ul în care se încarcă fişierele este de tipul **:pm:prj20??:c?** sau **:pm:prj20??:c?:nume_student** (dacă este cazul). **Exemplu:** Dumitru Alin, 331CC -> **:pm:prj2009:cc:dumitru_alin**. | + | |
- | </note> | + | |
===== Jurnal ===== | ===== Jurnal ===== | ||
- | <note tip> | + | * Săptămâna 1: Am început să fac cercetări pentru tema proiectului și să o aleg pe cea care m-a atras cel mai mult |
- | Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului. | + | * Săptămâna 2: Am plasat comanda pentru piesele necesare |
- | </note> | + | * Săptămâna 3: Începutul proiectului propriu-zis (Completare pagina wiki || +inca asteptam senzorul de lumina) |
+ | * Săptămâna 4: Terminarea proiectului si prezentarea proiectului la laborator | ||
===== Bibliografie/Resurse ===== | ===== Bibliografie/Resurse ===== | ||
- | + | [[https://ardushop.ro/ro/home/89-modul-buzzer.html?gclid=CjwKCAjw7cGUBhA9EiwArBAvooFcSrWbhKVi24jDsyeEdWovjSsRJ1dfju0rWZYueQ2UHNw3YCHWNBoCtTUQAvD_BwE]] | |
- | <note> | + | https://www.sigmanortec.ro/Modul-dioda-laser-KY-008-p126265142?gclid=CjwKCAjw7cGUBhA9EiwArBAvosYIsk3VPmFXy06tMPde5yQvnzRVQsOup2G6UDXkm6JZ9l3N184ogRoCCwEQAvD_BwE |
- | Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**. | + | [[https://www.seeedstudio.com/Grove-Light-Sensor-p-746.html]] |
- | </note> | + | |
<html><a class="media mediafile mf_pdf" href="?do=export_pdf">Export to PDF</a></html> | <html><a class="media mediafile mf_pdf" href="?do=export_pdf">Export to PDF</a></html> | ||