Guida passo per passo β Assolutamente senza stress
βοΈ
Prima di toccare niente
3 cose importanti da leggere
β
Arduino NON deve essere alimentato con USB durante i collegamenti!
Se sbagli a collegare i fili e Arduino Γ¨ acceso, bruci la scheda. Scollega sempre USB prima di aggiungere/togliere fili.
π Cosa ti serve per OGNI STEP:
Arduino Uno (la scheda)
Cavo USB (per caricare il codice)
Computer con Arduino IDE aperto
Un foglio dove scrivere cosa funziona e cosa no
βΉοΈ
Se qualcosa non funziona: non Γ¨ "rotto". Leggi la sezione "Se non vedi nulla" in fondo ad ogni step. Al 99% Γ¨ un filo scollegato o invertito.
1οΈβ£
Collega l'OLED (il display)
Solo 4 fili β il test piΓΉ facile
Di che cosa hai bisogno:
Arduino Uno (senza USB)
1 display OLED I2C 128Γ64
4 cavetti: rosso, nero, blu, giallo (colori non importanti, ma aiutano)
Dove vanno i 4 fili:
OLED pin VCCβArduino 5V
OLED pin GNDβArduino GND (il pin nero)
OLED pin SDAβArduino A4
OLED pin SCLβArduino A5
π‘
Piccolo trucco: etichetta i fili. Scrivi con una penna su un pezzetto di nastro adesivo: "VCC", "GND", ecc. Dopo pochi step non ricordi piΓΉ quali sono.
β Checklist prima di collegare il USB:
Carica questo codice:
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
void setup() {
// Inizializza il display
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
while (true); // Se non trova il display, si blocca qui
}
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 10);
display.println("OLED OK");
display.setCursor(0, 30);
display.println("Inserire PIN");
display.display();
}
void loop() {
// Nulla β il display rimane statico
}
π― Se tutto va bene:
β
Vedrai nel display le parole "OLED OK" e "Inserire PIN" β questo significa che l'OLED funziona e Arduino riesce a parlarci.
Se non vedi nulla:
π§ Procedure di debug
Schermo completamente nero
Prova questo ordine:
Scollega USB β aspetta 3 secondi
Controlla i 4 fili: sono davvero nei buchi giusti?
Metti il dito sul connettore dell'OLED e spingi forte in tutte e 4 le direzioni
Riconnetti USB e carica il codice di nuovo
Se ancora niente β il filo A5 (SCL) potrebbe essere invertito con A4 (SDA)
Nel display vedi linee strane, non il testo
L'indirizzo I2C non Γ¨ 0x3C. Carica questo codice per trovare l'indirizzo:
Apri Serial Monitor (Strumenti β Serial Monitor) β quando premi un tasto, vedrai il numero/lettera stampata. Ad esempio: "Hai premuto: 1", "Hai premuto: *", ecc.
Se i tasti danno numeri sbagliati:
π§ Procedure di debug
Premo "1" ma vedo "4" (o altri numeri sballati)
Hai probabilmente invertito i fili R (righe) o C (colonne).
Controlla in questo ordine:
I 4 fili delle righe (R1, R2, R3, R4) β devono essere D9, D8, D7, D6 in ordine
I 4 fili delle colonne (C1, C2, C3, C4) β devono essere D5, D4, D3, D2 in ordine
Piccolo trucco: se i numeri sono in riga (tipo 1,2,3 danno A,B,C) allora hai invertito le righe. Se sono in colonna, hai invertito le colonne.
Niente compare nel Serial Monitor
Prova questi step:
Serial Monitor Γ¨ aperto e baud rate Γ¨ 9600?
Scollega USB, aspetta 2 secondi, riconnetti
Premi un tasto e guarda il Serial Monitor
Errore "Keypad not found"
Hai dimenticato la libreria. Vai su Sketch β Includi libreria β Gestisci librerie e cerca "Keypad" di Mark Stanley. Installa.
3οΈβ£
Collega il Servo (la serratura)
3 fili, ma questo Γ¨ critico β il servo ha bisogno di alimentazione separate
β οΈ ATTENZIONE MASSIMA: Il servo ha 3 fili. Se li sbagli, danneggi Arduino. I colori sono sempre gli stessi: Rosso (5V), Marrone/Nero (GND), Arancione (Segnale)
Di che cosa hai bisogno:
Arduino Uno (senza USB)
1 Servo SG90 (la serratura)
3 cavetti (rosso, nero, arancione di solito)
Alimentatore esterno 5V (batteria o alimentatore) β opzionale, ma consigliato
π¨
Il servo SG90 PICCOLO puΓ² funzionare da Arduino 5V, ma Γ¨ rischioso:
β’ Se funziona stabile β va bene cosΓ¬
β’ Se Arduino si resetta o il servo trema β passa ad alimentatore esterno
La soluzione SICURA: usa un alimentatore esterno 5V separato, con il GND del servo collegato sia all'alimentatore che al GND di Arduino (GND in comune).
Dove vanno i 3 fili (prima prova da Arduino):
Servo filo ROSSO (VCC)βArduino 5V (primo tentativo)
Servo filo NERO/MARRONE (GND)βArduino GND
Servo filo ARANCIONE (SEGNALE)βArduino pin D10
π‘
Se il servo trema o Arduino si resetta: Scollega il filo rosso da 5V di Arduino e collegalo a un alimentatore esterno 5V separato. Mantieni il GND del servo collegato all'Arduino GND (GND in comune per il segnale).
Carica questo codice:
#include <Servo.h>
Servo servoPorta;
const int pinServo = 10;
void setup() {
servoPorta.attach(pinServo);
}
void loop() {
servoPorta.write(0); // Porta chiusa
delay(1500);
servoPorta.write(90); // Porta aperta
delay(1500);
}
π― Se tutto va bene:
β
Il servo si muove regolarmente: da una posizione a un'altra ogni 1.5 secondi. Lo sentirai vibrare un pochino, Γ¨ normale.
Se il servo trema o non si muove:
π§ Procedure di debug
Servo trema forte o Arduino si resetta
Soluzione: passa ad alimentatore esterno 5V
Scollega il filo rosso del servo da Arduino 5V e collegalo a un alimentatore esterno separato. Mantieni il GND del servo collegato sia all'alimentatore che all'Arduino GND.
Se non hai alimentatore, prova prima da Arduino. Se funziona stabile, va bene cosΓ¬. Se trema β allora ti servirΓ un alimentatore.
Servo non si muove per niente
Prova questi step:
Il filo arancione Γ¨ davvero su D10?
Il filo rosso Γ¨ collegato a 5V (Arduino o alimentatore esterno)?
Il filo nero Γ¨ collegato al GND?
Scollega USB, aspetta 3 secondi, riconnetti
4οΈβ£
Collega l'LDR (sensore di luce)
Un partitore di tensione β un po' strano, ma semplice
Di che cosa hai bisogno:
Arduino Uno (senza USB)
1 LDR (photoresistor) β una piccola resistenza che cambia valore con la luce
L'LDR Γ¨ una resistenza che cambia valore quando c'Γ¨ luce. Non ha polaritΓ (puoi metterla in entrambi i versi). Creiamo un "partitore" per misurare il valore.
const int pinLDR = A0;
const int ledPrincipale = A1;
int sogliaBuio = 500; // Regola questo dopo il primo test
void setup() {
pinMode(ledPrincipale, OUTPUT);
Serial.begin(9600);
}
void loop() {
int valore = analogRead(pinLDR);
Serial.print("Valore LDR: ");
Serial.println(valore);
if (valore < sogliaBuio) {
digitalWrite(ledPrincipale, HIGH); // Buio β LED acceso
} else {
digitalWrite(ledPrincipale, LOW); // Luce β LED spento
}
delay(300);
}
π― Se tutto va bene:
β
Apri Serial Monitor. Vedrai numeri che cambiano (es. 200, 300, 850). Copri l'LDR con un dito β il numero scende. Scoprilo β il numero sale. Il LED acceso/spento segue il cambio di luce.
βοΈ Regola la soglia:
π‘
Nel tuo ambiente: nota il numero di giorno (es. 700) e il numero di notte (es. 300). Scegli un valore nel mezzo come soglia (es. 500). Modifica sogliaBuio = 500; nel codice.
Se il LED non si accende/spegne:
π§ Procedure di debug
Il Serial Monitor mostra valori strani (es. 0 o 1023 sempre)
La soglia Γ¨ probabilmente sbagliata. Guarda i numeri nel Serial Monitor e cambia sogliaBuio. Ad esempio, se i numeri vanno da 200 a 900, prova sogliaBuio = 550.
Il LED Γ¨ inserito al contrario
Il LED rosso ha due gambe: una lunga (+) e una corta (β). Controlla che la lunga sia verso A1 e la corta verso GND.
5οΈβ£
Collega il PIR (sensore di movimento)
Solo 3 fili, e accende 2 LED in sequenza
β³ Attenzione: Il PIR ha un "tempo di warm-up" di 30β60 secondi dopo che lo accendi. Aspetta prima di muoverti davanti!
Di che cosa hai bisogno:
Arduino Uno (senza USB)
1 sensore PIR (infrarosso passivo) β riconosce il calore dei movimenti
const int pinPIR = 11;
const int ledScala1 = A2;
const int ledScala2 = A3;
unsigned long lastMotionTime = 0;
const unsigned long timeoutScale = 4000; // 4 secondi
bool scaleOn = false;
void setup() {
pinMode(pinPIR, INPUT);
pinMode(ledScala1, OUTPUT);
pinMode(ledScala2, OUTPUT);
Serial.begin(9600);
Serial.println("PIR in warm-up... aspetta 30 secondi");
}
void loop() {
int statoPIR = digitalRead(pinPIR);
if (statoPIR == HIGH) {
Serial.println("Movimento rilevato!");
if (!scaleOn) {
digitalWrite(ledScala1, HIGH);
delay(150);
digitalWrite(ledScala2, HIGH);
scaleOn = true;
}
lastMotionTime = millis();
}
if (scaleOn && millis() - lastMotionTime > timeoutScale) {
digitalWrite(ledScala2, LOW);
delay(150);
digitalWrite(ledScala1, LOW);
scaleOn = false;
}
}
π― Se tutto va bene:
β
Dopo 30 secondi di warm-up: Quando ti muovi davanti al PIR, i due LED si accendono in sequenza (prima scala1, poi scala2). Dopo 4 secondi senza movimento, si spengono in sequenza inversa.
Se il PIR non rileva movimento:
π§ Procedure di debug
Niente accade quando mi muovo
Prova questi step in ordine:
Sono passati 30β60 secondi dal power-on?
Il filo OUT del PIR Γ¨ davvero su D11?
Il PIR sta guardando verso di me? (il sensorino Γ¨ rivolto nella mia direzione)
Premi: 1 β 2 β 3 β 4 β #
Il display mostra "Codice OK" e il servo si apre (90Β°), aspetta 2.5 secondi e si richiude. Se sbagli il PIN, mostra "Codice errato".
8οΈβ£
Collega il KY-037 (sensore di suono) e Buzzer
Ultimo sensore β un piccolo suono da regolare
β οΈ Trimmer: Il KY-037 ha un piccolo potenziometro blu sulla scheda. Se scatta troppo spesso, giralo in senso orario con un cacciavite.
Di che cosa hai bisogno:
Arduino Uno (senza USB)
1 modulo KY-037 (sensore di suono)
1 Buzzer (piccolo altoparlante)
3 cavetti per KY-037, 2 per il Buzzer
Dove vanno i fili:
KY-037 pin VCCβArduino 5V
KY-037 pin GNDβArduino GND
KY-037 pin DO (digitale)βArduino D12
Buzzer pin + (positivo)βArduino D13
Buzzer pin β (negativo)βArduino GND
β οΈ
Usa sempre il pin DO del KY-037, non l'AO! DO Γ¨ digitale (acceso/spento), AO Γ¨ analogico. Per questa progetto DO Γ¨ piΓΉ facile.
Quando batti le mani o fai un rumore netto: il buzzer emette una piccola melodia (2 bip). Se scatta continuamente dai rumori di fondo, gira il trimmer del KY-037 in senso orario.
Copia il codice finale dello step 9 dalla guida principale
β
Complimenti! Hai completato 8 step. Ora tutti i componenti sono collegati. Carica il codice "Sketch 9" dalla guida completa e il sistema funziona a pieno.
Cosa farΓ il sistema:
β’ PIN corretto 1234# = porta aperta + suono + LED acceso se buio
β’ PIR di notte = scalinate illuminate in sequenza
β’ Battito di mani = LED principale alterna acceso/spento
β’ Di giorno = tutto rimane spento