This shows you the differences between two versions of the page.
pm:prj2021:alazar:ruleta_digitala [2021/04/25 23:03] petru.temelie |
pm:prj2021:alazar:ruleta_digitala [2021/06/03 19:15] (current) petru.temelie |
||
---|---|---|---|
Line 7: | Line 7: | ||
===Descriere generala=== | ===Descriere generala=== | ||
Proiectul va folosi un Arduino UNO si am ales sa folosesc senzori ultrasonici un buton care sa\\ | Proiectul va folosi un Arduino UNO si am ales sa folosesc senzori ultrasonici un buton care sa\\ | ||
- | faca conversia din inch in centimetri si un buton de on/off. De asemenea, cand se apropie de\\ | + | faca conversia din inch in centimetri. De asemenea, cu cat se apropie mai mult de\\ |
- | limita de distanta a senzorilor voi folosi un led pentru a notifica utilizatorul ca nu poate\\ masura mai mult de atat.\\ | + | senzori aprind in functie de intervalul de distanta led-ul corespunzator,\\ |
- | {{:pm:prj2021:alazar:untitled_diagram.jpg|}} \\ | + | iar daca se aprinde becul rosu, setat la distanta cea mai mica, buzzer-ul emite un sunet puternic.\\ |
+ | |||
+ | {{:pm:prj2021:alazar:schema_drawio.jpg?700|}} \\ | ||
===Hardware Design=== | ===Hardware Design=== | ||
Line 16: | Line 18: | ||
* Breadboard | * Breadboard | ||
* Fire | * Fire | ||
- | * Doua butoane | + | * Un buton |
* Senzori ultrasonici | * Senzori ultrasonici | ||
- | * Un LED | + | * 3 LED-uri |
* Un ecran LCD | * Un ecran LCD | ||
* Rezistente | * Rezistente | ||
+ | {{:pm:prj2021:alazar:eagle_schema.jpg?800|}}\\ | ||
===Software Design=== | ===Software Design=== | ||
+ | <spoiler Codul proiectului> | ||
+ | <code> | ||
+ | #include <LiquidCrystal_I2C.h> | ||
+ | |||
+ | #include <Wire.h> | ||
+ | |||
+ | LiquidCrystal_I2C lcd(0x23, 16, 2); | ||
+ | |||
+ | int trigger=12; | ||
+ | int echo=11; | ||
+ | int timp; | ||
+ | int distanta; | ||
+ | |||
+ | int red=2; | ||
+ | int yellow=3; | ||
+ | int green=4; | ||
+ | |||
+ | int butonPin=6; | ||
+ | int butonNew=0; | ||
+ | int butonOld=0; | ||
+ | int state=0; | ||
+ | int valbuton; | ||
+ | |||
+ | int dist3=20; | ||
+ | int dist2=10; | ||
+ | int dist1=3; | ||
+ | |||
+ | int buzzer=8; | ||
+ | int buzzeralim=A0; | ||
+ | void setup() { | ||
+ | pinMode(trigger,OUTPUT); | ||
+ | pinMode(echo,INPUT); | ||
+ | pinMode(red,OUTPUT); | ||
+ | pinMode(yellow,OUTPUT); | ||
+ | pinMode(green,OUTPUT); | ||
+ | |||
+ | pinMode(butonPin,INPUT); | ||
+ | pinMode(buzzer, OUTPUT); | ||
+ | Serial.begin(9600); | ||
+ | |||
+ | lcd.begin(); | ||
+ | |||
+ | lcd.backlight(); | ||
+ | lcd.print("Initializare"); | ||
+ | } | ||
+ | |||
+ | void loop() { | ||
+ | butonstate(); | ||
+ | Serial.println(distanta); | ||
+ | leduri(distanta, dist3, dist2, dist1); | ||
+ | afisare(); | ||
+ | | ||
+ | | ||
+ | } | ||
+ | |||
+ | void afisare(){ | ||
+ | lcd.clear(); | ||
+ | lcd.print("Distanta:"); | ||
+ | lcd.setCursor(9,0); | ||
+ | lcd.print(distanta); | ||
+ | lcd.setCursor(13,0); | ||
+ | if (state==0){ | ||
+ | lcd.print("cm"); | ||
+ | } | ||
+ | else{ | ||
+ | lcd.print("in"); | ||
+ | } | ||
+ | delay(300); | ||
+ | } | ||
+ | |||
+ | int senzor(){ | ||
+ | digitalWrite(trigger,LOW); | ||
+ | delayMicroseconds(10); | ||
+ | digitalWrite(trigger,HIGH); | ||
+ | delayMicroseconds(10); | ||
+ | digitalWrite(trigger,LOW); | ||
+ | timp=pulseIn(echo,HIGH); | ||
+ | delay(25); | ||
+ | if (state == 0) { | ||
+ | return 0.0173*timp; | ||
+ | } else { | ||
+ | return 0.0173 * timp /2.54; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | void leduri(int distanta, int dist3, int dist2, int dist1){ | ||
+ | if(distanta>dist3){ | ||
+ | digitalWrite(green,HIGH); | ||
+ | delay(300); | ||
+ | digitalWrite(green,LOW); | ||
+ | delay(300); | ||
+ | } | ||
+ | else if(distanta>dist2){ | ||
+ | //digitalWrite(buzzer,HIGH); | ||
+ | digitalWrite(yellow,HIGH); | ||
+ | delay(300); | ||
+ | digitalWrite(yellow,LOW); | ||
+ | delay(300); | ||
+ | } | ||
+ | else if(distanta>dist1){ | ||
+ | digitalWrite(red,HIGH); | ||
+ | delay(300); | ||
+ | digitalWrite(red,LOW); | ||
+ | delay(300); | ||
+ | analogWrite(buzzeralim,150); | ||
+ | digitalWrite(buzzer, LOW); | ||
+ | tone(buzzer, 450); | ||
+ | delay(100); | ||
+ | noTone(buzzer); | ||
+ | digitalWrite(buzzer,HIGH); | ||
+ | } | ||
+ | else{ | ||
+ | digitalWrite(buzzer,HIGH); | ||
+ | digitalWrite(green,LOW); | ||
+ | digitalWrite(yellow,LOW); | ||
+ | digitalWrite(red,LOW); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | void butonstate(){ | ||
+ | butonNew=digitalRead(butonPin); | ||
+ | distanta = senzor(); | ||
+ | if (butonOld==0 && butonNew==1){ | ||
+ | if(state==0){ | ||
+ | state=1; | ||
+ | dist3=20/ 2.54; | ||
+ | dist2=10/ 2.54; | ||
+ | dist1=3/ 2.54; | ||
+ | } | ||
+ | else{ | ||
+ | state=0; | ||
+ | dist3=20; | ||
+ | dist2=10; | ||
+ | dist1=3; | ||
+ | } | ||
+ | } | ||
+ | butonOld=butonNew; | ||
+ | | ||
+ | } | ||
+ | </code> | ||
+ | </spoiler> | ||
+ | Am realizat partea de coding in Arduino IDE. In functia senzor() calculez distanta de la senzor\\ | ||
+ | la obiect, pe care o transform in functie de modul setat din buton in centimetri sau in inch.\\ | ||
+ | Pentru a da o nota mai rezonabila buzzer-ului am folosit functia tone(), iar pentru a-l face sa\\ | ||
+ | bipaie am folosit un delay mic si apoi functia notone().\\ | ||
+ | |||
===Rezultate obtinute=== | ===Rezultate obtinute=== | ||
+ | https://www.youtube.com/watch?v=ywaQIWpIWfc\\ | ||
+ | |||
===Concluzii=== | ===Concluzii=== | ||
- | ===Download=== | + | Am implementat ce mi-am propus si functioneaza totul cum am sperat. Sunt multumit si a fost\\ |
+ | la fel de simplu pe cat ma asteptam.\\ | ||
===Jurnal=== | ===Jurnal=== | ||
+ | * 25.04 : Creare pagina ocw\\ | ||
+ | * 20.05 : Realizare proiect\\ | ||
+ | * 02.06 : Filmat poriectul si finalizat pagina ocw\\ | ||
+ | |||
===Bibliografie/Resurse=== | ===Bibliografie/Resurse=== | ||
+ | https://github.com/fdebrabander/Arduino-LiquidCrystal-I2C-library\\ | ||
+ | https://www.youtube.com/watch?v=tuRAvlVBEl0\\ | ||
+ | https://www.youtube.com/watch?v=M-UKXCUI0rE\\ | ||
+ | |||
+ | |||
+ | {{:pm:prj2021:alazar:ruleta_digitala_5_.pdf|}} |