This shows you the differences between two versions of the page.
pm:prj2024:mdinica:bogdan.dumitrescu [2024/05/25 14:43] bogdan.dumitrescu02 |
pm:prj2024:mdinica:bogdan.dumitrescu [2024/05/28 15:50] (current) bogdan.dumitrescu02 |
||
---|---|---|---|
Line 88: | Line 88: | ||
<h3><strong>Update -></strong></h3> | <h3><strong>Update -></strong></h3> | ||
+ | <i> Citeste partea software pentru varianta finala + software </i> | ||
<p><strong>Arduino:</strong></p> | <p><strong>Arduino:</strong></p> | ||
<ul> | <ul> | ||
Line 123: | Line 124: | ||
</p> | </p> | ||
<br/> | <br/> | ||
- | <b> Pinii sunt alesi astfel incat protocolul folosit pe actuator/senzor sa fie valid pentru fiecare. De exemplu, pentru rgb leds am ales pinii 10, 11, 12 care sunt pini PWM. Alti pini au fost alesi si aleator / am folosit pini analogici undeva unde puteau fi folositi pini digitali, dar nu am mai avut pini digitali pe placa, de exemplu, servomotorul este legat la un pin analog, in loc de un pin PWM, dar reuseste sa isi indeplineasca sarcina si asa </b> | + | <b> Pinii sunt alesi astfel incat protocolul folosit pe actuator/senzor sa fie valid pentru fiecare. De exemplu, pentru rgb leds am ales pinii 10, 11, 12 care sunt pini PWM. Alti pini au fost alesi si aleator / am folosit pini analogici undeva unde puteau fi folositi pini digitali, dar nu am mai avut pini digitali pe placa, de exemplu, servomotorul este legat la un pin analogic, in loc de un pin PWM, dar reuseste sa isi indeplineasca sarcina si asa </b> |
<div class="table-container"> | <div class="table-container"> | ||
Line 148: | Line 149: | ||
<td><a href="https://d.otto.de/files/4bdfa9e6-e985-5949-b2d7-b78059f9663b.pdf" target="_blank">RGB LED (Red)</a></td> | <td><a href="https://d.otto.de/files/4bdfa9e6-e985-5949-b2d7-b78059f9663b.pdf" target="_blank">RGB LED (Red)</a></td> | ||
<td>10</td> | <td>10</td> | ||
- | <td>PWM</td> | + | <td>GPIO</td> |
</tr> | </tr> | ||
<tr> | <tr> | ||
<td><a href="https://d.otto.de/files/4bdfa9e6-e985-5949-b2d7-b78059f9663b.pdf" target="_blank">RGB LED (Green)</a></td> | <td><a href="https://d.otto.de/files/4bdfa9e6-e985-5949-b2d7-b78059f9663b.pdf" target="_blank">RGB LED (Green)</a></td> | ||
<td>11</td> | <td>11</td> | ||
- | <td>PWM</td> | + | <td>GPIO</td> |
</tr> | </tr> | ||
<tr> | <tr> | ||
<td><a href="https://d.otto.de/files/4bdfa9e6-e985-5949-b2d7-b78059f9663b.pdf" target="_blank">RGB LED (Blue)</a></td> | <td><a href="https://d.otto.de/files/4bdfa9e6-e985-5949-b2d7-b78059f9663b.pdf" target="_blank">RGB LED (Blue)</a></td> | ||
<td>12</td> | <td>12</td> | ||
- | <td>PWM</td> | + | <td>GPIO</td> |
</tr> | </tr> | ||
<tr> | <tr> | ||
Line 173: | Line 174: | ||
<td><a href="https://www.kjell.com/globalassets/mediaassets/701903_90770_datasheet_en.pdf" target="_blank">Servo Motor 360 Continuous</a></td> | <td><a href="https://www.kjell.com/globalassets/mediaassets/701903_90770_datasheet_en.pdf" target="_blank">Servo Motor 360 Continuous</a></td> | ||
<td>A0</td> | <td>A0</td> | ||
- | <td>PWM</td> | + | <td>GPIO</td> |
</tr> | </tr> | ||
<tr> | <tr> | ||
Line 386: | Line 387: | ||
} | } | ||
} | } | ||
- | |||
- | | ||
</code></pre> | </code></pre> | ||
| | ||
Line 445: | Line 444: | ||
Rutele pot fi impartite in doua tipuri, cele care comunica cu arduino, care tot ce fac este sa trimita un semnal prin serial a arduino, sau sa returneze daca exista semnale de la arduino, si rutele care tin de camera, /capture si /live_video.<br> | Rutele pot fi impartite in doua tipuri, cele care comunica cu arduino, care tot ce fac este sa trimita un semnal prin serial a arduino, sau sa returneze daca exista semnale de la arduino, si rutele care tin de camera, /capture si /live_video.<br> | ||
- | Am ales ca protocol de comunicatie <b> HTTP </b>, deoarece este sateless, nu tine conexiunea pornita, ceea ce este perfect deoarece nu se fac apeluri atat de des la server si in teorie esp-ul ar consuma mai putina energie decat daca ar fi mereu conexiunea pornita penturu a astepta/trimite mesaje. Am apelat totusi la o optiune de long polling pentru a astepta state-ul arduino-ului, deoarece <b><i> NU PUTEAM FACE</i></b> esp-ul accesibil in internet la PM fair, astfel aveam de ales intre doua optiuni, fie sa fie serverul extern hostat undeva si esp-ul sa trimita mesaje la acesta, iar acesta sa nu poata initia comunicarea cu esp-ul la pm fair, fie sa fie ambele conectate local, iar esp-ul sa nu poata accesa serverul localhost de pe calculator, deoarece au "localhost" diferit ambele. Metoda eleganta era evident sa configurez port forwarding pe router si sa fac esp-ul accesibil in reteaua locala, iar serverului sa ii fac deploy, am reusit sa fac asta acasa(m-am chinuit sa hostez aplicatia de pe serverul extern pe azure), ca ulterior sa ma prind ca nu pot face asta la pm fair ;( <br> | + | Am ales ca protocol de comunicatie <b> HTTP </b>, deoarece este sateless, nu tine conexiunea pornita, ceea ce este perfect deoarece nu se fac apeluri atat de des la server si in teorie esp-ul ar consuma mai putina energie decat daca ar fi mereu conexiunea pornita penturu a astepta/trimite mesaje. Am apelat totusi la o optiune de long polling pentru a astepta state-ul arduino-ului, deoarece <b><i> NU PUTEAM FACE</i></b> esp-ul accesibil in internet la PM fair, astfel aveam de ales intre doua optiuni, fie sa fie serverul extern hostat undeva si esp-ul sa trimita mesaje la acesta, iar acesta sa nu poata initia comunicarea cu esp-ul la pm fair, fie sa fie ambele conectate local, iar esp-ul sa nu poata accesa serverul localhost de pe calculator, deoarece au "localhost" diferit ambele. Metoda eleganta era evident sa configurez port forwarding pe router si sa fac esp-ul accesibil in reteaua locala, iar serverului sa ii fac deploy, am reusit sa fac asta acasa(m-am chinuit sa hostez aplicatia de pe serverul extern pe azure, creand un pipeline care sincronizeaza un director dintr-un repo de pe github cu unul de pe azure pentru deploy), ca ulterior sa ma prind ca nu pot folosi asta la pm fair ;(. Proof: |
+ | <div style="display: flex; justify-content: center; align-items: center;"> | ||
+ | <img src="https://i.imgur.com/pkQQ8ix.png" alt="proof azure" width="600px" height="300px"/> | ||
+ | </div> | ||
+ | |||
+ | |||
+ | <br> | ||
Cele mai relevante de explicat sunt rutele de camera, deoarece celelalte sunt mesaje de <b> GET </b> sau un mesaj POST pentru ruta de change password, deoarece parola este trimisa printr-un mesaj POST, si trebuie facuta o parsare a body-ului pentru a obtine obiectul care contine parola efectiva, ulterior datele aceseta fiind trimise la arduino.<br> | Cele mai relevante de explicat sunt rutele de camera, deoarece celelalte sunt mesaje de <b> GET </b> sau un mesaj POST pentru ruta de change password, deoarece parola este trimisa printr-un mesaj POST, si trebuie facuta o parsare a body-ului pentru a obtine obiectul care contine parola efectiva, ulterior datele aceseta fiind trimise la arduino.<br> | ||
<h5>/capture</h5> -> Imaginea este facuta si ulterior trimisa in chunk-uri, un mesaj http neputand include evident, toata imaginea, am incercat initial sa trimit mesajele in format base64 dar mereu am avut probleme la parase, ar fi trebui sa fie mai lightweight, dar fie dura prea mult conversia, fie nu se parsa imaginea corect<br> | <h5>/capture</h5> -> Imaginea este facuta si ulterior trimisa in chunk-uri, un mesaj http neputand include evident, toata imaginea, am incercat initial sa trimit mesajele in format base64 dar mereu am avut probleme la parase, ar fi trebui sa fie mai lightweight, dar fie dura prea mult conversia, fie nu se parsa imaginea corect<br> | ||
Line 478: | Line 483: | ||
| | ||
- | <h2>Rezultate Obţinute</h2> | + | <!--<h2>Rezultate Obţinute</h2> |
<div class="note tip"> | <div class="note tip"> | ||
<p>Care au fost rezultatele obţinute în urma realizării proiectului vostru.</p> | <p>Care au fost rezultatele obţinute în urma realizării proiectului vostru.</p> | ||
- | </div> | + | </div> --> |
+ | |||
+ | <h3> Laboratoare folosite </h3> | ||
+ | - <b>Laboratorul 0 GPIO</b> -> pentru senzorul ultrasonic, active buzzer si modulul RGB<br> | ||
+ | - <b>Laboratorul 1 URAT</b> -> pentru debug si comunicare ESP-ARDUINO<br> | ||
+ | - <b>Laboratorul 3 PWM</b> -> pentru micro servo <br> | ||
+ | - <b>Laboratorul 6 I2C</b> -> pentru modului Display cu I2C si comunicarea esp <-> camera<br> | ||
| | ||
<h2> OPTIMIZARI <h2> | <h2> OPTIMIZARI <h2> | ||
- | | ||
<h5> Facute: </h5> | <h5> Facute: </h5> | ||
- Dezactivare Bluetooth pe ESP deoarece nu il folosim <br> | - Dezactivare Bluetooth pe ESP deoarece nu il folosim <br> | ||
Line 504: | Line 514: | ||
- esp32-camera -> librarie pentru camera de pe esp32-cam<br> | - esp32-camera -> librarie pentru camera de pe esp32-cam<br> | ||
- | <h3> Calibrarea senzorilr <h3> | + | <h3> Calibrarea senzorilor </h3> |
- | Calibrarea fizica pe lcd-ul cu modul I2C, se face prin potentiometru, pana dispar patratele de pe ecran si pana se vad date pe ecran. | + | Calibrarea fizica pe lcd-ul cu modul I2C, se face prin potentiometru, pana dispar patratele de pe ecran si pana se vad date pe ecran. <br> |
- | Calibrarea modului de sunet se face tot prin reglarea din potentiometru, ca sa i se seteze sensitivitatea. | + | Calibrarea modului de sunet se face tot prin reglarea din potentiometru, ca sa i se seteze sensitivitatea.<br> |
- | Pe partea software, s-au setat pinii pentru fiecare prin digitalWrite(PIN, HIGH|LOW ) | + | Pe partea software, s-au setat pinii pentru fiecare prin digitalWrite(PIN, HIGH|LOW )<br> |
<h2>Concluzii</h2> | <h2>Concluzii</h2> | ||
Line 539: | Line 549: | ||
<p>Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe <strong>Resurse Software</strong> şi <strong>Resurse Hardware</strong>.</p> | <p>Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe <strong>Resurse Software</strong> şi <strong>Resurse Hardware</strong>.</p> | ||
</div> | </div> | ||
- | --> | + | |
- | <p><a class="media mediafile mf_pdf" href="?do=export_pdf">Export to PDF</a></p> | + | <p><a class="media mediafile mf_pdf" href="?do=export_pdf">Export to PDF</a></p> --> |
</body> | </body> | ||
</html> | </html> | ||