This shows you the differences between two versions of the page.
pm:prj2022:apredescu:smart_curtain [2022/05/19 22:29] stefan.dumitriu [Software Design] |
pm:prj2022:apredescu:smart_curtain [2022/05/27 17:34] (current) stefan.dumitriu [Jurnal] |
||
---|---|---|---|
Line 6: | Line 6: | ||
===== Descriere generală ===== | ===== Descriere generală ===== | ||
**Mod functionare**\\ | **Mod functionare**\\ | ||
- | Sistemul va avea doua moduri, ce vor putea fi selectate din telecomanda, by default acesta va fi automat, unde in functie de reglarea potentiometrului de pe senzorul digital de lumina, motorul va incepe sa deschida jaluzelele cand valoarea e 1 (s-a trecut de pragul de lumina, este zi), iar in momentul in care se trece sub prag, acestea se vor inchide din nou (voi exemplifica in cadrul proiectului cu o lumina artificiala, fiind mai usor de demonstrat functionalitatea).\\ | + | Sistemul va avea doua moduri, ce vor putea fi selectate din telecomanda, by default acesta va fi automat, unde in functie de valoarea pragului de lumina mentionat in codul placutei, motorul va incepe sa deschida jaluzelele cand valoarea transmisa de senzorul ambiental e peste prag (deci s-a facut zi, este multa lumina afara), iar in momentul in care se trece sub prag, acestea se vor inchide din nou (voi exemplifica in cadrul proiectului cu o lumina artificiala, puternica, de la flash-ul telefonului, fiind mai usor de demonstrat functionalitatea).\\ |
- | Pentru a trata cazul unei intreruperi, se va efectua un mod de setup, unde motorul va efectua o cursa completa stanga-dreapta pentru a ma asigura ca jaluzeaua se afla in pozitia initiala.\\ | + | Pentru a trata cazul unei intreruperi, se va efectua o rutina de initializare a motorului, care va citi un byte de pe memoria EEPROM (pe care il updatez de fiecare data cand deschid jaluzeaua) pentru a vedea daca ultima oara era deschisa, pentru a o aduce in pozitia default (inchisa).\\ |
In modul manual, utilizatorul va putea controla pozitia jaluzelei prin actionarea a doua butoane pe telecomanda.\\ | In modul manual, utilizatorul va putea controla pozitia jaluzelei prin actionarea a doua butoane pe telecomanda.\\ | ||
+ | De asemenea am si un mod de setup de unde pot alege daca vreau sa fiu in modul automat sau in cel manual (cu feedback pe ecranul LCD)\\ | ||
**Schema Bloc**\\ | **Schema Bloc**\\ | ||
- | {{ :pm:prj2022:apredescu:schema_bloc_pm.jpg |}} | + | {{ :pm:prj2022:apredescu:smart_curtain_schema_bloc.jpg?500 |}} |
===== Hardware Design ===== | ===== Hardware Design ===== | ||
Line 16: | Line 17: | ||
**Lista de piese** | **Lista de piese** | ||
* Arduino Uno | * Arduino Uno | ||
- | * Senzor de lumina digital | + | * Senzor de lumina ambientala (I2C) |
- | * Motor Stepper 5V + Driver Motor ULN2003 | + | * Motor Stepper + Driver Motor ULN2003 |
- | * Sursa alimentare + Adaptor (pentru motor) | + | * Sursa alimentare 12V + regulator de tensiune (pentru iesire 5V catre Arduino) |
* Senzor IR | * Senzor IR | ||
* Telecomanda | * Telecomanda | ||
+ | * Ecran LCD (pentru feedback + afisarea nivelului de lumina) + driver I2C | ||
* Breadboard, fire, rezistente | * Breadboard, fire, rezistente | ||
* Carcasa pentru Motor (Printata 3D) | * Carcasa pentru Motor (Printata 3D) | ||
Line 26: | Line 28: | ||
\\ | \\ | ||
**Schema TinkerCAD**\\ | **Schema TinkerCAD**\\ | ||
- | {{ :pm:prj2022:apredescu:smart_curtain_tinkercad.jpg?500 |}} | + | {{ :pm:prj2022:apredescu:smart_curtain_tinkercad_v2.jpg?500 |}} |
\\ | \\ | ||
**Schema electrica**\\ | **Schema electrica**\\ | ||
- | {{ :pm:prj2022:apredescu:smart_curtain_schema_electrica.jpg?500 |}} | + | {{ :pm:prj2022:apredescu:smart_curtain_schema_electrica_v2.jpg?500 |}} |
+ | \\ | ||
+ | Se poate observa prezenta a doua rezistente de pull-up pe magistralele SDA si SCL, acest lucru este datorat prezentei a doua dispozitive I2C care sunt conectate la aceeasi doi pini ai dispozitivului arduino (Senzorul de lumina + Ecranul LCD). Este nevoie de acestea pentru a reusi sa opresc interferentele intre cele doua si a nu avea probleme la nivelul HIGH al semnalului pe cele doua bus-uri. | ||
+ | \\ | ||
\\ | \\ | ||
**Carcasa de motor (se poate monta pe un perete)**\\ | **Carcasa de motor (se poate monta pe un perete)**\\ | ||
Line 43: | Line 48: | ||
* biblioteca EEPROM pentru citire/scriere in memoria ne-volatila a uC-ului. | * biblioteca EEPROM pentru citire/scriere in memoria ne-volatila a uC-ului. | ||
* biblioteca IRremote pentru interpretarea input-ului primit de la telecomanda prin receptorul IR | * biblioteca IRremote pentru interpretarea input-ului primit de la telecomanda prin receptorul IR | ||
+ | * biblioteca BH1750, pentru comunicarea cu senzorul de lumina | ||
+ | * biblioteca LiquidCrystal_I2C, pentru comunicarea cu ecranul LCD | ||
+ | * biblioteca Wire, pentru detectarea celor doua adrese ale dispozitivelor I2C | ||
== Functii implementate == | == Functii implementate == | ||
- | In functia de setup a programului initializez pinii si modurile lor, deschid interfata Seriala + ascultarea comenzilor primite de la telecomanda, initalizez variabilele globale si apelez o rutina de initializare, ce are codul urmator: | + | In functia de setup a programului initializez pinii si modurile lor, initializez comunicarea cu dispozitivele I2C, deschid interfata Seriala + ascultarea comenzilor primite de la telecomanda, initalizez variabilele globale si apelez o rutina de initializare: functie ce verifica daca in momentul inchiderii sistemului jaluzeaua era deschisa, pentru a o inchide (pozitia default).\\ |
- | <code java> | + | \\ |
- | void initRoutine() { | + | In functia de loop am doua functii principale: |
- | byte eepromIsOpen = EEPROM.read(0); | + | * Functia ce interpreteaza o comanda primita de la telecomanda |
- | if (!eepromIsOpen) | + | * Functia ce schimba (daca este nevoie) starea jaluzelei daca este in modul automat si daca sunt indeplinite conditiile necesare (inchisa - noapte; deschisa - zi) |
- | rotateCW_full(); | + | \\ |
- | } | + | Drept functii auxiliare am: |
- | </code java> | + | * O functie ce opreste motorul (pentru a nu se supraincalzi in idle) |
+ | * Doua functii pentru rotatia motorului (CW/CCW), ce primesc ca parametru numarul de pasi pe care sa ii execute motorul | ||
+ | * O functie pentru cautarea adreselor dispozitivelor I2C conectate la Arduino | ||
===== Rezultate Obţinute ===== | ===== Rezultate Obţinute ===== | ||
- | <note tip> | + | == Exterior - carcasa sistem == |
- | Care au fost rezultatele obţinute în urma realizării proiectului vostru. | + | {{ :pm:prj2022:apredescu:smart_curtain_exterior_carcasa.jpeg? 500 |}} |
- | </note> | + | * Stanga - Ecran LCD |
+ | * Centru - Senzor IR | ||
+ | * Dreapta - Senzor lumina | ||
+ | \\ | ||
+ | == Interior - carcasa sistem == | ||
+ | {{ :pm:prj2022:apredescu:smart_curtain_interior_carcasa.jpeg? 500 |}} | ||
+ | * Sursa 12V | ||
+ | * Arduino | ||
+ | * Breadboard | ||
+ | * Divizor tensiune | ||
+ | * Driver motor stepper | ||
- | ===== Concluzii ===== | + | == Montaj Motor == |
+ | {{ :pm:prj2022:apredescu:smart_curtain_ansamblu_sistem.jpeg? 300 |}} | ||
- | ===== Download ===== | + | == Ansamblu == |
+ | {{ :pm:prj2022:apredescu:smart_curtain_motor.jpeg? 600 |}} | ||
- | <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ă ;-). | ||
- | 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**. | + | ===== Download ===== |
- | </note> | + | |
+ | [[https://github.com/stefandumitriu/smart-curtains-arduino|Link github proiect]] | ||
===== Jurnal ===== | ===== Jurnal ===== | ||
Line 78: | Line 98: | ||
* 11.05 - Descriere mod de functionare | * 11.05 - Descriere mod de functionare | ||
* 19.05 - Schema electrica + schema TinkerCAD + poze obiecte printate 3D | * 19.05 - Schema electrica + schema TinkerCAD + poze obiecte printate 3D | ||
+ | * 19.05 - Descriere partiala - software design | ||
+ | * 24.05 - Modificarea componentelor din proiect (Senzor de lumina digital -> Senzor I2C + Adaugarea ecranului LCD) | ||
+ | * 27.05 - Adaugare poze cu rezultatele obtinute | ||
===== Bibliografie/Resurse ===== | ===== Bibliografie/Resurse ===== | ||
- | <note> | + | Link-uri Internet: |
- | Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**. | + | * [[https://arduinogetstarted.com/tutorials/arduino-lcd-i2c| Tutorial LCD I2C]] |
- | </note> | + | * [[https://create.arduino.cc/projecthub/infoelectorials/project-017-arduino-bh1750-light-sensor-project-640075| Tutorial Senzor Lumina]] |
+ | * [[https://github.com/Arduino-IRremote/Arduino-IRremote| Repo biblioteca IRremote (Docs)]] | ||
+ | * [[https://create.arduino.cc/projecthub/debanshudas23/getting-started-with-stepper-motor-28byj-48-3de8c9| Tutorial motor stepper]] | ||
<html><a class="media mediafile mf_pdf" href="?do=export_pdf">Export to PDF</a></html> | <html><a class="media mediafile mf_pdf" href="?do=export_pdf">Export to PDF</a></html> | ||