Arduino UNO supporta le operazioni di ingresso e output analogiche, consentendo di interagire con sensori e attuatori che richiedono valori precisi. Le operazioni analogiche sono essenziali per controllare dispositivi come LED, motori e input di lettura da sensori come potenziometri o sensori di luce. Questo tutorial ti guiderà attraverso l'installazione, la lettura e la scrittura analogiche e l'uso di operazioni logiche come if
dichiarazioni con dati analogici.
Cosa avrai bisogno
- Arduino Uno con cavo USB
- Potenziometro (o qualsiasi resistenza variabile) per ingresso analogico
- LED e una resistenza da 220 ohm per uscita analogica
- Breadboard e fili jumper
- Un computer con l'IDE Arduino installato
Passaggio 1: comprensione dei pin analogici su Arduino
Arduino Uno ha sei pin di ingresso analogici (A0-A5) che possono leggere una tensione tra 0 e 5 V e convertirlo in un valore digitale tra 0 e 1023. Per l'uscita analogica, Arduino utilizza PWM (Modulazione della larghezza di impulsi) su alcuni pin digitali contrassegnato con ~
(ad esempio, 3, 5, 6, 9, 10, 11).
Funzioni utilizzate
-
Ingresso analogico:
analogRead(pin)
- Legge una tensione (0-5 V) e restituisce un valore compreso tra 0 e 1023.
-
Uscita analogica:
analogWrite(pin, value)
- Emette un segnale PWM dove
value
varia da 0 (0% di duty cycle) a 255 (ciclo di lavoro 100%).
- Emette un segnale PWM dove
Passaggio 2: ingresso analogico del cablaggio (potenziometro)
Collegare un potenziometro a un perno analogico Arduino:
Pin potenziometro | Connessione Arduino |
---|---|
1 (pin di fine) | 5v |
2 (medio/output) | A0 |
3 (pin di fine) | GND |
Passaggio 3: uscita analogica del cablaggio (LED)
Collegare un LED con un resistore da 220 ohm a un perno Arduino PWM (ad es. Pin 9):
Pin a LED | Connessione Arduino |
---|---|
Gamba lunga (+) | Pin digitale 9 |
Gamba corta (-) | GND |
Passaggio 4: lettura di ingresso analogico
Usare il analogRead()
funzione per leggere i dati dal potenziometro:
Codice di esempio: lettura di input analogici
#define potPin A0 // Potentiometer connected to A0
void setup() {
Serial.begin(9600);
Serial.println("Analog Input Test");
}
void loop() {
int sensorValue = analogRead(potPin); // Read analog value
Serial.print("Sensor Value: ");
Serial.println(sensorValue);
delay(500); // Wait for half a second
}
Eseguire il codice e osservare i valori potenziometri (0-1023) nel monitor seriale.
Passaggio 5: scrittura di uscita analogica
Usare il analogWrite()
funzione per controllare la luminosità di un LED:
Codice di esempio: output analogico al LED
#define ledPin 9 // LED connected to pin 9
void setup() {
pinMode(ledPin, OUTPUT); // Set LED pin as output
}
void loop() {
for (int brightness = 0; brightness <= 255; brightness++) {
analogWrite(ledPin, brightness); // Increase brightness
delay(10);
}
for (int brightness = 255; brightness >= 0; brightness--) {
analogWrite(ledPin, brightness); // Decrease brightness
delay(10);
}
}
Passaggio 6: combinare ingresso e output analogici
È possibile utilizzare i valori di ingresso analogici per controllare l'uscita, come la regolazione della luminosità del LED in base alla posizione del potenziometro.
Codice di esempio: il potenziometro controlla la luminosità dei LED
#define potPin A0 // Potentiometer connected to A0
#define ledPin 9 // LED connected to pin 9
void setup() {
pinMode(ledPin, OUTPUT);
Serial.begin(9600);
}
void loop() {
int sensorValue = analogRead(potPin); // Read potentiometer value
int brightness = map(sensorValue, 0, 1023, 0, 255); // Map to PWM range
analogWrite(ledPin, brightness); // Set LED brightness
Serial.print("Sensor Value: ");
Serial.print(sensorValue);
Serial.print(" -> Brightness: ");
Serial.println(brightness);
delay(100);
}
Passaggio 7: usando if
Dichiarazioni con dati analogici
È possibile creare condizioni utilizzando l'input analogico per eseguire azioni specifiche:
Codice di esempio: controllo condizionale
#define potPin A0 // Potentiometer connected to A0
#define ledPin 9 // LED connected to pin 9
void setup() {
pinMode(ledPin, OUTPUT);
Serial.begin(9600);
}
void loop() {
int sensorValue = analogRead(potPin);
if (sensorValue > 512) {
analogWrite(ledPin, 255); // Full brightness if sensor value > 512
Serial.println("Bright!");
} else {
analogWrite(ledPin, 0); // Turn off LED otherwise
Serial.println("Off");
}
delay(500);
}
Applicazioni di lettura/scrittura analogiche
- Leggere i sensori ambientali (ad es. Luce, temperatura, umidità)
- Regolazione delle velocità del motore
- Controllo della luminosità dei LED
- Elaborazione del segnale audio
- Creazione di interfacce utente basate su analogici
Risoluzione dei problemi
- Letture errate dal sensore: Garantire un cablaggio adeguato e verificare le connessioni potenziometriche.
- LED non illuminando: Conferma l'orientamento del LED e utilizzare una resistenza per limitare la corrente.
- Output non liscio: Aggiungi un piccolo ritardo o una media dei valori di input per la stabilità.
Conclusione
Hai imparato come eseguire operazioni di lettura e scrittura analogiche utilizzando Arduino Uno, valori del sensore MAP alle uscite e utilizzare if
Dichiarazioni per la logica condizionale. Queste abilità sono cruciali per creare progetti reattivi e interattivi. Sperimenta ulteriormente integrando altri sensori e attuatori analogici per espandere le tue capacità!