PZEM-004T V3.3

PZEM-004T V3.3

  PZEM-004T เป็นโมดูลวัดค่าต่างๆของไฟฟ้ากระเเสสลับ ได้เเก่ เเรงไฟฟ้า, กระแสไฟฟ้า, กำลังไฟฟ้า, ความถี่, เเละพลังงานที่ใช้งาน โมดูลไม่มีฟังก์ชั่น การเเสดงผล, ข้อมูลถูกอ่านออกจากโมดูลผ่านการเชื่อมต่อแบบอนุกรมระดับสัญญาน TTL

https://i.lnwfile.com/0200yz.jpg 

รูปที่ 1 PZEM-004T

คุณสมบัติ

  • ใช้วัดแรงดันไฟฟ้าของไฟบ้าน วัดค่ากระแสไฟฟ้าของอุปกรณ์ไฟฟ้าที่ใช้ วัดค่ากำลังไฟฟ้า และวัดค่ากำลังไฟฟ้าต่อชั่วโมง (Wh)
  • วัดค่าแรงดันไฟฟ้าได้ 80 - 260VAC และวัดค่ากระแสไฟฟ้าได้ 0 - 100A ทำงานได้ที่ความถี่ 45 - 65Hz
  • แยกไฟสูงออกจากไฟต่ำด้วยออปโต้ ทำให้เมื่อใช้กับไมโครคอนโทรลเลอร์แล้วไม่เสี่ยงโดนไฟดูด
  • วัดค่ากระแสไฟฟ้าด้วย CT Current Transformer
  • สื่อสารกับไมโครคอนโทรลเลอร์ด้วย UART (หรือ Serial)
  • สอบเทียบความถูกต้องการวัด จากโรงงานแล้ว

การเชื่อมต่อ PZEM-004T

https://cu.lnwfile.com/_/cu/_raw/14/qe/7z.jpg

รูปที่ 2 

คำสั่งควบคุมการทำงาน

รูปแบบคำสั่งอ่านผลการวัดมีขนาด  8 ไบต์ จัดเรียงดังนี้
 

Slave Address + 0x04 + Register Address High Byte + Register Address Low Byte + Number
of Registers High Byte + Number of Registers Low Byte + CRC Check High Byte + CRC Check Low Byte

 

การตอบกลับจากอุปกรณ์ PZEM-004T แบ่งออกเป็นสองประเภท:
1.คำตอบที่ถูกต้องประกอบด้วยข้อมูลต่างๆ ดังนี้

:Slave Address + 0x04 + Number of Byte + Register 1 Data High Byte + Register 1 Data Low Byte + ... + CRC Check High Byte + CRC Check Low Byte


2.Error Reply: Slave Address + 0x84 + Abnormal code + CRC Check High Byte + CRC Check Low Byte
วิเคราะห์โค้ดผิดปกติดังนี้ (อันล่าง)
● 0x01 ฟังก์ชันไม่ถูกต้อง
● 0x02 Address ไม่ถูกต้อง
● 0x03 ข้อมูลไม่ถูกต้อง
● 0x04 ข้อผิดผลาดกับโมดูล PZEM-004T
การลงทะเบียนของผลการวัดถูกจัดเรียงตามตารางต่อไปนี้ 

 Register Address                                     Descripption                                  Resolution0x0000                                                     Voltage value                      1LSB สอดคล้องกับ 0.1V

0x0001                                      ค่ากระเเสไฟฟ้าไบต์ต่ำ 16 bits          1LSB สอดคล้องกับ 0.001A

0x0002                                     ค่ากระเเสไฟฟ้าไบต์สูง 16 บิต             1LSB สอดคล้องกับ 0.001A

0x0003                                             ค่าพลังงานต่ำ 16 บิต                 1LSB สอดคล้องกับ 0.1W

0x0004                                              ค่าพลังงานสูง 16 บิต                 1LSB สอดคล้องกับ 0.1W

0x0005                                                 ค่าพลังงานต่ำ 16 บิต              1LSB สอดคล้องกับ 1Wh

0x0006                                                 ค่าพลังงานสูง 16 บิต               1LSB สอดคล้องกับ 1Wh

0x0007                                                ค่าความถี่                                 1LSB สอดคล้องกับ 0.1Hz

0x0008                                               Power factor value                   1LSB สอดคล้องกับ 0.01

0x0009                                               สถานะเเจ้งเตือน                  0xFFFF เป็นสัญญาณเตือภัย,
                                                                                                        0x0000 ไม่ใช่สัญญาณเตือน

 
การใช้งาน ESP8266 NodeMCU – PZEM004T
    ในบทช่วยสอนนี้ เราจะเรียนรู้วิธีใช้แผงวงจรที่มีความสามารถในการวัดพลังงาน เพื่อให้ได้ค่าที่สำคัญที่สุดของการติดตั้งระบบไฟฟ้า ESP8266 จะสื่อสารกับบอร์ด PZEM004T เพื่อรับค่า หากคุณต้องการความช่วยเหลือในการเริ่มต้นใช้งาน ESP8266 โปรดดูบทช่วยสอน “ESP8266 NodeMCU – ไฟ LED กะพริบ”
https://i.lnwfile.com/0200yz.jpg 
รูปที่ 1
 

อุปกรณ์ที่จำเป็น   
    ESP8266 NodeMCU เวอร์ชั่น 1.0  
    สายไมโคร USB เป็น USB; 
    PZEM004T + CT (100A);
    HI-LINK HLK-PM01 AC-DC 220V ถึง 5V Step-Down Power Supply Module (อุปกรณ์เสริม);     สายจัมเปอร์ชาย-ชาย;
    1 Breadboard;
 

 
รูปที่ 2 

 
 การสื่อสารแบบอนุกรม
    โมดูลนี้มีอินเทอร์เฟซการสื่อสารข้อมูลอนุกรม TTL ผ่านทางพอร์ตอนุกรม ซึ่งคุณสามารถอ่านและตั้งค่าพารามิเตอร์ที่เกี่ยวข้องได้ แม้ว่าหากคุณต้องการให้อุปกรณ์ที่มี USB หรือ RS232 (เช่น คอมพิวเตอร์) สื่อสารได้ คุณจะต้องติดตั้งบอร์ดฮาร์ดแวร์อะแดปเตอร์ TTL อื่น รายละเอียดสามารถพบได้ใรูปที่ 3


 

 รูปที่ 3

หมายเหตุสำคัญ:
1. โมดูลนี้เหมาะสำหรับใช้ในร่มไม่ใช่กลางแจ้ง
2. โหลดที่ใช้ไม่ควรเกินกำลังที่กำหนด
3. การเดินสายไม่ผิด
4. บอร์ดต้องเชื่อมต่อกับไฟ AC เนื่องจาก 5V DC จะจ่ายไฟให้กับลอจิก TTL เท่านั้น

รูปที่ 4

 

หากคุณใช้โมดูลแหล่งจ่ายไฟ HI-LINK ให้เชื่อมต่อเอาต์พุต Vcc +5V กับพิน Vin หากไม่ใช่ คุณควรใช้แหล่งจ่ายไฟอื่นที่มีอัตราเท่ากัน RX และ TX จาก PZEM004T ไปที่ GPIO pin 4 (D2) และ GPIO pin 5 (D1) พิน GPIO ก่อนหน้าไม่ใช่พินการสื่อสารแบบอนุกรม แม้ว่าเราจะใช้พวกมันเช่นนี้ แม้ว่าจะมีโค้ดบางตัว เชื่อมต่อหม้อแปลงกระแส (CT) และสายไฟ AC แบบขนานกับโหลด ต้องระวังเดินสายด้าน AC ดังแสดงในรูปที่ 4

อันตราย: ปิดการติดตั้งหลัก AC ก่อนเชื่อมต่อบางสิ่ง ตรวจสอบให้แน่ใจว่าได้ถอดปลั๊กทุกอย่างออกจากไฟหลักแล้ว ข้อผิดพลาดอาจทำให้เกิดไฟฟ้าช็อตได้

การเข้ารหัส

เราจะใช้ห้องสมุดจากGit-Hubที่สื่อสารกับ PZEM004T หากคุณไม่ทราบวิธีติดตั้งไลบรารีหรือใช้ตัวจัดการไลบรารีใน Arduino IDE คุณสามารถตรวจสอบInstalling Additional Arduino Librariesได้ คัดลอกภาพร่างหลักด้านล่างไปยังโครงการ Arduino IDE ของคุณและบันทึก

หากต้องการ คุณสามารถใช้แผง PZEM004T สามแผง และสร้างเครื่องวัดพลังงาน 3 เฟสได้ เพียงแค่ต้องเลือกอีก 4 พินเพื่อทำการสื่อสารซีเรียลและรวมซอฟต์แวร์ซีเรียลอีก 2 ชุดไว้ในโค้ด

หมายเหตุ: NodeMCU มีพอร์ตอนุกรมเดียวเท่านั้น ด้วยเหตุนี้เราจึงต้องใช้ซอฟต์แวร์ซีเรียลเพื่อป้องกันการชนกันขณะดาวน์โหลดโค้ด

#include <PZEM004Tv30.h>
/* Use software serial for the PZEM
 * Pin 5 Rx (Connects to the Tx pin on the PZEM)
 * Pin 4 Tx (Connects to the Rx pin on the PZEM)
*/
PZEM004Tv30 pzem(5, 4);
void setup() {
  Serial.begin(9600);
}
void loop() {
    float voltage = pzem.voltage();
    if( !isnan(voltage) ){
        Serial.print("Voltage: "); Serial.print(voltage); Serial.println("V");
    } else {
        Serial.println("Error reading voltage");
    }
    float current = pzem.current();
    if( !isnan(current) ){
        Serial.print("Current: "); Serial.print(current); Serial.println("A");
    } else {
        Serial.println("Error reading current");
    }
    float power = pzem.power();
    if( !isnan(power) ){
        Serial.print("Power: "); Serial.print(power); Serial.println("W");
    } else {
        Serial.println("Error reading power");
    }
    float energy = pzem.energy();
    if( !isnan(energy) ){
        Serial.print("Energy: "); Serial.print(energy,3); Serial.println("kWh");
    } else {
        Serial.println("Error reading energy");
    }
    float frequency = pzem.frequency();
    if( !isnan(frequency) ){
        Serial.print("Frequency: "); Serial.print(frequency, 1); Serial.println("Hz");
    } else {
        Serial.println("Error reading frequency");
    }
    float pf = pzem.pf();
    if( !isnan(pf) ){
        Serial.print("PF: "); Serial.println(pf);
    } else {
        Serial.println("Error reading power factor");
    }
    Serial.println();
    delay(2000);
}

     

 

ความคิดเห็น

โพสต์ยอดนิยมจากบล็อกนี้

ระบบ​ปฏิบัติการ​