Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pm:prj2024:ccontasel:valentin.vintila [2024/05/05 13:56]
valentin.vintila
pm:prj2024:ccontasel:valentin.vintila [2024/05/10 03:42] (current)
valentin.vintila [General Description]
Line 11: Line 11:
 If you are clumsy like me, you might have forgotten a few important events here and there. To combat this, I've decided to build a complete product that makes sure you never lose track of time! My system promises to make you a productivity guru! If you are clumsy like me, you might have forgotten a few important events here and there. To combat this, I've decided to build a complete product that makes sure you never lose track of time! My system promises to make you a productivity guru!
  
-Using a stunningly beautiful web application,​ you can customize your day/​week/​month by setting events. These events might be repeatable or just one-offs; they might take a fixed amount of time or they might need to remain in the back of your head for the whole day (e.g. your aunt's birthday)+Using a stunningly beautiful web application,​ you can customize your day/​week/​month by setting events. These events might be repeatable or just one-offs; they might take a fixed amount of time to complete ​or they might need to remain in the back of your head for the whole day (e.g. your aunt's birthday)
 + 
 +Finally, a dedicated device will remind you both visually and aurally of these tasks before they need to be ticked off. If you plan your day correctly, there is //no way// you miss anything! 
 + 
 +==== General Description ==== 
 + 
 +For this complex system to work without revoking its upgradeability (meaning, in the future, one could expand the system to allow for multiple devices that remind you of upcoming events), there is a need for separation:​ 
 + 
 +  * A central server, which should contain details about all the upcoming events. The server should also provide a way to create new events or to modify existing ones. 
 +  * A device (perhaps, in the future, multiple devices) that will periodically ask the server for upcoming events. 
 + 
 +=== The server === 
 + 
 +The server will store details about future and past events using a relational database (specifically,​ [[https://​www.postgresql.org/​|PostgreSQL]]). The web interface will be written from scratch in HTML, JavaScript (enhanced with [[https://​jquery.com/​|jQuery]]) and [[https://​sass-lang.com/​|Sass]]. These two components are glued together by a backend custom written in Go. 
 + 
 +To provide high reproducibility,​ everything will be self-contained in a [[https://​www.docker.com/​|Docker]] container. 
 + 
 +=== The IoT device === 
 + 
 +The device that will remind the user of their tasks will need to connect to the server (meaning it requires network access) and will ping it at fixed time intervals to gain knowledge about upcoming events. A screen will provide the user with visual feedback, and, in case the user misses it, a buzzer will trigger as well. The reminder can be postponed (or silenced). 
 + 
 +To accomplish this, I figured an ESP32 is best suited. 
 + 
 +=== The complete picture === 
 + 
 +Everything I've just described can be seen in the following figure: 
 + 
 +{{:​pm:​prj2024:​ccontasel:​valentinvintila-sch-bloc.png?​600|}} 
 + 
 +=== Technology Used === 
 + 
 +This is a **software-heavy** project! With this being said, I would like to point out the exact concepts I've used that were taught during this class: 
 + 
 +  - **GPIO** - the GPIO pins are used to enable communication between the IoT device and the end user; 
 +  - **Interrupts** - when pressing a button, an interrupt will occur; 
 +  - **Timers** - to notify the user before a certain task is due, timers are needed; they are also used to communicate with the server; 
 +  - **I2C** - the device'​s display is controlled via the I2C protocol; 
 +  - **ADC** - since you are eager to deduct points, I am required to make bad decisions regarding my project - in this case, the buttons will use fewer GPIO pins for no reason other than to use ADC. 
 + 
 +==== Hardware Description ==== 
 + 
 +<note warning>​ 
 +Please note that this is a **software-heavy** project! 
 +</​note>​ 
 + 
 +<​note>​ 
 +It is also worth noting that this is just a draft (and will remain a draft until the project is complete), since //"the calculation at home does not match the one in the market"​ 💀// 
 +</​note>​ 
 + 
 +The server can be a repurposed old computer or, to simplify the process, a Raspberry Pi 4 Model B that I've had laying around :) 
 + 
 +The IoT device will be an ESP32 module connected to a bunch of buttons, a small display and a buzzer. 
 + 
 +=== Bill of Materials === 
 + 
 +  * 1 x ESP32 module 
 +  * 1 x LCD display 
 +  * 1 x Buzzer 
 +  * ~4 x Buttons 
 + 
 +As you can tell, there are plenty of external devices managed by the ESP32. 
 + 
 +==== Resources ==== 
 + 
 +  * [1] [[https://​github.com|GitHub]]
pm/prj2024/ccontasel/valentin.vintila.1714906597.txt.gz · Last modified: 2024/05/05 13:56 by valentin.vintila
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0