Skip to content

Commit bfa3096

Browse files
Project/iulia stefania.nita (#1398)
* first commit * commit2 * Applied reviewer suggestions to index.md * Added SVG diagrams and updated image paths * updated image size * commitproject * remove Zone.Identifier files * fix: remove space from image filename and update reference
1 parent c061577 commit bfa3096

7 files changed

Lines changed: 40 additions & 33 deletions

File tree

website/versioned_docs/version-fils_en/project/2026/iulia_stefania.nita/aquarust.svg

Lines changed: 1 addition & 1 deletion
Loading

website/versioned_docs/version-fils_en/project/2026/iulia_stefania.nita/architecture.svg

Lines changed: 0 additions & 1 deletion
This file was deleted.

website/versioned_docs/version-fils_en/project/2026/iulia_stefania.nita/index.md

Lines changed: 39 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# AquaRust
2-
An autonomous fish feeder that dispenses food on a programmed schedule, monitors aquarium water conditions in real time, and can be triggered remotely from your phone over Wi-Fi.
2+
An autonomous fish feeder that dispenses food on a programmed schedule, monitors aquarium water conditions in real time and has alerts when needed.
33

44
:::info
55

@@ -11,7 +11,7 @@ An autonomous fish feeder that dispenses food on a programmed schedule, monitors
1111

1212
## Description
1313

14-
This project focuses on building an automated fish feeding and environmental monitoring system using the Rust programming language for high reliability. The system uses an STM32 microcontroller for precise hardware control and an ESP8266 module for Wi-Fi connectivity. It is designed to dispense food at scheduled intervals using a servo motor while simultaneously monitoring water temperature and water level to ensure a safe environment for the fish. The device displays live sensor data on a small TFT screen and allows the user to trigger an instant feeding remotely from their phone, offering a simple and hands-free way to care for aquatic life.
14+
This project focuses on building an automated fish feeding and environmental monitoring system using the Rust programming language for high reliability. The system uses an STM32 microcontroller for precise hardware controly. It is designed to dispense food at scheduled intervals using a servo motor while simultaneously monitoring water temperature and water level to ensure a safe environment for the fish. The device displays live sensor data on a small OLED screen and allows the user to trigger an instant feeding remotely from their phone, offering a simple and hands-free way to care for aquatic life.
1515

1616
## Motivation
1717
The motivation is my desire to create a more sustainable way to manage home ecosystems. Traditional fish care often involves low-quality electronics that eventually end up in a landfill, and inconsistent feeding habits that negatively affect water quality. By using a regulated battery power supply and high-durability components, I am building a device designed for longevity. Furthermore, by using a real-time clock to enforce precise feeding schedules and sensors to continuously monitor water temperature and level, I am reducing the risk of overfeeding and organic waste buildup in the water. This helps maintain a cleaner tank environment and reduces the frequency of water changes, ultimately saving water and resources. Beyond the environmental aspect, this project also represents a personal challenge to work with embedded systems and the Rust programming language.
@@ -22,13 +22,12 @@ The microcontroller unit, built around the STM32 NUCLEO-U545RE-Q, serves as the
2222

2323
The sensing subsystem consists of the DS18B20 waterproof temperature sensor, the water level sensor, and the infrared obstacle sensor. These components continuously provide the microcontroller with real-time data about the aquarium environment and the state of the food hopper. The DS3231 RTC module complements this subsystem by maintaining precise time tracking, ensuring that scheduled feedings remain accurate even after a power cut or battery swap.
2424

25-
The communication module is built around the ESP8266 ESP-01 Wi-Fi module, which connects the device to the home network and enables remote control from the user's phone. Commands are received over the network and passed to the STM32 through a UART serial connection, allowing the user to trigger an immediate feeding from anywhere within Wi-Fi range.
25+
The actuation system is centered on the SG90 micro servo motor, which physically controls the food hopper gate to dispense portions of fish food. The STM32 drives the servo using a PWM signal.
2626

27-
The actuation system is centered on the SG90 micro servo motor, which physically controls the food hopper gate to dispense portions of fish food. The STM32 drives the servo using a PWM signal, while a dedicated power line with a 1000µF capacitor ensures the motor receives stable current without causing voltage drops that could affect the rest of the circuit.
27+
The power management system supplies the entire device from a 4×AA battery pack, a CR2032 coin cell on the DS3231 module keeps the real-time clock running independently whenever the main power supply is disconnected.
2828

29-
The power management system supplies the entire device from a 4×AA battery pack, stepped down to a stable 3.3V through a voltage regulator for all logic components. Bypass capacitors on each major component filter noise on the power rail, and a CR2032 coin cell on the DS3231 module keeps the real-time clock running independently whenever the main power supply is disconnected.
29+
![img](aquarust.svg)
3030

31-
![img](architecture.svg)
3231

3332

3433

@@ -47,15 +46,31 @@ All components arrived, started working on Kicad.
4746

4847
## Week 11 - 4 May
4948
Finished the Kicad schematic and started working on hardware.
49+
50+
## Week 12 - 11 May
51+
Tested sensors and started connecting them to my breadboard and STM32 NUCLEO-U545RE-Q.
52+
53+
## Week 13 - 18 May
54+
After trying to configure the waterproof sensor of water temperature, I changed my idea to a room temperature sensor and a light sensor (8 to 12-hour day-night cycle).
55+
56+
## Week 14 - 28
57+
Ready to test the project for the first time, all components connected.
58+
59+
![img](project_1.webp)
60+
![img](project_2.webp)
61+
![img](project_3.webp)
62+
63+
## Week 11 - 4 May
64+
Finished the Kicad schematic and started working on hardware.
5065

5166

5267
## Hardware
5368

54-
The primary processing unit responsible for executing the hardware is built around the STM32 NUCLEO-U545RE-Q as the central processing unit, interfacing with all peripherals through its GPIO, SPI, I2C, UART, and PWM pins. The sensing subsystem includes the DS18B20 temperature sensor on a 1-Wire bus, the DS3231 RTC over I2C backed by a CR2032 coin cell, and the infrared and water level sensors on direct GPIO inputs. The ESP8266 ESP-01 module connects to the STM32 over UART for Wi-Fi communication, while the ST7735 TFT display is driven over SPI. The SG90 servo motor is controlled via PWM and powered directly from the battery rail, with a 1000µF capacitor stabilizing its power line during actuation. The entire system is supplied by a 4×AA battery pack stepped down to 3.3V through a voltage regulator, with bypass capacitors on each major component ensuring a clean and stable power rail.
69+
The primary processing unit is built around the STM32 NUCLEO-U545RE-Q, interfacing with all peripherals through its GPIO, I2C, ADC, and PWM pins. The sensing subsystem includes the LM35dz analog temperature sensor on ADC for room temperature monitoring, the BH1750FVI light sensor over I2C for ambient light detection, the DS3231 RTC module over I2C backed by a CR2032 coin cell to maintain accurate time during power cuts, the infrared digital obstacle sensor on GPIO to detect whether food is still present in the hopper, and the water level sensor to monitor if the water drops below a safe level. The SG90 9G micro servo physically dispenses food from the hopper, controlled via PWM. System status and live sensor data are displayed on the 0.91" 128×32 OLED over I2C. The entire system is prototyped on a breadboard and supplied by a 4×AA battery pack.
5570

5671
### Schematics
5772

58-
![img](aquarust.svg)
73+
![img](schematics.webp)
5974

6075
### Bill of Materials
6176

@@ -72,44 +87,37 @@ The format is
7287
| Device | Usage | Price |
7388
|--------|--------|-------|
7489
| [STM32 NUCLEO-U545RE-Q](https://stm32world.com/wiki/STM32_Official_Documentation) | The microcontroller | [~107 RON](https://ro.mouser.com/ProductDetail/STMicroelectronics/NUCLEO-U545RE-Q?qs=mELouGlnn3cp3Tn45zRmFA%3D%3D) |
75-
| [ESP8266 ESP-01](https://academy.cba.mit.edu/classes/networking_communications/ESP8266/esp01.pdf) | Wi-Fi module | [~11 RON](https://www.optimusdigital.ro/ro/wireless-wifi/222-modul-wi-fi-esp-01-negru.html?search_query=Modul+WiFi+ESP8266+ESP-01+Negru&results=1) |
76-
| [Plusivo Adaptor Breadboard for ESP-01](https://docs.cirkitdesigner.com/component/9e7a86c8-b52a-40ac-8861-b257ef0efded/esp-01-breadboard-adapter) | allows the ESP-01 to be safely seated on the breadboard| [3 RON](https://www.optimusdigital.ro/ro/accesorii-adaptoare/5548-adaptor-breadboard-pentru-modulele-wifi-esp-01.html?search_query=Plusivo+Adaptor+Breadboard+pentru+Modulele+WiFi+ESP-01&results=1) |
77-
| [UART USB ESP-01](https://www.phippselectronics.com/support/esp-01-usb-programmer-adapter-users-guide/) | used to flash and test the ESP8266 from a PC | [9 RON](https://ardushop.ro/ro/module/596-programator-uart-usb-esp-01-esp-8266-6427854007162.html) |
78-
| DS18B20 Waterproof Temperature Sensor | monitors aquarium water temperature | [~17 RON](https://www.aliexpress.com/item/1005005973956237.html?spm=a2g0o.order_list.order_list_main.23.6fc01802D7aUUr) |
7990
| [DS3231 RTC Module ](https://blog.embeddedexpert.io/?p=1326) | keeps accurate time for scheduled feedings | [~24 RON](https://www.aliexpress.com/item/1005010574150546.html?spm=a2g0o.order_list.order_list_main.29.6fc01802D7aUUr) |
8091
| [Infrared Digital Obstacle Sensor](https://docs.sunfounder.com/projects/ultimate-sensor-kit/en/latest/components_basic/09-component_ir_obstacle.html) | detects if food is still present in the hopper| [20 RON](https://www.optimusdigital.ro/ro/senzori-senzori-optici/4347-modul-senzor-de-obstacole-digital-cu-infrarosu-reglabil-3-100-cm.html?search_query=0104110000034649&results=1) |
8192
| [Water Level Sensor](https://www.bitmi.ro/domains/bitmi.ro/files/files/bitmi-datasheet-senzor-nivel-masurare-apa-1794.pdf) | monitors if the water drops below a safe level| [2 RON](https://www.optimusdigital.ro/ro/senzori-altele/272-senzor-de-nivel-al-apei.html?search_query=0104110000002655&results=1) |
82-
| [ST7735 SPI TFT Display ](https://controllerstech.com/st7735-1-8-tft-display-with-stm32/) | shows live sensor data and system status | [15 RON](https://www.aliexpress.com/item/1005006173440437.html?spm=a2g0o.order_list.order_list_main.11.6fc01802D7aUUr) |
93+
| [Modul OLED Albastru de 0.91'' (128x32 px) ](https://www.electronicaembajadores.com/datos/pdf1/lc/lcgr/lcgrol3.pdf) | shows live sensor data and system status | [21 RON](https://www.optimusdigital.ro/en/lcds/1310-modul-oled-albastru-de-091-128x32-px.html) |
94+
| [Lm35dz Temperature Sensor ](https://www.electronicwings.com/sensors-modules/lm35-temperature-sensor) | monitors the temperature of the room | [5 RON](https://www.optimusdigital.ro/ro/senzori/1469-senzor-de-temperatura-analogic-lm35d-to-92.html) |
95+
| [Light Sensor BH1750FVI](https://www.mouser.com/datasheet/2/348/bh1750fvi-e-186247.pdf) | monitors the light in the room | [14.50 RON](https://www.optimusdigital.ro/ro/senzori/1451-senzor-digital-de-intensitate-a-luminii-bh1750fvi.html) |
8396
| [SG90 9G Micro Servo ](https://www.friendlywire.com/projects/ne555-servo-safe/SG90-datasheet.pdf) | physically dispenses food from the hopper | [22 RON](https://www.aliexpress.com/item/1005008321715111.html?spm=a2g0o.order_list.order_list_main.35.6fc01802D7aUUr) |
8497
| 4×AA Batteries & Battery Holder | main power supply for the entire system |26 RON |
85-
| [3.3V Voltage Regulator Module ](https://media.digikey.com/pdf/Data%20Sheets/UTD%20Semi%20PDFs/AMS1117.pdff) | steps battery voltage down to safe logic level | [4 RON](https://www.optimusdigital.ro/ro/electronica-de-putere-stabilizatoare-liniare/168-modul-cu-sursa-de-alimentare-de-33-v.html?srsltid=AfmBOorovZejixjW7cOLmWvIffGpQTHbaZZ9aSAJt35JGMYi_5RYt944) |
86-
| 10µF Ceramic Capacitors | ensures voltage regulator stability| [1 RON](https://ardushop.ro/ro/condensatori-tht/529-889-condensator-electrolitic-alege-valoarea.html#/326-capacitate-10uf/327-tensiune_condensator-25v) |
87-
| 100nF Ceramic Capacitors | filters noise on power pins of each major component| [1 RON](https://ardushop.ro/ro/condensatori-tht/571-948-condensator-ceramic-50v-alege-valoarea.html#/348-capacitate-100_nf) |
88-
| 1000µF 16V Electrolytic Capacitor | stabilizes servo power rail during actuation| [11 RON](https://www.aliexpress.com/item/1005002524973878.html?spm=a2g0o.order_list.order_list_main.59.6fc01802D7aUUr) |
89-
| 4.7kΩ Resistor | mandatory pull-up resistor for the DS18B20 data line| [1 RON](https://www.optimusdigital.ro/ro/componente-electronice-rezistoare/849-rezistor-025w-47k.html?search_query=0104210000007381&results=1) |
9098
| CR2032 Coin Cell Battery | m keeps the DS3231 clock running during power cuts| 10 RON|
9199
| [Breadboard](https://os.mbed.com/handbook/Breadboard) | main prototyping surface for connecting all components | [13 RON](https://www.niden.ro/cablaje/3164-placa-test-tip-breadboard-83x55x10mm.html) |
92100
| Male-to-Male Jumper Wires | wires for connecting components | [6 RON](https://www.optimusdigital.ro/ro/fire-fire-mufate/93-fire-colorate-tata-tata-20cm.html?search_query=0104210000001754&results=1) |
93101
| USB Data Cable | connects the STM32 to a PC for flashing firmware | 0 RON (BORROWED) |
94102

95103
## Software
96104

105+
## Software
106+
97107
| Library | Description | Usage |
98108
|---------|-------------|-------|
99-
| [embassy-executor](https://github.com/embassy-rs/embassy/tree/main/embassy-executor) | async task executor | Used to run all concurrent firmware tasks. |
109+
| [embassy-executor](https://github.com/embassy-rs/embassy/tree/main/embassy-executor) | async task executor | Used to run all concurrent firmware tasks |
100110
| [embassy-time](https://github.com/embassy-rs/embassy/tree/main/embassy-time) | async timers and delays | Used for polling intervals and servo timing |
101-
| [embassy-stm32](https://github.com/embassy-rs/embassy/tree/main/embassy-stm32) | drivers for STM32 peripherals | Used to control GPIO, SPI, I2C, UART, PWM |
102-
| [embassy-sync](https://github.com/embassy-rs/embassy/tree/main/embassy-sync) | async synchronization primitives | Used to share state between tasks |
103-
| [embassy-futures](https://github.com/embassy-rs/embassy/tree/main/embassy-futures) | async future utilities| sed to combine multiple async operations |
104-
| [ds18b20](https://github.com/embassy-rs/embassy/blob/main/examples/stm32g0/src/bin/onewire_ds18b20.rs) | DS18B20 temperature sensor driver | Used to read water temperature periodically |
105-
| [onewire](https://github.com/embassy-rs/embassy/blob/main/embassy-rp/src/pio_programs/onewire.rs) | 1-Wire protocol implementation| Used to bit-bang DS18B20 communication |
106-
| [ds323x](https://github.com/eldruin/ds323x-rs) | DS3231 RTC driver |Used to read current time for feeding schedule |
107-
| [embedded-graphics](https://github.com/embedded-graphics/embedded-graphics) | 2D embedded graphics library |Used for drawing |
108-
| [embedded-hal ](https://crates.io/crates/embedded-hal) | standard hardware interface traits | Used by all peripheral drivers |
109-
| [embedded-hal-async ](https://crates.io/crates/embedded-hal-async) | async hardware interface traits | Used for non-blocking peripherals |
110-
| [defmt](https://github.com/knurling-rs/defmt) | lightweight embedded logging | Used to print debug messages |
111-
| [defmt-rtt](https://crates.io/crates/defmt-rtt) | RTT log transport |Used to view logs on PC |
112-
| [panic-probe](https://github.com/knurling-rs/defmt/tree/main/firmware/panic-probe) | embedded panic handler |Used to report firmware crashes |
111+
| [embassy-stm32](https://github.com/embassy-rs/embassy/tree/main/embassy-stm32) | drivers for STM32 peripherals | Used to control GPIO, ADC, I2C, UART, PWM |
112+
| [embedded-hal](https://crates.io/crates/embedded-hal) | standard hardware interface traits | Used by all peripheral drivers |
113+
| [embedded-hal-02](https://crates.io/crates/embedded-hal) | 0.2.x hardware interface traits | Used for PWM and serial compatibility traits |
114+
| [ssd1306](https://github.com/rust-embedded-community/ssd1306) | SSD1306 OLED display driver | Used to initialize and render to the 128×32 OLED |
115+
| [embedded-graphics](https://github.com/embedded-graphics/embedded-graphics) | 2D embedded graphics library | Used for drawing text and shapes on the OLED |
116+
| [heapless](https://github.com/rust-embedded/heapless) | fixed-size collections without heap | Used for string buffers in display and serial output |
117+
| [defmt](https://github.com/knurling-rs/defmt) | lightweight embedded logging | Used to print debug messages over RTT |
118+
| [defmt-rtt](https://crates.io/crates/defmt-rtt) | RTT log transport | Used to view logs on PC |
119+
| [panic-probe](https://github.com/knurling-rs/defmt/tree/main/firmware/panic-probe) | embedded panic handler | Used to report firmware crashes |
120+
113121
## Links
114122

115123
<!-- Add a few links that inspired you and that you think you will use for your project -->
39.4 KB
Loading
71.8 KB
Loading
57.2 KB
Loading
11 KB
Loading

0 commit comments

Comments
 (0)