Sensor Air Sensitivitas Tinggi pada MCP3008
Gunakan Sensitivitas Tinggi Phantom YoYo Sensor Air pada ADC 8-Channel 10-Bit MCP3008 dengan antarmuka SPI.
Pengantar
Latar belakang
Dalam proyek mendatang, saya menggunakan MCP3008 untuk memantau beberapa sensor. Dalam proyek ini saya ingin membahas detail penggunaan Sensor Air Sensitivitas Tinggi Phantom YoYo pada ADC 8-Channel 10-Bit MCP3008 dengan antarmuka SPI dengan Raspberry Pi 2, Windows 10 IoT Core, dan C#.
Menggunakan MCP3008
Sebuah ADC adalah konverter analog ke digital. Sinyal analog diubah menjadi angka dan dibaca ke dalam aplikasi Anda. MCP3008 adalah ADC 10 bit yang berarti menggunakan 10 bit untuk mewakili nilai pada saluran. Nilai akan direpresentasikan sebagai angka dari 0 hingga 1023 (untuk total 1024 nilai yang mungkin). Angka ini kemudian diubah menjadi nilai yang berarti. Sebagai contoh, katakanlah saya ingin mengukur tegangan pada salah satu saluran dan nilai yang terbaca dari saluran tersebut adalah 523. Saya tahu bahwa tegangan maksimum adalah 3.3V. Tegangan pada saluran dihitung menggunakan rumus
Nilai / Nilai Maks * Vref
menyelesaikan voltase yang saya dapatkan
523 / 1023 * 3.3
yang memberikan nilai 1.687V . Saya menghitung nilai ini dengan terlebih dahulu menormalkan pembacaan dan kemudian mengalikan nilai pembacaan yang dinormalisasi dengan nilai maksimum 3.3V yang diketahui.
Ketika mendapatkan pengukuran tegangan yang akurat itu penting, saya sangat menyarankan untuk mengukur tegangan sebenarnya dari Raspberry Pi dan menggunakan nilai ini dalam perhitungan Anda untuk mendapatkan konversi yang lebih akurat dari ADC. Ketika saya mengukur milik saya, saya menemukan bahwa keluarannya adalah 3.301V (nilai yang ditemukan dalam kode sumber). Tidak jauh dari yang sebenarnya, namun, jenis papan lain mungkin lebih bervariasi.
Tentu saja, ini masuk akal ketika saya ingin menghitung tegangan, tetapi setiap sensor memiliki arti yang berbeda. Untuk setiap sensor yang terhubung ke saluran pada MCP3008, saya perlu mengetahui detail spesifik dan menafsirkan pembacaan dengan tepat.
Pengkabelan MCP3008 sangat mudah. Chip itu sendiri ditandai dengan takik di salah satu ujungnya yang mewakili pin 1 dan 16 (lihat lembar data di sini).
Pin 1 hingga 8 adalah delapan pin input dan disebut sebagai saluran 0 hingga 7. Saluran 0 adalah pin 1. Pin 16 adalah Vdd dan terhubung ke sumber tegangan (baik 3.3V atau 5V pada Raspberry Pi). Pin 9 terhubung ke pin ground pada Raspberry Pi. Pin 15 dan 14 digunakan untuk referensi rangkaian analog. Pin 15 adalah Vref dan digunakan oleh MCP3008 untuk menentukan tegangan maksimum pada salah satu saluran. Dalam contoh saya, saya menghubungkan pin ini ke sumber 3.3V pada Raspberry Pi. Ketika tegangan diterapkan ke salah satu saluran, MCP menyesuaikan pembacaan sehingga 1023 mewakili 3.3V dan 0 mewakili 0V. Ini memungkinkan perhitungan yang saya gunakan di atas berfungsi. Pin 14 adalah pin ground analog. Dalam contoh saya, saya menghubungkannya ke pin ground pada Raspberry Pi. Jika ada kebutuhan untuk menjaga agar rangkaian analog tetap terisolasi dari rangkaian digital maka pin ini akan dihubungkan ke ground pada rangkaian analog. Empat pin yang tersisa, 10 hingga 13, adalah pin Antarmuka Serial SPI yang digunakan untuk berkomunikasi dengan Raspberry Pi. Diagram pengkabelan yang saya sertakan dengan proyek ini menunjukkan cara menghubungkan pin ini ke Raspberry Pi.
Dalam proyek ini, saya telah menyertakan pengukuran tegangan sederhana untuk mendemonstrasikan konsep ini. Pembacaan sensor air akan menunjukkan interpretasi alternatif dari nilai yang dibaca dari saluran.
Ikhtisar Proyek
Sensor
Dalam proyek ini saya telah menghubungkan dua sirkuit menjadi satu. Yang pertama adalah potensiometer sederhana yang memungkinkan tegangan divariasikan pada salah satu pin MCP3008 (saluran 0). Ini hanya untuk mendemonstrasikan cara kerja MCP3008. Sirkuit kedua adalah sensor air yang terhubung ke saluran kedua (saluran 1) pada MCP3008.
Sensor Air Phantom YoYo memiliki tiga pin. Pin pertama adalah ground (berlabel '-' pada perangkat) yang akan terhubung ke pin ground pada Raspberry Pi. Pin berikutnya adalah daya (berlabel '+' pada perangkat) dan akan terhubung ke pin 3.3V pada Raspberry Pi (perangkat juga dapat dihubungkan ke 5V). Pin ketiga dan terakhir adalah sinyal (berlabel pada perangkat. Pin ini memiliki sinyal tegangan yang akan bervariasi berdasarkan jumlah air pada perangkat. Perhatikan bahwa perangkat ini BUKAN sensor ketinggian air. Ini hanya mendeteksi variasi jumlah air yang bersentuhan dengan perangkat. Pin sumber akan terhubung ke salah satu input pada MCP3008.
Sirkuit
Rangkaian untuk mendukung sensor sangat sederhana. Perangkat terhubung langsung ke board Raspberry Pi tanpa memerlukan komponen tambahan apa pun.
-
-
-
-
-
Perangkat Lunak Proyek
Aplikasi
Aplikasi yang saya buat untuk proyek ini adalah Aplikasi Windows Universal dan menunjukkan dua meter di tampilan utama. Meter pertama menunjukkan tegangan arus yang diukur pada rangkaian potensiometer. Yang kedua menunjukkan pembacaan dari sensor air yang dinormalisasi ke nilai 0 hingga 100. Perangkat lunak ini juga memungkinkan kalibrasi sensor air. Tautan ke kode sumber dapat ditemukan di dekat bagian bawah halaman.
Perpustakaan MCP3008
Proyek perangkat lunak juga berisi proyek terpisah untuk berinteraksi dengan MCP3008. Kode ini dapat digunakan dalam aplikasi Anda untuk mengintegrasikan chip MCP3008 dengan mudah ke dalam proyek Anda.
Untuk menggunakannya, pertama-tama deklarasikan objek kelas sebagai berikut:
Mcp3008 pribadi _mcp3008 =null;
Di OnNavigatedTo acara tambahkan kode berikut:
_mcp3008 =Mcp3008 baru(0);
await_mcp3008.Initialize();
Untuk membaca tegangan dari saluran 0 gunakan baris kode berikut:
tegangan mengambang =_mcp3008.Read(Mcp3008.Channels.Single0).AsScaledValue(3.3f);
Perhatikan penggunaan Channel.Single0 yang menunjukkan bahwa nilai dibaca dari satu saluran. Dimungkinkan untuk menentukan bahwa perangkat membaca perbedaan antara dua pin. Ini dapat ditetapkan sebagai Mcp3008.Channels.Differential0 yang akan menunjukkan bahwa pengukuran harus diambil sebagai perbedaan antara saluran 0 dan saluran 1 di mana saluran 0 positif dan saluran 1 negatif. Kode sumber adalah dokumen dan akan memberikan tooltips yang menjelaskan setiap nilai.
Setelah Anda selesai menggunakan objek, biasanya di OnNavigatedFrom Anda acara membuang objek.
_mcp3008.Dispose();
_mcp3008 =null;
Memulai
Merakit Sirkuit
Gunakan panduan ini untuk merakit sirkuit saat menggunakan diagram yang terletak di dekat bagian bawah halaman sebagai panduan (perhatikan warna kabel opsional dan telah dipilih untuk membantu membuat sirkuit mudah diikuti saat dibangun).
Catatan: proyek ini menggunakan multimeter opsional untuk mengukur tegangan melintasi potensiometer. Hal ini dilakukan untuk membandingkan nilai dengan nilai yang dibaca oleh MCP3008. Perhatikan ini opsional. Jika Anda tidak memiliki multimeter maka Anda tidak akan dapat membandingkan tegangan ini. Hal ini dilakukan untuk menunjukkan bahwa nilai yang dibaca oleh MCP3008 sama dengan nilai yang dibaca oleh multimeter. Atur multimeter untuk mengukur tegangan DC seperti yang ditunjukkan pada gambar di bawah (multimeter Anda mungkin terlihat berbeda).
Fluke 87 Multimeter
- Tempatkan tukang sepatu berbentuk T di ujung kiri bard (di mana angkanya dimulai dari 1). Dua pin paling kiri akan berada di E3 dan F3 di papan tulis. Dua pin paling kanan akan berada di E22 dan F22
- Tempatkan potensiometer 50K pada posisi J56, J58, dan J60 dengan kenop penyesuaian menghadap ke sisi 5v dari papan tempat memotong roti
- Tempatkan resistor 10K di antara I58 dan I53
- Tempatkan MCP3008 ke dalam E31 ke E38 dan F31 ke F38 (sudut chip yang memiliki lingkaran lekukan akan ditempatkan di E31 )
- Opsional: Tempatkan salah satu ujung jumper jantan ke jantan kulit hitam pada posisi G60 (jika Anda menggunakan multimeter, sambungkan kabel hitam ke kabel ini)
- Opsional: Tempatkan salah satu ujung jumper jantan ke jantan merah pada posisi G58 (jika Anda menggunakan multimeter, sambungkan kabel merah ke kabel ini)
- Hubungkan kabel jumper jantan ke jantan biru di antara F60 dan Tanah
- Hubungkan kabel jumper jantan ke jantan oranye di antara F58 dan C31 (saluran 1 dari MCP3008)
- Hubungkan kabel jumper jantan ke jantan oranye antara F53 dan 3.3V+
- Hubungkan kabel jumper jantan ke jantan merah di antara J31 dan 3.3V
- Hubungkan kabel jumper jantan merah ke jantan antara J32 dan 3.3V
- Hubungkan kabel jumper jantan hitam ke jantan antara J33 dan Tanah
- Hubungkan kabel jumper jantan hijau ke jantan antara J34 dan A14
- Hubungkan kawat jumper jantan ke jantan kuning di antara J35 dan A13
- Hubungkan kabel jumper pria kulit putih ke pria di antara J36 dan A12
- Hubungkan kabel jumper jantan ke jantan hijau di antara J37 dan J14
- Hubungkan kabel jumper jantan hitam ke jantan antara J38 dan Tanah
- Hubungkan ujung perempuan jumper perempuan biru ke laki-laki ke S pin pada sensor air. Hubungkan ujung jantan ke C32 (saluran 1 di MCP3008)
- Hubungkan ujung betina jumper betina ke jantan ke pin pada sensor air. Hubungkan ujung jantan ke 3.3V
- Hubungkan ujung jumper wanita hitam ke pria ke – pin pada sensor air. Hubungkan ujung jantan ke Ground
- Opsional: Hubungkan kabel hitam dari langkah 5 ke terminal umum pada multimeter Anda (gunakan konektor jenis klip pengait untuk hasil terbaik)
- Opsional: Sambungkan kabel merah dari langkah 6 ke terminal tegangan pada multimeter Anda (gunakan konektor jenis klip pengait untuk hasil terbaik)
- Hubungkan kabel pita antara Raspberry Pi dan tukang sepatu
-
-
-
-
-
-
-
Memulai Aplikasi
Pilih Debug , LENGAN konfigurasi dan Mesin Jarak Jauh . Sekarang klik kanan proyek, dan pilih Properti lalu klik Debug menandai. Selanjutnya, masukkan alamat IP Raspberry Pi 2 di kolom Mesin jarak jauh, dan hapus centang Gunakan autentikasi .
Tekan F5 . Aplikasi akan diterapkan ke perangkat yang mungkin memakan waktu beberapa menit untuk pertama kalinya.
Video di bawah ini adalah demonstrasi aplikasi:
Catatan: Aplikasi ini menggunakan pengukur 360° linier untuk menampilkan jumlah air. Saya harus mencatat bahwa sensor ini tidak memiliki korelasi linier atau korelasi lain yang saya ketahui antara jumlah air dan pembacaan dari sensor. Itu menghasilkan nilai yang lebih kecil ketika ada beberapa tetes versus nilai yang lebih tinggi ketika lebih banyak air hadir. Saya menggunakan pengukur linier lebih untuk membantu memahami konsep ADC. Dimungkinkan untuk memasang sensor air mirip dengan cara saya menyambungkan Sensor Tegangan AC Opto-Isolated untuk menghasilkan sinyal tinggi atau rendah yang dapat ditangkap oleh pin GPIO. Perangkat ini dapat disambungkan untuk memberikan sinyal basah atau kering. Karena itu, saya memasang sensor air ini ke ADC karena saya ingin mendeteksi perbedaan antara sedikit air dan banyak air dan pendekatan yang diuraikan dalam proyek ini mencapai tujuan ini.
Sumber: Sensor Air Sensitivitas Tinggi pada MCP3008