Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Manufacturing Technology >> Proses manufaktur

Pemantau Tegangan Termokopel Pemanas Air Panas

Komponen dan persediaan

Adafruit Raspberry Pi Zero WH
× 1
Arduino Nano R3
× 1

Tentang proyek ini

Sistem Pemantauan Lampu Pilot Pemanas Air Panas

Pemanas air panas gas tradisional mempertahankan lampu pilot 24x7. Lampu pilot ini memanaskan termokopel yang menghasilkan tegangan kecil (hingga 30 milivolt). Tegangan ini digunakan oleh termostat pemanas air panas untuk menahan katup gas terbuka. Jika lampu pilot padam, voltase berhenti dan katup gas tertutup secara otomatis.

Di pemanas air panas saya, lampu pilot sesekali padam. Karena ini hanya terjadi sekitar 3 kali per tahun, saya tidak ingin mengganti pemanas air panas yang mahal. Saya mencoba mengganti termokopel, tetapi ini tidak menyelesaikan masalah.

Solusi saya:pantau tegangan yang dihasilkan oleh termokopel. Jika jatuh ke nol, kirim teks dan email agar saya dapat menyalakan kembali lampu pilot. Ingat, tidak ada bahaya kebocoran gas di sini, karena katup gas akan menutup setiap kali tegangan termokopel turun ke nol.

Ikhtisar

Raspberry Pi Zero WH akan digunakan untuk mengirim email &teks saat lampu pilot padam. Karena Raspberry Pi tidak memiliki cara untuk mengukur tegangan, Arduino Nano digunakan untuk memantau tegangan dari termokopel.

Arduino memiliki analog-to-digital converters (ADCs) yang dapat membaca tegangan dan mengubahnya menjadi angka antara 0 dan 1023. Dalam proyek ini, Arduino membaca tegangan dari termokopel dan mengkomunikasikan nilai ini ke Raspberry Pi. Raspberry Pi menerima pembacaan tegangan dan menafsirkannya. Jika nilainya terlalu rendah, kami menganggap lampu pilot telah padam dan mengirimkan notifikasi.

Langkah 1:Siapkan Raspberry Pi Anda

Dapatkan Raspberry Pi dan berjalan di jaringan Anda (Anda dapat memeriksa proyek saya yang lain untuk instruksi untuk melakukan ini).

Buat program Python yang akan menerima pembacaan tegangan dari Arduino. Program akan mengulang dan mengirim pemberitahuan ketika pembacaan voltase terlalu rendah. Kode sumber terlampir.

Langkah 2:Siapkan Arduino Anda

Saya membeli Arduino Nano Cina murah, jadi butuh beberapa percobaan dan kesalahan untuk membuatnya bekerja dengan komputer Windows 10 saya.

Muat Arduino dengan sketsa untuk mengukur tegangan pada pin inputnya setiap 30 detik. Arduino dapat mengukur tegangan antara 0 dan tegangan referensi. Seseorang dapat memilih 1.1V atau 5V sebagai tegangan referensi. Karena termokopel hanya menghasilkan paling banyak 30 milivolt, kami akan menggunakan tegangan referensi 1.1V untuk resolusi yang lebih besar. Arduino ADC mengeluarkan 0 untuk 0V dan 1023 untuk 1.1V. Seperti disebutkan, termokopel mengeluarkan paling banyak 30 milivolt, sehingga pembacaannya akan menjadi 28 atau kurang.

Langkah 3:Hubungkan Arduino ke Sumber Tegangan

Termokopel mengirimkan tegangan ke termostat pemanas air panas melalui kabel koaksial. Bagian luar kabel positif.

Potong kabel sekitar 5 inci dari termostat pemanas air panas. Potong bagian luar kabel koaksial sedikit sehingga kabel tengah dapat diakses. Jangan merusak insulasi apa pun yang dicat pada kabel tengah. Kami tidak ingin korsleting kabel tengah ke bagian luar kabel koaksial.

Hubungkan kabel sehingga memasok tegangan positif ke termostat pemanas air panas dan ke pin input Arduino. Saya menggunakan pin input A0. Sisi negatif dari sumber tegangan harus dihubungkan ke ground Arduino, serta sisi negatif dari termostat pemanas air panas.

Saya menggunakan kabel sepanjang 1 kaki dengan klip buaya di ujungnya untuk membuat sambungan.

Langkah 4:Hubungkan Arduino ke Raspberry Pi

Sketsa kami yang berjalan di Arduino akan mengirimkan nomor tegangan dari ADC ke Raspberry Pi. Arduino akan mengirimkan sinyal sebagai output dari pin digital 9.

Arduino mengirim sinyal pada +5V. Raspberry Pi hanya dapat menerima input 3V. Oleh karena itu antara Arduino dan Raspberry Pi harus ada pembagi tegangan. Ini mengurangi tegangan dari 5V menjadi sekitar 2,8V.

Pembagi tegangan adalah sistem resistor yang mengurangi tegangan input.

Tegangan keluaran ditentukan oleh hubungan pembagi tegangan.

Seseorang tidak dapat menggunakan resistor tunggal untuk mengurangi tegangan karena ketika tidak ada arus yang mengalir, tegangan pada kedua sisi resistor akan menjadi Vin (5V). Menggunakan pembagi tegangan akan mengurangi tegangan bahkan dalam situasi tanpa arus.

Kabel ground dari semuanya harus terhubung. Lihat diagram koneksi.

Langkah 5:Arduino Mengirimkan Pengukuran Tegangan

Setiap 30 detik sketsa Arduino mendapatkan pengukuran tegangan dari ADC dan mengirimkan nomor tersebut ke Raspberry Pi. Saya memutuskan untuk menggunakan sistem pensinyalan satu kabel primitif dari pin Arduino 9 ke pin Raspberry Pi 16.

Langkah 6:Raspberry Pi Menerima Pengukuran Tegangan

Raspberry Pi menggunakan program Python dengan infinite loop untuk mendengarkan sisi naik pada pin 16. Ketika sisi naik terdeteksi, diasumsikan bahwa Arduino telah mulai mentransmisikan angka.

Sistem Pensinyalan
Mengirimkan nomor dua digit (mis:"12"). Setiap digit didahului oleh pulsa positif yang diterima pada pin 16. Pulsa positif berikutnya yang dipisahkan oleh kurang dari 20 milidetik (ms) menambah nilai digit ini. Jeda lebih dari 40 mdtk menunjukkan bahwa digit ini selesai, dan digit berikutnya dimulai. Jeda lain lebih dari 40 ms menunjukkan bahwa digit kedua selesai. Seluruh nomor dua digit sekarang lengkap.

Dalam kode Python yang berjalan di Raspberry Pi, nomor yang diterima dari Arduino dikembalikan dari metode yang menafsirkan sinyal dari Arduino. Kode Python lainnya memutuskan apakah pemberitahuan perlu dikirim atau tidak. Kemudian, kode kembali menunggu di tepi naik berikutnya pada pin 16.

Langkah 7:Kirim Notifikasi

Jika tegangan terlalu rendah, tingkatkan hitungan rendah. Hitungan rendah dipertahankan untuk mencegah alarm palsu. Jika hitungan rendah mencapai 5, maka tegangan telah rendah untuk 5 pengukuran. Setiap pengukuran berjarak 30 detik. Kirim pemberitahuan dan setel ulang hitungan rendah. Notifikasi dikirim menggunakan smtplib dan akun Gmail. Stempel waktu disimpan dalam kode Python saat notifikasi dikirim. Notifikasi selanjutnya tidak akan terkirim selama 6 jam.

Untuk mengirim peringatan teks, saya menggunakan fitur yang disediakan oleh sebagian besar penyedia seluler:kemampuan mengirim teks melalui email kepada penggunanya. Contoh:untuk Verizon:[email protected] mengirim SMS ke nomor tersebut.

Gmail
Saya membuat akun Gmail baru untuk digunakan mengirim notifikasi. Pada awalnya, saya mengkonfigurasi pengaturan keamanan pada akun Gmail ini untuk memungkinkan akses 'kurang aman', sehingga kode Python dapat mengirim email. Namun, setelah beberapa bulan, Gmail dapat menonaktifkan akses yang kurang aman ini. Saya menemukan bahwa Gmail lebih memilih pengguna untuk menggunakan sandi aplikasi.

Menyiapkan sandi aplikasi
https://support.google.com/accounts/answer/185833

Langkah 8:Hubungkan Semuanya

Hubungkan Arduino ke kabel termokopel pemanas air panas dan ke Raspberry Pi melalui pembagi tegangan. (Bagian atas pembagi tegangan saya menggunakan dua resistor yang totalnya 550 ohm—karena itu adalah resistor yang saya miliki.) Nyalakan Arduino dan Arduino akan mulai mengukur tegangan dan mengirim sinyal ke Raspberry Pi setiap 30 detik.

Langkah 9:Jalankan Program Python

  • Buat skrip yang memulai program Python Anda.
  • Edit crontab root untuk menjalankan skrip Anda secara otomatis saat boot. Edit jalur direktori yang sesuai untuk Raspberry Pi Anda dan tempat Anda menyimpan program Python.
  • Untuk mengedit crontab:
    sudo crontab -e
  • Tambahkan baris untuk menjalankan skrip 'kick-off' Anda saat Raspberry Pi di-boot ulang:
    @reboot sh /home/pi/hotwater/run_HotWaterNotifier.sh>> /home/pi/hotwater /logs/HotWaterNotifier.log 2>&1
  • Untuk menjalankan secara manual (sebelum Anda memiliki pengaturan crontab)
    Pertama-tama jalankan proses (jalankan skrip run_HotWaterNotifier.sh Anda)
    Kemudian ketik ctrl-Z untuk menangguhkan proses Anda
    Kemudian ketik bg sekali atau dua kali untuk mengirim proses ke latar belakang
    Ketik disown , ini memungkinkan proses tetap berjalan setelah Anda logout
  • Untuk melihat apakah proses masih berjalan
    ps aux | grep -i Air Panas


Kode

  • Kode Arduino
  • Kode Phython
  • Script untuk Memulai Kode Python
Kode ArduinoArduino
Ini membaca tegangan setiap 30 detik dan mengirimkan sinyal ke Raspberry Pi
/****************************** ********************************************** HotWaterHeater Mengukur tegangan berasal dari termokopel pemanas air panas. Menggunakan pensinyalan untuk mengirim pengukuran sensor tegangan ini ke Raspberry Pi. ************************************************** **************************///Referensi Tegangan ganda =5.0; //tegangan referensi yang tidak digunakan, tegangan referensi ganda =1.1;int OUTPUT_PIN =9;int INTRA_DIGIT_WAIT=20;int BETWEEN_DIGIT_WAIT=50;//////////////////////// ////////////////////////////////////////////////////////////////// ///// fungsi pengaturan berjalan satu kali saat Anda menekan reset atau menyalakan papan////////////////////////////// /////////////////////////////////////////////pengaturan batal( ) { // menginisialisasi pin digital LED_BUILTIN sebagai output. pinMode(LED_BUILTIN, OUTPUT); pinMode(OUTPUT_PIN, OUTPUT); // menetapkan pin digital 9 sebagai output analogReference(INTERNAL); Serial.begin(9600); // membuka port serial, menyetel kecepatan data ke 9600 bps}///////////////////////////////////////////////////// /////////////////////////////////////////// Fungsi loop berjalan dan lagi selamanya.// Ukur voltase pada pin input.// Kemudian kirim bacaan itu ke Raspberry Pi ///////////////////////// ////////////////////////////////////////////////////////////////// ///void loop() { int pinInput; tegangan ganda; pinInput =analogRead(A0); // Periksa Masukan Serial.print("PinInputA0="); Serial.print(pinInput); //Arduino ADC adalah konverter sepuluh-bit, artinya nilai output akan berkisar dari 0 hingga 1023 voltase =(pinInput * ReferenceVoltage ) / 1023; Serial.print(", voltageA0="); Serial.println(tegangan); //Catatan:pembacaan 5 =5,38 mV sendNumberSignal(pinInput, OUTPUT_PIN, INTRA_DIGIT_WAIT, BETWEEN_DIGIT_WAIT); //Jalankan pemeriksaan sekali setiap penundaan 30 detik(30000);}/********************************* ******************************************** * Beri tanda nomor pada kawat tunggal. * * Untuk setiap digit mengirim serangkaian pulsa. * Ada juga pulsa kick-off awal. * Setiap pulsa terlihat seperti:__/ 20ms \__20ms__ * 20+20ms antara tepi naik dalam digit yang sama * * Antara digit:__/ 20ms \__20ms__ 50ms___ * 20+20+50ms antar digit ********* ************************************************** ******************/void sendNumberSignal(int nomor, int pin, int intraDigitWait, int betweenDigitWait) { int puluhan =angka/10; int satuan =angka % 10; Serial.print("Sinyal:"); Serial.println(nomor); // debug //////// //Serial.print("puluhan:"); //Serial.println(puluhan); //Serial.print("satuan:"); //Serial.println(satuan); //Serial.print("milis:"); //Serial.println(milis()); // debug //////// //Serial.println("kirim puluhan"); //Serial.print("milis:"); //Serial.println(milis()); //kirim angka puluhan sendPulse(pin, intraDigitWait); for (int i=0; i 
Kode PhythonPython
Kode ini menerima sinyal dari Arduino. Ini menafsirkan sinyal menjadi pembacaan tegangan. Kemudian memutuskan apakah tegangan terlalu rendah. Jika tegangan terlalu rendah, ia akan mengirim email dan SMS.
################################################## ########################################### HotWaterNotifier.py# Pantau pin input dan terima sinyal dari Arduino.# Decode sinyal menjadi pengukuran sensor tegangan numerik.# Ketika pembacaan tegangan yang diterima terlalu rendah, ini menunjukkan bahwa# lampu pilot padam. Ketika ini terjadi selama 5 pengukuran berturut-turut, anggaplah bahwa# lampu pilot benar-benar padam. Kirim email/teks dan catat waktunya.# Hanya mengirim email/teks setiap enam jam.## Ini ditulis untuk Python 2.7. Perubahan kecil mungkin diperlukan untuk Python 3.#################################################### ####################################import smtplibimport RPi.GPIO sebagai GPIOimport osimport os.pathimport timeimport datetimeimport stringimport loggingimport sys#Masukkan GPIO untuk menerima sinyal dari ArduinoGPIO_Alert=16# Berapa jam menunggu antara emailsemailWaitHours=6# Pembacaan sensor tegangan rendah.# Kurang dari atau sama dengan ini adalah tegangan rendah.lowSensorReading=1# Sekali ini rendah pembacaan sensor tercapai, kirim alertmaxLowVoltageCount=5# untuk penomoran GPIO, pilih BCMGPIO.setmode(GPIO.BCM)GPIO.setup(GPIO_Alert, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)lastEmailSentTime =datetime.datetime(2000,1, 1,0,0,0,0) #deklarasikan variabel global############################################## ############################################################## Setup logger ############################################################# ##########################def setup_custom_logger(nama):formatter =logging.Formatter(fmt='%(asctime)s %(levelname )-8s %( message)s', datefmt='%Y-%m-%d %H:%M:%S') handler =logging.FileHandler('HotWaterLog.txt', mode='a') handler.setFormatter(formatter) screen_handler =logging.StreamHandler(stream=sys.stdout) screen_handler.setFormatter(formatter) logger =logging.getLogger(nama) logger.setLevel(logging.DEBUG) logger.addHandler(handler) logger.addHandler(screen_handler) mengembalikan logger## ############################################################# ########################## Berfungsi untuk mengirim email/SMS############### ############################################################# #############def send_email_alert():# izinkan menulis ke variabel global lastEmailSentTime global # periksa apakah cukup waktu telah berlalu sejak email terakhir nowTime =datetime.datetime.now() emailWaitDelta =datetime .timedelta(hours=emailWaitHours) limitTime =nowTime - emailWaitDelta #jika waktu sudah cukup, kirim email. jika lastEmailSentTime adalah None atau limitTime> lastEmailSentTime:logger.info('Sending email alert...') HOST ="smtp.gmail.com" PORT =587 SUBJECT ="Hot Water Heater Alert" #Ini harus menjadi objek daftar untuk beberapa alamat KE =["[email protected]", "[email protected]"] #TO =["[email protected]"] FROM ="[email protected]" PWD ="XXXXXXXXXXXXXXX" text =" Tegangan Rendah Diukur pada Pemanas Air Panas" #Bidang ke digabungkan menjadi 1 senar di sini. #Inilah yang ditampilkan kepada penerima di email mereka. BODY =string.join(("dari:%s" %FROM, "ke:%s" %", ".join(TO), "Subjek:%s" %SUBJECT, " ", teks), "\r \n") coba:s =smtplib.SMTP(HOST,PORT) s.set_debuglevel(1) s.ehlo() s.starttls() s.login(FROM, PWD) s.sendmail(FROM,TO,BODY) s.quit kecuali Pengecualian sebagai e:logger.exception('Pengecualian tertangkap file mengirim email. Mencoba lagi dalam 6 jam') #mengatur waktu agar email tidak dikirim selama 6 jam lastEmailSentTime =nowTime else:logger.info(' Tidak mengirim email. Email terakhir dikirim di:' + lastEmailSentTime.strftime("%Y-%m-%d %H:%M:%S"))############### ############################################################# ############### Menerima sinyal dari Arduino.# Sebuah angka terdiri dari dua digit. (digit tempat puluhan, dan digit tempat satu)# Arduino selalu mentransmisikan angka, terdiri dari 2 digit.# Sinyal yang diterima adalah serangkaian pulsa tinggi pada pin input.# Metode waitReceiveNumber() menghitung pulsa tinggi dan [hitung -1] adalah# nilai digit.# Setiap digit didahului oleh 1 pulsa.## Maksimal 70 ms antara tepi sinyal dalam digit yang sama# tepi naik yang dipisahkan oleh di bawah 70 ms adalah digit yang sama# jika lebih besar dari 70ms, lalu pindah ke digit berikutnya# 200 ms berarti angkanya selesai########################################################################### ###########################################def waitReceiveNumber(GPIO_Alert ):lastSignalTime =datetime.datetime(2000,1,1,0,0,0,0) isTens=True isFirstIteration=True tensValue=0 oneValue=0 acceptEdge=Tidak ada #Kurang dari 70 ms antar pulsa:ini masih digit yang sama sedang ditransmisikan # Tingkatkan nilai digit saat ini #Lebih dari 70 ms:alihkan ke digit berikutnya singleDigitMilliseconds =datetime.timedelta(milliseconds=70) #Jika batas waktu ini habis tercapai, itu adalah akhir dari angka wholeNumberWaitTime =200 # tunggu di sini sampai tepi naik terdeteksi #logger.info('Menunggu pin GPIO:' + str(GPIO_Alert)) sementara True:#Arduino mengirimkan pulsa saat Anda flash itu, mulai Raspberry Pi kedua. #Arduino harus boot lebih cepat jika terjadi pemadaman listrik. if isFirstIteration:acceptEdge =GPIO.wait_for_edge(GPIO_Alert, GPIO.RISING, timeout=-1) #tunggu selamanya hingga pulsa kick-off lain:acceptEdge =GPIO.wait_for_edge(GPIO_Alert, GPIO.RISING, timeout=wholeNumber forWaitTime) #tunggu hingga waitTime ms #hitung metrik waktu untuk sinyal ini signalTime =datetime.datetime.now() signalInterval =signalTime - lastSignalTime lastSignalTime =signalTime #debugging:logger.info('signalInterval:' + str(signalInterval.total_seconds() * 1000 )) #menentukan digit apa yang akan bertambah jika (signalInterval =singleNumberMilliseconds:jika isTens:#shift to one isTens =False oneValue+=1 else:#isOnes #tidak dapat berpindah ke digit berikutnya, jadi angkanya lengkap. #Ini tidak boleh terjadi. Setelah nomor selesai, #waktu tunggu harus habis dan sisi yang diterima seharusnya Tidak Ada. return ((tensValue -1)*10) + (onesValue -1) else:#timeout, jadi angka selesai. return ((tensValue -1)*10) + (onesValue -1)############################################# ############################################################## Metode utama# ############################################################# ###########################def main():logger.info('Starting HotWaterNotifier') referenceVoltage =1.1 lowVoltageCount=0 coba:while True:#Ini akan memblokir hingga menerima sinyal dari Arduino. #Ini hanya akan kembali setelah nomor lengkap diterima. sensorReading =waitReceiveNumber(GPIO_Alert) #menghitung tegangan dari pembacaan sensor Arduino voltage =(sensorReading * referenceVoltage ) / 1023; logger.info('sensorReading:' + str(sensorReading) + ', voltage:' + str(voltage)) if sensorReading <=lowSensorReading:lowVoltageCount+=1 #increment jika lowVoltageCount>=maxLowVoltageCount:logger.info('Low voltage alert ') send_email_alert() lowVoltageCount=0 #setel ulang penghitung karena kami mengirim peringatan lain:lowVoltageCount=0 #setel ulang penghitung karena tegangan yang baik diterima kecuali KeyboardInterrupt:logger.info('Keyboard interupsi diterima') GPIO.cleanup() # bersihkan GPIO di CTRL+C keluar dari GPIO.cleanup() # bersihkan GPIO##################################### ################################################ Ujian metode email########################################################### ##############################def testEmail():logger.info('Starting HotWaterNotifier') referenceVoltage =1.1 lowVoltageCount=0 coba:send_email_alert() kecuali KeyboardInterrupt:logger.info('Keyboard interupsi diterima') GPIO.cleanup() # bersihkan GPIO pada CTRL+C keluar dari GPIO.cleanup() # bersihkan GPIO######## ################## ############################################################# ########## Sebuah Variabel Global############################################### ######################################### Menyiapkan log filelogger =setup_custom_logger ('HotWaterNotifier')############################################################## ################################## Panggil metode utama.## Panggil testEmail() di sini jika Anda ingin menguji kemampuan email.############################################################# ###################################if __name__=="__main__":main()
Script untuk Memulai Kode PythonSH
Ini adalah skrip yang dipanggil crontab untuk memulai kode Python
#!/bin/bash# run_HotWaterNotifier.sh# Luncurkan notifiercd /home/pi/hotwatersudo python HotWaterNotifier.py

Proses manufaktur

  1. Memantau Suhu Kamar dengan Moteino dan Raspberry Pi
  2. Membuat Monitor Ambilight Menggunakan Arduino
  3. Akuisisi Data Real-Time Panel Surya Menggunakan Arduino
  4. Mengambil Tetesan Air Dengan Arduino
  5. Cara Membuat Monitor Energi Arduino dan Data Logger
  6. Pemantau Detak Jantung Menggunakan IoT
  7. Suhu Arduino. Monitor Dan Jam Waktu Nyata Dengan Tampilan 3.2
  8. Pompa Panas Air Panas Sempurna
  9. Bagaimana Cara Memilih Pompa Air Panas Domestik Terbaik?
  10. Pengantar Pompa Air Panas