ChatGPT, un modello di linguaggio addestrato da OpenAI, può essere utilizzato per generare un progetto per Arduino. Arduino è una piattaforma di sviluppo open source che consente agli utenti di creare progetti interattivi con sensori, attuatori e dispositivi di controllo. Per utilizzare ChatGPT per generare un progetto per Arduino, è necessario fornire al modello alcune informazioni sul progetto desiderato, come ad esempio il tipo di sensori o dispositivi che si desidera utilizzare, la finalità del progetto e le specifiche di controllo. Il modello, quindi, può generare il codice sorgente per il progetto, che può essere caricato sulla scheda Arduino per essere subito eseguito.
Come “parlare” con ChatGPT?
Se si desidera, ad esempio, creare un progetto che utilizzi un sensore di temperatura e un display LCD per visualizzare la temperatura rilevata, si potrebbero fornire al modello le seguenti informazioni:
“Voglio creare un progetto per Arduino che utilizzi un sensore di temperatura e un display LCD per visualizzare la temperatura rilevata. Il codice deve leggere i dati dal sensore e visualizzarli sul display”.
Il modello quindi è in grado di generare il codice sorgente per il progetto, adatto alla specifica richiesta dell’utente. Quest’ultimo, ovviamente, può apportare al codice tutte le modifiche che egli desidera, secondo le sue esigenze. Tuttavia, è importante notare che anche se ChatGPT è un modello di linguaggio molto sofisticato, a volte potrebbe non essere in grado di generare codice perfetto al primo tentativo e potrebbe essere necessario apportare alcune modifiche al listato generato per ottenere il risultato desiderato. I futuri modelli di intelligenza artificiale promettono risultati molto più raffinati, ma quello che ci propone il presente motore è sensazionale. Inoltre, è molto importante che gli utenti abbiano una certa conoscenza di programmazione e di Arduino, e anche di elettronica, per poter utilizzare il codice generato correttamente.
La nostra richiesta: pilotare due display con la tecnica del multiplexing
La tecnica di multiplexing consente di utilizzare un numero limitato di pin di un microcontrollore per controllare un numero maggiore di dispositivi, come ad esempio i display a 7 segmenti. Teoricamente, per pilotare 2 display a 7 segmenti sarebbe necessario utilizzare 14 pin (7 per ogni display), ma utilizzando la tecnica di multiplexing (vedi schema generico in figura 1) è possibile utilizzare solo 8 pin. La tecnica consiste nel far visualizzare ciascun display per un breve periodo di tempo e ripetere questa operazione rapidamente per tutti i display. In questo modo, l’occhio umano percepisce tutti i display accesi contemporaneamente. Per pilotare due display a 7 segmenti con la tecnica di multiplexing, è necessario utilizzare i seguenti passaggi:
- inizializzare i pin del microcontrollore come output e assegnare loro i valori corrispondenti ai segmenti dei display;
- definire una variabile per tenere traccia del display attualmente selezionato;
- utilizzare un ciclo iterativo per gestire tutti i display;
- all’interno del ciclo iterativo si deve utilizzare un’istruzione di selezione per impostare i pin corrispondenti al display attualmente selezionato;
- utilizzare una funzione “delay” per mantenere acceso (per un breve periodo di tempo) il display attualmente selezionato;
- incrementare la variabile che tiene traccia del display attualmente selezionato in modo che il prossimo ciclo visualizzi il successivo display;
- ripetere i passaggi 3-6 rapidamente in modo che l’occhio umano percepisca tutti i display accesi contemporaneamente.
E’ importante sottolineare che i tempi di delay devono essere brevi, per evitare che l’occhio umano percepisca i display lampeggianti. E’ anche possibile utilizzare librerie specifiche per il multiplexing, per semplificare la scrittura del codice e rendere più veloce l’esecuzione del programma.
Adesso lavora ChatGPT
Bene, siamo pronti per dare l’incarico a ChatGPT per iniziare a produrre il progetto in questione. Come detto prima, il progetto sarà costituito dai seguenti componenti:
- una scheda Arduino Uno (o altra compatibile);
- due display a 7 segmenti a catodo comune;
- sette resistori da 220 Ohm e 0.25 Watt;
- due transistor 2N2222 (o equivalenti);
- due resistori da 2.2 kOhm e 0.25 Watt.
Il sistema di intelligenza artificiale fa miracoli, ma occorre che le richieste degli utenti siano poste in maniera chiara e ricche di dettagli, magari non preoccupandosi tanto per la sintassi. L’importante è la quantità di informazioni passate. Chi inizia a intraprendere un progetto di questo tipo deve conoscere le basi dell’elettronica. Per questo motivo dovrebbe, quantomeno, progettare una bozza di circuito elettrico con tutti i collegamenti elettrici e le connessioni ai vari componenti elettronici. Le porte digitali in questo progetto sono configurate tutte in output. Una volta approntato lo schema elettrico vero e proprio, mostrato in figura 2, è possibile iniziare a porre a ChatGPT la richiesta per la realizzazione del progetto.
Dopo l’accesso al sito di chatGPT, raggiungibile all’indirizzo https://chat.openai.com/chat, occorre, effettuare il login per usufruire del servizio. E’ possibile porre la domanda in qualunque lingua internazionale e con uno stile “umano”. Per il nostro progetto inseriamo la seguente stringa nella casella di chatGPT:
“Please write the listing for Arduino Uno for a countdown from 99 to 0, with a one-second pause between one number and the next. The two seven-segment LED displays are to be driven by multiplexing through two NPN transistors. The two displays have a common cathode. Do not use external libraries. The segments of the displays should be connected to Arduino as follows: a = 2, b = 3, c = 4, d = 5, e = 6, f = 7, g = 8, digit1 = 9, digit2 = 10. Thank you”.
Tale richiesta, visibile anche in figura 3, contiene le informazioni sufficienti affinché il Bot capisca a fondo la nostra richiesta. Attualmente il sito è visitato da milioni di persone e il traffico è enorme. Per la risposta, infatti, potrebbero essere necessari alcuni istanti in più. Spesso è necessario ripetere la richiesta, per gli stessi motivi. Dopo alcuni secondi di attesa, quindi, ChatGPT risponde con una risposta molto umana e professionale, con termini adeguati alla materia trattata. La risposta prevede anche un lungo listato sorgente per Arduino, pronto per essere caricato sul dispositivo. Il listato è abbastanza corretto e sono veramente pochi i punti in cui deve intervenire il programmatore umano.
Test finale del progetto
Dopo aver correttamente montato i componenti elettronici, eseguito tutte le connessioni elettriche e caricato il programma eseguibile su Arduino (vedi il listato sorgente in figura 4), è possibile effettuare subito il collaudo del prototipo. Ad alimentazione elettrica avvenuta, i due display a Led a sette segmenti si illuminano e visualizzano, su due cifre, un conteggio alla rovescia da 99 a 0, al ritmo di un secondo. E’ interessante osservare come sia calcolato il valore delle due cifre da visualizzare, relativamente alle decine e alle unità. Per separare le decine e le unità di un numero di due cifre, è possibile utilizzare l’operatore di modulo (%). Il modulo restituisce il resto della divisione di un numero per un altro numero. Per separare le decine e le unità di un numero di due cifre, è possibile utilizzare le seguenti due formule:
In questo modo, la variabile “tens” conterrà il numero delle decine del numero originale, mentre la variabile “ones” conterrà il numero delle unità del numero originale. Un’altra particolarità del listato è la ripetizione della visualizzazione delle due cifre, in multiplex, per un numero determinato di volte. Questa tecnica consente di stabilire il tempo in cui il numero deve essere visualizzato e determina, pertanto, anche la velocità del conteggio.
Conclusioni
Benché i risultati ottenuti dalle tecniche di intelligenza artificiale siano lusinghieri, la tecnologia è ancora all’inizio e si aspetta una grande rivoluzione di tale settore, nell’immediato futuro. GPT-3 (Generative Pre-trained Transformer 3) è un modello di linguaggio sviluppato da OpenAI che è stato addestrato su una grande quantità di dati. GPT-3 è stato utilizzato per generare testo in una vasta gamma di applicazioni, come la generazione di documenti, la traduzione automatica, la sintesi vocale e la risposta alle domande. Inoltre esso è stato notato per la sua capacità di generare testo plausibile e coerente e per la sua capacità di comprendere il contesto e l’uso del linguaggio. In futuro, si può ipotizzare che un eventuale GPT-4 sarebbe un modello di linguaggio ancora più avanzato rispetto a GPT-3, con una maggiore capacità di comprendere il contesto e l’uso del linguaggio, una maggiore capacità di generare testo plausibile e coerente e una maggiore capacità di gestire una vasta gamma di applicazioni. In conclusione, ChatGPT dimostra di essere un potente strumento per la creazione di progetti completi per Arduino. Grazie alle sue capacità di generazione automatica del codice, può aiutare gli sviluppatori a risparmiare tempo e fatica, aumentando l’efficienza e la qualità del loro lavoro. Inoltre, la sua capacità di comprendere e rispondere alle domande in modo naturale rende facile per gli utenti ottenere risposte alle loro domande e orientamento nei loro progetti. Ci si può aspettare che in futuro l’uso di ChatGPT diventi sempre più diffuso nell’ambito dell’elettronica e dell’Internet delle cose. Oggi l’intelligenza artificiale può aiutare a scrivere i firmware per i microcontrollori in diversi modi. E’ importante ricordare che l’IA può essere utilizzata solo come supporto allo sviluppo del firmware ma non può ancora sostituire completamente il lavoro dei programmatori umani.
Allegati
Sketch di Arduino