Un piccolo sistema costituito da un microcontrollore che rileva un malfunzionamento hardware o software di un altro sistema (preferibilmente un altro microcontrollore o comunque un qualsiasi tipo di scheda elettronica programmabile fornita di PIN digitali per l'input o l'output) e resetta quest'ultimo affinché possa ricominciare a funzionare.
L'idea del progetto è nata a causa di malfunzionamento di alcuni termocarboigrometri Wi-Fi. I termocarboigrometri effettuano misurazioni sull'ambiente circostante e riportano quest'ultime su dei fogli Google ogni quantum di tempo. Tuttavia con il passare del tempo alcuni termocarboigrometri smettono di funzionare a causa di problemi derivanti dalle operazioni di scrittura sul foglio, provocando un deadlock con conseguente blocco del sistema. Per questo abbiamo pensato a un temporizzatore di supervisione facile da creare e implementare.
Il WatchDog, attraverso un PIN digitale settato in INPUT, rimane in attesa ciclicamente di un segnale da parte del sistema da supervisionare, per verificare che quest'ultimo sia funzionante. Quando il sistema smetterà di funzionare, non invierà più il segnale al WatchDog, di conseguenza esso dopo un tempo treeshold manderà un segnale basso alla linea di RESET, attraverso un PIN digitale settato in OUTPUT. Riavviando cosi il sistema.
Questo progetto è open source: chiunque può scaricare i file necessari, ricreare il progetto e contribuire al suo miglioramento. Non ci sono restrizioni di licenza d'uso, ma si invita a citare che è stato realizzato dagli studenti ASIRID.
Tutto il materiale necessario si trova su GitLab.
Oppure qualsiasi tipo di microcontrollore con pin digitali (che sia programmabile con l'IDE Arduino)
- 2 PIN digitali sul WatchDog per INPUT e OUTPUT.
- 1 PIN digitale sul sistema da supervisionare.
- PIN di RESET sul sistema da supervisionare.
- 2 PIN per l'alimentazione e per la tensione di riferimento di terra (GND) (sia sul WatchDog che sul sistema da supervisionare).
- Codice .ino reperibile su questa repository GitLab
Questo core può essere installato utilizzando il gestore schede. L'URL di questo core è
- Aprire Arduino IDE.
- Navigare nel menu File > Impostazioni > Inserisci l'URL sopra in "URL aggiuntive per il Gestore delle schede".
- Navigare nel menu Strumenti > Scheda > Gestore Schede...
- Seleziona "ATTinyCore di Spence Konde" e fai clic su "Installa".
Per programmare il dispositivo, è necessario configurare un Arduino per funzionare come programmatore In-System Programming (ISP). Questo processo permette di programmare microcontrollori come l'ATTiny utilizzando l'Arduino come intermediario. La configurazione avviene attraverso i seguenti passaggi:
- Navigare nel menu File > Esempi > 11. ArduinoISP > ArduinoISP per trovare lo sketch "ArduinoISP".
- Caricare questo sketch sull'Arduino. Questo trasforma l'Arduino in un programmatore ISP, consentendo la programmazione di altri microcontrollori.
- Navigare nel menu Strumenti > Schede > ATtiny25/45/85 (No bootloader) e il programmatore ("Arduino as ISP").
- Impostare la sorgente del clock (Clock source) a 1MHz.
- Caricare lo sketch sull'ATTiny utilizzando l'Arduino come programmatore ISP.
N.B.: Questa configurazione è essenziale per programmare micontrollori che non dispongono di una porta USB nativa per il collegamento diretto ad un computer. Utilizzando un Arduino come programmatore ISP, si può facilmente trasferire codice e programmare questi microntrollori per una vasta gamma di applicazioni.
const uint32_t th = 120000; //tempo soglia o watchdog timer (milliseconds)
const uint32_t bootDelay = 120000; //boot delay (milliseconds)
#define watchdog_in 1 //Pin che riceverà l'impulso
#define watchdog_out 4 //Pin che attiverà il reset HW del sistema
#define led_boot_delay 3 //Pin che attiva il led integrato del microcontrollore
Modificare le costanti per:
- th - treeshold ovvero il tempo massimo di attesa prima che il Watchdog attivi il segnale di RESET (nel caso non gli arrivi più nessun segnale in input).
- bootDelay - tempo di accensione prima che il WatchDog cominci il loop di verifica.
- watchdog_in - PIN che riceverà ciclicamente il segnale dal sistema da supervisionare.
- watchdog_out - PIN che attiverà il RESET.
Il progetto è stato pubblicato a Gennaio 2024, nella sua prima versione ed è attualmente funzionante. Sviluppi futuri da definire.
Francesco Sparascio, Dicembre 2023