This shows you the differences between two versions of the page.
pm:prj2024:avaduva:atoader [2024/05/18 03:01] atoader |
pm:prj2024:avaduva:atoader [2024/05/26 23:51] (current) atoader |
||
---|---|---|---|
Line 59: | Line 59: | ||
{{pm/prj2024/avaduva/vita_nu_sobolan_da.jpg|}} | {{pm/prj2024/avaduva/vita_nu_sobolan_da.jpg|}} | ||
+ | |||
+ | P.S. Nu se vede pe POZA, dar merge si motorul, doar senzorul nu l-am testat efectiv, adica, cum ar, veni, am facut si in plus (: | ||
Line 68: | Line 70: | ||
<note tip> | <note tip> | ||
Descrierea codului aplicaţiei (firmware): | Descrierea codului aplicaţiei (firmware): | ||
- | * mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR) | + | * mediu de dezvoltare: Arduino |
- | * librării şi surse 3rd-party (e.g. Procyon AVRlib) | + | * librării şi surse 3rd-party: Stepper.h,, LiquidCrystal.h, TimerOne1.h, Adafruit_VEML7700.h: https://github.com/adafruit/Adafruit_VEML7700 |
- | * algoritmi şi structuri pe care plănuiţi să le implementaţi | + | * Se misca panoul stanga, dreapta pana gaseste o sursa de lumina de minim 700lux |
- | * (etapa 3) surse şi funcţii implementate | + | |
</note> | </note> | ||
Line 77: | Line 78: | ||
<note tip> | <note tip> | ||
- | Care au fost rezultatele obţinute în urma realizării proiectului vostru. | + | Panoul, desi haotic ish, reuseste sa gaseasca mereu blitz-ul telefonului si sa fie centrat pe el. |
</note> | </note> | ||
+ | Demo: https://youtu.be/LmnLLlTDUFg | ||
+ | |||
===== Concluzii ===== | ===== Concluzii ===== | ||
+ | Desi arata horror, macar face cat de cat ce trebuie. | ||
+ | Ar putea fi folosit efectiv in practica? NU! | ||
+ | Se misca mult prea haotic pentru ceva ce ar cantarii sute de kg, dar pt 20g ale mele, functioneaza macar... | ||
+ | |||
+ | codul: | ||
+ | Declararea componentelor, global de ce ma-ntrebi: | ||
+ | <code> | ||
+ | int stepsPerRevolution = 2048; | ||
+ | int motSpeed = 10; | ||
+ | Stepper myStepper(stepsPerRevolution, 8, 10, 9, 11); | ||
+ | LiquidCrystal lcd(2, 3, 4, 5, 6, 7); | ||
+ | Adafruit_VEML7700 veml; | ||
+ | </code> | ||
+ | |||
+ | Partea de begin, practic initializarea a ceea ce voi folosi: | ||
+ | <code> | ||
+ | Serial.begin(9600); | ||
+ | myStepper.setSpeed(motSpeed); | ||
+ | lcd.begin(16,2); | ||
+ | if (veml.begin()) { | ||
+ | Serial.println("Found a VEML7700 sensor"); | ||
+ | } else { | ||
+ | Serial.println("No sensor found ... check your wiring?"); | ||
+ | while (1); | ||
+ | } | ||
+ | veml.setGain(VEML7700_GAIN_1); | ||
+ | veml.setIntegrationTime(VEML7700_IT_100MS); | ||
+ | Timer1.initialize(10000000); | ||
+ | Timer1.attachInterrupt(checkADC); | ||
+ | </code> | ||
+ | |||
+ | Partea de loop: | ||
+ | <code> | ||
+ | void loop() { | ||
+ | int code = look_for_better_sunlight(); | ||
+ | if(code == 10000) { | ||
+ | lcd.clear(); | ||
+ | int lux = veml.readLux(); | ||
+ | while(lux > 700) { | ||
+ | lux = veml.readLux(); | ||
+ | float W = 220.0 * lux / 700; | ||
+ | lcd.clear(); | ||
+ | lcd.setCursor(0,0); | ||
+ | lcd.print("Lux: " + String(lux) + " KW: " + String(W)); | ||
+ | lcd.setCursor(0,1); | ||
+ | lcd.print("Sunlight is good"); | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | </code> | ||
+ | |||
+ | Functia care efectiv imi gaseste lumina: | ||
+ | |||
+ | <code> | ||
+ | int look_for_better_sunlight() { | ||
+ | int lux = veml.readLux(); | ||
+ | float W = 220.0 * lux / 700; | ||
+ | lcd.clear(); | ||
+ | lcd.setCursor(0,0); | ||
+ | lcd.print("Bad sunlight"); | ||
+ | lcd.setCursor(0,1); | ||
+ | lcd.print("Lux: " + String(lux) + " KW: " + String(W)); | ||
+ | int current_steps = 0; | ||
+ | while (lux < 700) { | ||
+ | current_steps = 0; | ||
+ | while(current_steps < stepsPerRevolution/2) { | ||
+ | int lux_ant = lux; | ||
+ | myStepper.step(stepsPerRevolution/64); | ||
+ | current_steps += stepsPerRevolution/64; | ||
+ | lux = veml.readLux(); | ||
+ | float W = 220.0 * lux / 700; | ||
+ | lcd.setCursor(0,1); | ||
+ | lcd.print("Lux: " + String(lux) + " KW: " + String(W)); | ||
+ | if (lux > 700) { | ||
+ | Serial.println("boss1"); | ||
+ | return 10000; | ||
+ | } | ||
+ | if(lux < lux_ant) { | ||
+ | break; | ||
+ | } | ||
+ | delay(100); | ||
+ | } | ||
+ | while (current_steps > -stepsPerRevolution/2) { | ||
+ | int lux_ant = lux; | ||
+ | myStepper.step(-stepsPerRevolution/64); | ||
+ | current_steps -= stepsPerRevolution/64; | ||
+ | lux = veml.readLux(); | ||
+ | float W = 220.0 * lux / 700; | ||
+ | lcd.setCursor(0,1); | ||
+ | lcd.print("Lux: " + String(lux) + " KW: " + String(W)); | ||
+ | if (lux > 700) { | ||
+ | Serial.println("boss2"); | ||
+ | return 10000; | ||
+ | } | ||
+ | if (lux < lux_ant) { | ||
+ | break; | ||
+ | } | ||
+ | delay(100); | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | </code> | ||
+ | |||
+ | Intreruperea ce genereaza un timer de 10 secunde, ce afiseaza pe LCD "ora noua", in sensul ca dupa mintea lui a trecut o ora(daca l-as lasa chiar o ora n-as mai avea ce arata la demo) | ||
+ | |||
+ | <code> | ||
+ | void checkADC() { | ||
+ | customInterrupt(); | ||
+ | } | ||
+ | |||
+ | void customInterrupt() { | ||
+ | lcd.setCursor(0,0); | ||
+ | lcd.print("Ora noua?"); | ||
+ | delay(1000); | ||
+ | } | ||
+ | </code> | ||
===== Download ===== | ===== Download ===== | ||
<note warning> | <note warning> | ||
- | 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ă ;-). | + | {{pm:prj2024:avaduva:alextoaderproiect.zip|}} |
- | + | ||
- | 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> | </note> | ||
Line 93: | Line 210: | ||
<note tip> | <note tip> | ||
- | Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului. | + | In toate zilele inafara de azi am facut tema la IA. De m-as putea intoarce in timp as schimba nenorocirea aia de materie cu orice altceva, materia e draguta dar nivelul de munca e la alt nivel... |
</note> | </note> | ||
Line 99: | Line 216: | ||
<note> | <note> | ||
- | Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**. | + | Tutorial pentru Stepper ca la prosti: https://www.youtube.com/watch?v=CEz1EeDlpbs&list=PLGs0VKk2DiYw-L-RibttcvK-WBZm8WLEP&index=35&ab_channel=PaulMcWhorter |
+ | Tutorial pentru LCD ca la prosti: https://www.youtube.com/watch?v=4BaDaGTUgIY&list=PLGs0VKk2DiYw-L-RibttcvK-WBZm8WLEP&index=48&ab_channel=PaulMcWhorter | ||
+ | Github-ul cu biblioteca si tutorial pentru senzorul de lumina: https://github.com/adafruit/Adafruit_VEML7700 | ||
</note> | </note> | ||