คำอธิบาย
บอร์ดขยาย Multifunction I/O สำหรับ Arduino UNO R3 รองรับอินพุตอนาล็อก อินพุตดิจิตอล เอาต์พุตรีเลย์ และ RS485 เหมาะสำหรับงาน Automation, PLC Remote I/O, Data Collection และงานควบคุมในตู้ไฟอุตสาหกรรม
คุณสมบัติ
- รองรับบอร์ด Arduino UNO R3
- มาพร้อมเคสสำหรับติดตั้งบนราง DIN Rail
- แยก Terminal I/O ช่วยต่อสายง่าย
- ช่วยลดความยุ่งยากในการเดินสาย
- โครงสร้างแข็งแรง เหมาะกับงานตู้ไฟและงานอุตสาหกรรม
- รองรับการถอดเปลี่ยนบอร์ดได้สะดวก
สเปกสินค้า (Specifications)
- Model: DNUNA16
- Compatible Board: Arduino UNO R3
- แรงดันไฟฟ้า (Working Voltage): 12V หรือ 24V
- Terminal Type: Screw Terminal
- Material: ABS Plastic + PCB
- Input / Output Expansion: Digital & Analog Signal Breakout
- Application: Industrial Control / IoT / Automation System
- Wiring Method: Terminal Block Connection
- Enclosure Type: DIN Rail Protective Case
Interface / อินเทอร์เฟซการเชื่อมต่อ
- 4CH 4-20mA Current Analog Input รองรับรับสัญญาณกระแส 4-20mA จำนวน 4 ช่อง
- 2CH 0-5V / 0-10V Voltage Analog Input รองรับรับสัญญาณแรงดัน 0-5V และ 0-10V จำนวน 2 ช่อง
- 6CH NPN Digital Input รองรับอินพุตดิจิตอลแบบ NPN จำนวน 6 ช่อง
- 4CH Relay Digital Output เอาต์พุตรีเลย์แบบ Dry Contact จำนวน 4 ช่อง กระแสไฟฟ้าสูงสุด: รองรับได้สูงสุด 10A (10 แอมป์) ต่อช่อง
- 1CH RS485 Communication Interface พอร์ตสื่อสาร RS485 สำหรับเชื่อมต่อ PLC หรือระบบ Remote I/O
- 1CH LED Output เอาต์พุต LED แสดงสถานะการทำงาน D13
รองรับติดตั้ง
- UNO R3 Compatible Interface รองรับการเชื่อมต่อกับ Arduino UNO R3 Compatible Board
- DIN Rail Mount Interface รองรับติดตั้งบนราง DIN35 / C45 สำหรับงานตู้คอนโทรลอุตสาหกรรม
Port Mapping
| Port | Function | UNO Pin |
|---|---|---|
| II1 – II4 | II1-II4 ใช้รับสัญญาณกระแส 0-20mA / 4-20mA | A0 – A3 |
| VI1 – VI2 | VI1-VI2 ใช้รับสัญญาณแรงดัน 0-5V / 0-10V | A4 – A5 |
| IN1 – IN8 | IN1-IN8 รองรับอินพุตดิจิตอลแบบ NPN | D7 – D12 |
| CH1 – CH4 | CH1-CH4 เป็นเอาต์พุตรีเลย์สำหรับควบคุมโหลดภายนอก | D3 – D6 |
การนำไปใช้งาน
- ระบบ Automation ภายในโรงงาน
- โปรเจค IoT และ Smart Factory
- ระบบควบคุมเครื่องจักร
- งานทดลองและพัฒนาระบบ Embedded
- ระบบควบคุมผ่าน Relay หรือ Sensor
- งานติดตั้งในตู้ Control Panel
Dimension
- รูปแบบติดตั้งบนราง DIN Rail มาตรฐาน
- ขนาดขึ้นอยู่กับตัวเคสและบอร์ด Arduino UNO R3
ในชุดประกอบด้วย
- 1 x DNUNA16 Expanding Board
- 1 x DIN Rail Casing
- 1 x Terminal Expansion PCB
- 1 x ชุดอุปกรณ์ยึดติดตั้ง
ตัวอย่างโค้ด Arduino สำหรับอ่านค่า IN1-IN6:

// 1. กำหนดขาพินสำหรับช่อง IN1 - IN6 ตามสเปกของบอร์ด DNUNA16
const int IN1 = 7;
const int IN2 = 8;
const int IN3 = 9;
const int IN4 = 10;
const int IN5 = 11;
const int IN6 = 12;
void setup() {
Serial.begin(9600);
// 2. ตั้งค่าพินเป็นโหมดรับข้อมูลและเปิดใช้งาน Internal Pull-up
// (เทียบเท่ากับการใช้ pinMode(IN1, INPUT) ตามด้วย digitalWrite(IN1, HIGH) ในโค้ดโรงงาน)
pinMode(IN1, INPUT_PULLUP);
pinMode(IN2, INPUT_PULLUP);
pinMode(IN3, INPUT_PULLUP);
pinMode(IN4, INPUT_PULLUP);
pinMode(IN5, INPUT_PULLUP);
pinMode(IN6, INPUT_PULLUP);
}
void loop() {
// 3. อ่านค่าสถานะจากพินอินพุต
int statusIN1 = digitalRead(IN1);
int statusIN2 = digitalRead(IN2);
// สามารถประกาศตัวแปรอ่านค่า IN3 - IN6 เพิ่มเติมได้ตามต้องการ...
// 4. แสดงผลทาง Serial Monitor
// เนื่องจากเป็น NPN (Active LOW) สัญญาณ LOW = ถูกกระตุ้น (ทำงาน)
Serial.print("Input IN1: ");
if (statusIN1 == LOW) {
Serial.print("ON (Triggered) ");
} else {
Serial.print("OFF ");
}
Serial.print("| Input IN2: ");
if (statusIN2 == LOW) {
Serial.println("ON (Triggered)");
} else {
Serial.println("OFF");
}
// หน่วงเวลา 0.5 วินาทีเพื่อให้อ่านค่าได้ง่ายขึ้น
delay(500);
}
ตัวอย่างโค้ด Arduino สำหรับ Output Relay

โค้ดสำหรับควบคุมรีเลย์เอาต์พุตไว้ในชื่อไฟล์ DNUNA16_6DI_4Relay_DEMO.pde ซึ่งมีจุดเด่นคือการใช้ไลบรารี FlexiTimer2 ในการนับเวลาหน่วง (Delay timer) เพื่อควบคุมการปิดรีเลย์แต่ละตัวอย่างอิสระ
นี่คือตัวอย่างโค้ดต้นฉบับจากผู้ผลิตสำหรับการทดสอบรีเลย์ (RO1 – RO4) ร่วมกับระบบตั้งเวลาหน่วง:
#include <FlexiTimer2.h> // จำเป็นต้องติดตั้งและเรียกใช้ไลบรารี FlexiTimer2
// กำหนดขาพินสำหรับรีเลย์ 4 ช่อง (รองรับกระแส 10A)
const int RO1 = 3;
const int RO2 = 4;
const int RO3 = 5;
const int RO4 = 6;
// กำหนดขาพินสำหรับดิจิทัลอินพุต 6 ช่องแบบ NPN
const int IN1 = 7;
const int IN2 = 8;
const int IN3 = 9;
const int IN4 = 10;
const int IN5 = 11;
const int IN6 = 12;
// ตั้งค่าเวลาหน่วง (Delay time) หน่วยเป็นวินาที สามารถกำหนดได้ตั้งแต่ 1-9999 วินาที
int relay1_delay_time = 1;
int relay2_delay_time = 2;
int relay3_delay_time = 3;
int relay4_delay_time = 4;
// ตัวแปรเก็บเวลาที่เหลืออยู่
int relay1_time_left;
int relay2_time_left;
int relay3_time_left;
int relay4_time_left;
uint OneSecondCnt=500;
// ฟังก์ชันนับเวลาถอยหลังเพื่อสั่งปิดการทำงานของรีเลย์
void TubeDisplay4Bit(void) {
OneSecondCnt--;
if(OneSecondCnt==0) {
OneSecondCnt = 500;
// หากเวลายังไม่หมดให้ลบเวลาลงเรื่อยๆ แต่ถ้าเวลาหมดแล้วให้สั่งรีเลย์เป็น LOW (ปิด)
if(relay1_time_left>0){relay1_time_left--; } else {digitalWrite(RO1, LOW);}
if(relay2_time_left>0){relay2_time_left--; } else {digitalWrite(RO2, LOW);}
if(relay3_time_left>0){relay3_time_left--; } else {digitalWrite(RO3, LOW);}
if(relay4_time_left>0){relay4_time_left--; } else {digitalWrite(RO4, LOW);}
}
}
void setup() {
// ตั้งค่าพินอินพุต
pinMode(IN1, INPUT); pinMode(IN2, INPUT); pinMode(IN3, INPUT);
pinMode(IN4, INPUT); pinMode(IN5, INPUT); pinMode(IN6, INPUT);
// ตั้งค่าพินเอาต์พุตสำหรับรีเลย์
pinMode(RO1, OUTPUT); pinMode(RO2, OUTPUT);
pinMode(RO3, OUTPUT); pinMode(RO4, OUTPUT);
// ตั้งค่าให้ FlexiTimer2 เรียกใช้ฟังก์ชัน TubeDisplay4Bit ทุกๆ 2 มิลลิวินาที
FlexiTimer2::set(2, 1.0/1000, TubeDisplay4Bit);
FlexiTimer2::start();
// เปิดใช้งาน Internal Pull-up สำหรับพินอินพุต
digitalWrite(IN1, HIGH); digitalWrite(IN2, HIGH); digitalWrite(IN3, HIGH);
digitalWrite(IN4, HIGH); digitalWrite(IN5, HIGH); digitalWrite(IN6, HIGH);
}
void loop() {
while(1) {
// วงลูปหลักสำหรับเขียนเงื่อนไขการทำงานเพิ่มเติม
}
}
อธิบายหลักการทำงานหลักจากโค้ด:
- การตั้งเวลาหน่วง: คุณสามารถแก้ไขตัวเลขในตัวแปร
relay1_delay_timeถึงrelay4_delay_timeเพื่อกำหนดเวลา (เป็นวินาที) ว่าต้องการให้รีเลย์แต่ละตัวทำงานนานเท่าใดก่อนจะตัดการทำงาน - การทำงานเบื้องหลัง: โค้ดนี้ใช้
FlexiTimer2::set(2, 1.0/1000, TubeDisplay4Bit);เพื่อสร้าง Interrupt ให้นับถอยหลังเวลาที่เหลืออยู่ (time_left) หากเวลาเหลือเท่ากับ 0 บอร์ดจะสั่งdigitalWrite(RO, LOW)เพื่อตัดไฟรีเลย์ช่องนั้นๆ ทันที
(หมายเหตุ: เพื่อให้โค้ดนี้ทำงานได้สมบูรณ์ จำเป็นต้องมีการกำหนดค่าให้ตัวแปร relayX_time_left เท่ากับ relayX_delay_time ภายในฟังก์ชันการรับค่าอินพุตเพิ่มเติมใน void loop() ด้วยตนเอง)
วิธีการติดตั้งไลบรารี
- ไปที่โฟลเดอร์
librariesของโปรแกรม Arduino IDE ในเครื่องคอมพิวเตอร์ของคุณ (โดยปกติจะอยู่ที่Documents\Arduino\libraries) - สร้างโฟลเดอร์ใหม่และตั้งชื่อว่า FlexiTimer2
- ภายในโฟลเดอร์
FlexiTimer2ให้คุณสร้างไฟล์เปล่าๆ ขึ้นมา และคัดลอกเนื้อหาโค้ดจากเอกสารไปใส่ให้ตรงกับชื่อไฟล์ดังต่อไปนี้:- FlexiTimer2.h (คัดลอกโค้ดทั้งหมดที่อยู่ใต้หัวข้อ
#### FILE: FlexiTimer2/FlexiTimer2.h) - FlexiTimer2.cpp (คัดลอกโค้ดทั้งหมดที่อยู่ใต้หัวข้อ
#### FILE: FlexiTimer2/FlexiTimer2.cpp) - keywords.txt (คัดลอกข้อความใต้หัวข้อ
#### FILE: FlexiTimer2/keywords.txt)
- FlexiTimer2.h (คัดลอกโค้ดทั้งหมดที่อยู่ใต้หัวข้อ
- ปิดและเปิดโปรแกรม Arduino IDE ใหม่อีกครั้ง เพื่อให้โปรแกรมโหลดไลบรารีเข้าสู่ระบบ






รีวิว
ยังไม่มีบทวิจารณ์