Za pomocą multipleksera CD74HC4067 z Raspberry Pi

Using the CD74HC4067 Multiplexer with the Raspberry Pi

CD74HC4067 jest 16-kanałowym multiplekserem analogowym/cyfrowym, który umożliwia raspberry Pi interfejs z do 16 wejść lub wyjść Używając tylko kilku pinów GPIO. Jest idealny do rozszerzenia możliwości we/wy twoich Raspberry Pi podczas pracy z wieloma czujnikami lub urządzeniami.


Czego będziesz potrzebować

  1. Raspberry Pi (Każdy model z obsługą GPIO, np. PI 3, PI 4)
  2. CD74HC4067 Multiplexer
  3. Analogowe lub cyfrowe urządzenia wejściowe (np. Czujniki, przełączniki)
  4. Druty chleba i skoczków
  5. Zainstalowany Python na Raspberry Pi

Krok 1: Zrozumienie CD74HC4067

CD74HC4067 ma:

  • 16 kanałów wejściowych/wyjściowych (S0-S15)
  • 4 szpilki kontrolne (S0, S1, S2, S3) Aby wybrać aktywny kanał.
  • 1 Włącz pin (EN) Aby aktywować multiplekser (aktywny niski).
  • Singiel Com (wspólny) pin do wspólnej komunikacji.

Tabela prawdy do wyboru kanału

S3 S2 S1 S0 Aktywny kanał
0 0 0 0 S0
0 0 0 1 S1
0 0 1 0 S2
... ... ... ... ...
1 1 1 1 S15

Krok 2: Okablowanie CD74HC4067 do Raspberry Pi

Podłącz multiplekser z Raspberry Pi w następujący sposób:

Pin CD74HC4067 Pin Raspberry Pi
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)
En GND (aktywny niski)
Com GPIO18 (pin 12, analogowe wejście/wyjście)
S0-S15 Połącz czujniki/urządzenia

Krok 3: Zainstaluj wymagane biblioteki

Zaktualizuj swoje Raspberry Pi i zainstaluj biblioteki Python do kontroli GPIO.

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

Krok 4: Kod Pythona do odczytu danych z multipleksera

Oto skrypt Python do kontrolowania CD74HC4067 i odczytu danych z podłączonych kanałów.

Przykład kodu Pythona

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()

Krok 5: Zastosowania CD74HC4067 z Raspberry Pi

  1. Czytanie wielu czujników: Interfejs z maksymalnie 16 czujnikami (np. Temperatura, wilgotność lub światło).
  2. Rozszerzanie cyfrowych we/wy: Zarządzaj wieloma przełącznikami, diodami LED lub przekaźnikami.
  3. Integracja czujnika analogowego: Przeczytaj sygnały z potencjometrów, joysticków lub czujników wilgoci gleby.
  4. Automatyzacja domu: Kontroluj wiele urządzeń, takich jak światła, wentylatory lub urządzenia.

Rozwiązywanie problemów

  1. Brak danych z kanałów:

    • Sprawdź okablowanie pinów sterujących S0-S3 i pin.
    • Upewnij się, że czujniki/urządzenia są odpowiednio podłączone do pinów S0-S15.
  2. Nieprawidłowy wybór kanału:

    • Sprawdź tabelę prawdy dla konfiguracji S0-S3.
    • Upewnij się, że pin jest podłączony do GND do aktywacji.
  3. Przerywane odczyty:

    • Dodaj niewielkie opóźnienie (time.sleep(0.1)) między kanałami przełączającymi, aby umożliwić stabilizację sygnału.

Wniosek

. CD74HC4067 Multiplexer jest potężnym i opłacalnym sposobem rozszerzenia możliwości wejściowych/wyjściowych Raspberry Pi. Postępując zgodnie z tym przewodnikiem, możesz łatwo połączyć się z maksymalnie 16 urządzeniami analogowymi lub cyfrowymi za pomocą zaledwie 4 pinów GPIO. Eksperymentuj z różnymi czujnikami i aplikacjami, aby jak najlepiej wykorzystać ten wszechstronny moduł! 🚀

Zostaw komentarz

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.