Utilizarea multiplexorului CD74HC4067 cu Raspberry Pi

Using the CD74HC4067 Multiplexer with the Raspberry Pi

The CD74HC4067 este un multiplexor analog/digital cu 16 canale care permite unui Raspberry Pi să interfațeze cu până la 16 intrari sau iesiri folosind doar câțiva pini GPIO. Este perfect pentru a extinde capacitățile I/O ale Raspberry Pi atunci când lucrați cu mai mulți senzori sau dispozitive.


Ce vei avea nevoie

  1. Raspberry Pi (orice model cu suport GPIO, de exemplu, Pi 3, Pi 4)
  2. Multiplexor CD74HC4067
  3. Dispozitive de intrare analogice sau digitale (de exemplu, senzori, comutatoare)
  4. Breadboard și fire jumper
  5. Python instalat pe Raspberry Pi

Pasul 1: Înțelegerea CD74HC4067

CD74HC4067 are:

  • 16 canale de intrare/ieșire (S0-S15)
  • 4 pini de control (S0, S1, S2, S3) pentru a selecta canalul activ.
  • 1 Activare PIN (EN) pentru a activa multiplexorul (activ LOW).
  • Un singur PIN COM (comun). pentru comunicarea partajată.

Tabelul de adevăr pentru selectarea canalului

S3 S2 S1 S0 Canal activ
0 0 0 0 S0
0 0 0 1 S1
0 0 1 0 S2
... ... ... ... ...
1 1 1 1 S15

Pasul 2: Conectați CD74HC4067 la Raspberry Pi

Conectați multiplexorul la Raspberry Pi după cum urmează:

CD74HC4067 Pin Raspberry Pi Pin
VCC 3,3 V (pin 1)
GND GND (Pin 6)
S0 GPIO17 (Pin 11)
S1 GPIO27 (Pin 13)
S2 GPIO22 (Pin 15)
S3 GPIO23 (Pin 16)
RO GND (Activ LOW)
COM GPIO18 (Pin 12, intrare/ieșire analogică)
S0-S15 Conectați senzori/dispozitive

Pasul 3: Instalați bibliotecile necesare

Actualizați-vă Raspberry Pi și instalați biblioteci Python pentru controlul GPIO.

sudo apt update && sudo apt upgrade -y
sudo apt install python3-rpi.gpio

Pasul 4: Cod Python pentru a citi datele din multiplexor

Iată un script Python pentru a controla CD74HC4067 și a citi datele de pe canalele conectate.

Exemplu de cod Python

import RPi.GPIO as GPIO
import time

# Define GPIO pins
S0 = 17
S1 = 27
S2 = 22
S3 = 23
COM = 18  # Common pin for input/output

# Initialize GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setup([S0, S1, S2, S3], GPIO.OUT)
GPIO.setup(COM, GPIO.IN)  # Set COM pin as input for reading data

# Function to select a channel
def select_channel(channel):
    GPIO.output(S0, channel & 0x01)
    GPIO.output(S1, (channel >> 1) & 0x01)
    GPIO.output(S2, (channel >> 2) & 0x01)
    GPIO.output(S3, (channel >> 3) & 0x01)

try:
    while True:
        for channel in range(16):
            select_channel(channel)
            time.sleep(0.1)  # Small delay for channel stabilization
            value = GPIO.input(COM)  # Read data from the active channel
            print(f"Channel {channel}: {value}")
        time.sleep(1)
except KeyboardInterrupt:
    print("Exiting...")
finally:
    GPIO.cleanup()

Pasul 5: Aplicații ale CD74HC4067 cu Raspberry Pi

  1. Citirea mai multor senzori: Interfață cu până la 16 senzori (de exemplu, temperatură, umiditate sau lumină).
  2. Extinderea I/O digitale: Gestionați mai multe comutatoare, LED-uri sau relee.
  3. Integrarea senzorilor analogici: Citiți semnalele de la potențiometre, joystick-uri sau senzori de umiditate a solului.
  4. Home Automation: controlați mai multe dispozitive, cum ar fi lumini, ventilatoare sau aparate.

Depanare

  1. Nu există date de la canale:

    • Verificați cablarea pinilor de control S0-S3 și a pinului COM.
    • Asigurați-vă că senzorii/dispozitivele sunt conectați corect la pinii S0-S15.
  2. Selectare incorectă a canalului:

    • Verificați tabelul de adevăr pentru configurațiile S0-S3.
    • Asigurați-vă că pinul EN este conectat la GND pentru activare.
  3. Citirile intermitente:

    • Adăugați o mică întârziere (time.sleep(0.1)) între canalele de comutare pentru a permite stabilizarea semnalului.

Concluzie

The Multiplexor CD74HC4067 este o modalitate puternică și rentabilă de a extinde capacitățile de intrare/ieșire ale Raspberry Pi. Urmând acest ghid, puteți interfața cu ușurință cu până la 16 dispozitive analogice sau digitale folosind doar 4 pini GPIO. Experimentați cu diverși senzori și aplicații pentru a profita la maximum de acest modul versatil! 🚀

Lasă un comentariu

Notice an Issue? Have a Suggestion?
If you encounter a problem or have an idea for a new feature, let us know! Report a problem or request a feature here.