Componenti · 12 min di lettura

Sensore effetto Hall Arduino: A3144 e 49E per magneti e giri

Sensore Hall con Arduino: A3144 digitale e KY-024 / 49E analogico, pull-up, polo e intensità del campo, misura dei giri, sensore porta, Hall dell'ESP32 e reed.

Un sensore a effetto Hall è un piccolo chip a semiconduttore che rileva presenza, polarità e forza di un magnete senza parti in movimento. Nei progetti con Arduino serve a contare i giri di un motore, misurare la velocità di una bici, capire se una porta è aperta o chiusa o leggere la posizione di un joystick. La cover a libro che spegne lo schermo del telefono, il segnale di velocità di una ventola del PC e i sensori di velocità delle ruote delle auto funzionano tutti con l'effetto Hall. Nei kit trovi di solito due tipi: l'A3144 digitale, che dà un segnale acceso/spento, e il 49E analogico (modulo KY-024), che restituisce l'intensità del campo come tensione.

In questa guida spiegheremo con parole semplici la fisica dell'effetto Hall, poi la differenza tra sensori digitali e analogici, come si collegano e perché serve una resistenza di pull-up. Poi rileveremo un magnete con l'A3144, misureremo con il 49E quale polo si avvicina e quanti gauss vale il campo e conteremo i giri di un motore con un interrupt. Troverai anche a cosa serve il sensore Hall integrato dell'ESP32 e perché le versioni nuove l'hanno eliminato, codice MicroPython per il Raspberry Pi Pico e un confronto tra sensore Hall e reed switch.

Piccolo magnete per attivare un sensore a effetto Hall
Un piccolo magnete al neodimio attiva un sensore Hall da pochi centimetri. La faccia piatta del magnete deve essere rivolta verso il lato stampato del sensore.

Che cos'è l'effetto Hall e come funziona un sensore Hall?

Nel 1879 Edwin Hall scoprì che, applicando un campo magnetico perpendicolare a un conduttore sottile percorso da corrente, tra i suoi due bordi compare una piccola tensione. Il motivo è che le cariche in movimento vengono spinte di lato dal campo magnetico (forza di Lorentz): gli elettroni si accumulano su un bordo della lamina, sull'altro mancano e la differenza si misura come tensione di Hall. Questa tensione è proporzionale all'intensità del campo e cambia segno quando il campo si inverte. Nei semiconduttori l'effetto è molto più marcato che nei metalli, ma resta comunque tra i microvolt e i millivolt. Per questo i chip dei sensori Hall contengono, accanto alla lamina di Hall, un regolatore, un amplificatore e, nei modelli digitali, un trigger di Schmitt e un transistor di uscita.

L'intensità del campo magnetico si misura in gauss (G) o in millitesla (mT); 1 mT = 10 G. Il campo magnetico terrestre vale circa 0,25–0,65 G e quindi non influenza i sensori Hall. Sulla superficie di un piccolo magnete al neodimio ci sono alcune migliaia di gauss, ma il valore cala molto in fretta con la distanza: raddoppiando la distanza il campo scende all'incirca a un ottavo. Per questo la distanza di rilevamento, a seconda della soglia del sensore e delle dimensioni del magnete, va di solito da pochi millimetri a qualche centimetro.

Tipi di sensore Hall: A3144, KY-024 / 49E e altri

In base all'uscita, i sensori Hall si dividono in tre gruppi. Nei tipi interruttore unipolare, come l'A3144, l'uscita va LOW solo quando un polo (il sud nell'A3144) si avvicina abbastanza e torna HIGH quando il magnete si allontana. Nei tipi a ritenuta (latch), come l'US1881, il polo sud porta l'uscita in uno stato e il nord nell'altro, e l'ultimo stato resta anche quando il magnete se ne va; sono ideali per motori con magneti N–S alternati tutto intorno. Nei tipi lineari, come il 49E, l'uscita non è un interruttore ma una tensione analogica proporzionale al campo: senza magnete vale metà dell'alimentazione, sale con un polo e scende con l'altro.

CaratteristicaA3144 (digitale)49E / SS49E (analogico)US1881 (latch)
Alimentazione4,5–24 V2,7–6,5 V3,5–24 V
UscitaCollettore aperto, LOW col magneteAnalogica, VCC/2 senza campoDrain aperto, LOW con S, HIGH con N
Polo rilevatoSolo sud (S)Entrambi, con segnoS attiva, N disattiva
Soglia / sensibilitàSoglia di attivazione di circa 70–350 GTipica 1,4 mV/G a 5 VTipica ±95 G
Serve un pull-up?Sì (10 kΩ o INPUT_PULLUP)NoSì
Nome del moduloKY-003KY-024 (con DO tramite LM393), KY-035Raro come modulo
Piedini (lato stampato verso di te)VCC, GND, OUTVCC, GND, OUTVDD, GND, OUT

Collegamento del sensore Hall ad Arduino e resistenza di pull-up

L'uscita dell'A3144 è un transistor a collettore aperto: con il magnete collega l'uscita a GND, senza magnete non la collega a niente e la lascia fluttuante. Un pin fluttuante legge HIGH e LOW a caso per colpa del rumore. Per questo l'uscita va tirata verso l'alimentazione con una resistenza: è il pull-up. Su Arduino la via più semplice è attivare la resistenza interna da 20–50 kΩ con pinMode(pin, INPUT_PULLUP). Se il cavo è lungo, l'ambiente rumoroso o stai contando un albero che gira veloce, una resistenza esterna da 10 kΩ tra uscita e alimentazione dà fronti più puliti. Il collettore aperto ha un vantaggio pratico: se alimenti il sensore a 5 V e porti il pull-up a 3,3 V, anche le schede a 3,3 V come ESP32 e Pico possono usarlo in sicurezza.

CollegamentoArduino UnoESP32Raspberry Pi Pico
A3144 VCC5VVIN (5 V)VBUS (5 V)
A3144 OUTD2 + INPUT_PULLUP (o 10 kΩ → 5V)GPIO 27 + INPUT_PULLUP (o 10 kΩ → 3V3)GP15 + PULL_UP (o 10 kΩ → 3V3)
49E VCC5V3V33V3
49E OUTA0GPIO 34GP26 (ADC0)
GND (entrambi)GNDGNDGND
L'intervallo ufficiale di alimentazione dell'A3144 è 4,5–24 V; alimentarlo a 3,3 V spesso sembra funzionare, ma non è affidabile. Su ESP32 e Pico alimenta il sensore a 5 V e collega il pull-up dell'uscita a 3,3 V. Attenzione ai moduli già pronti come il KY-003: hanno una resistenza e un LED che tirano l'uscita verso VCC. Se alimenti il modulo a 5 V, anche la sua uscita sale verso i 5 V e può danneggiare il pin di una scheda a 3,3 V; in questo caso metti un partitore di tensione sull'uscita o usa il sensore nudo.

Rilevare un magnete con l'A3144

  1. Con il lato stampato dell'A3144 verso di te, i piedini da sinistra a destra sono VCC, GND e OUT. Collega VCC a 5V, GND a GND e OUT a D2.
  2. Carica il codice qui sotto e apri il monitor seriale a 9600 baud.
  3. Avvicina una faccia del magnete al lato stampato del sensore. Se il LED integrato della scheda non si accende, gira il magnete: l'A3144 risponde solo al polo sud.
  4. Annota le distanze a cui il LED si accende e si spegne; la differenza tra le due è l'isteresi interna del sensore.
C++ (Arduino IDE)
1const byte HALL_PIN = 2;              // A3144 OUT
2const byte LED_PIN = 13;              // dahili LED / onboard LED
3
4bool lastMagnet = false;
5
6void setup() {
7  pinMode(HALL_PIN, INPUT_PULLUP);    // açık kolektör çıkış için pull-up / pull-up for the open-collector output
8  pinMode(LED_PIN, OUTPUT);
9  Serial.begin(9600);
10}
11
12void loop() {
13  bool magnet = digitalRead(HALL_PIN) == LOW;   // mıknatıs varken LOW / LOW when a magnet is present
14  digitalWrite(LED_PIN, magnet ? HIGH : LOW);
15
16  if (magnet != lastMagnet) {                   // yalnız durum değişince yaz / print only on change
17    Serial.println(magnet ? F("Miknatis var / magnet detected") : F("Miknatis yok / no magnet"));
18    lastMagnet = magnet;
19  }
20}

A differenza di un reed o di un pulsante, l'A3144 non ha bisogno di antirimbalzo. Il trigger di Schmitt interno fa sì che la soglia di attivazione (BOP) sia almeno 20 G sopra quella di rilascio (BRP); anche se il magnete tremola al limite, l'uscita non rimbalza avanti e indietro. Non avendo contatti mobili, i fronti di uscita sono puliti e può commutare migliaia di volte al secondo. Ricorda che la logica è invertita: con INPUT_PULLUP leggi LOW quando c'è il magnete e HIGH quando non c'è; è la stessa logica di pull-up del collegamento di un pulsante.

Misurare polo e intensità del campo con KY-024 / 49E

Il 49E è un sensore lineare: alimentato a 5 V, senza magnete la sua uscita è a circa 2,5 V e varia tipicamente di 1,4 mV per gauss. Quando il polo sud si avvicina al lato stampato la tensione sale, con il polo nord scende. Così puoi misurare non solo se c'è un magnete, ma anche quale polo si avvicina e quanto è forte il campo: B (G) = (Vuscita − Vzero) / 0,0014. Nel modulo KY-024 il pin AO è direttamente l'uscita del 49E; il pin DO è l'uscita digitale del comparatore LM393, che cambia quando il campo supera la soglia impostata con il trimmer. Il codice qui sotto misura il punto zero all'avvio, poi scrive il campo in gauss e millitesla e indica il polo.

C++ (Arduino IDE)
1const byte HALL_PIN = A0;               // 49E OUT ya da KY-024 AO / 49E OUT or KY-024 AO
2const float VCC = 5.0;
3const float SENSITIVITY = 0.0014;       // 1,4 mV/G (5 V'ta tipik) / 1.4 mV/G (typical at 5 V)
4const float DEAD_BAND = 20.0;           // bu değerin altını yok say (G) / ignore below this (G)
5
6float zeroVolt = 2.5;
7
8float readVolt() {
9  long sum = 0;
10  for (byte i = 0; i < 32; i++) sum += analogRead(HALL_PIN);   // 32 ölçüm ortalaması / average of 32 readings
11  return sum / 32.0 * VCC / 1023.0;
12}
13
14void setup() {
15  Serial.begin(9600);
16  delay(200);
17  zeroVolt = readVolt();                // mıknatıs yokken sıfır noktası / zero point with no magnet nearby
18  Serial.print(F("Sifir / zero: "));
19  Serial.print(zeroVolt, 3);
20  Serial.println(F(" V"));
21}
22
23void loop() {
24  float gauss = (readVolt() - zeroVolt) / SENSITIVITY;
25  Serial.print(gauss, 0);
26  Serial.print(F(" G  ("));
27  Serial.print(gauss / 10.0, 1);        // 10 G = 1 mT
28  Serial.print(F(" mT)  "));
29  if (gauss > DEAD_BAND)       Serial.println(F("Guney kutbu / south pole"));
30  else if (gauss < -DEAD_BAND) Serial.println(F("Kuzey kutbu / north pole"));
31  else                         Serial.println(F("Alan yok / no field"));
32  delay(250);
33}

L'ADC a 10 bit dell'Uno divide 5 V in 1024 passi, quindi ogni passo vale circa 4,9 mV; con il 49E significa una risoluzione di circa 3,5 G. Poiché il modo di indicare i poli può cambiare da un produttore all'altro, controlla con una bussola la prima volta: la punta dell'ago che indica il nord si gira verso il polo sud del magnete. Il sensore va in saturazione intorno a ±1000 G; se lo tocchi quasi con un magnete molto forte, il valore smette di salire. Il punto zero può spostarsi di qualche millivolt con la temperatura, quindi per misure precise ripeti l'azzeramento subito prima di misurare.

Misurare giri e velocità con un sensore Hall

Per misurare i giri di un motore, di una ventola o di una ruota, incolli un piccolo magnete sull'albero o sul cerchio e fissi l'A3144 dove il magnete gli passa davanti una volta per giro. A ogni passaggio l'uscita va LOW una volta. Cercare di catturare gli impulsi con digitalRead() dentro loop() fa perdere impulsi ad alta velocità; il metodo giusto è un interrupt. Il codice qui sotto misura il tempo tra due impulsi al microsecondo e calcola la velocità con giri/min = 60.000.000 / (periodo_µs × numero_di_magneti). Se per 2 secondi non arriva alcun impulso, l'albero è considerato fermo. Spieghiamo come funzionano gli interrupt nella guida agli interrupt di Arduino.

C++ (Arduino IDE)
1const byte HALL_PIN = 2;                  // A3144 OUT, Uno'da kesme pini (INT0) / interrupt pin on the Uno (INT0)
2const byte MAGNETS = 1;                   // mildeki mıknatıs sayısı / magnets on the shaft
3const unsigned long MIN_GAP_US = 2000;    // 2 ms'den sık darbeler gürültüdür / pulses closer than 2 ms are noise
4const unsigned long STOP_US = 2000000;    // 2 sn darbe yoksa durdu / no pulse for 2 s means stopped
5
6volatile unsigned long lastPulse = 0;
7volatile unsigned long period = 0;        // iki darbe arası süre (µs) / time between pulses (µs)
8
9void onPulse() {
10  unsigned long now = micros();
11  unsigned long gap = now - lastPulse;
12  if (gap > MIN_GAP_US) {
13    period = gap;
14    lastPulse = now;
15  }
16}
17
18void setup() {
19  pinMode(HALL_PIN, INPUT_PULLUP);
20  attachInterrupt(digitalPinToInterrupt(HALL_PIN), onPulse, FALLING);   // mıknatıs gelince LOW'a iner / falls LOW when the magnet arrives
21  Serial.begin(9600);
22}
23
24void loop() {
25  noInterrupts();                         // iki değişkeni birlikte oku / read both variables together
26  unsigned long p = period;
27  unsigned long last = lastPulse;
28  interrupts();
29
30  float rpm = 0;
31  if (p > 0 && micros() - last < STOP_US) {
32    rpm = 60000000.0 / ((float)p * MAGNETS);
33  }
34  Serial.print(F("RPM: "));
35  Serial.println(rpm, 0);
36  delay(500);
37}

Il codice usa un tempo di blocco di 2 ms, quindi con un solo magnete puoi misurare fino a 30.000 giri/min, più che sufficienti per la maggior parte dei motori hobbistici. Con due o quattro magneti sull'albero la misura si aggiorna più spesso alle basse velocità; basta cambiare MAGNETS. Distribuisci i magneti in modo bilanciato: un peso da un lato solo fa vibrare un albero veloce. Il filo giallo di una ventola del PC è in realtà un'uscita a collettore aperto di un sensore Hall interno e dà due impulsi per giro; con MAGNETS = 2 lo stesso codice legge i giri della ventola. Il calcolo della circonferenza e dei km/h per un tachimetro da bici è nella guida al reed switch; la formula è la stessa con un sensore Hall.

Sensore per porte e coperchi con un sensore Hall

Per un sensore porta, metti il magnete sull'anta mobile e l'A3144 sul telaio, in modo che a porta chiusa il polo sud del magnete sia rivolto verso il lato stampato del sensore. A porta chiusa l'uscita è LOW, quando si apre va HIGH. Anche se il cavo si rompe, il pull-up porta il pin a HIGH e il sistema lo legge come «porta aperta», quindi il guasto resta dal lato sicuro. Qui il sensore Hall ha due vantaggi: senza contatti mobili non si usura su porte che vibrano o su coperchi che si aprono e chiudono molte volte al secondo, e rileva il magnete anche attraverso la parete di una scatola stagna. Lo svantaggio è che consuma sempre: l'A3144 assorbe circa 4–5 mA, che da soli esaurirebbero una batteria da 2000 mAh in circa 18 giorni. Per un sensore porta che deve funzionare a batteria per mesi è più adatto un reed, che non consuma nulla.

Il sensore Hall integrato dell'ESP32

Il chip ESP32 originale contiene un piccolo sensore Hall che, nelle versioni 2.x del core Arduino ESP32, si legge con la funzione hallRead(). Ma questo sensore è molto rumoroso e mostra una variazione chiara solo quando un magnete potente tocca quasi la schermatura metallica del modulo; durante la misura usa inoltre GPIO 36 e GPIO 39, quindi se a questi pin è collegato altro i risultati si rovinano. I chip più recenti come ESP32-S2, S3 e C3 non lo hanno affatto e, poiché Espressif ha tolto il supporto con ESP-IDF 5, hallRead() non esiste più nel core Arduino ESP32 3.x. Il codice qui sotto compila con entrambe le versioni: con la 2.x scrive il valore medio, con la 3.x mostra invece un avviso. Per un progetto serio è sempre meglio collegare all'ESP32 un A3144 o un 49E esterno; le caratteristiche generali della scheda sono in cos'è l'ESP32.

C++ (Arduino IDE)
1// ESP32 dahili Hall sensörü (yalnız orijinal ESP32) / built-in Hall sensor (original ESP32 only)
2void setup() {
3  Serial.begin(115200);
4}
5
6void loop() {
7#if ESP_ARDUINO_VERSION_MAJOR < 3
8  long sum = 0;
9  for (int i = 0; i < 100; i++) {
10    sum += hallRead();              // GPIO 36 ve 39'u kullanır / uses GPIO 36 and 39
11  }
12  Serial.println(sum / 100);        // gürültülü, ortalama al / noisy, so average it
13#else
14  Serial.println("hallRead() 3.x cekirdekte yok / not available in core 3.x");
15#endif
16  delay(200);
17}

Misurare i giri con il Raspberry Pi Pico (MicroPython)

Sul Pico alimenta l'A3144 a 5 V da VBUS, collega l'uscita a GP15 e attiva il pull-up interno del pin; dato che questa resistenza va a 3,3 V, il pin non vede mai 5 V. Il codice qui sotto conta gli impulsi con un interrupt e ogni secondo legge e azzera il contatore. Disattivare per un attimo gli interrupt durante la lettura evita che un impulso si infili tra lettura e azzeramento e vada perso. Con un magnete la risoluzione di questo metodo è di 60 giri/min; per un risultato più fine puoi misurare il tempo tra due impulsi con time.ticks_us(), come nell'esempio per Arduino.

MicroPython
1from machine import Pin, disable_irq, enable_irq
2import time
3
4hall = Pin(15, Pin.IN, Pin.PULL_UP)    # A3144 OUT (sensör VBUS'tan 5 V ile) / A3144 OUT (sensor on 5 V from VBUS)
5MAGNETS = 1                            # mildeki mıknatıs sayısı / magnets on the shaft
6count = 0
7last_us = 0
8
9def on_pulse(pin):
10    global count, last_us
11    now = time.ticks_us()
12    if time.ticks_diff(now, last_us) > 2000:    # 2 ms gürültü filtresi / 2 ms noise filter
13        count += 1
14        last_us = now
15
16hall.irq(trigger=Pin.IRQ_FALLING, handler=on_pulse)
17
18while True:
19    time.sleep(1)
20    state = disable_irq()              # sayacı güvenle oku / read the counter safely
21    pulses = count
22    count = 0
23    enable_irq(state)
24    print("RPM:", pulses * 60 // MAGNETS)

Sensore Hall o reed switch?

Entrambi rilevano un magnete, ma in modi del tutto diversi. Il reed è un interruttore meccanico in cui due lamine metalliche dentro un'ampolla di vetro si toccano quando si avvicina un magnete, e non consuma nulla. Il sensore Hall è un chip elettronico senza parti mobili che ha bisogno di alimentazione. La regola veloce: reed per un sensore che scatta di rado e deve funzionare mesi a batteria; sensore Hall per un albero che gira veloce, un ambiente con vibrazioni o qualsiasi lavoro che richieda il polo o l'intensità del campo.

Reed switch in vetro
Reed switch: due lamine metalliche dentro un'ampolla di vetro. Non consuma, ma essendo meccanico ha velocità e durata limitate.
CaratteristicaSensore Hall (A3144 / 49E)Reed switch
FunzionamentoSemiconduttore, nessuna parte mobileContatto meccanico
AlimentazioneNecessaria (circa 4–6 mA)Non necessaria
Polo e intensitàA3144 solo sud; 49E dà polo e intensitàIl polo non conta, solo presente / assente
VelocitàFino a decine di kHz, fronti pulitiCentinaia di Hz, rimbalzi del contatto
Durata e robustezzaNon si usura, regge le vibrazioniMilioni di commutazioni, il vetro può rompersi
Uso miglioreGiri, velocità, posizione, rilevamento del poloSensori porta e finestra a batteria

Idee di progetti con un sensore Hall

  • Tachimetro per bici: Un magnete su un raggio e un A3144 sulla forcella; mostra velocità, distanza e media su un display OLED.
  • Contagiri per motori e ventole: Misura i giri di un motore DC o di una ventola del PC e osserva la velocità reale mentre la regoli in PWM.
  • Anemometro: Monta un magnete sull'albero di un rotore a coppette, calcola la velocità del vento dai giri e registrala con un ESP32.
  • Flussimetro per acqua: Anche i sensori di flusso come lo YF-S201 hanno un sensore Hall all'interno; contando gli impulsi misuri i litri, dettagli nella guida al sensore di flusso dell'acqua.
  • Scatola segreta o serratura per cassetti: Un 49E nascosto nel coperchio apre la serratura solo quando il magnete viene tenuto nel punto esatto.
  • Allarme per porte o coperchi: Un allarme con A3144 che fa suonare un buzzer o manda una notifica al telefono tramite ESP32 quando si apre un coperchio.

Errori comuni e come risolverli

SintomoCausa probabileSoluzione
Il pin legge HIGH e LOW a casoManca il pull-up sull'uscita dell'A3144Usa INPUT_PULLUP o metti 10 kΩ tra uscita e VCC
Avvicinando il magnete non succede nullaPolo sbagliato: l'A3144 risponde solo al polo sudGira il magnete e tienilo di fronte al lato stampato
Il sensore è instabile su ESP32 o PicoL'A3144 è alimentato a 3,3 VAlimenta il sensore a 5 V e collega il pull-up a 3,3 V
Giri bassi o irregolari ad alta velocitàGli impulsi vengono letti in loop() e persiUsa un interrupt con attachInterrupt()
Il 49E segna un valore senza magneteIl punto zero non è a 2,5 V o si è spostatoMisura lo zero all'avvio e sottrailo
hallRead() non compila sull'ESP32Stai usando il core Arduino ESP32 3.xUsa un sensore Hall esterno o passa al core 2.x
Se non sai quale faccia del magnete è il polo sud, esegui prima il codice del 49E e avvicina al sensore prima una faccia e poi l'altra: quella che dà gauss positivi è il polo sud. Segnala con un pennarello; ti farà risparmiare tempo in ogni progetto con l'A3144. Quando incolli il magnete, allinea non solo il polo ma anche il suo centro con il centro del lato stampato del sensore; uno spostamento di pochi millimetri può dimezzare la distanza di attivazione.

Il sensore Hall è il modo più flessibile per rilevare un magnete senza contatto, senza rumore e senza usura: l'A3144 ti dà un segnale acceso/spento veloce e pulito, il 49E polo e intensità del campo, e con gli interrupt ottieni una misura dei giri affidabile. Se non dimentichi la resistenza di pull-up, il polo giusto e il dettaglio dell'alimentazione sulle schede a 3,3 V, funziona al primo colpo. Nell'app BlueGrays trovi i progetti Lettura del reed e Sensore porta con reed, insieme a esempi con pulsanti e interrupt, l'allarme di movimento con ESP32 e progetti di antirimbalzo con il Pico, con schemi e codice passo dopo passo.

Domande frequenti

Come funziona un sensore a effetto Hall?

Dentro il sensore Hall c'è una sottile lamina di semiconduttore percorsa da corrente. Quando un campo magnetico la colpisce perpendicolarmente, le cariche vengono spinte verso un bordo e tra i due bordi compare una piccola tensione proporzionale al campo. Un amplificatore interno la aumenta; nei modelli digitali un circuito a soglia la trasforma in un'uscita acceso/spento.

Perché l'A3144 ha bisogno di una resistenza di pull-up?

L'uscita dell'A3144 è a collettore aperto: con il magnete la collega a GND, senza non la collega a niente. Un pin fluttuante legge valori casuali per colpa del rumore, quindi l'uscita va tirata verso l'alimentazione con una resistenza. Su Arduino basta INPUT_PULLUP; con cavi lunghi e alte velocità è meglio una resistenza esterna da 10 kΩ.

A quale polo risponde l'A3144?

L'A3144 è un interruttore unipolare e porta l'uscita a LOW solo quando il polo sud si avvicina abbastanza al suo lato stampato. Con il polo nord non succede niente. Se non conosci il polo del magnete, prova entrambe le facce o controllalo con un sensore lineare come il 49E.

Che differenza c'è tra KY-024 e KY-003?

Il KY-003 è un modulo con il sensore digitale A3144 e dice solo se c'è un magnete o no. Il KY-024 monta un sensore lineare 49E e un comparatore LM393; il pin AO fornisce l'intensità del campo come valore analogico, il pin DO un segnale digitale in base alla soglia impostata con il trimmer.

Da che distanza un sensore Hall rileva un magnete?

Dipende dalla forza del magnete e dalla soglia del sensore. Un piccolo magnete al neodimio attiva di solito un A3144 da 1–3 cm; con un magnete in ferrite debole si scende a pochi millimetri. Poiché il campo magnetico cala molto in fretta con la distanza, il modo più efficace per aumentare la portata è usare un magnete più grande o più potente.

Si può usare il sensore Hall integrato dell'ESP32?

L'ESP32 originale ha un sensore Hall integrato che nel core Arduino ESP32 2.x si legge con hallRead(). È però molto rumoroso, nota solo un magnete forte e molto vicino e usa GPIO 36 e 39. Non c'è su ESP32-S2, S3 e C3, e hallRead() è stato rimosso dal core Arduino ESP32 3.x; per progetti seri usa un sensore esterno.

Vedi tutti i progetti
Accendere un LED con un pulsante (Push)
#9Principiante

Accendere un LED con un pulsante (Push)

Come un campanello: la luce resta accesa finché premi e si spegne quando lasci. L'Arduino ascolta il pulsante di continuo; mentre è premuto accende il LED, e appena togli il dito lo spegne. Con questo

4.8(113)
229
Controllo LED ESP32 con pulsante (Push)
#104Principiante

Controllo LED ESP32 con pulsante (Push)

Il LED si accende quando il pulsante viene premuto e si spegne quando viene rilasciato. Mostra come vengono utilizzati il pin di ingresso digitale dell'ESP32 e la resistenza di pull-up interna. Grazie alla modalità INPUT_PULLUP, non è necessaria alcuna resistenza esterna.

4.6(36)
55
Lettura di un sensore reed
#37Principiante

Lettura di un sensore reed

Ti sei mai chiesto come funziona l'interruttore magnetico degli allarmi per porte e finestre? Quando una calamita si avvicina al modulo relè reed, il minuscolo interruttore al suo interno si chiude; l

4.4(21)
27
Sensore porta con contatto reed
#38Principiante
Premium

Sensore porta con contatto reed

Capisci se la tua porta è aperta o chiusa guardando una luce. Metti un piccolo magnete sulla porta e sul telaio un interruttore che sente i magneti; a porta chiusa stanno vicini e si accende il LED ve

4.7(34)
44
Sistema di Allarme Movimento ESP32 (PIR + Buzzer + LED + Telegram)
#145Avanzato
Premium

Sistema di Allarme Movimento ESP32 (PIR + Buzzer + LED + Telegram)

Un sistema di allarme di sicurezza intelligente che attiva buzzer e LED quando il sensore PIR rileva movimento, inviando contemporaneamente una notifica istantanea al proprietario tramite Telegram. Dispone di un tempo di attesa di 30 secondi per limitare la frequenza degli allarmi ripetuti; questo meccanismo non verifica la validità dei rilevamenti del sensore PIR né elimina le false attivazioni. Adatto a sicurezza domestica, monitoraggio di garage, magazzini o studi. Con l'ESP32-CAM è possibile

0.0(0)
9
Raspberry Pi Pico Pulsante Debounce: IRQ vs Software Polling
#159Intermedio
Premium

Raspberry Pi Pico Pulsante Debounce: IRQ vs Software Polling

Una pressione e il codice conta 3-4? È contact bounce! Confronta 2 metodi di conteggio in Serial: polling RAW (cattura bounce, conta male) vs IRQ + software debounce (preciso). Impara fisica del bounce, software debounce, Pin.irq() interrupt, IRQ_FALLING trigger, ISR handler, sicurezza delle variabili globali ISR.

0.0(0)
12
Rilevatore di movimento con sensore di movimento
#24Principiante
Premium

Rilevatore di movimento con sensore di movimento

Un semplice guardiano che ti avvisa quando qualcuno entra nella stanza. Il sensore di movimento percepisce il calore emesso dal corpo umano, e l'Arduino tiene acceso il LED finché c'è movimento e lo s

4.6(47)
67