Archivi categoria: elettronica

Esercitazione 1 – Pulsante singolo con antirimbalzo, doppio clic, pressione lunga e timeout

Allenamento per l’esame di maturità
Percorso di laboratorio con Arduino per studenti di quinta ITIS

Obiettivo didattico

Realizzare una piccola interfaccia utente con un solo pulsante. Il sistema deve riconoscere una pressione breve, un doppio clic, una pressione lunga e un timeout di inattività. L’attività allena la gestione degli eventi, l’antirimbalzo software e l’uso di millis() senza bloccare il programma.

Nota importante

La comprensione del funzionamento di questo esercizio permetterà lo svolgimento in autonomia dell’esercizio aggiuntivo che trovate al fondo di questa scheda di lavoro.

Materiali suggeriti

  • Arduino UNO R3 o UNO R4;
  • 1 pulsante;
  • 3 LED;
  • 3 resitori (per i LED);
  • breadboard;
  • cavetti jumper.

Schema di collegamento

Richiamo teorico

Per leggere correttamente un pulsante reale bisogna evitare il rimbalzo dei contatti. Si usa quindi una variabile con l’ultima lettura, una temporizzazione di stabilizzazione e una logica a eventi. Con millis() si misura il tempo senza usare delay(), così il programma può continuare a controllare altri compiti.

Schema logico dell’attività

Il programma legge continuamente il pulsante. Se la lettura cambia, attende il tempo di debounce. Quando il livello è stabile, riconosce pressione e rilascio. Dal tempo trascorso ricava l’evento: clic breve, doppio clic oppure pressione lunga. Se non accade nulla per molti secondi, attiva un LED di timeout.

Diagramma di flusso

Diagramma di flusso Mermaid

Ricordo che per realizzare il diagramma di flusso, copiate il codice Mermaid seguendo le indicazioni della lezione: Progettare bene, programmare meglio: diagrammi di flusso – cos’è il formato Mermaid? – Lezione 2/5

flowchart TD
    A[Inizio] --> B[Configura pin e variabili]
    B --> C[Leggi pulsante]
    C --> D{Lettura cambiata?}
    D -- Sì --> E[Salva istante variazione]
    D -- No --> F{Tempo debounce trascorso?}
    E --> F
    F -- No --> C
    F -- Sì --> G{Stato stabile cambiato?}
    G -- No --> H{Timeout inattività?}
    G -- Sì --> I{Pulsante premuto?}
    I -- Sì --> J[Memorizza istante pressione]
    I -- No --> K[Calcola durata pressione]
    K --> L{Pressione lunga?}
    L -- Sì --> M[Genera evento LONG]
    L -- No --> N{Secondo clic entro finestra?}
    N -- Sì --> O[Genera evento DOUBLE]
    N -- No --> P[Attendi possibile secondo clic]
    H -- Sì --> Q[Attiva LED timeout]
    H -- No --> C
    J --> C
    M --> C
    O --> C
    P --> C
    Q --> C

Programma

/*
  Prof. Maffucci Michele
  Esercizio 1: Pulsante singolo con antirimbalzo, doppio clic, pressione lunga e timeout
*/


// ---------------------------
// Definizione dei pin usati
// ---------------------------
const int PIN_PULSANTE = 2;
const int PIN_LED_BREVE = 8;
const int PIN_LED_DOPPIO = 9;
const int PIN_LED_TIMEOUT = 10;

// ---------------------------
// Costanti temporali
// ---------------------------
const unsigned long TEMPO_DEBOUNCE = 30;
const unsigned long SOGLIA_PRESSIONE_LUNGA = 800;
const unsigned long FINESTRA_DOPPIO_CLICK = 350;
const unsigned long TEMPO_TIMEOUT = 5000;

// ---------------------------
// Variabili per antirimbalzo
// ---------------------------
int ultimaLetturaGrezza = HIGH;
int statoStabile = HIGH;
unsigned long istanteUltimaVariazione = 0;

// ---------------------------
// Variabili per eventi utente
// ---------------------------
bool attesaSecondoClick = false;
unsigned long istantePrimoClick = 0;
unsigned long istantePressione = 0;
unsigned long ultimoEventoUtente = 0;

void setup() {
  // Il pulsante usa la resistenza interna di pull-up.
  pinMode(PIN_PULSANTE, INPUT_PULLUP);

  // I tre LED rappresentano tre eventi diversi.
  pinMode(PIN_LED_BREVE, OUTPUT);
  pinMode(PIN_LED_DOPPIO, OUTPUT);
  pinMode(PIN_LED_TIMEOUT, OUTPUT);

  // All'avvio tutti i LED sono spenti.
  digitalWrite(PIN_LED_BREVE, LOW);
  digitalWrite(PIN_LED_DOPPIO, LOW);
  digitalWrite(PIN_LED_TIMEOUT, LOW);

  // La seriale aiuta a vedere quale evento viene riconosciuto.
  Serial.begin(9600);

  // Salvo il tempo iniziale come ultimo evento.
  ultimoEventoUtente = millis();
}

void loop() {
  // Leggo il pulsante in forma grezza.
  int letturaCorrente = digitalRead(PIN_PULSANTE);

  // Se la lettura è cambiata rispetto alla precedente,
  // aggiorno il tempo della variazione.
  if (letturaCorrente != ultimaLetturaGrezza) {
    istanteUltimaVariazione = millis();
    ultimaLetturaGrezza = letturaCorrente;
  }

  // Se il segnale è stabile da abbastanza tempo,
  // posso considerarlo affidabile.
  if ((millis() - istanteUltimaVariazione) >= TEMPO_DEBOUNCE) {

    // Se anche lo stato stabile è cambiato, ho un nuovo evento.
    if (letturaCorrente != statoStabile) {
      statoStabile = letturaCorrente;
      ultimoEventoUtente = millis();
      digitalWrite(PIN_LED_TIMEOUT, LOW);

      // Transizione verso livello basso = pulsante premuto.
      if (statoStabile == LOW) {
        istantePressione = millis();
      }
      // Transizione verso livello alto = pulsante rilasciato.
      else {
        unsigned long durataPressione = millis() - istantePressione;

        // Se la durata supera la soglia, classifico come pressione lunga.
        if (durataPressione >= SOGLIA_PRESSIONE_LUNGA) {
          Serial.println("Evento: PRESSIONE LUNGA");
          lampeggiaLed(PIN_LED_DOPPIO, 2, 120);
          attesaSecondoClick = false;
        }
        else {
          // Se sto già aspettando un secondo clic,
          // verifico la finestra temporale.
          if (attesaSecondoClick == true &&
              (millis() - istantePrimoClick) <= FINESTRA_DOPPIO_CLICK) {
            Serial.println("Evento: DOPPIO CLICK");
            lampeggiaLed(PIN_LED_DOPPIO, 1, 250);
            attesaSecondoClick = false;
          }
          else {
            // Primo clic breve: non lo confermo subito,
            // perché potrei ricevere un secondo clic.
            attesaSecondoClick = true;
            istantePrimoClick = millis();
          }
        }
      }
    }
  }

  // Se è in attesa un secondo clic e la finestra è scaduta,
  // confermo il clic breve.
  if (attesaSecondoClick == true && (millis() - istantePrimoClick) > FINESTRA_DOPPIO_CLICK) {
    Serial.println("Evento: CLICK BREVE");
    lampeggiaLed(PIN_LED_BREVE, 1, 250);
    attesaSecondoClick = false;
  }

  // Se passa troppo tempo senza eventi, attivo il LED di timeout.
  if ((millis() - ultimoEventoUtente) >= TEMPO_TIMEOUT) {
    digitalWrite(PIN_LED_TIMEOUT, HIGH);
  }
}

// ----------------------------------------------------------
// Funzione di servizio: fa lampeggiare un LED alcune volte.
// In questa attività è accettabile usare delay() perché
// la funzione serve solo come feedback visivo di conferma.
// ----------------------------------------------------------
void lampeggiaLed(int pinLed, int numeroLampi, int durata) {
  for (int i = 0; i < numeroLampi; i = i + 1) {
    digitalWrite(pinLed, HIGH);
    delay(durata);
    digitalWrite(pinLed, LOW);
    delay(durata);
  }
}

Continua a leggere

Allenamento alla maturità con Arduino

Esercitazioni progressive di laboratorio per studenti di quinta ITIS e professionale

Nota importante: questa pagina è in continuo aggiornamento. I link alle diverse esercitazioni saranno aggiunti progressivamente nell’indice, man mano che i contenuti verranno pubblicati.

La preparazione alla seconda prova dell’Esame di Stato passa anche attraverso l’attività pratica in laboratorio in modo che l’azione possa essere utile per focalizzare lo studio teorico e lo svolgimento delle tracce degli anni precedenti.

Per affrontare bene la maturità serve allenamento operativo, metodo e continuità.
Per questo motivo ho deciso di proporre una serie di esercitazioni pratiche con Arduino, pensate per studenti del quinto anno dell’ITIS – Elettronica e Automazione, utilizzabili sia a scuola in laboratorio con il supporto dei docenti sia a casa in autonomia come attività di ripasso e consolidamento.

Sono in realtà attività pratiche che possono essere svolte in circa 90 minuti di lavoro e che prendono in considerazione argomenti del triennio dell’ITIS che ritengo possano servire per lo svolgimento di problemi che potrebbero essere presenti nel tema d’esame di TPSEE.

Quindi questa raccolta nasce con un obiettivo molto preciso:

aiutare gli studenti a prendere confidenza con quelle strutture di programmazione che, molto spesso, risultano più difficili da capire e da usare in modo corretto, ad esempio:

  • temporizzazioni non bloccanti con millis()
  • multitasking cooperativo
  • array e matrici
  • interrupt
  • puntatori
  • macchine a stati
  • gestione ordinata degli eventi

Due percorsi distinti ma complementari

All’interno del lavoro di preparazione alla maturità sto sviluppando due percorsi paralleli.

Il primo è questa serie di esercitazioni trasversali di programmazione, focalizzate sulle strutture software più importanti e spesso più ostiche.

Il secondo, invece, è già in corso con un mia classe e nel breve pubblicherò le attività di laboratorio, si tratta di una reinterpretazione per il laboratorio di Sistemi elettronici e TPSEE della prova di maturità della sessione ordinaria 2018 di TPSEE, che richiede di affrontare un processo articolato con preallarme, attuatori ON/OFF, acquisizione di sensori, scelta dell’intervallo di campionamento, progettazione delle interfacce e descrizione dell’algoritmo di gestione.

Partiamo però dalle 20 attività.

Come sono costruite le esercitazioni

La struttura delle schede di lavoro rispecchia quelle che in genere consegno ai miei studenti.

Ogni attività sarà presentata con una struttura costante, così da aiutare anche gli studenti che hanno competenze di programmazione ancora deboli.

In ogni post troverete:

  • richiamo teorico iniziale delle istruzioni usate
  • analisi semplificata del problema
  • materiali necessari
  • schema logico di funzionamento
  • diagramma di flusso
  • codice Arduino completo e commentato nel dettaglio
  • spiegazione guidata del programma
  • errori tipici
  • possibili estensioni

Attività 0: prima di programmare, capire bene il testo

Prima ancora di partire con la costruzione del circuito e la programmazione iniziamo con l’Attività 0: la comprensione del testo tecnico, è un problema che si riscontra sempre, soprattutto nella comprensione del testo dell’esame di maturità.

Molto spesso gli studenti si bloccano non perché non sanno programmare, ma perché il testo della prova appare lungo, denso e complesso.
Per questo motivo, prima di scrivere codice, è fondamentale allenarsi a:

  • riconoscere ingressi, uscite, sensori e attuatori
  • distinguere dati misurati e condizioni logiche
  • individuare la sequenza del processo
  • separare la parte hardware dalla parte software
  • … e non ultimo progettare in modo ordinato

Pubblicazione delle soluzioni

Le attività saranno pubblicate progressivamente e in ogni attività lo studente troverà un esercizio aggiuntivo di complessità leggermente superiore rispetto a quello proposto.

Ogni esercizio sarà corredato da diagramma di flusso e codice Mermaid per replicare il diagramma di flusso.

Per favorire il ragionamento autonomo, la soluzione completa verrà resa disponibile dopo qualche giorno dalla pubblicazione dell’esercizio, così da lasciare agli studenti il tempo di provare davvero.

Nota importante

Questa serie di attività è attualmente in costruzione. Nel momento stesso in cui pubblico questo post sto ancora sviluppando e affinando le singole esercitazioni; per questo vi chiedo un po’ di pazienza e comprensione se dovessero essere presenti alcune imprecisioni o aspetti da migliorare. Ogni segnalazione, osservazione o suggerimento sarà quindi molto utile per rendere le schede di lavoro più chiare, efficaci e funzionali.

Naturalmente, quanto propongo non ha la pretesa di esaurire tutti i contenuti necessari per affrontare l’Esame di Stato. Si tratta di una mia selezione di attività, costruita a partire dagli argomenti ricorrenti nelle prove degli anni passati e pensata soprattutto per studenti con competenze di livello medio-base. Per questo motivo le esercitazioni possono essere integrate, adattate o modificate in base alle esigenze della classe, al livello di preparazione degli studenti e alle scelte didattiche del docente.

Di seguito trovate l’indice della serie, che al momento può essere considerato una versione beta, anche se con ogni probabilità resterà molto vicino alla struttura definitiva.
Questa pagina verrà aggiornata progressivamente, aggiungendo di volta in volta i link diretti alle singole esercitazioni.

Indice delle esercitazioni che verranno pubblicate

  • Esercitazione 1 – Pulsante singolo con antirimbalzo, doppio clic, pressione lunga e timeout
  • Esercitazione 2 – Tastiera 4×4 non bloccante con codice di accesso e feedback di errore
  • Esercitazione 3 – Scheduler cooperativo con tre task e supervisione dei tempi
  • Esercitazione 4 – Macchina a stati per un ciclo automatico con START, pausa, allarme e reset
  • Esercitazione 5 – Acquisizione analogica calibrata, filtrata e convertita in grandezza fisica
  • Esercitazione 6 – Controllo a finestra con isteresi, allarme latched e reset
  • Esercitazione 7 – Confronto tra filtro a media mobile e filtro esponenziale
  • Esercitazione 8 – Campionamento temporizzato con array di struct: tempo, valore e stato
  • Esercitazione 9 – Analisi statistica di una sequenza con rilevamento anomalie
  • Esercitazione 10 – Buffer circolare con trend, velocità di variazione e soglia dinamica
  • Esercitazione 11 – Matrice bidimensionale per organizzare campioni di più sensori nel tempo
  • Esercitazione 12 – Frame buffer per matrice LED: icone, animazioni e scorrimento testo
  • Esercitazione 13 – Conteggio impulsi con interrupt e validazione evento
  • Esercitazione 14 – Misura di periodo, frequenza, duty cycle e tempo alto di un segnale PWM
  • Esercitazione 15 – Encoder rotativo con menù parametrico semplificato
  • Esercitazione 16 – Funzioni con parametri passati per indirizzo e restituzione di più risultati
  • Esercitazione 17 – Ordinamento di misure e scambio di valori tramite puntatori
  • Esercitazione 18 – Macchina a stati per un menù su display LCD
  • Esercitazione 19 – Parser di comandi seriali con parametri e risposta strutturata
  • Esercitazione 20 – Mini progetto finale: stazione di monitoraggio completa

Quale sarà la periodicità delle attività? Probabilmente giornaliera, da domani o lunedì prossimo.

Siete pronti per ripassare? 🙂

Multitasking con Arduino – lezione 3/3

Nella scorsa lezione abbiamo visto come gestire un attuatore, un servomotore SG90, la cui rotazione non bloccava l’accensione di un LED controllata da un pulsante. Vediamo ora in questa breve lezione come gestire un sensore di temperatura e umidità DHT11. Nell’esempio che segue abbiamo 4 task che lavorano in multitasking nel seguente modo:

  • TASK 1: Lampeggio LED su D9
  • TASK 2: Pulsante su D2 (INPUT_PULLUP) + debounce -> commuta LED2 su D8
  • TASK 3: Lettura DHT11 su D3 ogni 2000 ms (no blocchi nel loop)
  • TASK 4: Stampa su Serial ogni 1000 ms dei valori letti (se validi)

Nota: il DHT11 è lento mi piace definirlo “capriccioso” 🙂 leggerlo troppo spesso può dare errori. Come già indicato in precedenti post, intervalli da 1–2 sec sono ideali.

Collegamenti

Ricordo che se usate il modulo DHT11 a 3 pin:

  • VCC > 5V
  • GND > GND
  • DATA > D3 (nel codice)

Se invece usate il DHT11 a 4 pin che non è su breakoutboard , serve una resistenza di pull-up (tipicamente 10 kΩ) tra Vcc e DATA.

Per gli esempi è necessario installare la libreria DHT sensor library (Adafruit).

Nello sketch che segue il trucco “da multitasking” è la cache: leggiamo il DHT11 solo ogni 2 s (task 3), ma possiamo stampare i dati ogni 1 s (task 4) senza impegnare troppo il sensore e senza bloccare il loop.

Schema di collegamento

I commenti spiegano il funzionamento del codice. Continua a leggere

ESP32-C3 Super Mini vs ESP32-S3 Super Mini: differenze e quale scegliere

In riferimento al post pubblicato la scorsa settimana, mi è arrivato un messaggio da parte di un lettore: cercando la stessa schedina in rete ha notato che, oltre alla versione ESP32-C3 Super Mini, viene proposta anche la ESP32-S3 Super Mini e mi ha chiesto, che cosa cambia tra le due schede.

La domanda è più che legittima, perché a colpo d’occhio le due board sembrano quasi identiche: stesso formato compatto, stesso uso tipico in progetti IoT e didattici. In realtà le due schede si differenziano in molte cose: architettura della CPU, prestazioni, numero di GPIO disponibili, gestione USB, e (in molti modelli S3) perfino dettagli pratici come la presenza dei pad per collegare direttamente una batteria Li-Po con ricarica via USB.

In questo articolo metto quindi a confronto ESP32-C3 Super Mini e ESP32-S3 Super Mini, prima indico le differenze elettroniche (quelle che dipendono dal chip), poi evidenzio le differenze che dipendono dalla specifica schedina e dal produttore, così da capire subito quale scegliere in base al progetto e agli obiettivi didattici.

Premessa importante: “Super Mini” non è uno standard

“Super Mini” descrive un form factor molto diffuso, ma non è un nome “ufficiale” che garantisce caratteristiche identiche tra produttori.

Quindi:

  • le differenze C3 vs S3 (CPU, USB, risorse) sono reali e dipendono dal chip;
  • dettagli come LED onboard, pin esposti, flash/PSRAM, pad batteria possono variare a seconda del lotto e del venditore.

In questo post separo volutamente:

  • differenze elettroniche del chip;
  • differenze dipendenti dal produttore.

Confronto tra le due schede

Nella tabella che segue vengono indicate le differenze tra le due schede:

Aspetto ESP32-C3 Super Mini ESP32-S3 Super Mini
CPU RISC-V single-core (tipicamente fino a 160 MHz) Xtensa LX7 dual-core (tipicamente fino a 240 MHz)
Potenza percepita ottima per IoT “snello” migliore su web UI ricche, log, parsing, multitasking
GPIO disponibili in genere meno margine in genere molti più GPIO “utili”
USB molto comoda per programmazione/debug USB OTG (progetti USB “creativi”) + programmazione
Progetti tipici sensori/attuatori, MQTT/HTTP, BLE semplice progetti più “ricchi”, USB, più periferiche insieme
Batteria (su molte board) spesso richiede gestione esterna spesso include pad batteria + ricarica USB (dipende dal modello)

Pinout ESP32 S3 Super mini

Differenze elettroniche

CPU: single-core vs dual-core

Questa è la differenza più importante:

  • ESP32-C3: single-core > perfetto per progetti ripetibili, sensori e automazioni;
  • ESP32-S3: dual-core > più margine quando ad esempio uniamo web server + gestione rete + periferiche + log + UI; quindi con S3 possiamo gestire programmi di dimensioni più grandi e più complessi.

Utilizzo esteso dell’USB

  • Con C3 la USB è “comoda” perché semplifica upload e debug (senza chip USB-serial esterno);
  • con S3 poiché è supportato il mondo USB OTG: potete progettare dispositivi che si presentano al PC come periferiche USB (a seconda delle librerie e della configurazione).

GPIO e periferiche

S3 offre in genere:

  • più GPIO disponibili (più alternative di cablaggio);
  • più margine quando usate più bus/linee insieme (SPI, I2C, UART multiple, ecc.).

Differenze dipendenti dal produttore

LED onboard

Su molte ESP32-C3 Super Mini il LED onboard:

  • è su un pin specifico (spesso GPIO8),
  • può essere in logica invertita (active-LOW: LOW = acceso, HIGH = spento).

Per evitare confusione (e rendere gli esempi robusti tra lotti), io consiglio di dichiarare due costanti:

const int PIN_LED = 8;     // esempio tipico: verificate sul vostro modello
const int LED_ON  = LOW;   // se il LED è active-LOW
const int LED_OFF = HIGH;

void setup() {
  pinMode(PIN_LED, OUTPUT);
  digitalWrite(PIN_LED, LED_OFF);
}

void loop() {
  digitalWrite(PIN_LED, LED_ON);
  delay(300);
  digitalWrite(PIN_LED, LED_OFF);
  delay(300);
}

Se sulla vostra scheda il LED non è invertito, basta scambiare LED_ON/LED_OFF e il resto del codice rimane identico.

S3: LED RGB

Molte schede ESP32-S3 Super Mini (in generale vale per tutte quelle che ho usato ed acquistate su diversi store) includono un LED RGB (tipo WS2812) molto utile per “stati” e debug (Wi-Fi ok, errore, modalità AP, ecc.).
Attenzione: pin e presenza dipendono dalla board. Prima di copiare uno sketch per la gestione del led RGB, verificate sullo schema/pinout del vostro modello.

Batteria e ricarica

Modello ESP32-S3 Super Mini (nel mio caso acquistato su Amazon)

Su questa scheda, nello schema sono indicati i pin/pad a cui saldare la batteria. In altre parole: su questa versione è previsto il collegamento diretto di una Li-Po 1S (3,7 V nominali) tramite piazzole dedicate.
Nella maggior parte delle Super Mini S3 che supportano batteria trovate (di solito sul retro) due pad del tipo:

B+ > positivo batteria
B- > negativo batteria (GND)

In molte varianti, come quella acquistata da me, insieme ai pad batteria, è presente anche un circuito di ricarica via USB-C e un LED di stato legato alla carica (gestito dal circuito di power/charge, non via GPIO). Lo schema del venditore è sempre il riferimento migliore per capire cosa è effettivamente presente sulla tua board.

Avvertenze pratiche molto importanti

  • Usate solo batterie 1S (Li-Po/Li-Ion 3,7 V nominali; 4,2 V a fine carica).
    Controllate la polarità prima di saldare: inversione o corto su una Li-Po può danneggiare scheda e batteria;
  • consiglio di non saldare direttamente la batteria al PCB, potete saldare ai pad un cavetto con connettore (es. JST) così la batteria diventa removibile e riducete stress meccanici sulle piazzole.

Buon Making a tutti 🙂

Organizzatore modulare per cavetti Dupont anche su barra DIN


Chi lavora con breadboard, Arduino/ESP32 e sensori lo sa: i cavetti dupont sono comodissimi finché non diventano un groviglio. Li appoggi “un attimo” sul banco, si intrecciano, spariscono sotto i fogli, si piegano, si rovinano, e quando serve davvero perdi minuti solo per trovare la lunghezza giusta.

Nelle ultime settimane, come immagino abbiate notato, sto elencando una serie di micro-soluzioni stampabili in 3D che migliorano l’ordine, riducono gli intoppi e rendono più fluida la didattica laboratoriale soprattutto quando ci sono studenti, gruppi e postazioni da ripristinare a fine lezione.

In rete si trovano diversi organizer molto efficaci, già in passato ne avevo realizzato un modulare che permette di gestire cavetti di lunghezze diverse con scanalature dedicate e si stampa senza supporti.

La variante che vi propongo riduce la quantità di viti necessarie per l’asseblaggio, i pettini vanno inseriti ad incastro su binari predisposti.

Come per la versione precedente l’organizzatore non è un pezzo unico è composto da moduli replicabili, così posso adattare la capacità in base alla postazione, al corso o al tipo di attività.
Poiché utilizzo un apposita workstation costituite da una serie di barre DIN (barre omega) su cui predispongo l’elettronica necessaria per impostare le esercitazioni scolastiche, ho pensato di aggiungere alla postazione l’organizzatore di cavetti che viene vincolato con un gancio che si avvita all’organizzatore.

Ogni anno amplio e aggiorno la mia workstation di lavoro e, in parallelo, sto progettando una versione completa anche per gli studenti. L’idea è organizzare su apposite barre DIN tutti i componenti necessari per svolgere le esercitazioni di sistemi elettronici.

L’utilizzo di una struttura di prototipazione personalizzabile e modulare è una soluzione che adotto da tempo: è nata in modo sistematico con la gestione delle esercitazioni di automazione con PLC e si è poi estesa, naturalmente, alle attività con microcontrollori.

Vi lascio il link diretto per prelevare i file per stampare l’organizzatore modulare per cavetti Dupont.

Buon making a tutti 🙂