CD74HC4067 è un multiplexer/Demultiplexer Digital a 16 canali che consente di espandere il numero di pin di input o output sul tuo Arduino. È particolarmente utile nei progetti che richiedono più sensori, pulsanti o LED minimizzando l'utilizzo dei pin. Questo tutorial ti guiderà attraverso la connessione e l'utilizzo del CD74HC4067 con Arduino.
Cosa avrai bisogno
- Modulo multiplexer CD74HC4067 o IC
- Arduino Board (ad es. Uno, Mega, Nano)
- Sensori, pulsanti o LED per il test
- Breadboard e fili jumper
- Un computer con l'IDE Arduino installato
Passaggio 1: Comprensione del CD74HC4067
Il CD74HC4067 funge da interruttore che collega uno dei suoi 16 pin di ingresso/output a un singolo pin comune. È possibile controllare quale canale è attivo utilizzando 4 pin di controllo (da S0 a S3).
Pinout
Spillo | Funzione |
---|---|
VCC | Alimentazione (3.3V o 5V) |
GND | Terra |
S0, S1, S2, S3 | Pin di controllo (per selezionare il canale attivo) |
En | Abilita PIN (attivo basso; connettersi a GND per abilitare) |
Com | Pin I/O comune (connettiti ad Arduino) |
CH0-CH15 | Canali da 0 a 15 (connettiti a sensori, pulsanti o LED) |
Passaggio 2: Cablaggio del CD74HC4067 ad Arduino
Ecco come collegare CD74HC4067 a un Arduino Uno:
PIN CD74HC4067 | Arduino Pin |
---|---|
VCC | 5v |
GND | GND |
S0 | Pin 8 |
S1 | Pin 9 |
S2 | Pin 10 |
S3 | Pin 11 |
En | GND |
Com | A0 (per leggere segnali analogici) |
CH0-CH15 | Sensori, LED o pulsanti |
Passaggio 3: caricare il codice
L'esempio seguente dimostra come leggere i valori analogici dai sensori collegati al CD74HC4067:
Codice di esempio
const int s0 = 8; // Control pin S0
const int s1 = 9; // Control pin S1
const int s2 = 10; // Control pin S2
const int s3 = 11; // Control pin S3
const int comPin = A0; // Common pin connected to A0
void setup() {
pinMode(s0, OUTPUT);
pinMode(s1, OUTPUT);
pinMode(s2, OUTPUT);
pinMode(s3, OUTPUT);
Serial.begin(9600);
}
void loop() {
for (int i = 0; i < 16; i++) {
selectChannel(i); // Select the active channel
int sensorValue = analogRead(comPin); // Read the value from the sensor
Serial.print("Channel ");
Serial.print(i);
Serial.print(": ");
Serial.println(sensorValue);
delay(500); // Small delay for readability
}
}
void selectChannel(int channel) {
digitalWrite(s0, channel & 0x01); // Set S0
digitalWrite(s1, (channel >> 1) & 0x01); // Set S1
digitalWrite(s2, (channel >> 2) & 0x01); // Set S2
digitalWrite(s3, (channel >> 3) & 0x01); // Set S3
}
Passaggio 4: testare l'installazione
- Collega l'Arduino al tuo computer tramite USB.
- Apri l'IDE Arduino e seleziona il corretto Asse E Porta sotto il Utensili menu.
- Carica il codice facendo clic Caricamento.
- Apri il monitor seriale (Utensili > Monitor seriale) e impostare il tasso di baud su
9600
. - Osservare i valori analogici per ciascun canale visualizzato nel monitor seriale.
Opzionale: i LED di controllo
Per controllare i LED collegati ai canali, modificare il codice in output segnali digitali anziché leggere gli ingressi analogici. Per esempio:
Codice di esempio per LED
void loop() {
for (int i = 0; i < 16; i++) {
selectChannel(i);
digitalWrite(comPin, HIGH); // Turn on LED on the active channel
delay(500);
digitalWrite(comPin, LOW); // Turn off LED
}
}
Applicazioni del CD74HC4067
- Ingresso/output analogici e digitali in espansione
- Leggendo più sensori con pin limitati
- Costruire matrici di bottoni di grandi dimensioni
- Controllo di più LED o relè
Risoluzione dei problemi
-
Nessuna risposta dai canali: Verificare le connessioni del pin di controllo e assicurarsi
EN
Il pin è collegato a GND. -
Selezione errata del canale: Controlla il
selectChannel()
Logica per l'impostazione di pin S0-S3. - Letture instabili: Garantire la messa a terra adeguata e l'alimentazione stabile per i sensori.
Conclusione
Hai interfacciato correttamente il multiplexer CD74HC4067 con Arduino. Questo modulo versatile ti consente di espandere significativamente le capacità di input e output di Arduino, rendendolo ideale per i progetti che coinvolgono più sensori, pulsanti o LED. Sperimenta diverse configurazioni ed esplora il suo pieno potenziale!