Menggunakan ADC MCP3008 untuk Membaca Sensor Analog dengan Raspberry Pi
Menghubungkan sensor analog ke Raspberry Pi dapat menantang karena pin GPIO Pi hanya digital. Solusi hemat biaya adalah MCP3008, konverter analog-ke-digital 8 saluran 10-bit yang colok langsung ke bus SPI Pi dan tidak memerlukan komponen tambahan.
Dalam panduan ini kami akan memandu Anda melalui pemasangan MCP3008 ke Raspberry Pi, menghubungkan resistor bergantung cahaya (LDR) dan sensor suhu TMP36, dan membaca data dengan skrip Python sederhana.
Yang Dibutuhkan
- Raspberry Pi (model apa pun dengan header GPIO)
- MCP3008 ADC 8 saluran
- Resistor bergantung cahaya (LDR) – misalnya NORPS-12
- Sensor suhu TMP36
- Resistor 10 kΩ (untuk sirkuit LDR)
Aktifkan SPI pada Pi
Antarmuka SPI dinonaktifkan secara default. Ikuti langkah-langkah di Mengaktifkan Antarmuka SPI pada Raspberry Pi untuk mengaktifkan SPI dan menginstal perpustakaan Python spidev.
Koneksi Sirkuit
MCP3008 memerlukan empat pin GPIO pada header 40 pin Pi. Sambungkan pin berikut (nomor pin merujuk pada penomoran header P1):
VDD 3.3V VREF 3.3V AGND GROUND CLK GPIO11 (P1-23) DOUT GPIO9 (P1-21) DIN GPIO10 (P1-19) CS GPIO8 (P1-24) DGND GROUND
Setiap pin CH0–CH7 pada MCP3008 menjadi input analog. Dalam contoh di bawah kami menggunakan CH0 untuk LDR dan CH1 untuk TMP36; enam saluran yang tersisa dibiarkan bebas untuk sensor masa depan.
Resistor Bergantung Cahaya (LDR)
Resistansi LDR menurun menjadi sekitar 10 kΩ dalam cahaya terang dan naik menjadi beberapa megaohm dalam kegelapan. Dengan membentuk pembagi tegangan dengan resistor 10 kΩ, MCP3008 membaca tegangan yang jatuh ke 0 V saat terang dan naik ke 3,3 V dalam kegelapan.
Sensor Suhu TMP36
TMP36 adalah sensor suhu analog 3 pin. Sediakan daya dengan 3,3 V dan baca pin VOUT. Sensor mengeluarkan 0,750 V pada 25 °C, dengan kemiringan linier 10 mV per °C. Jadi 0 °C menghasilkan 0,500 V dan 100 °C menghasilkan 1,500 V.
Membaca Data dengan Python
MCP3008 mengeluarkan nilai 10-bit yang berkisar dari 0 hingga 1023, memetakan secara linier ke 0 V–3,3 V. Untuk TMP36, ini sesuai dengan rentang suhu sekitar –50 °C hingga +280 °C.
Di bawah ini adalah contoh minimal menggunakan perpustakaan spidev untuk membaca saluran 0 dan 1:
import spidev import time spi = spidev.SpiDev() spi.open(0, 0) # bus 0, device 0 spi.max_speed_hz = 1350000 def read_channel(channel): # Protokol MCP3008: start bit, single/diff, channel (3 bit), 5 dummy bit adc = spi.xfer2([1, (8 + channel) & 0x0F << 4, 0]) data = ((adc[1] & 3) << 8) + adc[2] return data while True: ldr_val = read_channel(0) temp_val = read_channel(1) temp_c = (temp_val * 3.3 / 1023) * 100 - 50 # Konversi ke °C print(f'LDR: {ldr_val}, Temp: {temp_c:.2f}°C') time.sleep(1)
Ganti nomor saluran sesuai kebutuhan untuk tata letak sensor Anda. Skrip secara terus-menerus mencetak nilai ADC mentah untuk LDR dan suhu yang dihitung dalam derajat Celsius.
Dengan pengaturan ini Anda dapat menambahkan sensor analog tambahan—seperti fotodioda, transmuder tekanan, atau probe kelembaban—dengan merangkainya ke pin CH2–CH7 yang tersisa dan memperluas kode Python sesuai kebutuhan.
Selamat mencoba!