BDEX01 บอร์ดขยายสำหรับ Arduino UNO R3 Multifunction Expansion Board eletechsup DNUNA16

฿1,280.00

สั่งจองสินค้าได้

คำอธิบาย

บอร์ดขยาย 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  

การอ่านค่าสัญญาณแอนะล็อก (Analog) จากช่อง II1-II4 บนบอร์ด DNUNA16 มีวัตถุประสงค์เพื่อใช้วัดสัญญาณกระแสไฟฟ้าในช่วง 0-20mA โดยมีหลักการและวิธีการเขียนโค้ดดังนี้
1. ทำความเข้าใจหลักการทำงานและวงจร
  • การเชื่อมต่อพิน: ช่องรับสัญญาณ II1, II2, II3 และ II4 จะเชื่อมต่อเข้ากับขา A0, A1, A2 และ A3 ของบอร์ด Arduino ตามลำดับ
  • การแปลงกระแสเป็นแรงดัน: เนื่องจาก Arduino ไม่สามารถอ่านค่ากระแสไฟฟ้าได้โดยตรง บนบอร์ดจึงมีการต่อตัวต้านทานความแม่นยำสูงขนาด 240 โอห์ม (240Ω หรือ 0.24K) ไว้ในวงจรเพื่อแปลงกระแสไฟฟ้า (0-20mA) ให้เป็นแรงดันไฟฟ้า (Voltage)
  • ค่าสัมประสิทธิ์การแปลง (Conversion Ratio): โค้ดต้นฉบับกำหนดค่าอ้างอิงแรงดัน ADC ไว้ที่ 5.00V ทำให้ได้สมการคำนวณสัดส่วนคือ (5.00 / 0.24 / 1024) * 100 ซึ่งจะได้ค่าตัวคูณ (Ratio) คงที่เท่ากับ 2.0345 เพื่อใช้แปลงค่าดิบจาก ADC ให้กลายเป็นค่ากระแสไฟฟ้าในหน่วย 0.01mA
2. ตัวอย่างการเขียนโค้ด Arduino อ้างอิงจากชุดโค้ดทดสอบ
// 1. กำหนดขาพินสำหรับช่อง II1-II4 (0-20MA)
const int II1 = A0; 
const int II2 = A1; 
const int II3 = A2; 
const int II4 = A3;

// 2. ตัวแปรเก็บค่ากระแสไฟฟ้าที่อ่านได้ (หน่วยเป็น 0.01mA)
int I1_Current = 0; 
int I2_Current = 0; 

// 3. กำหนดค่าตัวคูณ (Ratio) และค่าการปรับเทียบ (Calibration)
#define Current_ratio_value_20MA  2.0345  // ค่าคงที่สำหรับคำนวณกระแส
float I1_Calibration_value = 1.0;         // (1000/1000) ใช้ปรับแก้ความคลาดเคลื่อนเชิงเส้น
float I2_Calibration_value = 1.0;

void setup() {
  Serial.begin(9600);
  
  // 4. ตั้งค่าแรงดันอ้างอิง (Reference Voltage) ให้เป็น 5V
  analogReference(DEFAULT); 
}

void loop() {
  // 5. อ่านค่าดิบจากพิน A0 และ A1 (ค่าตั้งแต่ 0-1023)
  int rawValue1 = analogRead(II1);
  int rawValue2 = analogRead(II2);

  // 6. คำนวณเป็นค่ากระแสไฟฟ้า (หน่วย 0.01mA)
  I1_Current = rawValue1 * Current_ratio_value_20MA * I1_Calibration_value;
  I2_Current = rawValue2 * Current_ratio_value_20MA * I2_Calibration_value;

  // 7. แสดงผลทาง Serial Monitor (หาร 100 เพื่อแปลงกลับเป็นหน่วย mA)
  Serial.print("Current II1: ");
  Serial.print(I1_Current / 100.0); 
  Serial.println(" mA");

  Serial.print("Current II2: ");
  Serial.print(I2_Current / 100.0); 
  Serial.println(" mA");

  delay(1000); // หน่วงเวลา 1 วินาที
}
ข้อควรระวังเพิ่มเติม: หากค่าที่อ่านได้มีความคลาดเคลื่อน ผู้ผลิตระบุว่าอาจเกิดจากความคลาดเคลื่อนของแหล่งจ่ายไฟ 5V หรือตัวต้านทาน ซึ่งถือเป็นความคลาดเคลื่อนเชิงเส้น (Linear error) คุณสามารถชดเชยค่าได้โดยการปรับตัวเลขในตัวแปร I1_Calibration_value (เช่น จาก 1000/1000 เปลี่ยนเป็นอัตราส่วนที่เหมาะสมกับเครื่องมือวัดจริง)
(หมายเหตุ: ในบรรทัดคำสั่ง analogRead() และการ Serial.print เป็นการเขียนเสริมขึ้นมาตามรูปแบบมาตรฐานของ Arduino เพื่อให้เห็นภาพการนำตัวแปรในเอกสารมาใช้งานจริงได้อย่างสมบูรณ์)
การอ่านค่าแรงดันไฟฟ้า (Voltage) จากช่อง VI1 และ VI2 บนบอร์ด DNUNA16 จะใช้สำหรับวัดสัญญาณแรงดันในช่วง 0-10V โดยมีหลักการทำงานและวิธีเขียนโค้ดที่อ้างอิงจากข้อมูลผู้ผลิตดังนี้ครับ
1. หลักการทำงานและวงจร
  • การเชื่อมต่อพิน: ช่องรับสัญญาณ VI1 และ VI2 จะเชื่อมต่อเข้ากับพินแอนะล็อก A4 และ A5 ของบอร์ด Arduino ตามลำดับ
  • วงจรแบ่งแรงดัน (Voltage Divider): เนื่องจากบอร์ด Arduino UNO สามารถอ่านแรงดันได้สูงสุดเพียง 5V บนบอร์ด DNUNA16 จึงออกแบบให้มีวงจรแบ่งแรงดันที่ประกอบด้วยตัวต้านทานขนาด 12KΩ และ 10KΩ เพื่อลดทอนสัญญาณ 0-10V จากภายนอกให้อยู่ในระดับที่ Arduino อ่านได้
  • ค่าสัมประสิทธิ์การแปลง (Conversion Ratio): โค้ดต้นฉบับได้อ้างอิงแรงดัน ADC ไว้ที่ 5.00V และใช้สมการคำนวณสัดส่วนคือ 5.00 * (100+120) / 1024 ซึ่งจะได้ค่าตัวคูณคงที่เท่ากับ 1.0742 สำหรับแปลงค่าดิบจาก ADC (0-1023) ให้กลายเป็นแรงดันไฟฟ้าในหน่วย 0.01V
2. ตัวอย่างการเขียนโค้ด Arduino นำตัวแปรและค่าคงที่จากชุดโค้ดทดสอบ มาจัดเรียงโค้ดให้ใช้งานได้ง่ายขึ้น
// 1. กำหนดขาพินสำหรับช่อง VI1 และ VI2 (0-10V)
const int VI1 = A4; 
const int VI2 = A5; 

// 2. ตัวแปรเก็บค่าแรงดันไฟฟ้าที่อ่านได้ (หน่วยเป็น 0.01V)
int V1_Voltage = 0; 
int V2_Voltage = 0; 

// 3. กำหนดค่าตัวคูณ (Ratio) และค่าการปรับเทียบ (Calibration)
#define Voltage_ratio_value_10V 1.0742    // ค่าคงที่สำหรับคำนวณแรงดัน (5.00 * (100+120)/1024)
float V1_Calibration_value = 1.0;         // (1000/1000) ใช้ปรับแก้ความคลาดเคลื่อนเชิงเส้น
float V2_Calibration_value = 1.0;

void setup() {
  Serial.begin(9600);
  
  // 4. ตั้งค่าแรงดันอ้างอิง (Reference Voltage) ให้เป็น 5V
  analogReference(DEFAULT); 
}

void loop() {
  // 5. อ่านค่าดิบจากพิน A4 และ A5 (ค่าตั้งแต่ 0-1023)
  int rawValueV1 = analogRead(VI1);
  int rawValueV2 = analogRead(VI2);

  // 6. คำนวณเป็นค่าแรงดันไฟฟ้า (หน่วย 0.01V)
  V1_Voltage = rawValueV1 * Voltage_ratio_value_10V * V1_Calibration_value;
  V2_Voltage = rawValueV2 * Voltage_ratio_value_10V * V2_Calibration_value;

  // 7. แสดงผลทาง Serial Monitor (หาร 100 เพื่อแปลงเป็นหน่วย Volts หรือ V)
  Serial.print("Voltage VI1: ");
  Serial.print(V1_Voltage / 100.0); 
  Serial.println(" V");

  Serial.print("Voltage VI2: ");
  Serial.print(V2_Voltage / 100.0); 
  Serial.println(" V");

  delay(1000); // หน่วงเวลา 1 วินาที
}
คำแนะนำเพิ่มเติม: เช่นเดียวกับการอ่านค่ากระแสไฟฟ้า หากพบว่าค่าแรงดันที่อ่านได้มีความคลาดเคลื่อน (ซึ่งอาจเกิดจากความคลาดเคลื่อนของแรงดันไฟเลี้ยง 5V หรือค่าความคลาดเคลื่อนของตัวต้านทาน 12KΩ และ 10KΩ) คุณสามารถปรับจูนความแม่นยำ (Calibration) ได้โดยการปรับตัวเลขในตัวแปร V1_Calibration_value และ V2_Calibration_value เพื่อชดเชยค่าความผิดพลาดเชิงเส้นดังกล่าว 
ตัวอย่างโค้ด 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) {
    // วงลูปหลักสำหรับเขียนเงื่อนไขการทำงานเพิ่มเติม
  } 
}
อธิบายหลักการทำงานหลักจากโค้ด:
  1. การตั้งเวลาหน่วง: คุณสามารถแก้ไขตัวเลขในตัวแปร relay1_delay_time ถึง relay4_delay_time เพื่อกำหนดเวลา (เป็นวินาที) ว่าต้องการให้รีเลย์แต่ละตัวทำงานนานเท่าใดก่อนจะตัดการทำงาน
  2. การทำงานเบื้องหลัง: โค้ดนี้ใช้ FlexiTimer2::set(2, 1.0/1000, TubeDisplay4Bit); เพื่อสร้าง Interrupt ให้นับถอยหลังเวลาที่เหลืออยู่ (time_left) หากเวลาเหลือเท่ากับ 0 บอร์ดจะสั่ง digitalWrite(RO, LOW) เพื่อตัดไฟรีเลย์ช่องนั้นๆ ทันที
(หมายเหตุ: เพื่อให้โค้ดนี้ทำงานได้สมบูรณ์ จำเป็นต้องมีการกำหนดค่าให้ตัวแปร relayX_time_left เท่ากับ relayX_delay_time ภายในฟังก์ชันการรับค่าอินพุตเพิ่มเติมใน void loop() ด้วยตนเอง)
วิธีการติดตั้งไลบรารี  
  1. ไปที่โฟลเดอร์ libraries ของโปรแกรม Arduino IDE ในเครื่องคอมพิวเตอร์ของคุณ (โดยปกติจะอยู่ที่ Documents\Arduino\libraries)
  2. สร้างโฟลเดอร์ใหม่และตั้งชื่อว่า FlexiTimer2
  3. ภายในโฟลเดอร์ FlexiTimer2 ให้คุณสร้างไฟล์เปล่าๆ ขึ้นมา และคัดลอกเนื้อหาโค้ดจากเอกสารไปใส่ให้ตรงกับชื่อไฟล์ดังต่อไปนี้:
    • FlexiTimer2.h (คัดลอกโค้ดทั้งหมดที่อยู่ใต้หัวข้อ #### FILE: FlexiTimer2/FlexiTimer2.h)
    • FlexiTimer2.cpp (คัดลอกโค้ดทั้งหมดที่อยู่ใต้หัวข้อ #### FILE: FlexiTimer2/FlexiTimer2.cpp)
    • keywords.txt (คัดลอกข้อความใต้หัวข้อ #### FILE: FlexiTimer2/keywords.txt)
  4. ปิดและเปิดโปรแกรม Arduino IDE ใหม่อีกครั้ง เพื่อให้โปรแกรมโหลดไลบรารีเข้าสู่ระบบ

รีวิว

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

เฉพาะลูกค้าที่เข้าสู่ระบบ และเคยซื้อสินค้าชิ้นนี้แล้วเท่านั้น ที่เขียนบทวิจารณ์ได้