Saya mencoba membangun termostat dengan Arduino. Saya ingin memberinya daya menggunakan baterai / charger ponsel yang membuat voltase sistem cukup bervariasi. Saat ini saya menggunakan Arduino Uno, tetapi setelah selesai saya akan porting ke Lilypad.
Pertama saya mencoba menggunakan sensor suhu TMP36 . Sejauh ini kegagalan total. Sementara sensor itu sendiri tampak sangat stabil, saya tidak dapat menemukan cara untuk mengukur tegangannya secara akurat.
Menggunakan referensi built-in 5v untuk sensor analog tidak bekerja sama sekali - bahkan didukung oleh USB arduino + 5V sebenarnya + 4.8V (yang menggeser suhu yang diukur beberapa derajat). Ketika papan diberi daya dari baterai, tegangan turun menjadi sekitar 4V dan suhu-roket langit diukur. Saya juga mencoba menggunakan + 3.3V dari papan sebagai referensi. Tampaknya lebih stabil ketika papan dinyalakan dari USB, tetapi voltase turun ketika baterai habis.
Apakah ada cara lain untuk mengukur tegangan output sensor dengan andal?
Untuk tahap kedua saya berencana menggunakan termistor. Baru saja memesan beberapa termistor 20K ini .
Dari apa yang saya mengerti, ini harus lebih mudah untuk mengukur secara akurat jika saya membangun pembagi tegangan dan menggunakan V_in sebagai tegangan referensi untuk ADC.
Beberapa pertanyaan tentang mereka:
- Apakah masuk akal untuk menggunakan beberapa pembagi tegangan dengan resistor tetap yang berbeda untuk meningkatkan akurasi?
- Saya dapat menggunakan pin yang dapat diprogram sebagai V_in, dan mengukur suhu menggunakan beberapa level tegangan yang berbeda. Meskipun tidak jelas bagi saya apakah ini benar-benar akan meningkatkan akurasi.
sumber
Jawaban:
Tampaknya Anda menyadari masalah dengan perubahan tegangan referensi dan jika Anda menggunakan perangkat seperti TMP36 (tetap 10mV / degC) tidak ada yang dapat Anda lakukan selain menggunakan referensi tegangan dari sebuah chip untuk menstabilkan sesuatu.
Namun, jika Anda menggunakan RTD atau termistor maka masalahnya tidak akan muncul. Anda ADC sedang membuat pengukuran ratiometrik - ia membandingkan input ADC dengan tegangan referensi NAMUN, jika Anda menyalakan RTD atau termistor (melalui resistor yang sesuai) dari tegangan ref yang sama, itu tidak akan mempengaruhi pembacaan. Jika ref naik 10% maka tegangan juga masuk ke ADC.
sumber
Saya pikir Anda harus mempertimbangkan menggunakan sensor suhu digital seperti DS18B20 / DS18S20 karena tidak tergantung pada keakuratan ATmega ADC Anda untuk mengukur sinyal anaolg, ia menggunakan protokol digital 1-kawat untuk melaporkan suhu.
Lihat tutorial berikut
http://playground.arduino.cc/Learning/OneWire
http://www.hobbytronics.co.uk/ds18b20-arduino
sumber
Pengukuran Anda akan sebagus tegangan referensi untuk ADC baik. Arduino secara default menggunakan tegangan suplai sebagai tegangan referensi, tetapi dalam kasus Anda cara yang tepat untuk melakukannya adalah dengan menggunakan pin Aref dari arduino. Anda harus mendapatkan chip khusus yang disebut "Referensi tegangan" dan menghubungkannya ke pin Aref, lalu atur ADC untuk menggunakan referensi eksternal dalam kode Arduino (
analogReference(EXTERNAL)
)Tegangan referensi harus dipilih sehingga ayunan penuh sensor suhu Anda akan masuk ke dalam tegangan referensi. TMP36 akan menampilkan ~ 1.5V @ 100C, jadi Anda harus menggunakan referensi di atas 1.5V untuk mengukur suhu hingga 100C. Anda ingin referensi Anda sedekat mungkin dengan voltase maksimum yang diukur untuk mendapatkan resolusi sebanyak mungkin.
Atmega328p memiliki dua referensi internal yang dapat digunakan tanpa komponen eksternal. Satu adalah 1.1V, yang lain 2.56V. Mereka biasanya akurasi sedikit lebih buruk daripada apa yang Anda dapatkan dengan menggunakan komponen khusus eksternal. Periksa dokumentasi Arduino untuk referensi analogReference dan Atmega328p untuk akurasi referensi internal.
Jika Anda benar-benar ingin mendapatkan kacang dengan rentang yang berbeda, Anda dapat menggunakan beberapa referensi eksternal dan mengubahnya dengan menggunakan saklar analog seperti 74hc4051. Atau Anda dapat beralih di antara dua referensi internal.
Dengan termistor Anda akan memiliki hasil yang lebih baik jika Anda mengatur sumber arus konstan daripada menggunakan resistor bodoh. Di sisi lain - resistor bodoh bertenaga dari referensi tegangan stabil akan berfungsi ok.
Ketika memilih referensi eksternal, pastikan Anda memiliki voltase yang cukup untuk mengakomodasi tegangan drop-out saat menyalakan dari baterai dan baterai sedang flat. Vref + Vdropout <Vbat-min.
sumber
Tidak memiliki referensi ADC yang stabil sebenarnya adalah gejala dari masalah lain di sirkuit Anda: Anda tidak memasok tegangan yang cukup tinggi ke papan. Ini ditunjukkan oleh persediaan 5V yang turun ke 4V dan juga yang jatuh 3.3V.
Regulator tegangan (MC33269D-5.0 IIRC) pada papan Arduino memiliki tegangan putus ~ 1,0V, oleh karena itu Anda perlu menyediakan setidaknya 6V untuk mendapatkan output 5V yang stabil. Baterai AA dimulai pada 1,5-1,6V dan hampir mati pada 1,1V sehingga Anda harus memberi daya pada papan dengan setidaknya 6 baterai AA untuk output yang stabil selama masa pakai baterai.
Didukung dengan benar, Anda dapat menggunakan referensi ADC internal atau jalur 5V atau 3.3V. Karena sensor suhu bervariasi sekitar 10mV per derajat Celcius, Anda dapat menggunakan pembagi tegangan untuk mengatur tegangan referensi yang setara dengan tegangan output sensor maksimum yang diharapkan (misalnya untuk 50 derajat C). Ini akan memberikan pengukuran yang lebih tepat.
Jika Anda ingin menggunakan kurang dari 6 baterai AA, coba konverter boost DC-DC, mis . Https://www.sparkfun.com/products/10968 . Contoh yang ditautkan mengambil 1V - 4V dan menghasilkan 5V. Output akan dimasukkan langsung ke pin 5V dari Arduino, melewati regulatornya.
Agar papan beroperasi lebih lama dengan baterai, letakkan MCU untuk tidur di antara sensor membaca. The rocketscream perpustakaan daya rendah sangat bagus untuk tujuan ini. Tapi itu hanya sangat berguna ketika menggunakan regulator / DC-DC converter yang efisien karena regulator Arduino standar menggunakan 10mA dengan sendirinya!
sumber
Jawaban untuk pertanyaan Apakah ada cara lain untuk mengukur tegangan output sensor dengan andal?
ADC menggunakan tegangan referensi untuk konversi dari analog ke digital. Jadi jika ada perubahan tegangan referensi, nilai yang dikonversi (yaitu nilai digital) akan berubah. Nilai digital akan berbeda untuk input analog yang sama jika tegangan referensi berubah.
Satu pilihan mudah adalah dengan menggunakan tegangan referensi internal di dalam Arduino (yaitu pengontrol Atmega).
Lihat tautan di bawah ini di mana kode sampel disediakan untuk menggunakan ADC internal (nama fungsi Arduino - analogReferensi (DEFAULT))
http://tronixstuff.com/2013/12/12/arduino-tutorials-chapter-22-aref-pin/
Saya pikir ini akan menyelesaikan masalah Anda dan tidak perlu beralih ke termistor.
sumber