This shows you the differences between two versions of the page.
pm:prj2024:avaduva:atoader [2024/05/05 14:10] atoader |
pm:prj2024:avaduva:atoader [2024/05/26 23:51] (current) atoader |
||
---|---|---|---|
Line 32: | Line 32: | ||
<note tip> | <note tip> | ||
- | Aici puneţi tot ce ţine de hardware design: | ||
- | * listă de piese | ||
- | * scheme electrice (se pot lua şi de pe Internet şi din datasheet-uri, e.g. http://www.captain.at/electronic-atmega16-mmc-schematic.png) | ||
- | * diagrame de semnal | ||
- | * rezultatele simulării | ||
- | </note> | ||
- | |||
* Arduino Uno R3 (o copie ieftina de la ELEGOO, ce aveam si eu aruncat prin casa, daca se doveste proasta nu voi ezita sa ii dau foc si sa iau alta) | * Arduino Uno R3 (o copie ieftina de la ELEGOO, ce aveam si eu aruncat prin casa, daca se doveste proasta nu voi ezita sa ii dau foc si sa iau alta) | ||
* Light sensor [[https://www.optimusdigital.ro/en/optical-sensors/8639-adafruit-veml7700-lux-sensor-i2c-light-sensor.html]] | * Light sensor [[https://www.optimusdigital.ro/en/optical-sensors/8639-adafruit-veml7700-lux-sensor-i2c-light-sensor.html]] | ||
Line 45: | Line 38: | ||
* Driver de la chinezi (legit scrie in chineza pe el, tot asa, relicva dezgrobata de prin casa) | * Driver de la chinezi (legit scrie in chineza pe el, tot asa, relicva dezgrobata de prin casa) | ||
* Breadboard, posibil sa fie nevoie | * Breadboard, posibil sa fie nevoie | ||
+ | </note> | ||
+ | |||
+ | Schema electrica, facut in ltspice si paint, nu sunt barbar sa o desenez: | ||
+ | |||
+ | {{pm/prj2024/avaduva/schema_pm_poza.png|}} | ||
+ | |||
+ | In schema am folosit VDD si VSS in loc de 5V, respectiv GND pentru ca pentru "GND" nu-mi dadea ltspice-ul label, ci-mi dadea semnul de ground | ||
+ | |||
+ | Detalii pini: | ||
+ | |||
+ | <note tip> | ||
+ | * SCL, SDA - pentru comunicarea cu i2c cu senzorul de lumina | ||
+ | * 2 - Register Select al LCD-ului | ||
+ | * 3 - Enable LCD | ||
+ | * n - DBn LCD, n = {4, 5, 6, 7} | ||
+ | * 8, 9, 10, 11 - driverul motor-ului | ||
+ | </note> | ||
+ | |||
+ | Io-te, merge: | ||
+ | |||
+ | {{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 52: | 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 61: | 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 77: | 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 83: | 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> | ||