สารบัญ:

ระบบควบคุมไฟ: 9 ขั้นตอน
ระบบควบคุมไฟ: 9 ขั้นตอน

วีดีโอ: ระบบควบคุมไฟ: 9 ขั้นตอน

วีดีโอ: ระบบควบคุมไฟ: 9 ขั้นตอน
วีดีโอ: Consumer unit wiring แบบการต่อตู้คอนซูมเมอร์ยูนิต 2024, กรกฎาคม
Anonim
ระบบควบคุมไฟ
ระบบควบคุมไฟ

เมื่อเร็ว ๆ นี้ฉันกำลังทำงานเพื่อทำความเข้าใจไมโครคอนโทรลเลอร์และอุปกรณ์ที่ใช้ IOT เพื่อการวิจัยด้านความปลอดภัย ดังนั้นฉันจึงคิดที่จะสร้างระบบโฮมออโตเมชั่นขนาดเล็กสำหรับฝึกซ้อม ฉันยังทำสิ่งนี้ไม่เสร็จ แต่สำหรับการเริ่มต้นฉันจะแบ่งปันวิธีการใช้ Raspberry Pi 2 และอุปกรณ์ไฟฟ้าอื่น ๆ เพื่อควบคุมแสงในห้องของฉันในโพสต์นี้ นอกจากนี้ ฉันจะไม่พูดถึงการตั้งค่าเริ่มต้นสำหรับ Raspberry ที่นี่ คุณอาจพบบทช่วยสอนต่างๆ สำหรับสิ่งนั้น

แต่ในโปรเจ็กต์นี้ ฉันจะแนะนำผลิตภัณฑ์ docker pi series ให้กับคุณ

เสบียง

รายการส่วนประกอบ:

  • 1 x Raspberry Pi 3B+/3B/ศูนย์/ศูนย์ W/4B/
  • การ์ด TF คลาส 10 ขนาด 1 x 16GB
  • 1 x DockerPi series 4 ช่องรีเลย์บอร์ด (HAT)
  • แหล่งจ่ายไฟ 1 x [email protected] ซึ่งมาจาก 52Pi
  • 4 x แถบไฟ
  • 1 x ขั้วต่อ DC
  • แหล่งจ่ายไฟ 1 x 12V สำหรับแถบไฟ
  • หลายสาย

ขั้นตอนที่ 1: ทำความรู้จักกับ DockerPi Series 4 Channel Relay Board

ความรู้เกี่ยวกับบอร์ดรีเลย์ DockerPi Series 4 ช่อง
ความรู้เกี่ยวกับบอร์ดรีเลย์ DockerPi Series 4 ช่อง
ความรู้เกี่ยวกับบอร์ดรีเลย์ DockerPi Series 4 ช่อง
ความรู้เกี่ยวกับบอร์ดรีเลย์ DockerPi Series 4 ช่อง
ความรู้เกี่ยวกับ DockerPi Series 4 Channel Relay Board
ความรู้เกี่ยวกับ DockerPi Series 4 Channel Relay Board

DockerPi 4 Channel Relay เป็นสมาชิกของ DockerPi Series ซึ่งมักใช้ในแอปพลิเคชัน IOT

DockerPi 4 Channel Relay สามารถถ่ายทอด AC/DC แทนสวิตช์แบบเดิม เพื่อให้ได้แนวคิดที่มากขึ้น DockerPi 4 Channel Relay สามารถซ้อนกันได้ถึง 4 ช่อง และสามารถวางซ้อนกับบอร์ดขยาย DockerPi อื่นๆ ได้ หากคุณต้องการใช้งานเป็นเวลานาน เราขอแนะนำให้คุณใช้บอร์ดขยาย DockerPi Power เพื่อให้มีพลังงานมากขึ้น

ข้อควรระวัง ก่อนที่เราจะดำเนินการต่อ ฉันต้องการเตือนคุณเกี่ยวกับอันตรายของการทดลองกับ "ไฟฟ้าหลัก" หากมีอะไรผิดพลาด ผลลัพธ์ที่เลวร้ายที่สุดอาจเป็นความตายหรืออย่างน้อยก็เผาบ้านของคุณเอง ดังนั้น โปรดอย่าพยายามดำเนินการใดๆ ที่กล่าวถึงในบทความนี้ หากคุณไม่เข้าใจว่าคุณกำลังทำอะไรอยู่ หรือควรขอความช่วยเหลือจากช่างไฟฟ้าที่มีประสบการณ์ มาเริ่มกันเลย.

ขั้นตอนที่ 2: คุณสมบัติ

คุณสมบัติ
คุณสมบัติ
คุณสมบัติ
คุณสมบัติ
คุณสมบัติ
คุณสมบัติ
  • DockerPi Series
  • ตั้งโปรแกรมได้
  • ควบคุมโดยตรง (โดยไม่ต้องตั้งโปรแกรม)
  • ขยายพิน GPIO
  • รีเลย์ 4 ช่อง
  • รองรับ 4 Alt I2C Addr
  • รองรับไฟ LED แสดงสถานะรีเลย์
  • รองรับ 3A 250V AC
  • 3A 30V DC
  • สามารถสแต็คกับบอร์ดสแต็คอื่น ๆ ได้โดยไม่ขึ้นกับฮาร์ดแวร์ของเมนบอร์ด (ต้องการการสนับสนุน I2C)

ขั้นตอนที่ 3: แผนที่ที่อยู่อุปกรณ์

แผนที่ที่อยู่อุปกรณ์
แผนที่ที่อยู่อุปกรณ์
แผนที่ที่อยู่อุปกรณ์
แผนที่ที่อยู่อุปกรณ์

บอร์ดนี้มีที่อยู่ลงทะเบียนแยกต่างหาก และคุณสามารถควบคุมแต่ละรีเลย์ได้ด้วยคำสั่งเดียว

ข้อกำหนดอื่นๆ:

ความเข้าใจพื้นฐานเกี่ยวกับ Python หรือ C หรือเชลล์หรือ Java หรือภาษาอื่นๆ (ฉันจะใช้ C, python, shell และ java)

  • ความเข้าใจพื้นฐานของระบบลีนุกซ์
  • การแสดงตนของจิตใจ

ก่อนดำเนินการต่อ คุณจะต้องเข้าใจส่วนประกอบไฟฟ้าที่เราจะใช้:

1. รีเลย์:

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

ขั้นตอนที่ 4: เชื่อมต่อรีเลย์กับที่ยึดหลอดไฟที่ขับเคลื่อนด้วยแหล่งจ่ายไฟหลัก

เชื่อมต่อรีเลย์กับที่ยึดหลอดไฟที่ขับเคลื่อนด้วยแหล่งจ่ายไฟหลัก
เชื่อมต่อรีเลย์กับที่ยึดหลอดไฟที่ขับเคลื่อนด้วยแหล่งจ่ายไฟหลัก
เชื่อมต่อรีเลย์กับที่ยึดหลอดไฟที่ขับเคลื่อนด้วยแหล่งจ่ายไฟหลัก
เชื่อมต่อรีเลย์กับที่ยึดหลอดไฟที่ขับเคลื่อนด้วยแหล่งจ่ายไฟหลัก

ในส่วนที่ยุ่งยาก เราจะเชื่อมต่อรีเลย์กับตัวยึดหลอดไฟที่ขับเคลื่อนด้วยแหล่งจ่ายไฟหลัก แต่ก่อนอื่น ฉันต้องการให้คุณมีความคิดสั้น ๆ เกี่ยวกับวิธีการเปิดและปิดไฟผ่านแหล่งจ่ายไฟตรง

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

สำหรับการทดลองของเรา เราจะต้องทำให้ "Negative Wire" ผ่านรีเลย์ของเราเพื่อตัดวงจรและควบคุมกระแสไฟโดยใช้สวิตช์ของรีเลย์ ดังนั้นเมื่อรีเลย์เปิดขึ้นก็ควรทำให้วงจรสมบูรณ์และหลอดไฟควรเปิดและในทางกลับกัน ดูแผนภาพด้านล่างสำหรับวงจรเต็ม

ขั้นตอนที่ 5: การกำหนดค่า I2C (Raspberry Pi)

การกำหนดค่า I2C (ราสเบอร์รี่ Pi)
การกำหนดค่า I2C (ราสเบอร์รี่ Pi)
การกำหนดค่า I2C (ราสเบอร์รี่ Pi)
การกำหนดค่า I2C (ราสเบอร์รี่ Pi)
การกำหนดค่า I2C (ราสเบอร์รี่ Pi)
การกำหนดค่า I2C (ราสเบอร์รี่ Pi)
การกำหนดค่า I2C (ราสเบอร์รี่ Pi)
การกำหนดค่า I2C (ราสเบอร์รี่ Pi)

เรียกใช้ sudo raspi-config และปฏิบัติตามคำแนะนำเพื่อติดตั้งการรองรับ i2c สำหรับแกน ARM และเคอร์เนล linux

ไปที่ตัวเลือกการเชื่อมต่อ

ขั้นตอนที่ 6: การควบคุมโดยตรงโดยไม่ต้องเขียนโปรแกรม (Raspberry Pi)

เปิดช่องหมายเลข 1 รีเลย์

i2cset -y 1 0x10 0x01 0xFF

ปิดรีเลย์ช่องที่ 1

i2cset -y 1 0x10 0x01 0x00

เปิดช่องหมายเลข 2 รีเลย์

i2cset -y 1 0x10 0x02 0xFF

ปิดรีเลย์ช่องหมายเลข 2

i2cset -y 1 0x10 0x02 0x00

เปิดช่อง3รีเลย์

i2cset -y 1 0x10 0x03 0xFF

ปิดรีเลย์ช่อง 3

i2cset -y 1 0x10 0x03 0x00

เปิดช่องหมายเลข 4 รีเลย์

i2cset -y 1 0x10 0x04 0xFF

ปิดรีเลย์ช่อง 4

i2cset -y 1 0x10 0x04 0x00

ขั้นตอนที่ 7: โปรแกรมในภาษา C (Raspberry Pi)

สร้างซอร์สโค้ดและตั้งชื่อว่า "relay.c"

#รวม

#รวม

#รวม

#define DEVCIE_ADDR 0x10

#define RELAY1 0x01

#define RELAY2 0x02

#define RELAY3 0x03

#define RELAY4 0x04

#define บน 0xFF

#define ปิด 0x00

int หลัก (เป็นโมฆะ)

{

printf("เปิดรีเลย์ใน C\n");

int fd;

int ผม = 0;

fd = การเดินสายPiI2CSetup (DEVICE_ADDR);

สำหรับ(;;){

สำหรับ (i=1; i<=4; i++)

{

printf("เปิดรีเลย์ No.$d", i);

WirePiI2CWriteReg8 (fd, i, ON);

นอนหลับ(200);

printf("ปิดรีเลย์ No.$d", i);

WirePiI2CWriteReg8 (fd, i, OFF);

นอนหลับ(200);

}

}

กลับ 0;

}

รวบรวมมัน

gcc relay.c -lwiringPi -o รีเลย์

เอ็กเซ็ค อิท

./รีเลย์

ขั้นตอนที่ 8: โปรแกรมใน Python (Raspberry Pi)

แนะนำให้ใช้โค้ดต่อไปนี้โดยใช้ Python 3 และติดตั้งไลบรารี smbus:

สร้างไฟล์ชื่อ: "relay.py" และวางโค้ดต่อไปนี้:

นำเข้าเวลาเป็น t

นำเข้า smbus

นำเข้าsys

DEVICE_BUS = 1

DEVICE_ADDR = 0x10

บัส = smbus. SMBus(DEVICE_BUS)

ในขณะที่จริง:

ลอง:

สำหรับฉันอยู่ในช่วง (1, 5):

bus.write_byte_data(DEVICE_ADDR, ผม, 0xFF)

t.นอน(1)

bus.write_byte_data(DEVICE_ADDR, ผม, 0x00)

t.นอน(1)

ยกเว้น KeyboardInterrupt เป็น e:

พิมพ์ ("ออกจากลูป")

sys.exit()

* บันทึกแล้วเรียกใช้เป็น python3:

python3 relay.py

ขั้นตอนที่ 9: โปรแกรมใน Java (Raspberry Pi)

สร้างไฟล์ใหม่ชื่อ: I2CRelay.java และวางโค้ดต่อไปนี้:

นำเข้า java.io. IOException;

นำเข้า java.util. Arrays;

นำเข้า com.pi4j.io.i2c. I2CBus;

นำเข้า com.pi4j.io.i2c. I2CDevice;

นำเข้า com.pi4j.io.i2c. I2CFactory;

นำเข้า com.pi4j.io.i2c. I2CFactory. UnsupportedBusNumberException;

นำเข้า com.pi4j.platform. PlatformAlreadyAssignedException;

นำเข้า com.pi4j.util. Console;

I2CRelay คลาสสาธารณะ {

// ที่อยู่ลงทะเบียนของรีเลย์

สาธารณะ int สุดท้ายคงที่ DOCKER_PI_RELAY_ADDR = 0x10;

//ช่องรีเลย์.

ไบต์สุดท้ายแบบคงที่สาธารณะ DOCKER_PI_RELAY_1 = (ไบต์)0x01;

ไบต์สุดท้ายแบบคงที่สาธารณะ DOCKER_PI_RELAY_2 = (ไบต์)0x02;

ไบต์สุดท้ายแบบคงที่สาธารณะ DOCKER_PI_RELAY_3 = (ไบต์)0x03;

ไบต์สุดท้ายแบบคงที่สาธารณะ DOCKER_PI_RELAY_4 = (ไบต์)0x04;

// สถานะรีเลย์

ไบต์สุดท้ายแบบคงที่สาธารณะ DOCKER_PI_RELAY_ON = (ไบต์)0xFF;

ไบต์สุดท้ายแบบคงที่สาธารณะ DOCKER_PI_RELAY_OFF = (ไบต์)0x00;

โมฆะคงที่สาธารณะหลัก (สตริง args) พ่น InterruptedException, PlatformAlreadyAssignedException, IOException, UnsupportedBusNumberException {

คอนโซลคอนโซลสุดท้าย = คอนโซลใหม่ ();

I2CBus i2c = I2CFactory.getInstance(I2CBus. BUS_1);

อุปกรณ์ I2CDevice = i2c.getDevice (DOCKER_PI_RELAY_ADDR);

console.println("เปิดรีเลย์!");

อุปกรณ์.write(DOCKER_PI_RELAY_1, DOCKER_PI_RELAY_ON);

เธรดการนอนหลับ (500);

console.println("ปิดรีเลย์!");

อุปกรณ์.write(DOCKER_PI_RELAY_1, DOCKER_PI_RELAY_OFF);

}

}

แนะนำ: