This shows you the differences between two versions of the page.
pm:prj2025:eradu:stefan.ungureanu03 [2025/05/20 22:23] stefan.ungureanu03 Added software section. |
pm:prj2025:eradu:stefan.ungureanu03 [2025/05/29 19:03] (current) stefan.ungureanu03 Added final demo video. |
||
---|---|---|---|
Line 9: | Line 9: | ||
{{ :pm:prj2025:eradu:stefan.ungureanu03:untitled_diagram.drawio.png?700 |}} | {{ :pm:prj2025:eradu:stefan.ungureanu03:untitled_diagram.drawio.png?700 |}} | ||
- | Initially, the box is in the CLOSED state, where the motor isn't being acted upon, it's display has the "CLOSED" text, IP address and the box is considered closed. | + | Initially, the box is in the OPEN state, where the servo is at a 90 degree angle, the display has the "OPENED" text, IP address and the box is considered opened(lid up). |
- | After the user presses the button on the page, the box plays a sound, the motor activates to lift up the cover of the box and the displayed message changes to "OPENED". A second message will revert to the initial state. | + | After the user presses the button on the page, the box plays a sound, the motor activates to push down the cover of the box and the displayed message changes to "CLOSED". A toggle will revert to the initial state. |
===== Hardware Design ===== | ===== Hardware Design ===== | ||
Line 24: | Line 24: | ||
* **Accumulator 3,7V - 5000 mAh** | * **Accumulator 3,7V - 5000 mAh** | ||
* **Cardboard** | * **Cardboard** | ||
- | * **Sticks** | + | * **Sticks/something to fuse the servo with the lid** |
- | * **Glue** | + | * **Glue tape** |
{{ :pm:prj2025:eradu:stefan.ungureanu03:schema_v5.png?700 |}} | {{ :pm:prj2025:eradu:stefan.ungureanu03:schema_v5.png?700 |}} | ||
Line 47: | Line 47: | ||
* **Servomotor: Used with PWM at pin GPIO23 to lift the lid. Uses at most 500 mA but only when acted upon.** | * **Servomotor: Used with PWM at pin GPIO23 to lift the lid. Uses at most 500 mA but only when acted upon.** | ||
* **Display: Shows the IP of the server and also the state of the box. SDA is connected to GPIO21 and SCL TO GPIO22. Low power, uses less than 50 mA.** | * **Display: Shows the IP of the server and also the state of the box. SDA is connected to GPIO21 and SCL TO GPIO22. Low power, uses less than 50 mA.** | ||
- | * **Active buzzer: Makes sound when the box is transitioning to the open state, connected to GPIO14 (any pin that can be set from low to high would do). Uses around 50mA.** | + | * **Active buzzer: Makes sound when the box is transitioning to the open state and back, connected to GPIO14 (any pin that can be set from low to high would do). Uses around 50mA.** |
* **Battery: Supplies the whole circuit. Has enough power so that the servo can function multiple times. It's also very efficient in the idle state, as only the display and microcontroller are active most of the time.** | * **Battery: Supplies the whole circuit. Has enough power so that the servo can function multiple times. It's also very efficient in the idle state, as only the display and microcontroller are active most of the time.** | ||
Line 86: | Line 86: | ||
==== Labs used ==== | ==== Labs used ==== | ||
- | *GPIO - For buzzers and most connections | + | *GPIO - For buzzer |
*UART - Testing and for making sure board is actually connecting + displaying the correct IP | *UART - Testing and for making sure board is actually connecting + displaying the correct IP | ||
Line 93: | Line 93: | ||
*I2C - To allow communication with the display | *I2C - To allow communication with the display | ||
+ | |||
+ | *Timers and interrupts - To treat client timeouts | ||
==== Calibration ==== | ==== Calibration ==== | ||
- | The servo was calibrated according to this [linku rnt sg90] and does a 90 degree turn. The display was calibrated using [linku rnt display]. There is also a delay in place for the client reply to lower the HTML responses sent and also save power. | + | The servo was calibrated according to the first link in the software section and does a 90 degree turn. The display was calibrated using the 3rd link. The timeout is 10s, because a mobile hotspot could be a bit slow at times, in a real scenario this should be <1s. |
==== Functions ==== | ==== Functions ==== | ||
+ | *onTimeout() - interrupt function that sets the timeout flag to true | ||
+ | |||
+ | *startClientTimer() - function that resets and enables timer | ||
+ | |||
*buzz(int duration) - makes a sound for the provided duration | *buzz(int duration) - makes a sound for the provided duration | ||
Line 117: | Line 123: | ||
*Display Refresh – OLED updates only when lock state changes | *Display Refresh – OLED updates only when lock state changes | ||
- | *Single Button Toggle – One endpoint and function for toggling lock state | + | *Single Button Toggle – one endpoint and function for toggling lock state |
- | <note tip> | + | |
- | Descrierea codului aplicaţiei (firmware): | + | |
- | * mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR) | + | |
- | * librării şi surse 3rd-party (e.g. Procyon AVRlib) | + | |
- | * algoritmi şi structuri pe care plănuiţi să le implementaţi | + | |
- | * (etapa 3) surse şi funcţii implementate | + | |
- | </note> | + | |
- | ===== Rezultate Obţinute ===== | + | ===== Demo ===== |
+ | <html><iframe width="560" height="315" src="https://www.youtube.com/embed/hsLbZObhrM0?si=66_ZbxzMmTviumGV" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe></html> | ||
- | <note tip> | ||
- | Care au fost rezultatele obţinute în urma realizării proiectului vostru. | ||
- | </note> | ||
- | ===== Concluzii ===== | + | ===== Resources ===== |
+ | == Software == | ||
+ | https://www.upesy.com/blogs/tutorials/esp32-servo-motor-with-arduino-code-sg90 - servo calibration | ||
- | ===== Download ===== | + | https://randomnerdtutorials.com/esp32-servo-motor-web-server-arduino-ide/ - another servo code I studied |
- | <note warning> | + | https://randomnerdtutorials.com/esp32-ssd1306-oled-display-arduino-ide/ - display calibration + usage |
- | 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**. | + | https://randomnerdtutorials.com/esp32-web-server-arduino-ide/ - client response handling |
- | </note> | + | |
- | ===== Jurnal ===== | + | https://github.com/stefungureanu/ESP32-remote-box - repository for the code |
- | <note tip> | + | https://www.silabs.com/developer-tools/usb-to-uart-bridge-vcp-drivers - needed to connect to the ESP32 with a USB |
- | Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului. | + | |
- | </note> | + | |
- | ===== Resources ===== | + | https://www.electronicwings.com/esp32/esp32-timer-interrupts - timer interrupt guide, used for the client timeout |
- | == Software == | + | |
- | https://randomnerdtutorials.com/esp32-servo-motor-web-server-arduino-ide/ | + | == Hardware == |
- | <note> | + | https://lastminuteengineers.com/esp32-pinout-reference/ -- shows exactly which pin supports what |
- | Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**. | + | |
- | </note> | + | https://www.youtube.com/watch?v=2YbPyw5PS9A -- useful video to show how ESP32 can be mounted on 2 breadboards |
+ | |||
+ | https://esp32io.com/tutorials/how-to-power-esp32 -- very important read in case you want to power the board and the components with different sources | ||
<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> | ||