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]] | ||