Skip to the content
2 layers73.2 × 43.9 mmAutoIrrigator, the printed circuit board in 3D

Controllore WiFi per il controllo di quattro tubi per l'acqua

Size
73.2 × 43.9 mm
Copper layers
2
Thickness
1.6 mm
Parts
57
Nets
39
Pads
160
Tracks, vias
249, 38
Pours
1
Routed
Yes
KiCad
KiCad 9.0 (file 20241229)
Created
8 Apr 2025
Updated
15 Oct 2026

Overview

AutoIrrigator is an open-source printed circuit board by Kikkiu17, from the Kikkiu17/AutoIrrigator repository on GitHub. It is a 2-layer board of 73.2 × 43.9 mm with 57 parts on 39 nets, routed with 249 tracks and 38 vias.

It is built around the AMS1117-3.3 and AO3400A. Its parts include 15 resistors, 12 connectors, 10 diodes, 9 transistors and 7 capacitors. It belongs with the radio and wireless boards and the ESP8266 and STM32 boards of this library.

Main components

2

README

README.md

Il progetto

Alla base del progetto c'è un microcontrollore STM32G030F6P6, compatto e dal costo di qualche decina di centesimi, che si interfaccia con un modulo ESP-01S per la connessione a Internet. Il microcontrollore può pilotare quattro elettrovalvole assieme a quattro sensori di flusso dell'acqua, uno per ogni tubo. I sensori di flusso permettono di rilevare la presenza di problemi lungo le linee e le quattro valvole consentono di irrigare fino a quattro aree alla volta.

Il tutto è controllabile da remoto tramite un'app Android, con la quale si possono aprire o chiudere le valvole manualmente ma si può anche impostare una programmazione per l'apertura e chiusura automatica in base all'orario o al tempo atmosferico. Infatti, il microcontrollore effettua ogni 15 minuti una richiesta all'API Open-Meteo per ottenere le previsioni meteo della giornata: se è prevista pioggia, è inutile irrigare, quindi le valvole resteranno chiuse.

Costruzione

Hardware

Circuito stampato

Ho iniziato con l'hardware. Ho sviluppato un circuito elettronico in KiCad in modo che l'STM potesse controllare le valvole e i sensori. Le valvole sono a 12 V e consumano ~600 mA di corrente, quindi ho usato MOSFET AO3400A per poterle controllare con l'STM (i cui pin hanno un output massimo di ~15 mA a 3,3 V). Pure i sensori di flusso operano a 12 V, quindi ho usato gli stessi MOSFET per poterli interfacciare col microcontrollore.

Ho poi stampato in 3D uno stencil per poter spalmare la pasta saldante sui vari pad dei componenti a montaggio superficiale (SMD). Questo perché ordinarlo assieme alle PCB sarebbe costato quasi 20 € in più, mentre così è gratis e il risultato è comunque accettabile. Quindi perché no?

Schema:

PCB:

Stencil fatto in casa

Modello 3D

Mentre aspettavo l'arrivo delle PCB, ho iniziato a creare il modello 3D del progetto, con dei raccordi per le valvole e i sensori. Ho creato un design abbastanza compatto ma comunque semplice da assemblare, con il circuito stampato al centro in modo da poterci collegare tutti i fili comodamente.

Software

Firmware embedded

Dopo aver fatto i raccordi e i supporti, sono passato al software. Ho iniziato a scrivere il mio driver per l'ESP-01S dato che non ne ho trovato nessuno online abbastanza semplice da usare compatibile con l'STM32. Il driver sfrutta il DMA dell'STM32 per poter ricevere i dati dell'ESP dalla porta seriale senza usare la CPU, aumentando quindi le prestazioni (in questo caso le prestazioni non sono critiche, ma fa comunque comodo). L'ESP viene connesso alla rete WiFi; viene impostato l'hostname ESPDEVICE002 per poter essere riconosciuto nella rete; viene impostato il nome Hub irrigazione; viene connesso al server NTP in modo da poter ottenere la data e l'ora e infine l'ESP viene impostato in modalità server in modo da accettare connessioni remote sulla porta 23. Poi, nel ciclo while principale, il firmware attende nuove richieste tramite la funzione WIFI_ReceiveRequest che dopo verranno gestite.

Grazie ai numerosi timer dell'STM32G030F6P6, ho dedicato tre timer ai quattro sensori di flusso (chiamati FLOW): TIM14 per FLOW1, TIM1 per FLOW2, TIM3 per FLOW3 e FLOW4. In questo modo ho potuto usare quattro pin fisici per ciascun sensore, invece che fare multiplexing coi quattro sensori, rendendo quindi tutto molto più semplice. Imposto i canali timer dei sensori in modalità Input compare e abilito gli interrupt per i timer, in modo da ottenere il periodo del segnale PWM dei sensori. Facendo 1/T, dove T è il periodo, si ottiene la frequenza e dividendola per 7,5 si ottiene il flusso d'acqua in litri/min.

Infine ho scritto del codice per connettermi all'API di Open-meteo per ottenere le previsioni per il giorno corrente tramite la funzione WEATHER_GetForecast. Le previsioni vengono immagazzinate in degli array in modo da poter accedere facilmente ad esse.

App Android

Per controllare il tutto si usa un'app Android, ESPValve. Volevo utilizzare l'app ESPIOT di un mio vecchio progetto, ma il modo in cui l'ho scritta rende difficile l'integrazione di nuovi dispositivi ad essa, quindi ho deciso di riscriverla da zero. La vecchia app richiedeva delle caratteristiche specifiche da chiedere ai dispositivi connessi, quindi per aggiungere, ad esempio, un pulsante, bisognava modificare in modo pesante sia l'applicazione che il dispositivo (in questo caso l'STM32 e l'ESP). La nuova app invece chiede ogni 250 ms un pacchetto di feature dal dispositivo con questa struttura: tipoX$Nome,caratteristica_aggiuntiva$Nome$dato oppure tipoX$Nome$dato. tipo è il tipo di caratteristica, quindi interruttore, bottone, sensore o timestamp e caratteristica_aggiuntiva può essere ad esempio sensore. In questo modo, posso creare il pacchetto di caratteristiche che mi interessano e l'app Android crea ogni bottone o sensore o altro col nome specificato e col dato specificato, in base alla struttura data.

Parts

57
QtyValueFootprintReferences
9AO3400APackage_TO_SOT_SMD:SOT-23Q1, Q2, Q3, Q4, Q5, Q6, Q7, Q8, Q9
610KResistor_SMD:R_0603_1608MetricR7, R8, R9, R11, R12, R13
61KResistor_SMD:R_0603_1608MetricR1, R2, R3, R4, R5, R6
5LEDLED_SMD:LED_0603_1608MetricD1, D2, D5, D6, D9
4DDiode_SMD:D_SMAD3, D4, D7, D8
3100nFCapacitor_SMD:C_0603_1608MetricC4, C6, C7
210uFCapacitor_SMD:C_0603_1608MetricC1, C2
11K8Resistor_SMD:R_0603_1608MetricR15
1220µFCapacitor_THT:CP_Radial_D4.0mm_P1.50mmC3
14.7uFCapacitor_SMD:C_0603_1608MetricC5
14K7Resistor_SMD:R_0603_1608MetricR10
15K1Resistor_SMD:R_0603_1608MetricR14
1AMS1117-3.3Package_TO_SOT_SMD:SOT-223-3_TabPin2U2
1ESP8266-01_ESP-01power_symbols:esp-01sU3
1FLOW1Connector_JST:JST_EH_B3B-EH-A_1x03_P2.50mm_VerticalJ8
1FLOW2Connector_JST:JST_EH_B3B-EH-A_1x03_P2.50mm_VerticalJ9
1FLOW3Connector_JST:JST_EH_B3B-EH-A_1x03_P2.50mm_VerticalJ10
1FLOW4Connector_JST:JST_EH_B3B-EH-A_1x03_P2.50mm_VerticalJ7
1FLOW5Connector_JST:JST_EH_B3B-EH-A_1x03_P2.50mm_VerticalJ12
1GND 12Vpower_symbols:screw_2p_smallJ1
1I2C1Connector_JST:JST_EH_B4B-EH-A_1x04_P2.50mm_VerticalJ6
1LEDLED_SMD:LED_0805_2012MetricD10
1RESETButton_Switch_THT:SW_PUSH_6mmSW1
1STM32G030F6PxPackage_SO:TSSOP-20_4.4x6.5mm_P0.65mmU1
1VALVE1power_symbols:screw_2p_smallJ2
1VALVE2power_symbols:screw_2p_smallJ3
1VALVE3power_symbols:screw_2p_smallJ4
1VALVE4power_symbols:screw_2p_smallJ5
1~headers:swdioJ11

Similar boards

  • 2 layers148.6 × 192.2 mmBadge, the printed circuit board in 3D

    Badge

    NuttyShell/NuttyBadge

    NuttyBadge: A NuttyShell crafted multi-tool. Opensourced Hardawre and Software

    169 parts31GPL-3.0
  • 2 layersTopBoard, the printed circuit board in 3D

    TopBoard

    Libre-Talk/Wave

    Smart Speaker satellite

    184 parts22
  • 4 layers57 × 56 mmIot led strip pcb, the printed circuit board in 3D

    Iot led strip pcb

    0xjmux/iot_leddriver_hw

    ESP32-based WS2812B LED Strip Driver PCB, designed for music visualization

    85 parts9
  • 4 layers104.2 × 59.7 mmCustom BMS, the printed circuit board in 3D

    Custom BMS

    SCFormulaElectric/USC-Electrical-Systems

    246 parts9
  • 4 layers164 × 118 mmOpenEFI rev4 bkp, the printed circuit board in 3D

    OpenEFI rev4 bkp

    Churrosoft/OpenEFI-PCB

    Coleccion de PCB y planos recomendados para montar una OpenEFI

    345 parts8CERN-OHL-S-2.0
  • 4 layers170 × 101 mmFreeDSP G, the printed circuit board in 3D

    FreeDSP G

    freeDSP/FreeDSP-G

    ADAU1467 DSP Board for Electric Guitar Players

    377 parts7CC0-1.0
  • 4 layers59.6 × 48.3 mmPlant1337, the printed circuit board in 3D

    Plant1337

    chl33/Plant133

    Firmware, circuit design, and 3D-printable components for an automated plant-watering system.

    61 parts6MIT

Questions

How big is the AutoIrrigator PCB?

It measures 73.2 × 43.9 mm and has 2 copper layers, 1.6 mm thick.

What parts does the AutoIrrigator use?

57 parts, built around the AMS1117-3.3 and AO3400A. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the AutoIrrigator KiCad files?

From the Kikkiu17/AutoIrrigator repository on GitHub, at the commit this page was made from: the board is Hardware/PCB/auto_irrigator.kicad_pcb and its schematic Hardware/PCB/auto_irrigator.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the AutoIrrigator design in my own project?

Its repository states no licence, so its author keeps all rights: ask Kikkiu17 before reusing the design.