
La maggior parte dei tutorial su Arduino salta direttamente al codice. Ma i componenti attorno al microcontrollore sono analogici — la resistenza che tiene in vita un LED, il partitore che trasforma un sensore in una tensione, il transistor che commuta un motore, il regolatore che produce 5 V da un alimentatore da parete. Quando uno di questi è sbagliato, nessuna quantità di codice lo aggiusta.
Velxio simula anche quella metà. Esegue ngspice, il simulatore di circuiti SPICE open source, compilato in WebAssembly, così resistenze, condensatori, diodi, transistor, amplificatori operazionali e regolatori si comportano come le loro controparti reali nel tuo browser. Puoi misurarli con un voltmetro, un amperometro e un oscilloscopio, e cambiare qualsiasi valore mentre il circuito è in funzione.
Questo articolo attraversa sette progetti. I primi cinque non hanno alcun microcontrollore, solo componenti. Gli ultimi due mescolano circuiti analogici con un Arduino e un ESP32. Ogni progetto è nella galleria di esempi, e ogni numero qui sotto è stato letto dal simulatore e verificato con la formula che lo spiega.
Prima di iniziare — i tre strumenti
- I circuiti senza scheda si avviano appena aperti. Fai clic destro su qualsiasi componente per aprire il suo pannello e cambiarne il valore lì — la resistenza di un resistore, la capacità di un condensatore, il livello di luce o la temperatura di un sensore. Il circuito si risolve di nuovo con il nuovo valore.
- Voltmetro e amperometro sono componenti come gli altri — il voltmetro va in parallelo a ciò che vuoi misurare, l’amperometro in serie. Su un circuito DC mostrano un solo numero. Su un circuito AC mostrano il valore RMS, il picco e la media DC, misurati una volta che il circuito si è stabilizzato.
- L’oscilloscopio mostra come una tensione cambia nel tempo. Fai clic destro su un filo e scegli Add to scope; ogni canale si scala da solo per adattarsi al segnale. Con una scheda sulla tela, ferma prima la simulazione — mentre uno sketch è in esecuzione, la tela tiene i clic per i componenti.
Una cosa da sapere — per i circuiti con sorgenti AC, Velxio risolve una breve finestra temporale dal momento in cui l’alimentazione si accende (pochi cicli del segnale) e mostra la traccia dell’oscilloscopio di quella finestra. Ripete la risoluzione mentre cambi le cose, così l’immagine resta aggiornata, ma non è una registrazione continua.
1. Un LED e una resistenza — la legge di Ohm

Il primo circuito che ogni principiante costruisce, e quello più spesso costruito male — un LED collegato direttamente a una batteria si brucia, perché nulla limita la sua corrente. La resistenza in serie fa quel lavoro.
Gli strumenti raccontano tutta la storia:
- Il voltmetro ai capi della resistenza da 470 Ω legge 7,136 V.
- L’amperometro legge 15,18 mA. La legge di Ohm dice la stessa cosa — 7,136 V / 470 Ω = 15,2 mA.
- Il resto dei 9 V cade ai capi del LED — circa 1,84 V, la tensione diretta di un LED rosso.
Questa è la formula per scegliere la resistenza — R = (Vsupply − VLED) / I. Per 15 mA da una batteria da 9 V — (9 − 1,8) / 0,015 = 480 Ω, quindi 470 Ω è il valore standard più vicino.
Provalo — fai clic destro sulla resistenza e cambiala a 1 kΩ. La corrente scende a 7,2 mA e il LED si affievolisce, mentre la sua tensione si muove appena (1,81 V). Un LED mantiene la sua tensione quasi costante e lascia che sia la resistenza a impostare la corrente.
Apri il circuito del LED e della legge di Ohm in Velxio
2. Un alimentatore da 5 V — raddrizzatore, condensatore e regolatore
Il classico alimentatore lineare, quello dentro ogni vecchio alimentatore da parete, in quattro stadi:
- Trasformatore. Trasforma l’AC di rete in una tensione AC più bassa e sicura. Qui è un secondario a presa centrale 12-0-12 V, disegnato come due generatori di segnale in controfase (12 V di picco ciascuno, 50 Hz).
- Raddrizzatore. Due diodi 1N4007, uno per ciascuna metà del secondario. Ognuno conduce sul proprio semiciclo, così l’uscita riceve un impulso positivo ogni 10 ms — raddrizzamento a onda intera.
- Condensatore di livellamento. Il condensatore da 220 µF si carica a ogni picco e alimenta il carico nel frattempo. La tensione che mantiene non è piatta — cala tra un picco e l’altro. Quel calo è il ripple.
- Regolatore. Il 7805 prende quella tensione oscillante e mantiene la sua uscita esattamente a 5 V, purché il suo ingresso resti almeno circa 2 V sopra l’uscita.
L’immagine dell’oscilloscopio all’inizio di questo articolo mostra i 12 V AC dal trasformatore e la tensione raddrizzata ai capi del condensatore. Il condensatore oscilla tra 10,1 V e 11,8 V, circa 1,7 V di ripple con un carico di 50 mA, e il voltmetro sull’uscita legge un 5,000 V stabile.
La stima rapida per il ripple è ΔV ≈ I / (2·f·C) — 0,05 A / (2 × 50 Hz × 220 µF) = 2,3 V. Quella formula presume che il condensatore alimenti il carico per l’intero semiciclo; in realtà i diodi lo ricaricano un po’ prima, quindi i 1,7 V misurati sono più bassi.
Provalo — fai clic destro sul condensatore e cambialo a 47 µF. Il ripple cresce a 6 V, le valli scendono a 5,9 V, sotto ciò di cui ha bisogno il 7805, e la sua uscita cala a 3,9 V a ogni ciclo. Ecco perché gli alimentatori usano condensatori grandi.
Apri l’alimentatore da 5 V in Velxio
3. Una luce notturna con un LDR e due transistor

Una luce notturna automatica, senza microcontrollore e senza codice. Una fotoresistenza (LDR) misura la luce, e due transistor accendono il LED quando fa buio.
Il modulo sensore di luce è un partitore di tensione — l’LDR sopra e una resistenza da 10 kΩ sotto. Alla luce del giorno la resistenza dell’LDR è bassa e l’uscita del modulo (AO) è alta; al buio sale a centinaia di kΩ e AO scende verso 0 V.
- Q1 è l’interruttore del sensore. Quando AO è sopra circa 0,6 V, Q1 conduce e porta la base di Q2 quasi a 0 V.
- Q2 pilota il LED. Mentre Q1 è acceso, Q2 è spento e il LED è buio. Quando la luce cala, Q1 smette di condurre, la resistenza da 10 kΩ porta su la base di Q2, Q2 si accende e il LED si illumina.
Perché due transistor? Perché uno solo farebbe l’opposto — accendere il LED quando è chiaro. Il primo stadio inverte il segnale.
Nella simulazione, a 20 lux (una stanza in penombra) AO si attesta a 0,50 V, Q1 è spento e il LED assorbe 13 mA. A 30 lux AO è 0,67 V, Q1 si accende e il LED si spegne. Fai clic destro sul sensore di luce e cambia Illumination (lux) attraverso quell’intervallo per commutarlo:

Apri la luce notturna in Velxio
4. Un amplificatore a transistor — lo stadio a emettitore comune

Ecco come un piccolo segnale diventa grande — l’amplificatore a emettitore comune, il mattone di ogni amplificatore audio discreto. Una sinusoide da 1 kHz di 0,4 V picco-picco entra attraverso un condensatore di accoppiamento ed esce dal collettore circa quattro volte e mezzo più grande, e capovolta. (L’alimentazione da 9 V è il simbolo dell’alimentatore da banco in alto a sinistra; il generatore di segnale è sotto di esso.)
Due cose lo fanno funzionare.
Polarizzazione. Un transistor amplifica solo quando è parzialmente acceso. Il partitore da 47 kΩ / 10 kΩ porta la base a 1,54 V. L’emettitore si trova una caduta di diodo più in basso, 0,89 V, quindi 0,89 mA scorrono attraverso la resistenza di emettitore da 1 kΩ. La stessa corrente attraverso la resistenza di collettore da 4,7 kΩ provoca una caduta di 4,2 V, lasciando il collettore a 4,83 V, vicino al centro dell’alimentazione, con spazio per oscillare in entrambe le direzioni.
Guadagno. Una variazione alla base appare quasi invariata all’emettitore, quindi cambia la corrente di ΔV / Re. Quella variazione di corrente scorre attraverso Rc e sposta il collettore di ΔV × Rc / Re, nella direzione opposta. Quindi il guadagno è −Rc/Re = −4,7. Il simulatore misura 4,54 — il transistor aggiunge una piccola resistenza interna di emettitore di circa 26 mV / Ie ≈ 29 Ω, e 4700 / 1029 = 4,57.
Sullo schermo, la base (verde) si muove di 0,4 V attorno a 1,5 V e il collettore (rosso) si muove di 1,8 V attorno a 4,8 V, con i suoi picchi dove la base ha le sue valli.
Provalo: fai clic destro sul generatore di segnale e aumenta la sua ampiezza a 1 V. Il collettore dovrebbe oscillare di 9 V, più di quanto l’alimentazione consenta, quindi la parte superiore dell’onda si appiattisce contro i 9 V e quella inferiore contro la saturazione — clipping, il suono di un amplificatore sovraccarico.
Apri l’amplificatore a emettitore comune in Velxio
5. Un termostato con comparatore a amplificatore operazionale

Un termostato che accende una ventola quando fa caldo, usando un solo amplificatore operazionale LM358 e nessun codice.
Il sensore. La resistenza del termistore NTC diminuisce man mano che si scalda (10 kΩ a 25 °C, circa 7,4 kΩ a 32 °C). Il modulo lo mette sotto una resistenza fissa da 10 kΩ, quindi la sua uscita diminuisce con la temperatura — 2,50 V a 25 °C, 2,12 V a 32 °C.
Il set point. Il potenziometro è un secondo partitore. Il suo cursore si trova a 2,336 V, la tensione che il termistore fornisce a 28 °C. Il voltmetro lo mostra.
Il comparatore. Un amplificatore operazionale senza retroazione ha un guadagno così elevato che la sua uscita si porta a uno dei due rail a seconda di quale ingresso è più alto. Il set point va all’ingresso + e il termistore all’ingresso − — sotto i 28 °C la tensione del termistore è più alta e l’uscita è a 0 V; sopra i 28 °C è più bassa e l’uscita salta a circa 3,7 V, accendendo il LED. A 27 °C il LED è spento, a 29 °C è acceso.
Perché 3,7 V e non 5 V? L’LM358 non riesce a portare la sua uscita fino all’alimentazione positiva — si ferma circa 1,3 V prima. Il progetto 6 incontra lo stesso limite.
Un vero termostato aggiunge isteresi, così non si accende e spegne continuamente mentre la temperatura oscilla attorno alla soglia. Il progetto 7 lo fa nel codice.
Provalo: fai clic destro sul termistore e cambia la sua temperatura, oppure fai clic destro sul potenziometro e cambia la sua posizione (da 0 a 1023) per spostare il set point.
Apri il termostato con amplificatore operazionale in Velxio
6. Arduino — trasformare il PWM in una vera tensione analogica

Un Arduino Uno non ha un DAC — analogWrite() non emette una tensione, emette PWM, un’onda quadra a 490 Hz il cui duty cycle determina la media. Un LED o un motore non se ne preoccupano, ma molti circuiti necessitano di una tensione reale e stabile. Un filtro analogico ne crea una.
- Filtro passa-basso RC. 10 kΩ e 10 µF mediano il PWM. La sua costante di tempo, τ = R·C = 0,1 s, è cinquanta volte il periodo del PWM, quindi il ripple a 490 Hz viene quasi completamente rimosso. Il costo è la velocità — dopo una variazione l’uscita impiega circa 5τ = 0,5 s per stabilizzarsi.
- Inseguitore di tensione. Un LM358 con la sua uscita collegata al suo ingresso − copia la tensione del filtro alla sua uscita. Assorbe quasi nessuna corrente dal filtro, quindi qualunque cosa si colleghi dopo non abbassa la tensione.
- Retroazione. A0 rilegge il risultato, e lo sketch stampa ciò che ha richiesto e ciò che ha ottenuto.
PWM 0 expected 0.00 V measured 0.02 V
PWM 64 expected 1.25 V measured 1.26 V
PWM 128 expected 2.51 V measured 2.51 V
PWM 192 expected 3.76 V measured 3.77 V
PWM 255 expected 5.00 V measured 4.03 V
Fino a 192 il DAC è accurato entro 10 mV. A 255 si ferma a 4,03 V — il filtro raggiunge effettivamente 5 V, ma l’LM358, alimentato a 5 V, non riesce a portare la sua uscita così in alto. La soluzione è un amplificatore operazionale rail-to-rail come l’MCP6002, oppure usare solo l’intervallo che l’LM358 riesce a raggiungere.
Apri il DAC PWM con Arduino in Velxio
7. ESP32 — un termometro che accende una ventola

Di nuovo il termostato, questa volta con un microcontrollore che decide, così può fare cose che un comparatore non può — mostrare la temperatura in gradi e aggiungere isteresi.
Leggere la temperatura. L’uscita del modulo NTC va a GPIO34, un pin solo-ingresso sul primo ADC dell’ESP32. Lo sketch media 16 letture, calcola la resistenza del termistore dal partitore (R = 10 kΩ × V / (3,3 V − V)), e la converte in gradi con l’equazione Beta dal datasheet del termistore — 1/T = 1/T₀ + ln(R/R₀)/β, con R₀ = 10 kΩ a T₀ = 25 °C e β = 3950. Il monitor seriale stampa 25,0 °C quando il termistore è impostato a 25 °C, e 35,0 °C a 35 °C.
Commutare il carico. Un pin GPIO può fornire qualche milliampere, non le centinaia che serve una ventola. GPIO25 pilota invece il gate di un MOSFET 2N7000, attraverso una resistenza da 100 Ω, e il MOSFET collega la ventola (qui un LED verde) a massa. A 35 °C il drain si trova a 0,06 V — il MOSFET è completamente acceso.
Isteresi. La ventola si accende a 30 °C e si spegne solo sotto i 28 °C. Senza quel margine di 2 °C, una temperatura che oscilla attorno alla soglia accenderebbe e spegnerebbe la ventola ogni secondo.
Per una ventola reale, usa un MOSFET logic-level dimensionato per la corrente della ventola (il 2N7000 va bene solo per piccoli carichi) e un diodo attraverso la ventola per assorbire il picco di tensione del motore quando si spegne.
Apri il termometro e la ventola con ESP32 in Velxio
Cosa abbiamo corretto mentre li costruivamo
Scrivere questo articolo ha significato misurare ogni circuito, e le misurazioni hanno fatto emergere problemi nel simulatore, tutti corretti prima della pubblicazione:
- Dopo
analogWrite(pin, 0)oanalogWrite(pin, 255)successivi a un valore PWM, il circuito continuava a vedere il vecchio livello PWM. La tabella del progetto 6 lo ha scoperto. - Il voltmetro e l’amperometro mediamente il transitorio di accensione nelle loro letture AC — l’uscita del 7805 leggeva 3,47 V invece di 5 V.
- I canali analogici dell’oscilloscopio avevano un intervallo fisso di ±4 V, quindi un segnale da 5 V o 12 V veniva disegnato fuori dallo schermo. Ora si scalano automaticamente.
- I regolatori di tensione non assorbivano alcuna corrente dal loro ingresso, quindi un alimentatore non mostrava alcun ripple.
Se costruisci un circuito analogico in Velxio e i numeri non corrispondono alla formula, faccelo sapere su GitHub. È così che questi sono stati trovati.