ไม่มีบอร์ด? ใช้ Wokwi จำลอง
ทำขั้นที่ 1–4 ของ Arduino ในเบราว์เซอร์ ไม่ต้องมีฮาร์ดแวร์
ถ้าคุณยังไม่มีบอร์ดหรือเซนเซอร์ ใช้ Wokwi ซึ่งเป็นตัวจำลองวงจร Arduino บนเว็บ ต่อวงจร เขียนโค้ด กดรัน และดู Serial Monitor ได้ในหน้าเดียว ไม่ต้องติดตั้งอะไร และไม่ต้องใช้ Arduino Cloud Agent
หน้า Supported Hardware ของ Wokwi ที่ผู้เขียนตรวจไม่ได้ระบุ UNO R4 ไว้ในรายการบอร์ดมาตรฐาน และการจำลอง Wi-Fi ของ Wokwi ใช้ต่อออก Internet ไม่ได้ต่อกับ gateway ในห้องเรียนของผู้สอน ได้ (ผู้เขียนไม่ได้ทดสอบฟีเจอร์เสริมที่เชื่อมเครือข่ายภายใน) ชุดโค้ดในหน้านี้จึงออกแบบสำหรับ Arduino Uno และจำลองส่วน Wi-Fi ด้วย Serial แทน
เทียบกับบอร์ดจริง
| เรื่อง | บอร์ดจริง (UNO R4 WiFi) | Wokwi (Arduino Uno) |
|---|---|---|
| โค้ด | devices/01_–04_ |
devices/wokwi/01_–04_ |
| ADC | 10 หรือ 14 บิต (analogReadResolution) |
10 บิตเท่านั้น (0–1023) ไม่ต้องเรียก analogReadResolution |
| เซนเซอร์แสง | LDR หรือ potentiometer จำลองแสง | potentiometer (หมุนขวา = ค่ามาก = สว่าง) |
| ขั้นที่ 3 (Wi-Fi + gateway) | ส่ง HTTP ไป gateway จริง | Serial จำลอง gateway: พิมพ์ on / off / auto แทนหน้าแชต |
| ขั้นที่ 4 | 14 บิต, Wi-Fi, LED ที่ D5 | 10 บิต, ไม่มี Wi-Fi, LED ที่ D5 เหมือนกัน |
| หน้าแชตจริงของผู้สอน | ใช้ได้ | ใช้ไม่ได้ (ไม่มีทางเชื่อมจาก Wokwi) |
ชิ้นส่วน Photoresistor Sensor ของ Wokwi (ขา AO) ให้ค่าต่ำลงเมื่อสว่างขึ้น ผู้เขียนทดสอบตั้งความสว่างเป็น 500 lux ได้ค่า A0 ประมาณ 250 และตั้ง 5,000 lux ได้ประมาณ 62 ซึ่งกลับด้านกับที่โค้ดของเราสมมติ (ค่ามาก = สว่าง) ชุดนี้จึงใช้ potentiometer ถ้าอยากใช้เซนเซอร์แสงของ Wokwi ให้เติม raw = 1023 - raw; หลังบรรทัด analogRead
เริ่มใช้งาน (3 นาที)
- เปิด https://wokwi.com/projects/new/arduino-uno (โปรเจกต์ Arduino Uno ใหม่)
- คลิกแท็บ diagram.json แล้วเลือกข้อความทั้งหมด (Ctrl+A) และวางไฟล์
diagram.jsonของขั้นที่ต้องการ (ดูด้านล่าง) ในหน้าจำลองจะเห็นบอร์ด Uno ต่อกับ potentiometer (และ LED ในขั้นที่ 4) - คลิกแท็บ sketch.ino แล้วลบโค้ดเดิม วางโค้ดของขั้นนั้น
- กดปุ่มสีเขียว Start the simulation แล้วดู Serial Monitor ที่ด้านล่างของหน้าจำลอง
- คลิกที่ potentiometer แล้วลากลูกบิดเพื่อเปลี่ยน “ความสว่าง” ดูตัวเลขใน Serial Monitor เปลี่ยน
โค้ดและ diagram ของแต่ละขั้นอยู่ในโฟลเดอร์ devices/wokwi/ ใน repo (เปิดไฟล์แล้วกด Copy raw file)
การบันทึกโปรเจกต์ใน Wokwi ต้องล็อกอิน แต่รันและแก้โค้ดได้โดยไม่ต้องล็อกอิน ถ้าไม่บันทึก งานจะหายเมื่อปิดหน้าเว็บ ให้เก็บโค้ดของคุณไว้ในไฟล์ของเครื่องด้วย
วงจร: ขั้นที่ 1–3
ใช้ชิ้นส่วนสองอย่างคือ Arduino Uno และ Potentiometer
| potentiometer | ต่อกับบอร์ด Uno |
|---|---|
VCC |
5V |
GND |
GND |
SIG |
A0 |
devices/wokwi/01_read_light/diagram.json
{
"version": 1,
"author": "aiot-for-beginners",
"editor": "wokwi",
"parts": [
{
"type": "wokwi-arduino-uno",
"id": "uno",
"top": 0,
"left": 0,
"attrs": {}
},
{
"type": "wokwi-potentiometer",
"id": "pot1",
"top": -120,
"left": 20,
"attrs": {}
}
],
"connections": [
[
"pot1:VCC",
"uno:5V",
"red",
[
"v0"
]
],
[
"pot1:GND",
"uno:GND.2",
"black",
[
"v0"
]
],
[
"pot1:SIG",
"uno:A0",
"green",
[
"v0"
]
]
],
"dependencies": {}
}ถ้าวางไม่ได้หรืออยากต่อเอง: คลิกปุ่ม + ในหน้าจำลองเพื่อเพิ่มชิ้นส่วน (Potentiometer) แล้วลากสายจากขาของชิ้นส่วนไปยังขาของบอร์ด
วงจร: ขั้นที่ 4
เพิ่ม LED และ Resistor 220 Ω: ขา D5 → ตัวต้านทาน → ขา A (anode) ของ LED → ขา C (cathode) ของ LED → GND
devices/wokwi/04_smart_lamp_tuned/diagram.json
{
"version": 1,
"author": "aiot-for-beginners",
"editor": "wokwi",
"parts": [
{
"type": "wokwi-arduino-uno",
"id": "uno",
"top": 0,
"left": 0,
"attrs": {}
},
{
"type": "wokwi-potentiometer",
"id": "pot1",
"top": -120,
"left": 20,
"attrs": {}
},
{
"type": "wokwi-led",
"id": "led1",
"top": -140,
"left": 230,
"attrs": {
"color": "yellow"
}
},
{
"type": "wokwi-resistor",
"id": "r1",
"top": -70,
"left": 200,
"rotate": 90,
"attrs": {
"value": "220"
}
}
],
"connections": [
[
"pot1:VCC",
"uno:5V",
"red",
[
"v0"
]
],
[
"pot1:GND",
"uno:GND.2",
"black",
[
"v0"
]
],
[
"pot1:SIG",
"uno:A0",
"green",
[
"v0"
]
],
[
"uno:5",
"r1:1",
"orange",
[
"v0"
]
],
[
"r1:2",
"led1:A",
"orange",
[
"v0"
]
],
[
"led1:C",
"uno:GND.1",
"black",
[
"v0"
]
]
],
"dependencies": {}
}ขั้นที่ 1–2: อ่านค่าและไฟกลางคืน
ทำเหมือนที่หน้าสร้างโคมไฟ โดยใช้โค้ดจาก devices/wokwi/01_read_light/sketch.ino และ 02_local_nightlight/sketch.ino ซึ่งต่างจากของบอร์ดจริงแค่ไม่เรียก analogReadResolution(10) ในขั้นที่ 2 ให้สังเกต LED สีแดงเล็กที่บอร์ดมีตัวอักษร L (ขา 13): ติดเมื่อหมุนไปทางมืด (ค่าต่ำกว่า 358)
ขั้นที่ 3: จำลอง gateway ด้วย Serial
Wokwi เชื่อม gateway จริงไม่ได้ สเก็ตช์ devices/wokwi/03_smart_lamp_serial/sketch.ino จึงทำหน้าที่ของ gateway ในตัวเอง และพิมพ์ข้อมูลที่บอร์ดจริงจะส่ง (->) กับคำตอบที่ได้รับ (<-) ทุก 3 วินาที (หมายเหตุ: ตัวจำลองบางเครื่องเดินช้ากว่าเวลาจริง ดูตัวเลขความเร็วมุมขวาบนของหน้าจำลอง รอบแรกอาจใช้เวลานาน)
Smart lamp (Wokwi). Type: on / off / auto / ?
-> {"schema_version":1,"device_id":"desk-01","seq":0,"light_raw":310}
<- {"schema_version":1,"device_id":"desk-01","seq":0,"action":"LED_ON","mode":"auto","light_pct":30}
สองบรรทัดนี้คือ JSON ชุดเดียวกับที่บอร์ดจริงกับ gateway ส่งหากัน (ดูอธิบายในหน้าสร้างโคมไฟ) พิมพ์คำสั่งในช่องด้านล่าง Serial Monitor แล้วกด Enter เหมือนพิมพ์ในหน้าแชต
| พิมพ์ | ผล |
|---|---|
on |
เปิดไฟตลอด ("mode":"on") |
off |
ปิดไฟตลอด |
auto |
กลับไปตามความสว่าง |
? |
ดูโหมดปัจจุบัน |
ทดลอง
- หมุน potentiometer ข้ามจุดมืด/สว่าง ตัวเลข
light_pctกับactionเปลี่ยนที่เท่าไร - พิมพ์
onแล้วหมุนไปทางสว่าง ไฟยังติดอยู่หรือไม่ เปลี่ยนmodeเป็นอะไร - หา
decide()ในโค้ด เทียบกับกฎในปรับแก้โค้ด แล้วเปลี่ยนON_BELOW = 30และOFF_ABOVE = 40ลองหมุนให้ค่าอยู่ช่วง 30–40% ไฟคงสถานะเดิมหรือไม่ (hysteresis) - เพิ่มคำสั่ง
dimที่ให้ไฟติดเมื่อต่ำกว่า 15% เท่านั้น ต้องแก้ตรงไหนบ้าง
ขั้นที่ 4: ฉบับปรับแก้
ใช้ devices/wokwi/04_smart_lamp_tuned/sketch.ino กับวงจรที่มี LED ที่ D5 รันแล้วจะเห็น LED ค่อย ๆ สว่างและหรี่ (PWM fade) และ Serial Monitor พิมพ์ค่าเฉลี่ย เปอร์เซ็นต์ และสถานะทุก 1 วินาที
avg=512 (50%) lamp=OFF pwm=0
ทดลองเหมือนในหน้าปรับแก้โค้ด: เปลี่ยน WINDOW (16 → 64 → 4), FADE_STEP (5 → 1), ช่วง hysteresis และ SENSOR_DARK/SENSOR_BRIGHT แล้วสังเกตผล ในหน้าจำลองให้ลองหมุน potentiometer เร็ว ๆ เพื่อเทียบ smoothing กับค่าดิบ
แก้ปัญหาที่พบบ่อยใน Wokwi
| อาการ | สาเหตุที่พบบ่อย | วิธีแก้ |
|---|---|---|
| กด Start แล้วไม่เห็นอะไรใน Serial Monitor | ยังคอมไพล์ไม่เสร็จ หรือไม่ได้ Serial.begin(115200) |
รอสักครู่ ดูแถบ error ที่ด้านล่างของ editor |
| สายไม่ขึ้นในหน้าจำลองหลังวาง diagram.json | JSON ผิดรูปแบบ (วางไม่ครบ หรือวางทับแท็บ sketch.ino) | เลือกทั้งหมดในแท็บ diagram.json แล้ววางใหม่ |
ค่า light ไม่เปลี่ยนเมื่อหมุน |
ยังไม่ได้คลิกที่ potentiometer เพื่อลากลูกบิด หรือสาย SIG ไม่ได้ต่อ A0 |
คลิกที่ลูกบิดแล้วลาก ตรวจสาย SIG ถึง A0 |
| ค่าอยู่ที่ 0 หรือ 1023 ตลอด | สาย VCC หรือ GND ต่อกลับกัน |
ตรวจว่า VCC ไป 5V และ GND ไป GND |
| ขั้นที่ 4: LED ไม่ติด | ต่อ LED กลับขั้ว หรือไม่ได้ต่อตัวต้านทาน | ขา A (anode) ต่อฝั่งตัวต้านทาน ขา C ต่อ GND |
| พิมพ์คำสั่งใน Serial Monitor แล้วไม่ตอบ | ไม่ได้กด Enter หรือพิมพ์ไม่ตรงคำสั่ง | พิมพ์ on, off, auto หรือ ? ตัวพิมพ์เล็ก แล้วกด Enter |
| จำลองช้ามาก | เครื่องช้า หรือเปิดแท็บ/โปรแกรมหนักอยู่ | ปิดแท็บอื่น ดูเลข % ความเร็วที่มุมขวาบนของหน้าจำลอง |
รันแล้วขึ้น error เรื่อง analogReadResolution |
วางโค้ดของบอร์ดจริงลงใน Wokwi (Uno ไม่มีฟังก์ชันนี้) | ใช้โค้ดในโฟลเดอร์ devices/wokwi/ |
ใช้ WiFiS3.h ไม่ได้ |
Wokwi (Uno) ไม่มี Wi-Fi | ใช้ขั้นที่ 3 แบบ Serial จำลอง gateway |
เมื่อได้บอร์ดจริง
นำโค้ดจากโฟลเดอร์ devices/01_–04_ ไปอัปโหลดตามหน้าเตรียมเครื่องมือ และสร้างโคมไฟ ความรู้ที่ได้จากการจำลองใช้ต่อได้ทั้งหมด สิ่งที่เพิ่มคือ Wi-Fi และการสั่งผ่านหน้าแชตจริง