This shows you the differences between two versions of the page.
|
pm:prj2024:avaduva:atoader [2024/05/18 03:02] atoader |
pm:prj2024:avaduva:atoader [2024/05/26 23:51] (current) atoader |
||
|---|---|---|---|
| Line 70: | 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 79: | 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 95: | 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 101: | 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> | ||