- วัสดุที่ต้องการ:
- การทำงานของ ACS712 Current Sensor:
- แผนภูมิวงจรรวม
- รหัสและคำอธิบาย:
- แอพ Android สำหรับตรวจสอบการใช้ไฟฟ้า:
เราทุกคนรู้เกี่ยวกับมิเตอร์วัดพลังงานไฟฟ้าที่ติดตั้งในบ้านหรือสำนักงานของทุกคนเพื่อวัดปริมาณการใช้ไฟฟ้า ในช่วงสุดท้ายของทุกเดือนพวกเราหลายคนกังวลเกี่ยวกับค่าไฟฟ้าที่สูงและเราต้องดูที่มาตรวัดพลังงานเป็นระยะ ๆ แต่จะเกิดอะไรขึ้นถ้าเราสามารถตรวจสอบการใช้ไฟฟ้าของเราได้จากทุกที่ในโลกและรับ SMS / อีเมลเมื่อการใช้พลังงานของคุณถึงค่าที่กำหนด ที่นี่เรากำลังสร้างโครงการเครื่องวัดพลังงานที่ใช้ IoT
ก่อนหน้านี้เราได้สร้างวงจร Energy Meter ซึ่งจะส่ง SMS เกี่ยวกับการเรียกเก็บเงินโดยใช้โมดูล GSM ในโครงการนี้เราสร้างเครื่องวัดพลังงานไฟฟ้าอัจฉริยะโดยใช้โมดูล Arduino และ ESP8266 Wi-Fiซึ่งไม่เพียง แต่ส่ง SMS / อีเมลค่าไฟฟ้าของคุณเท่านั้น แต่คุณยังสามารถตรวจสอบการใช้พลังงานได้ทุกที่ทุกเวลาในโลก ที่นี่เราใช้Current Sensor ACS712เพื่อวัดการใช้พลังงานเราจะพูดคุยเกี่ยวกับเรื่องนี้ในไม่ช้า
เราจะใช้ความช่วยเหลือของแพลตฟอร์มIFTTTเพื่อเชื่อมโยง Wi-Fi ของเรากับการแจ้งเตือนทาง SMS / อีเมล เราจะใช้แอพMQTT Dashboard Android เพื่อตรวจสอบการใช้พลังงานของเรา มาเริ่มกันเลย….
วัสดุที่ต้องการ:
- Arduino Uno
- ESP12 / NodeMCU
- ACS712-30Amp เซ็นเซอร์ปัจจุบัน
- เครื่องใช้ไฟฟ้า AC ใด ๆ
- สายชาย - หญิง
การทำงานของ ACS712 Current Sensor:
ก่อนที่เราจะเริ่มสร้างโครงการเป็นสิ่งสำคัญมากที่เราจะต้องเข้าใจการทำงานของเซ็นเซอร์กระแส ACS712 เนื่องจากเป็นองค์ประกอบหลักของโครงการ การวัดกระแสโดยเฉพาะกระแสไฟฟ้ากระแสสลับมักเป็นงานที่ยากเนื่องจากเสียงรบกวนประกอบกับปัญหาการแยกที่ไม่เหมาะสมเป็นต้น แต่ด้วยความช่วยเหลือของโมดูล ACS712 นี้ซึ่งได้รับการออกแบบโดย Allegro ทำให้ง่ายขึ้นมาก
โมดูลนี้ทำงานบนหลักการของHall-effectซึ่งค้นพบโดย Dr. Edwin Hall ตามหลักการของเขาเมื่อวางตัวนำกระแสไฟฟ้าลงในสนามแม่เหล็กแรงดันไฟฟ้าจะถูกสร้างขึ้นที่ขอบของมันในแนวตั้งฉากกับทิศทางของทั้งกระแสและสนามแม่เหล็ก อย่าให้เราเข้าไปลึกเกินไปในแนวคิดนี้ แต่เพียงแค่ให้เราใช้เซ็นเซอร์ห้องโถงเพื่อวัดสนามแม่เหล็กรอบตัวนำกระแสไฟฟ้า การวัดนี้จะอยู่ในรูปของมิลลิโวลต์ซึ่งเราเรียกว่าฮอลล์ - แรงดันไฟฟ้า แรงดันฮอลล์ที่วัดได้นี้เป็นสัดส่วนกับกระแสที่ไหลผ่านตัวนำ
ข้อได้เปรียบที่สำคัญของการใช้ACS712 Current Sensorคือสามารถวัดได้ทั้งกระแส AC และ DC และยังแยกระหว่าง Load (โหลด AC / DC) และ Measuring Unit (ส่วนไมโครคอนโทรลเลอร์) ดังที่แสดงในภาพเรามีหมุดสามตัวบนโมดูลซึ่ง ได้แก่ Vcc, Vout และ Ground ตามลำดับ
เทอร์มินัลบล็อก 2 พินคือที่ที่ควรส่งสายไฟปัจจุบันผ่าน โมดูลทำงานบน + 5V ดังนั้น Vcc ควรใช้พลังงานจาก 5V และสายดินควรเชื่อมต่อกับกราวด์ของระบบ ขา Vout มีแรงดันไฟฟ้าชดเชย 2500mV ซึ่งหมายความว่าเมื่อไม่มีกระแสไฟฟ้าไหลผ่านสายไฟแรงดันขาออกจะเป็น 2500mV และเมื่อกระแสไฟฟ้าไหลเป็นบวกแรงดันไฟฟ้าจะมากกว่า 2500mV และเมื่อกระแสที่ไหลเป็นลบ แรงดันไฟฟ้าจะน้อยกว่า 2500mV
เราจะใช้ขา Analog ของ Arduino เพื่ออ่านแรงดันไฟฟ้าขาออก (Vout) ของโมดูลซึ่งจะเป็น 512 (2500mV) เมื่อไม่มีกระแสไฟฟ้าไหลผ่านสายไฟ ค่านี้จะลดลงเมื่อกระแสไหลไปในทิศทางลบและจะเพิ่มขึ้นเมื่อกระแสไหลไปในทิศทางบวก ตารางด้านล่างนี้จะช่วยให้คุณเข้าใจว่าแรงดันไฟฟ้าขาออกและค่า ADC แตกต่างกันอย่างไรตามกระแสที่ไหลผ่านสายไฟ
ค่าเหล่านี้คำนวณจากข้อมูลที่ระบุในแผ่นข้อมูลของ ACS712 คุณยังสามารถคำนวณได้โดยใช้สูตรด้านล่าง:
แรงดันไฟฟ้าของ Vout (mV) = (ค่า ADC / 1023) * 5000 กระแสผ่านสาย (A) = (Vout (mv) -2500) / 185
ตอนนี้เรารู้แล้วว่าเซ็นเซอร์ ACS712 ทำงานอย่างไรและสิ่งที่เราคาดหวังจากเซ็นเซอร์นี้ ให้เราดำเนินการตามแผนภาพวงจร
เราได้ใช้เซ็นเซอร์นี้เพื่อสร้างวงจรแอมป์มิเตอร์แบบดิจิตอลโดยใช้ไมโครคอนโทรลเลอร์ PIC และ ACS712
แผนภูมิวงจรรวม
ขั้นตอนที่ 1: เข้าสู่ IFTTT ด้วยข้อมูลประจำตัวของคุณ
ขั้นตอนที่ 2:ในแอปเพล็ตของฉันคลิกที่ แอพเพล็ตใหม่
ขั้นตอนที่ 3: คลิกที่ + นี่
ขั้นตอนที่ 4: ค้นหา AdaFruit และคลิกที่มัน
ขั้นตอนที่ 5:คลิกที่ ตรวจสอบฟีด บน AdaFruit IO
ขั้นตอนที่ 6:เลือก ฟีด เป็นใบเรียกเก็บเงิน ความสัมพันธ์ เป็น ' เท่ากับ' และ ค่า ขีด จำกัดที่คุณต้องการอีเมล คลิกที่สร้างการกระทำ ฉันใช้ 4 เป็นค่าทริกเกอร์เกณฑ์ของฉัน
ขั้นตอนที่ 7:คลิกที่+ ที่ ค้นหา G-mail และคลิกที่มันและเข้าสู่ระบบด้วยข้อมูลรับรอง g-mail ของคุณ
ขั้นตอนที่ 8:คลิกที่ส่งอีเมลด้วยตัวคุณเอง
ขั้นตอนที่ 9:เขียนหัวข้อและเนื้อหาของคุณตามที่แสดงและคลิกเพื่อสร้าง
ขั้นตอนที่ 10: ' สูตรอาหาร ' ของคุณพร้อมแล้ว ตรวจสอบและคลิกที่เสร็จสิ้น
ตอนนี้เราเสร็จสิ้นด้วยการรวมเว็บ มาดูส่วนการเข้ารหัสกัน..
รหัสและคำอธิบาย:
เราใช้การสื่อสารแบบอนุกรมระหว่าง ESP12 และ Arduino ดังนั้นเราต้องเขียนโค้ดสำหรับทั้ง Arduino และ NodeMCU สำหรับการส่งและรับ
รหัสสำหรับส่วนเครื่องส่งสัญญาณเช่นสำหรับ Arduino Uno:
รหัส Arduino ที่สมบูรณ์จะได้รับในตอนท้ายของบทช่วยสอนนี้ เราจะใช้ไลบรารีสำหรับเซ็นเซอร์ปัจจุบันซึ่งสามารถดาวน์โหลดได้จากลิงค์นี้
ไลบรารีนี้มีฟังก์ชัน inbuilt เพื่อคำนวณกระแส คุณสามารถเขียนโค้ดของคุณเพื่อคำนวณกระแส แต่ไลบรารีนี้มีอัลกอริทึมการวัดกระแสที่แม่นยำ
ขั้นแรกรวมไลบรารีสำหรับเซ็นเซอร์ปัจจุบันเป็น:
# รวม "ACS712.h"
สร้างอาร์เรย์เพื่อเก็บพลังงานสำหรับส่งไปยัง NodeMCU
ถ่านวัตต์;
สร้างอินสแตนซ์เพื่อใช้ ACS712-30Amp ที่ PIN A0 เปลี่ยนอาร์กิวเมนต์แรกหากคุณใช้ตัวแปร 20Amp หรือ 5 แอมป์
เซ็นเซอร์ ACS712 (ACS712_30A, A0);
ในฟังก์ชัน การตั้งค่า กำหนดอัตราการส่งข้อมูลที่ 115200 เพื่อสื่อสารกับ NodeMCU ฟังก์ชั่นCall sensor.calibrate () สำหรับปรับเทียบเซ็นเซอร์ปัจจุบันเพื่อให้ได้ค่าที่ถูกต้อง
การตั้งค่าเป็นโมฆะ () { Serial.begin (115200); เซ็นเซอร์ปรับเทียบ (); }
ในฟังก์ชัน ลูป เราจะเรียก sensor.getCurrentAC (); ฟังก์ชันเพื่อรับค่าปัจจุบันและเก็บในตัวแปร float Iหลังจากได้รับกระแสแล้วให้คำนวณกำลังโดยใช้สูตร P = V * I เราใช้ 230V เนื่องจากเป็นมาตรฐานทั่วไปในประเทศแถบยุโรปโปรดเปลี่ยนเป็นของคุณหากจำเป็น
โมฆะ loop () { float V = 230; ลอย I = sensor.getCurrentAC (); ลอย P = V * I;
เส้นเหล่านี้จะแปลงพลังงานเป็น Wh
last_time = current_time; current_time = มิลลิวินาที (); Wh = Wh + P * ((current_time -last_time) /3600000.0);
ตอนนี้เราต้องแปลง Wh นี้เป็นรูปแบบอักขระเพื่อส่งไปยัง NodeMCU สำหรับ dtostrf () นี้ จะแปลง float เป็น char array เพื่อให้พิมพ์ได้ง่าย:
dtostrf (Wh, 4, 2, วัตต์);
รูปแบบคือ:
dtostrf (floatvar, StringLengthIncDecimalPoint, numVarsAfterDecimal, charbuf);
เขียนอาร์เรย์อักขระนี้ลงในบัฟเฟอร์อนุกรมโดยใช้ Serial.write () ; ฟังก์ชัน สิ่งนี้จะส่งค่า Wh ไปยัง NodeMCU
Serial.write (วัตต์); ล่าช้า (10,000); }
รหัสสำหรับส่วนรับ NodeMCU ESP12:
สำหรับสิ่งนี้เราต้องการไลบรารี AdaFruit MQTT ซึ่งสามารถดาวน์โหลดได้จากลิงค์นี้
ตอนนี้เปิด Arduino IDE ไปที่ตัวอย่าง -> ไลบรารี AdaFruit MQTT -> mqtt_esp8266
เราจะแก้ไขรหัสนี้ตามคีย์ AIO และข้อมูลรับรอง Wi-Fi และข้อมูลอนุกรมขาเข้าจาก Arduino
อันดับแรกเรารวมไลบรารีทั้งหมดสำหรับโมดูล Wi-Fi ESP12 และ AdaFruit MQTT
# รวม
เรากำหนด SSID และรหัสผ่านสำหรับ Wi-Fi ของคุณซึ่งคุณต้องการเชื่อมต่อ ESp-12e ของคุณ
#define WLAN_SSID "xxxxxxxx" #define WLAN_PASS "xxxxxxxxxxx"
ส่วนนี้กำหนดเซิร์ฟเวอร์ AdaFruit และพอร์ตเซิร์ฟเวอร์ซึ่งได้รับการแก้ไขเป็น“ io.adafruit.com” และ“ 1883” ตามลำดับ
#define AIO_SERVER "io.adafruit.com" #define AIO_SERVERPORT 1883
แทนที่ฟิลด์เหล่านี้ด้วยชื่อผู้ใช้และคีย์ AIO ของคุณซึ่งคุณได้คัดลอกมาจากไซต์ AdaFruit ในขณะที่สร้างฟีด
#define AIO_USERNAME "********" # กำหนด AIO_KEY "******************************"
จากนั้นเราได้สร้างคลาส ESP12 WiFiClient เพื่อเชื่อมต่อกับเซิร์ฟเวอร์ MQTT
ไคลเอนต์ WiFiClient;
ตั้งค่าคลาสไคลเอนต์ MQTT โดยส่งผ่านไคลเอนต์ WiFi และเซิร์ฟเวอร์ MQTT และรายละเอียดการเข้าสู่ระบบ
Adafruit_MQTT_Client mqtt (& ลูกค้า, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);
ตั้งค่าฟีดที่เรียกว่า 'Power' และ 'bill' เพื่อเผยแพร่การเปลี่ยนแปลง
Adafruit_MQTT_Publish Power = Adafruit_MQTT_Publish (& mqtt, AIO_USERNAME "/ feeds / Power"); Adafruit_MQTT_Publish bill = Adafruit_MQTT_Publish (& mqtt, AIO_USERNAME "/ feeds / bill");
ในฟังก์ชัน การตั้งค่า เราเชื่อมต่อโมดูล Wi-Fi กับจุดเชื่อมต่อ Wi-Fi
การตั้งค่าเป็นโมฆะ () { Serial.begin (115200); ล่าช้า (10); Serial.println (F ("Adafruit MQTT demo")); // เชื่อมต่อกับจุดเชื่อมต่อ WiFi Serial.println (); Serial.println (); Serial.print ("กำลังเชื่อมต่อกับ"); Serial.println (WLAN_SSID); WiFi.begin (WLAN_SSID, WLAN_PASS); …. …. … }
ในฟังก์ชัน ลูป เราจะตรวจสอบข้อมูลขาเข้าจาก Arduino และเผยแพร่ข้อมูลนี้ไปยัง AdaFruit IO
void loop () { // ตรวจสอบให้แน่ใจว่าการเชื่อมต่อกับเซิร์ฟเวอร์ MQTT ยังมีชีวิตอยู่ (จะทำการเชื่อมต่อ // ครั้งแรกและเชื่อมต่อใหม่โดยอัตโนมัติเมื่อตัดการเชื่อมต่อ) ดูนิยามฟังก์ชัน MQTT_connect // เพิ่มเติมด้านล่าง MQTT_connect (); int ผม = 0; ลอยวัตต์ 1;
นี้การตรวจสอบฟังก์ชันสำหรับข้อมูลที่เข้ามาจาก Arduino และจัดเก็บข้อมูลนี้ในวัตต์อาร์เรย์ใช้serial.read ()ฟังก์ชั่น
ถ้า (Serial.available ()> 0) { delay (100); // อนุญาตให้รับอนุกรมทั้งหมดที่ส่งพร้อมกัน ในขณะที่ (Serial.available () && i <5) { watt = Serial.read (); } วัตต์ = '\ 0'; }
atof () ฟังก์ชั่นแปลงตัวอักษรในการลอยค่าและเราจะเก็บค่าลอยนี้ในตัวแปรลอยอีกwatt1
วัตต์ 1 = atof (วัตต์);
คำนวณจำนวนเงินโดยการคูณกำลัง (เป็น Wh) ด้วยอัตราค่าพลังงานแล้วหารด้วย 1,000 เพื่อสร้างพลังงานเป็น KWh
bill_amount = watt1 * (energyTariff / 1,000); // 1 หน่วย = 1kwH
ตอนนี้เราสามารถเผยแพร่สิ่งต่างๆได้แล้ว!
Serial.print (F ("\ nSending Power val")); Serial.println (วัตต์ 1); Serial.print ("… ");
โค้ดชิ้นนี้กำลังเผยแพร่ค่าพลังไปยัง Power feed
ถ้า (! power.publish (watt1)) { Serial.println (F ("Failed")); } else { Serial.println (F ("ตกลง!")); }
ซึ่งจะเผยแพร่ค่าไฟฟ้าไปยังฟีด ใบเรียกเก็บเงิน
ถ้า (! bill.publish (bill_amount)) { Serial.println (F ("ล้มเหลว")); } else { Serial.println (F ("ตกลง!")); }
ยอดเรียกเก็บเงินของเราอาจเปลี่ยนแปลงอย่างรวดเร็ว แต่IFTTT ต้องใช้เวลาในการเรียกใช้แอพเพล็ตดังนั้นบรรทัดเหล่านี้จะให้เวลาในการเรียกใช้เพื่อให้เราสามารถรับอีเมลตามเกณฑ์
เปลี่ยนค่า bill_amount ที่คุณต้องการรับอีเมล นอกจากนี้ให้เปลี่ยนการตั้งค่า IFTTT AdaFruit IO
ถ้า (bill_amount == 4) { สำหรับ (int i = 0; i <= 2; i ++) { bill.publish (bill_amount); ล่าช้า (5000); } bill_amount = 6; }
รหัสที่สมบูรณ์สำหรับ Arduino และ NodeMCU ESP12 จะได้รับในตอนท้ายของบทช่วยสอนนี้
ตอนนี้อัปโหลดรหัสไปยังทั้งสองบอร์ด เชื่อมต่อฮาร์ดแวร์ของคุณตามที่แสดงในแผนภาพวงจรและเปิดio.adafruit.com เปิดแดชบอร์ดที่คุณเพิ่งสร้างขึ้น คุณจะเห็นการใช้พลังงานและค่าไฟฟ้ากำลังอัปเดต
เมื่อเรียกเก็บเงินของคุณถึง INR 4 แล้วคุณจะได้รับอีเมลเช่นนี้
แอพ Android สำหรับตรวจสอบการใช้ไฟฟ้า:
คุณสามารถใช้ Android App เพื่อตรวจสอบค่าต่างๆ สำหรับสิ่งนี้ให้ดาวน์โหลดแอพ MQTT Dashboard สำหรับ Androidจาก Play store หรือจากลิงค์นี้
ในการตั้งค่าการเชื่อมต่อกับ io.adafruit.com ให้ทำตามขั้นตอนเหล่านี้:
ขั้นตอนที่ 1: เปิดแอปและคลิกที่เครื่องหมาย“ +” กรอกรหัสลูกค้าตามที่คุณต้องการ เซิร์ฟเวอร์และพอร์ตยังคงเหมือนเดิมตามที่แสดงในภาพหน้าจอ คุณจะได้รับชื่อผู้ใช้และรหัสผ่าน (Active key) จากแดชบอร์ด AdaFruit IO ดังที่แสดงด้านล่าง
Active Key คือรหัสผ่านของคุณ
ขั้นตอนที่ 2:เลือกมิเตอร์ไฟฟ้าและเลือกสมัครสมาชิก ในการสมัครสมาชิกให้ตั้งชื่อและหัวข้อที่เข้าใจง่าย รูปแบบหัวข้อคือ ' yourusername' / feeds / 'feedname' และคลิกที่สร้าง
ขั้นตอนที่ 3:ในทำนองเดียวกันสมัครรับฟีดบิล
ขั้นตอนที่ 4:ในฐานะที่เป็นเครื่องใช้ของคุณใช้พลังงาน, การปรับปรุงค่าจะปรากฏภายใต้ พลังงาน และบิล
นี่คือวิธีสร้างเครื่องวัดพลังงานไฟฟ้าอัจฉริยะซึ่งไม่เพียงตรวจสอบได้จากทุกที่ในโลก แต่ยังเรียกใช้อีเมลเมื่อคุณมีการใช้ไฟฟ้าสูง
ตรวจสอบโครงการ IoT ทั้งหมดของเราด้วย