This shows you the differences between two versions of the page.
pm:prj2021:alazar:programmablesolderingstation [2021/04/26 00:10] radu_leonard.rica |
pm:prj2021:alazar:programmablesolderingstation [2021/06/10 12:12] (current) radu_leonard.rica |
||
---|---|---|---|
Line 7: | Line 7: | ||
=== Descriere generală === | === Descriere generală === | ||
- | Voi connecta LCD-ul prin conexiune paralela. \\ | + | Am conectat LCD-ul prin conexiune paralela. \\ |
- | Voi connecta 3 butoane si encoderul rotativ, care vor genera o intrerupere la apasare. \\ | + | Am conectat 2 butoane si encoderul rotativ, cu care setam temperatura. \\ |
- | LCD-ul va afisa implicit o pagina cu informatii(temperatura currenta, temperatura setata, procentul de putere). \\ | + | LCD-ul afiseaza implicit o pagina cu informatii(temperatura currenta, temperatura setata, procentul de putere). \\ |
- | La apasarea lunga a encoderului rotativ se va intra intr-un meniu de setari in care putem modifica valorile de temperatura \\ | + | La apasarea lunga a encoderului rotativ se deschide un meniu de setari in care putem modifica daca vrem ca buzzerul sa fie activ sau nu. \\ |
- | ale butoanelor si constantele algoritmului PID. \\ | + | Pentru a termostata temperatura letconului am folosit algoritmul PID. \\ |
- | Pentru a termostata temperatura letconului voi folosi algoritmul PID. \\ | + | Am comandat lectonul cu ajutorul unu MOSFET IRLB8743PbF. \\ |
- | Comanda o voi da cu ajutorul unu MOSFET. \\ | + | Citirea temperaturii am facut-o din senzorul(termocupla K) din letcon cu ajutorul unui modul MAX6675 prin SPI. \\ |
- | Citirea temperaturii o voi face din senzorul din letcon cu ajutorul unui modul MAX6675 prin SPI. \\ | + | Cand ajunge la temperatura setata, statia ne anunta printr-un mesaj sonor generat de buzzer. |
=== Hardware Design === | === Hardware Design === | ||
* Arduino Mega | * Arduino Mega | ||
* 1602 LCD | * 1602 LCD | ||
- | * 1 LED | ||
* Letcon Pensol IRON-N 24V 48W | * Letcon Pensol IRON-N 24V 48W | ||
* Encoder Rotativ | * Encoder Rotativ | ||
- | * 3 Butoane | + | * 2 Butoane |
* Sursa Industriala 24V 5A | * Sursa Industriala 24V 5A | ||
- | * 1 MOSFET(eventual un BJT daca nu se deschide suficient de repede) | + | * Un mosfet IRLB8743PbF |
- | * Rezistente | + | * O rezistenta 2k pentru contrastul display-ului |
- | * Modul MAX 6675 | + | * Un modul MAX 6675K |
+ | * Un buzzer activ | ||
+ | * Un coborator de tensiune, LM2596 (Pentru a alimenta arduino de la sursa de 24V) | ||
+ | |||
+ | === Schema Electrica === | ||
+ | {{:pm:prj2021:alazar:ss3.jpg?600|}} | ||
+ | Din schema lipseste sursa de 24V 5A, coboratorul de tensiune, heaterul(un rezistor), si circuitul de comanda cu mosfetul IRLB8743. | ||
=== Software Design === | === Software Design === | ||
- | * PID algorithm | + | Citirea de la modului MAX6675K necesita un delay de 200ms. Am realizat acest lucru non-blocant cu ajutorul functiei millis().\\ |
- | * 3 Programmable Buttons | + | Toate butoanele au debounce, iar butonul principal, cel al encoderului rotativ suporta si long-press, pentru a schimba intre meniuri.\\ |
- | * Multipage menu | + | Pentru termostatare am folosit algoritmul PID. Am adaugat erorile la integrala cu 5 grade inainte de temperatura setata, pentru a nu aparea overshoot puternic la incalzirea de la temperatura mica la temperatura mare(de exemplu de la 50 la 350). Perioada intre sample-uri este de 0.15s.\\ |
+ | Factorii de proportionala-derivata stabilizeaza temperatura fara overshoot la aproximativ SET_TEMP-5.\\ | ||
+ | Termenul integralei stabilizeaza temperatura la SET_TEMP+-1.\\ | ||
+ | Encoderul rotativ este atasat unei intreruperi. Astfel, am obtinut o interfata foarte fluida, care raspunde foarte bine la comenzi.\\ | ||
+ | Temperaturile butoanelor se pot seta din meniul de setari si se salveaza in EEPROM.\\ | ||
+ | Compilarea am facut-o cu flag-ul -O2. | ||
=== Rezultate obtinute === | === Rezultate obtinute === | ||
+ | |||
+ | {{:pm:prj2021:alazar:diablo50002.jpg?600| Montaj in carcasa}} | ||
+ | |||
+ | |||
+ | {{:pm:prj2021:alazar:diablo50001.jpeg?600| Rezultatul final}} | ||
+ | |||
=== Concluzii === | === Concluzii === | ||
+ | In urma acestui proiect mi-am consolidat cunostiintele de programare, am invatat mai multe despre algoritmul PID, | ||
+ | despre realizarea unei interfete eficiente, non-blocante, foarte placute estetic si cel mai important am realizat un aparat foarte | ||
+ | robust, compatibil cu orice letcon de pe piata care are termocupla de tip K, foarte bun pentru a realiza in continuare alte proiecte de acest tip. | ||
+ | Majoritatea testelor le-am realizat cu o sursa liniara cu transformatoare. | ||
+ | |||
+ | === Link Github === | ||
+ | [[https://github.com/raduleo19/Soldering-Station | Github]] | ||
=== Download === | === Download === | ||
+ | {{:pm:prj2021:alazar:solderingstation.zip| Cod sursa}} | ||
- | ===== Jurnal ===== | + | === Jurnal === |
* 25 Aprilie -> Alegerea temei proiectului | * 25 Aprilie -> Alegerea temei proiectului | ||
* 25 Aprilie -> Crearea paginii | * 25 Aprilie -> Crearea paginii | ||
- | + | * 28 Mai -> Decupare carcasa | |
- | ===== Bibliografie/Resurse ===== | + | * 29 Mai -> Vopsire carcasa |
- | [[https://ocw.cs.pub.ro/courses/pm/prj2021/alazar/programmablesolderingstation?do=export_pdf |Download pagina asta]] | + | * 1 Iunie -> Realizare circuit comanda incalzitor(cu irlb8743), testare impreuna cu senzorul de temperatura |
+ | * 3 Iunie -> Crearea logicii principale a codului, proiectare interfata | ||
+ | * 5-6 Iunie -> Montaj final si programarea completa | ||
+ | * 9 Iunie -> Adaugare setari temperatura butoane, rezolvare bug derivata cu semn inversat, adaugare sampling time 0.15s | ||
+ | * 10 Iunie -> Calibrare PID precizie +-1, varianta finala | ||
+ | === Bibliografie/Resurse === | ||
+ | [[https://ocw.cs.pub.ro/courses/pm/prj2021/alazar/programmablesolderingstation?do=export_pdf |Download PDF]] |