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

Controllore WiFi per il controllo di quattro tubi per l'acqua
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.
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.
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
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.
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.
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.
| Qty | Value | Footprint | References |
|---|---|---|---|
| 9 | AO3400A | Package_TO_SOT_SMD:SOT-23 | Q1, Q2, Q3, Q4, Q5, Q6, Q7, Q8, Q9 |
| 6 | 10K | Resistor_SMD:R_0603_1608Metric | R7, R8, R9, R11, R12, R13 |
| 6 | 1K | Resistor_SMD:R_0603_1608Metric | R1, R2, R3, R4, R5, R6 |
| 5 | LED | LED_SMD:LED_0603_1608Metric | D1, D2, D5, D6, D9 |
| 4 | D | Diode_SMD:D_SMA | D3, D4, D7, D8 |
| 3 | 100nF | Capacitor_SMD:C_0603_1608Metric | C4, C6, C7 |
| 2 | 10uF | Capacitor_SMD:C_0603_1608Metric | C1, C2 |
| 1 | 1K8 | Resistor_SMD:R_0603_1608Metric | R15 |
| 1 | 220µF | Capacitor_THT:CP_Radial_D4.0mm_P1.50mm | C3 |
| 1 | 4.7uF | Capacitor_SMD:C_0603_1608Metric | C5 |
| 1 | 4K7 | Resistor_SMD:R_0603_1608Metric | R10 |
| 1 | 5K1 | Resistor_SMD:R_0603_1608Metric | R14 |
| 1 | AMS1117-3.3 | Package_TO_SOT_SMD:SOT-223-3_TabPin2 | U2 |
| 1 | ESP8266-01_ESP-01 | power_symbols:esp-01s | U3 |
| 1 | FLOW1 | Connector_JST:JST_EH_B3B-EH-A_1x03_P2.50mm_Vertical | J8 |
| 1 | FLOW2 | Connector_JST:JST_EH_B3B-EH-A_1x03_P2.50mm_Vertical | J9 |
| 1 | FLOW3 | Connector_JST:JST_EH_B3B-EH-A_1x03_P2.50mm_Vertical | J10 |
| 1 | FLOW4 | Connector_JST:JST_EH_B3B-EH-A_1x03_P2.50mm_Vertical | J7 |
| 1 | FLOW5 | Connector_JST:JST_EH_B3B-EH-A_1x03_P2.50mm_Vertical | J12 |
| 1 | GND 12V | power_symbols:screw_2p_small | J1 |
| 1 | I2C1 | Connector_JST:JST_EH_B4B-EH-A_1x04_P2.50mm_Vertical | J6 |
| 1 | LED | LED_SMD:LED_0805_2012Metric | D10 |
| 1 | RESET | Button_Switch_THT:SW_PUSH_6mm | SW1 |
| 1 | STM32G030F6Px | Package_SO:TSSOP-20_4.4x6.5mm_P0.65mm | U1 |
| 1 | VALVE1 | power_symbols:screw_2p_small | J2 |
| 1 | VALVE2 | power_symbols:screw_2p_small | J3 |
| 1 | VALVE3 | power_symbols:screw_2p_small | J4 |
| 1 | VALVE4 | power_symbols:screw_2p_small | J5 |
| 1 | ~ | headers:swdio | J11 |

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



0xjmux/iot_leddriver_hw
ESP32-based WS2812B LED Strip Driver PCB, designed for music visualization


Churrosoft/OpenEFI-PCB
Coleccion de PCB y planos recomendados para montar una OpenEFI


chl33/Plant133
Firmware, circuit design, and 3D-printable components for an automated plant-watering system.
It measures 73.2 × 43.9 mm and has 2 copper layers, 1.6 mm thick.
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.
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.
Its repository states no licence, so its author keeps all rights: ask Kikkiu17 before reusing the design.