You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
127 lines
9.0 KiB
127 lines
9.0 KiB
<!--
|
|
CO_OP_TRANSLATOR_METADATA:
|
|
{
|
|
"original_hash": "f8f541ee945545017a51aaf309aa37c3",
|
|
"translation_date": "2025-08-27T22:12:51+00:00",
|
|
"source_file": "2-farm/lessons/3-automated-plant-watering/virtual-device-relay.md",
|
|
"language_code": "th"
|
|
}
|
|
-->
|
|
# ควบคุมรีเลย์ - ฮาร์ดแวร์ IoT เสมือน
|
|
|
|
ในส่วนนี้ของบทเรียน คุณจะเพิ่มรีเลย์เข้าไปในอุปกรณ์ IoT เสมือนของคุณ นอกเหนือจากเซ็นเซอร์วัดความชื้นในดิน และควบคุมมันตามระดับความชื้นในดิน
|
|
|
|
## ฮาร์ดแวร์เสมือน
|
|
|
|
อุปกรณ์ IoT เสมือนจะใช้รีเลย์ Grove จำลอง ซึ่งทำให้การทดลองนี้เหมือนกับการใช้ Raspberry Pi กับรีเลย์ Grove จริง
|
|
|
|
ในอุปกรณ์ IoT จริง รีเลย์จะเป็นรีเลย์แบบเปิดปกติ (หมายความว่าวงจรเอาต์พุตจะเปิดหรือถูกตัดการเชื่อมต่อเมื่อไม่มีสัญญาณส่งไปยังรีเลย์) รีเลย์แบบนี้สามารถจัดการวงจรเอาต์พุตได้สูงสุด 250V และ 10A
|
|
|
|
### เพิ่มรีเลย์ใน CounterFit
|
|
|
|
เพื่อใช้รีเลย์เสมือน คุณต้องเพิ่มมันในแอป CounterFit
|
|
|
|
#### งาน
|
|
|
|
เพิ่มรีเลย์ในแอป CounterFit
|
|
|
|
1. เปิดโปรเจกต์ `soil-moisture-sensor` จากบทเรียนที่แล้วใน VS Code หากยังไม่ได้เปิด คุณจะเพิ่มลงในโปรเจกต์นี้
|
|
|
|
1. ตรวจสอบให้แน่ใจว่าแอปเว็บ CounterFit กำลังทำงานอยู่
|
|
|
|
1. สร้างรีเลย์:
|
|
|
|
1. ในกล่อง *Create actuator* ในแถบ *Actuators* คลิกที่กล่อง *Actuator type* และเลือก *Relay*
|
|
|
|
1. ตั้งค่า *Pin* เป็น *5*
|
|
|
|
1. คลิกปุ่ม **Add** เพื่อสร้างรีเลย์บน Pin 5
|
|
|
|

|
|
|
|
รีเลย์จะถูกสร้างและปรากฏในรายการ actuators
|
|
|
|

|
|
|
|
## เขียนโปรแกรมควบคุมรีเลย์
|
|
|
|
แอปเซ็นเซอร์วัดความชื้นในดินสามารถเขียนโปรแกรมเพื่อใช้รีเลย์เสมือนได้แล้ว
|
|
|
|
### งาน
|
|
|
|
เขียนโปรแกรมอุปกรณ์เสมือน
|
|
|
|
1. เปิดโปรเจกต์ `soil-moisture-sensor` จากบทเรียนที่แล้วใน VS Code หากยังไม่ได้เปิด คุณจะเพิ่มลงในโปรเจกต์นี้
|
|
|
|
1. เพิ่มโค้ดต่อไปนี้ในไฟล์ `app.py` ใต้ส่วน imports ที่มีอยู่:
|
|
|
|
```python
|
|
from counterfit_shims_grove.grove_relay import GroveRelay
|
|
```
|
|
|
|
คำสั่งนี้นำเข้า `GroveRelay` จากไลบรารี Grove Python shim เพื่อโต้ตอบกับรีเลย์ Grove เสมือน
|
|
|
|
1. เพิ่มโค้ดต่อไปนี้ใต้การประกาศคลาส `ADC` เพื่อสร้างอินสแตนซ์ `GroveRelay`:
|
|
|
|
```python
|
|
relay = GroveRelay(5)
|
|
```
|
|
|
|
โค้ดนี้สร้างรีเลย์โดยใช้ Pin **5** ซึ่งเป็นพินที่คุณเชื่อมต่อรีเลย์
|
|
|
|
1. เพื่อทดสอบว่ารีเลย์ทำงานหรือไม่ ให้เพิ่มโค้ดต่อไปนี้ในลูป `while True:`:
|
|
|
|
```python
|
|
relay.on()
|
|
time.sleep(.5)
|
|
relay.off()
|
|
```
|
|
|
|
โค้ดนี้เปิดรีเลย์ รอ 0.5 วินาที จากนั้นปิดรีเลย์
|
|
|
|
1. รันแอป Python รีเลย์จะเปิดและปิดทุกๆ 10 วินาที โดยมีการหน่วงเวลา 0.5 วินาทีระหว่างการเปิดและปิด คุณจะเห็นรีเลย์เสมือนในแอป CounterFit ปิดและเปิดตามการทำงานของรีเลย์
|
|
|
|

|
|
|
|
## ควบคุมรีเลย์จากความชื้นในดิน
|
|
|
|
ตอนนี้รีเลย์ทำงานแล้ว มันสามารถควบคุมได้ตามการอ่านค่าความชื้นในดิน
|
|
|
|
### งาน
|
|
|
|
ควบคุมรีเลย์
|
|
|
|
1. ลบโค้ด 3 บรรทัดที่คุณเพิ่มเพื่อทดสอบรีเลย์ และแทนที่ด้วยโค้ดต่อไปนี้:
|
|
|
|
```python
|
|
if soil_moisture > 450:
|
|
print("Soil Moisture is too low, turning relay on.")
|
|
relay.on()
|
|
else:
|
|
print("Soil Moisture is ok, turning relay off.")
|
|
relay.off()
|
|
```
|
|
|
|
โค้ดนี้ตรวจสอบระดับความชื้นในดินจากเซ็นเซอร์วัดความชื้นในดิน หากค่ามากกว่า 450 จะเปิดรีเลย์ และปิดรีเลย์หากค่าต่ำกว่า 450
|
|
|
|
> 💁 จำไว้ว่าเซ็นเซอร์วัดความชื้นในดินแบบ capacitive จะอ่านค่าความชื้นในดินต่ำเมื่อดินมีความชื้นมาก และในทางกลับกัน
|
|
|
|
1. รันแอป Python คุณจะเห็นรีเลย์เปิดหรือปิดตามระดับความชื้นในดิน เปลี่ยน *Value* หรือการตั้งค่า *Random* สำหรับเซ็นเซอร์วัดความชื้นในดินเพื่อดูค่าที่เปลี่ยนแปลง
|
|
|
|
```output
|
|
Soil Moisture: 638
|
|
Soil Moisture is too low, turning relay on.
|
|
Soil Moisture: 452
|
|
Soil Moisture is too low, turning relay on.
|
|
Soil Moisture: 347
|
|
Soil Moisture is ok, turning relay off.
|
|
```
|
|
|
|
> 💁 คุณสามารถหาโค้ดนี้ได้ในโฟลเดอร์ [code-relay/virtual-device](../../../../../2-farm/lessons/3-automated-plant-watering/code-relay/virtual-device)
|
|
|
|
😀 โปรแกรมเซ็นเซอร์วัดความชื้นในดินเสมือนที่ควบคุมรีเลย์ของคุณสำเร็จแล้ว!
|
|
|
|
---
|
|
|
|
**ข้อจำกัดความรับผิดชอบ**:
|
|
เอกสารนี้ได้รับการแปลโดยใช้บริการแปลภาษา AI [Co-op Translator](https://github.com/Azure/co-op-translator) แม้ว่าเราจะพยายามให้การแปลมีความถูกต้อง แต่โปรดทราบว่าการแปลโดยอัตโนมัติอาจมีข้อผิดพลาดหรือความไม่ถูกต้อง เอกสารต้นฉบับในภาษาดั้งเดิมควรถือเป็นแหล่งข้อมูลที่เชื่อถือได้ สำหรับข้อมูลที่สำคัญ ขอแนะนำให้ใช้บริการแปลภาษามืออาชีพ เราไม่รับผิดชอบต่อความเข้าใจผิดหรือการตีความผิดที่เกิดจากการใช้การแปลนี้ |