วันอาทิตย์ที่ 10 มิถุนายน พ.ศ. 2561

ตัวอย่างArduino

ตัวอย่างการใช้งาน Arduino + Relay Module
ควบคุมการปิดเปิดเครื่องใช้ไฟฟ้า
 01   0203
         รีเลย์ (Relay) เป็นอุปกรณ์ไฟฟ้าชนิดหนึ่ง ซึ่งทำหน้าที่ตัดต่อวงจรแบบเดียวกับสวิตช์ โดยควบคุมการทำงานด้วยไฟฟ้า Relay มีหลายประเภท ตั้งแต่ Relay ขนาดเล็กที่ใช้ในงานอิเล็กทรอนิกส์ทั่วไป จนถึง Relay ขนาดใหญ่ที่ใช้ในงานไฟฟ้าแรงสูง โดยมีรูปร่างหน้าตาแตกต่างกันออกไป แต่มีหลักการทำงานที่คล้ายคลึงกัน สำหรับการนำ Relay ไปใช้งาน จะใช้ในการตัดต่อวงจร ทั้งนี้ Relay ยังสามารถเลือกใช้งานได้หลากหลายรูปแบบ
04
 สัญลักษณ์ในวงจรไฟฟ้าของรีเลย์
ภายใน Relay จะประกอบไปด้วยขดลวดและหน้าสัมผัส 
         หน้าสัมผัส NC (Normally Close) เป็นหน้าสัมผัสปกติปิด โดยในสภาวะปกติหน้าสัมผัสนี้จะต่อเข้ากับขา COM (Common) และจะลอยหรือไม่สัมผัสกันเมื่อมีกระแสไฟฟ้าไหลผ่านขดลวด
         หน้าสัมผัส NO (Normally Open) เป็นหน้าสัมผัสปกติเปิด โดยในสภาวะปกติจะลอยอยู่ ไม่ถูกต่อกับขา COM (Common) แต่จะเชื่อมต่อกันเมื่อมีกระแสไฟไหลผ่านขดลวด
         ขา COM (Common) เป็นขาที่ถูกใช้งานร่วมกันระหว่าง NC และ NO ขึ้นอยู่กับว่า ขณะนั้นมีกระแสไฟฟ้าไหลผ่านขดลวดหรือไม่ หน้าสัมผัสใน Relay 1 ตัวอาจมีมากกว่า 1 ชุด ขึ้นอยู่กับผู้ผลิตและลักษณะของงานที่ถูกนำไปใช้ จำนวนหน้าสัมผัสถูกแบ่งออกดังนี้
         สวิตช์จะถูกแยกประเภทตามจำนวน Pole และจำนวน Throw ซึ่งจำนวน Pole (SP-Single Pole, DP-Double Pole, 3P-Triple Pole, etc.) จะบอกถึงจำนวนวงจรที่ทำการเปิด-ปิด หรือ จำนวนของขา COM นั่นเอง และจำนวน Throw (ST, DT) จะบอกถึงจำนวนของตัวเลือกของ Pole ตัวอย่างเช่น SPST- Single Pole Single Throw สวิตช์จะสามารถเลือกได้เพียงอย่างเดียวโดยจะเป็นปกติเปิด (NO-Normally Open) หรือปกติปิด (NC-Normally Close) แต่ถ้าเป็น SPDT- Single Pole Double Throw สวิตช์จะมีหนึ่งคู่เป็นปกติเปิด (NO) และอีกหนึ่งคู่เป็นปกติปิดเสมอ (NC) ดังรูปด้านล่าง
05                      06
SPST คือ Single Pole Single Throw                      DPST คือ Double Pole Single Throw
SPDT คือ Single Pole Double Throw                      DPDT คือ Double Pole Double Throw
07
          จากส่วนประกอบข้างต้นที่ได้กล่าวไป ในบทความนี้เราจะใช้งาน Relay แบบ SPDT (Single Pole Double Throw) หลักการทำงานของ Relay นั้น ในส่วนของขดลวด เมื่อมีกระแสไฟฟ้าไหลผ่าน จะทำให้ขดลวดเกิดการเหนี่ยวนำและทำหน้าที่เสมือนแม่เหล็กไฟฟ้า ส่งผลให้ขา COM ที่เชื่อมต่ออยู่กับหน้าสัมผัส NC (ในสภาวะที่ยังไม่เกิดการเหนี่ยวนำ) ย้ายกลับเชื่อมต่อกับหน้าสัมผัส NO แทน และปล่อยให้ขา NC ลอย เมื่อมองที่ขา NC กับ COM และ NO กับ COM แล้วจะเห็นว่ามีการทำงานติด-ดับลักษณะคล้ายการทำงานของสวิชต์ เราสามารถอาศัยคุณสมบัตินี้ไปประยุกต์ใช้งานได้ 
          ในบทความนี้ เราจะกล่าวถึงวิธีการนำ Relay Module ไปประยุกต์ใช้งานจริง แต่ก่อนอื่นเรามาดูวิธีอ่านคุณสมบัติของ Relay ว่าสามารถรองรับการทำงานที่แรงดันและกระแสไฟฟ้าเท่าไร ใช้แรงดันไฟฟ้าในการทำงานอย่างไรก่อนนะครับ 
08
1. ยี่ห้อ รุ่นของผู้ผลิต (แบรนด์) รวมถึงสัญลักษณ์มาตรฐานต่างๆ
2. รายละเอียดของไฟฟ้ากระแสสลับที่รองรับการทำงานได้ (VAC)
3. รายละเอียดของไฟฟ้ากระแสตรงที่รองรับการทำงานได้ (VDC)
4. โมเดล ระดับแรงดันฝั่งขดลวด ชนิดและโครงสร้าง และข้อมูลด้าน Coil Sensitivity
คุณสมบัติแบบละเอียด ดูได้จากตารางด้านล่างนี้

09
          จากตาราง สามารถสรุปได้ว่าเป็น Relay ยี่ห้อ Songle โมเดล SRD รองรับการทำงานแรงดันกระแสสลับที่ 250V@10A หรือ 125V@10A รองรับแรงดันกระแสตรงที่ 28VDC@10A ฝั่งขดลวดทำงานด้วยแรงดัน 5V โครงสร้างตัว Relay เป็นแบบซีลด์ มีค่าความไวขดลวดที่ 0.36W หน้าสัมผัสเป็นรูปแบบ 1 from C
          หน้าสัมผัสแบบ A (Form A) หมายถึง หน้าสัมผัสของ Relay ในสภาพปกติจะเปิดอยู่ (Normally open) และหน้าสัมผัสเป็นแบบ SPST ถ้าจะเขียนเป็นสัญลักษณ์ได้คือ
10
          หน้าสัมผัสแบบ B (Form B) หมายถึง หน้าสัมผัสของ Relay ในสภาพปกติจะปิด (Normally close) และเป็นแบบ SPST เขียนเป็นสัญลักษณ์ได้คือ
11
          หน้าสัมผัสแบบ C (Form C) แบบนี้เรียกว่า "break, make หรือ transfer" เป็นหน้าสัมผัสแบบ SPDT เขียนสัญลักษณ์ได้ดังนี้ 
12
          หน้าสัมผัสแบบ C จะมีอยู่ด้วยกัน 3 ขา ในขณะที่ Relay ยังไม่ทำงาน หน้าสัมผัส 1 และ 2 จะต่อกันอยู่ เมื่อ Relay ทำงานหน้าสัมผัส 1 และ 2 จะแยกกัน จากนั้นหน้าสัมผัส 1 จะมาต่อกับหน้าสัมผัส 3 แทน พอ Relay หยุดทำงานหน้าสัมผัส 1 กับ 2 ก็จะกลับมาต่อกันตามเดิม
          หลังจากที่เราทราบคุณสมบัติของ Relay กันไปแล้ว ในบทความนี้เราจะยกตัวอย่างการประยุกต์ใช้งานโดยใช้ Relay โดยจะใช้ Relay Module 4 Channels แบบ OPTO-ISOLATED ดังภาพ
13
           Relay Module 4 Channels มีเอาต์พุตคอนเน็คเตอร์ที่ Relay เป็น NO/COM/NC สามารถใช้กับโหลดได้ทั้งแรงดันไฟฟ้า DC และ AC โดยใช้สัญญาณในการควบคุมการทํางานด้วยสัญญาณโลจิก TTL
คุณสมบัติ (Features) 
• รีเลย์เอาต์พุตแบบ SPDT จํานวน 4 ช่อง 
• สั่งงานด้วยระดับแรงดัน TTL 
• CONTACT OUTPUT ของรีเลย์รับแรงดันได้สูงสุด 250 VAC 10 A, 30 VDC 10 A 
• มี LED แสดงสถานะ การทํางานของรีเลย์และแสดงสถานะของบอร์ด 
• มีจัมพ์เปอร์สําหรับเลือกว่าจะใช้กราวด์ร่วมหรือแยก 
• มี OPTO-ISOLATED เพื่อแยกกราวด์ส่วนของสัญญาณควบคุมกับไฟฟ้าที่ขับรีเลย์ออกจากกัน
ขาสัญญาณ (Pin Definition)
14 15
ภาพและตารางแสดงขาที่ใช้ในการเชื่อมต่อของ Relay Module 4 Channels
          ในบทความนี้ เราจะยกตัวอย่างการนำ Relay Module 4 Channels ไปใช้งาน โดยมีไมโครคอนโทรลเลอร์ Arduino UNO R3ในการควบคุมการสั่งงาน จะยกตัวอย่างการประยุกต์ใช้งาน 2 ตัวอย่างคือ ตัวอย่างที่1 ควบคุมมอเตอร์ DC ให้หมุนได้ทั้งซ้าย-ขวา โดยไม่ต้องการคุมความเร็วรอบ และตัวอย่างที่2 ควบคุมการปิด-เปิดเครื่องใช้ไฟฟ้ากระแสสลับ 220 VAC 
      ตัวอย่างที่1 ควบคุมมอเตอร์ให้หมุนได้ทั้งซ้าย-ขวา โดยไม่ต้องการคุมความเร็วรอบ
16   17
มอเตอร์หมุนขวา                                                          มอเตอร์หมุนซ้าย 
          จากวงจรนี้ เราจะเห็นได้ว่าในการจะควบคุมให้มอเตอร์หมุนไปกลับ หรือ ซ้าย-ขวา นั้นจะต้องใช้ Relay 2 ตัวในการควบคุม วิธีการต่อวงจรเป็นดังนี้ 
• นำขั้ว + ของมอเตอร์ต่อเข้ากับขา COM ของรีเลย์ตัวที่ 1
• นำขั้ว – ของมอเตอร์ต่อเข้ากับขา COM ของรีเลย์ตัวที่ 2
• นำขา NC ของรีเลย์ทั้ง 2 ตัว ต่อเข้ากับไฟลบ (GND)
• นำขา NO ของรีเลย์ทั้ง 2 ตัว ต่อเข้ากับไฟบวก (+5VDC)
วิธีต่อใช้งานจริงตามภาพด้านล่างนี้ โดยมีอุปกรณ์ดังนี้ Arduino + Relay Module + DC Motor
18
ภาพแสดงการต่อใช้งาน Arduino + Relay Module + Motor
19
           หลักการการทำงานคือ มีบอร์ด Arduino UNO R3 ในการรับข้อมูลจากคอมพิวเตอร์สื่อสารผ่านพอร์ต Serial แล้วนำค่าที่ได้ไปตรวจสอบว่าตรงกับค่าที่กำหนดไว้หรือไม่ ถ้าตรงกันก็สั่งให้ Relay ทำงานตามที่เราต้องการ 
     ตัวอย่างโค้ดโปรแกรม
#define R 13 //กำหนดขาที่นำไปต่อกับรีเลย์
#define L 12
char test ; //สร้างตัวแปรไว้สำหรับรอรับข้อมูล
void setup() 
{
// Open serial communications and wait for port to open:
Serial.begin(9600);
pinMode(R, OUTPUT); // กำหนดโหมดให้เป็น Output
pinMode(L, OUTPUT);
}
void loop() // run over and over
{
if (Serial.available()) // ตรวจสอบว่ามีข้อมูลเข้ามาหรือไม่
test = Serial.read();
else if (test == '1') // ถ้าข้อมูลที่เข้ามาคือ 1, 2, 3 ให้ทำงานตามที่กำหนด
{
digitalWrite(R, HIGH);
digitalWrite(L, LOW);
else if (test == '2')
{
digitalWrite(L, HIGH);
digitalWrite(R, LOW);
}
else if (test == '3')
{
digitalWrite(L, LOW);
digitalWrite(R, LOW);
}
}
      ขั้นตอนการทดสอบ
1. ดาวน์โหลดโปรแกรมสำหรับส่งข้อมูลผ่าน Serial (ในบทความนี้ใช้โปรแกรม Terminal.exe
2. เปิดโปรแกรม Arduino นำโค้ดตัวอย่างด้านบน ไปรันและอัพโหลดไปยัง Arduino UNO R3
3. เปิดโปรแกรม Terminal.exe เลือก Com Port และกำหนดความเร็วในการรับส่งข้อมูล จากนั้นกดปุ่ม Connect 
20
4. ทำการส่งข้อมูลให้ Arduino โดยพิมพ์ข้อความลงในช่องด้านล่างของโปรแกรม
a. ข้อมูลที่กำหนดไว้คือ 1 = หมุนขวา, 2 = หมุนซ้าย, 3 = หยุดหมุน
21

        ตัวอย่างที่2 ควบคุมการปิด-เปิดเครื่องใช้ไฟฟ้ากระแสสลับ 220 VAC  
22
     วิธีการเชื่อมต่อ
    สำหรับอุปกรณ์ที่ใช้ไฟฟ้ากระแสสลับ (AC)
• ต่อไฟเส้นที่ 1 จากแหล่งจ่ายไฟไปยังอุปกรณ์ที่ขั้วลบ (ถ้ามีแจ้งไว้ ถ้าไม่มีก็ใช้ขั้วใดก็ได้)
• ต่อไฟเส้นที่ 2 จากแหล่งจ่ายไฟเข้าขา NO ของรีเลย์
• ต่อสายจากขา COM ของรีเลย์ไปยังอุปกรณ์ไฟฟ้าขั้วที่เหลือ
    สำหรับอุปกรณ์ที่ใช้ไฟฟ้ากระแสตรง (DC)
• ต่อไฟลบหรือ GND ไปยังอุปกณ์ไฟฟ้าเข้าที่ขั้วลบหรือ GND
• ต่อไฟบวกหรือ VCC ไปยังขา NO ของรีเลย์
• ต่อสายจากขา COM ของรีเลย์ไฟยังอุปกรณ์ไฟฟ้าที่ขั้วบวก
23
         ในการทดสอบนี้ เราจะใช้บอร์ดคอนโทรลเลอร์ Arduino UNO R3 หลักการการทำงานมีดังนี้ รับข้อมูลจากคอมพิวเตอร์สื่อสารผ่านพอร์ต Serial แล้วนำข้อมูลที่ได้ไปตรวจสอบว่าตรงกับค่าที่กำหนดไว้หรือไม่ ถ้าตรงก็สั่งให้รีเลย์ทำงานตามที่เราต้องการ
           ตัวอย่างโค้ดโปรแกรม 
#define Lamp1 12 //กำหนดขาที่นำไปต่อกับรีเลย์
char test ; //สร้างตัวแปรไว้สำหรับรอรับข้อมูล
void setup() 
{
// Open serial communications and wait for port to open:
Serial.begin(9600);
pinMode(Lamp1, OUTPUT); //กำหนดโหมดให้เป็น Output
}
void loop() // run over and over
{
if (Serial.available()) // ตรวจสอบว่ามีข้อมูลเข้ามาหรือไม่
test = Serial.read();
else if (test == '1') //ถ้าข้อมูลที่เข้ามาคือ 1 , 3 ให้ทำงานตามที่กำหนด
{
digitalWrite(Lamp1, HIGH);
}
else if (test == '3')
{
digitalWrite(Lamp1, LOW);
}
}
          ขั้นตอนการทดสอบ
1. ดาวน์โหลดโปรแกรมสำหรับส่งข้อมูลผ่าน Serial (ในบทความนี้ใช้โปรแกรม Terminal.exe
2. เปิดโปรแกรม Arduino นำโค้ดตัวอย่างด้านบนไปรันและอัพโหลดไปยัง Arduino UNO R3
3. เปิดโปรแกรม Terminal.exe เลือก Com Port และกำหนดความเร็วในการรับส่งข้อมูล จากนั้นกดปุ่ม Connect
244. ทำการส่งข้อมูลให้ Arduino โดยพิมพ์ข้อความลงในช่องด้านล่างของโปรแกรม
a. ข้อมูลที่กำหนดไว้คือ 1 = เปิดไฟ, 3 = ปิดไฟ
25

           เเหล่งอ้างอิง

http://electronics.se-ed.com/contents/035s095/035s095_p02.asp
http://www.baantech.com/product.php?catid=16




การเขียนโปรแกรมเบื้องต้นกับ Arduino C++ (การ interrupt)
  interrupt คือการขั้นจังหวะ ของโปรแกรมครับ ปกติโปรแกรม Arduino จะทำใน vold loop ตลอดเวลาครับ แต่เราสามารถขั้นจังหวะมันให้ไปทำอย่างอื่นก่อนก็ได้ครับ เหมือนเรา กำลังนั่งดูทีวีอยู่แล้ว มีคนมากดกริ่งหน้าบ้าน เราก็ออกไปเปิดประตูให้ แล้วก็กลับมานั่งดูทีวีต่อ 
Arduino แต่ละรุ่นมี interrupt ไม่เหมือนกันนะครับ ดูรายละเอียดตามตารางนี้ได้เลยครับ

Boardint.0int.1int.2int.3int.4int.5
Uno, Ethernet23
Mega25602321201918
Leonardo32017
Due(see below)
ผมจะยกตัวอย่างการ interrupt ของ Arduino UNO R3 นะครับ
ตัวอย่างCode
int pin = 13;
volatile int state = LOW;
void setup()
{
  Serial.begin(9600);
  pinMode(pin, OUTPUT);
//CHANGE  changes value
// RISING  form low to high .
// FALLING form high to low.
  attachInterrupt(1, blink, RISING);
}
void loop()
{
  digitalWrite(pin, state);
}
void blink()
{
  Serial.println("Interrupt");
  state = !state;
}

หลักของมาตรฐาน ISO 9001:2000      หลักการมาตรฐานของ ISO 9001:2000 จะเป็นการระบุถึงข้อกำหนดที่ใช้ในระบบบริหารที่เกี่ยวกับคุณภาพ โดยเป้าหมา...