วันจันทร์ที่ 23 กรกฎาคม พ.ศ. 2561

โปรเจค งานที่8 [Arduino] เสียงดังด้วย Buzzer

[Arduino] เสียงดังด้วย Buzzer
ผลการค้นหารูปภาพสำหรับ arduino buzzer
วันนี้เราจะมาเล่นเอาต์พุตเป็นเสียง
โดยใช้ Piezo หรือ Buzzer ด้วยตัวเอง
เจ้า Piezo หรือ Buzzer จะเหมือนกันกับลำโพงก็คือสามารถส่งเสียงได้
โดยการจำแนกการสั่นสะเทือนที่เป็นจังหวะ เสียงคลื่นเสียง
โดยปกติความถี่ที่ 20 Hz ถึง 20KHz
หน้าตาของเจ้า Piezo Buzzer
เราจะใช้คำสั่งเสียง () คำสั่งโดยจะทำงานดังนี้ได้ครับ
จะทำการสร้างคลื่นสแควร์ด้วยความถี่ที่เรากำหนดไปยังขาเรากำหนดที่ตามระยะเวลาที่เรากำหนด
ดังโครงสร้าง
โทน (pin, ความถี่ระยะเวลา)
* pin = ขาที่เราต่อ buzzer เข้ากับ arduino * ความถี่ = ความถี่ที่เรากำหนดความถี่เป็น hertz (เป็น unsigned int)
* duration = ระยะเวลาที่จะให้เสียง (เป็น unsigned long)
ฮาร์ดแวร์:
- Arduino Uno R3 จำนวน 1 อัน
- โปรโตบอร์ดจำนวน 1 อัน
- Buzzer จำนวน 1 อัน
- R 100 Ohm จำนวน 1 อัน
- สายจัย
วงจร:
เราจะต่อวงจรโดย
- ขา - ของออดต่อกับ GND ของ Arudino
- ขา + ของออดต่อกับ R 100 โอห์มและขาของ R อีกข้างต่อเข้ากับขา 8 ของ Arduino
รหัส: ไป
ที่ File -> ตัวอย่าง -> Digital -> toneMelody
โดยโค๊ดที่จะใช้ไฟล์ pitches.h เป็นไฟล์ที่เกี่ยวกับการกำหนดโน้ตบุ๊คให้เสียงเหมือน
เช่น NOTE_C4 เป็นเสียงพอดี (กลาง)
NOTE_FS4 คือเสียงฟา ( สูง)
* / # include "pitches.h"// บันทึกย่อในทำนอง:
int melody [] = {
NOTE_C4, NOTE_G3, NOTE_G3, NOTE_A3, NOTE_G3,0, NOTE_B3, NOTE_C4};// note durations: 4 = note ไตรมาส, 8 = note แปด ฯลฯ :
int noteDurations [] = {
4, 8, 8, 4,4,4,4,4};void setup () (
/ / iterate ผ่านบันทึกของ melody:
for (int thisNote = 0; thisNote <8; thisNote ++) {// สำหรับคำนวณระยะเวลาบันทึกให้ใช้เวลาหนึ่งวินาที
// หารด้วยประเภทของโน้ต
// เช่นหมายเหตุไตรมาส =
1000/4 , บันทึกที่แปด = 1000/8 ฯลฯint noteDuration = 1000 / noteDurations [thisNote];
เสียง (8, melody [thisNote], noteDuration);/ / เพื่อแยกความแตกต่างของโน้ตให้ตั้งเวลาต่ำสุดระหว่างพวกเขา
// ระยะเวลาบันทึกย่อ + 30% ดูเหมือนจะทำงานได้ดี:
int pauseBetweenNotes = noteDuration * 1.30;
ล่าช้า (pauseBetweenNotes);
// หยุดการเล่นเสียง:
noTone (8);
}
}void loop () {
// ไม่จำเป็นต้องทำซ้ำเมโลดี้
}
ไฟล์ pitches.h
/
 *************************************************
* ค่าคงที่สาธารณะ
*********************************************** ** /#define NOTE_B0 31
# define NOTE_C1 33
# ระบุ NOTE_CS1 35
# ระบุ NOTE_D1 37
# ระบุ NOTE_DS1 39
# ระบุ NOTE_E1 41
# ระบุ NOT_F1 44
# ระบุ NOTE_FS1 46
# ระบุ NOTE_G1 49
# ระบุ NOTE_GS1 52
# ระบุ NOTE_A1 55
# ระบุ NOTE_AS1 58
# กำหนด Note_B1 62
# define Note_C2 65
# define NOTE_CS2 69
#define NOTE_D2 73
#define NOTE_DS2 78
#define NOTE_E2 82
# ระบุ NOTE_F2 87
# ระบุ NOTE_FS2 93
# ระบุ NOTE_G2 98
# ระบุ NOTE_GS2 104
# ระบุโน้ตบุ๊ค 110
# ระบุ NOTE_AS2 117
# กำหนด NOTE_B2 123
#define NOTE_C3 131
#define NOTE_CS3 139
#define NOTE_D3 147
#define NOTE_DS3 156
#define NOTE_E3 165
#define NOTE_F3 175
#define NOTE_FS3 185
#define NOTE_G3 196
#define NOTE_GS3 208
#define NOTE_A3 220
#define NOTE_AS3 233
#define NOTE_B3 247
#define NOTE_C4 262 // เสียงกลาง (กลาง)
#define NOTE_CS4 277
#define NOTE_D4 294 / เสียงเสียง (กลาง)
#define NOTE_DS4 311
#define NOTE_E4 330 / เสียงมี (กลาง)
#define NOTE_F4 349 // เสียงฟา (กลาง)
#define NOTE_FS4 370
#define NOTE_G4 392 // เสียงซอฟท์ (กลาง)
#define NOTE_GS4 415
#define NOTE_A4 440 / เสียงลา (กลาง)
#define NOTE_AS4 466
#define NOTE_B4 494 // เสียงที (กลาง)
#define NOTE_C5 523
#define NOTE_CS5 554
#define NOTE_D5 587
#define NOTE_DS5 622
#define NOTE_E5 659
#define NOTE_F5 698
#define NOTE_FS5 740
#define NOTE_G5 784
#define NOTE_GS5 831
#define NOTE_A5 880
#define NOTE_AS5 932
#define NOTE_B5 988
#define NOTE_C6 1047
#define NOTE_CS6 1109
#define NOTE_D6 1175
#define NOTE_DS6 1245
#define NOTE_E13 1319
#define NOTE_F6 1397
#define NOTE_FS6 1480
#define NOTE_G6 1568
#define NOTE_GS6 1661
#define NOTE_A6 1760
# define NOTE_AS6 1865
#define NOTE_B6 1976
#define NOTE_C7 2093
#define NOTE_CS7 2217
#define NOTE_D7 2349
#define NOTE_DS7 2489
#define NOTE_E7 2637
#define NOTE_F7 2794
#define NOTE_FS7 2960
#define NOTE_G7 3136
#define NOTE_GS7 3322
#define NOTE_A7 3520
#define NOTE_AS7 3729
#define NOTE_B7 3951
#define NOTE_C8 4186
#define NOTE_CS8 4435
#define NOTE_D8 4699
#define NOTE_DS8 4978
อ้างอิง
http://arduino.cc/en/Tutorial/Tone

โปรเจค งานที่7 Rain Sensor กับ Arduino

Tutorial: วิธีการใช้ Rain Sensor กับ Arduino
สายฝนซึ่งสามารถใช้ในระบบอัตโนมัติที่อยู่อาศัยได้เช่นการปิดหน้าต่างการปิดบังแดดเป็นต้น
เมื่อน้ำลดลงบนเซ็นเซอร์จะลัดวงจรและ Arduino จะส่งสัญญาณเสียงบี๊บและเปิดไฟ LED

วิธีการใช้ Rain Sensor กับ Arduino
หากต้องการสร้างลิงก์ที่คุณจะเห็นในวิดีโอด้านล่างคุณจะต้อง:
Arduino 1x
1x เซ็นเซอร์ฝน LdG
ตัวต้านทาน 1 โอห์ม 220 โอห์ม
ตัวต้านทาน 1x 10K ohm
นำ 1x
Buzzer 1x

ต่อไปนี้แสดงการเชื่อมต่อที่ใช้:


Como utilizar o Sensor de Chuva com Arduino

วิธีการใช้ Rain Sensor กับ Arduino
และโปรแกรมที่ใช้:

/* Exemplo do Sensor de Chuva
Equipe LdG
*/
int bip = 2;
int sensordechuva = 3;
void setup()
{
pinMode(bip,OUTPUT);
pinMode(sensordechuva,INPUT);
}
void loop()
{
if(digitalRead(sensordechuva) == 0)
{
digitalWrite(bip,HIGH);
delay(500);
digitalWrite(bip,LOW);
}
else
{
digitalWrite(bip,LOW);
}
delay(500);
}

วางโปรแกรมลงใน Arduino IDE และเชื่อมต่อ Arduino เข้ากับพอร์ต USB ของเครื่องพีซี ใน "Tools / Board" เลือกรุ่นของคุณ Arduino (UNO, Duemilanove ฯลฯ ) จากนั้นใน "Tools / Serial Port" เลือกพอร์ตที่ Arduino ของคุณเชื่อมต่ออยู่ (COMx, ttyUSBx, ttyACMx ฯลฯ ) และสุดท้ายคลิกที่ "UPLOAD"
หลังจากทำ UPLOAD จากการเขียนโปรแกรมไปยัง Arduino แล้วคุณสามารถทำการทดสอบโดยการโยนน้ำบางส่วนลงบนเซ็นเซอร์ฝน Arduinoจะดังและสว่างขึ้นไฟ LED สำหรับแอพพลิเคชั่นที่ดีกว่าให้ทิ้งไว้ที่ความลาดชัน + -45º
 ดูวิธีใช้เซนเซอร์ Rain กับ Arduino Video
วิดีโอแสดงเซ็นเซอร์ฝนที่มีการใช้ Arduino ในทางปฏิบัติ



https://youtu.be/o8euMncwhVs
https://youtu.be/o8euMncwhV

วันจันทร์ที่ 9 กรกฎาคม พ.ศ. 2561

โปรเจค งานที่6 Arduino กับ การขับเซอร์โวมอเตอร์เบื้องต้น

Arduino กับ การขับเซอร์โวมอเตอร์เบื้องต้น

รู้จักเซอร์โวมอเตอร์ 

เซอร์โวมอเตอร์ เป็นมอเตอร์ที่ทำงานโดยใช้สัญญาณพัลส์ โดยภายในเซอร์โวมอเตอร์จะประกอบไปด้วย มอเตอร์ไฟฟ้ากระแสตรง ชุดเกียร์และส่วนควบคุม โดยจะประกอบกันอยู่ภายในชุดเดียวกัน ตัวเซอร์โวมอเตอร์จะมีสายสัญญาณ 3 เส้น คือ สานใช้งาน 1 เส้น อีก 2 เส้นจะเป็นสายสำหรับจ่ายไฟให้เซอร์โวมอเตอร์และสายสำหรับต่อลงกราวด์ ในการควบคุมเซอร์โวมอเอตร์นั้นจะทำให้หมุนไปทางซ้ายได้ 90 องศา ไปทางขวาได้ 90 องศา (180 องศา) และสามารถสั่งให้หมุนไปตามองศาที่กำหนดได้ (ในการที่จะทำให้หมุน 360 องศาจะต้องดัดแปลงแก้ไขส่วนประกอบภายใน ซึ่งจะไม่ขอกล่าวถึงในที่นี้)


เซอร์โวมอเตอร์


การใช้งานเซอร์โวมอเตอร์นั้นจะนำไปใช้ในที่ที่ต้องการความแม่ยำในเรื่ององศา หรือ การหมุนไปตามองศาที่ต้องการ เช่น ใช้เป็นมอเตอร์บังคับการเลี้ยวของหางเสือ เรือ หรือ การเลี้ยวของเครื่องบินบังคับวิทยุ แม้แต่สร้างเป็นหุ่นยนต์เดินขนาดเล็ก เพราะตัวเซอร์โวมอเอตร์เองจะมีแรงบิดค่อนข้างสูง (เพราะภายในจะมีชุดเกียร์อยู่แล้ว)

การควบคุมทำงานของเซอร์โวมอเตอร์

เซอร์โวมอเตอร์ที่ใช้ในการทดลองนี้จะเป็น RC เซอร์โว แบบทั่วไป คือ จะมีมุมในการหมุนจำกัดที่ 180 องศาเท่านั้น แต่จะมีเซอร?โว แบบที่มีการดัดแปลงวงจรภายใน ซึ่งสามรรถหมุนได้ถึง 360 องศารนอบตัวก็มีครับ


มุมในการหมุนจะจำกัดที่ 180 องศาเท่านั้น



การต่อใช้งานเซอร์โวมอเตอร์


ในการควบคุมเซอร์โวมอเตอร์นั้น ทำได้โดยอาศัยความกว้างของพัลส์ที่ทำการป้อนให้เซอร์โวมอเตอร์ โดยสัญญาณพัลส์นี้จะเป็นสัญญาณ TTL โดยระดับสูง หรือ 1 จะมีแรงดัน 5VDC ระดับ ต่ำ หรือ 0 จะมีแรงดัน 0 VDC

เซอร์โวมอเตอร์หมุนไปทางขวา หรือ ตามเข็มนาฬิกา จะต้องสร้างสัญญาณพัลส์ ขนาด 1 ms เมื่อเซอร์โวมอเตอร์หมุนไปทางขวาสุดแล้วมอเตอร์จะหยุดหมุนเอง ถ้าป้อนพัลส์เข้าไปอีกจะเซอร์โวมอเตอร์จะไม่ทำงาน

เซอร์โวมอเตอร์หมุนไปทางซ้าย หรือ ทวนเข็มนาฬิกา จะต้องสร้างสัญญาณพัลส์ ขนาด 2 ms เมื่อเซอร์โวมอเตอร์หมุนไปทางซ้ายสุดแล้วมอเตอร์จะหยุดหมุนเอง ถ้าป้อนพัลส์เข้าไปอีกจะเซอร์โวมอเตอร์จะไม่ทำงาน

เซอร์โวมอเตอร์ไปตำหแหน่งกึ่งกล่าง หากต้องการให้เซอร์โวมอเตอร์หนุนไปทางซ้าย หรือ ทวนเข็มนาฬิกา จะต้องสร้างสัญญาณพัลส์ ขนาด 1.5 ms


แสดงความกว้างของสัญญาณที่มีผลต่อการหมุนของมอเตอร์


เซอร์โวมอเตอร์แต่ละตัวจะมีการทำงานของความกว้างของพัลส์ไม่เท่ากัน ค่าดังกล่าวเป็นค่าประมาณเท่านั้น ดังนั้นถ้าต้องการค่าที่ถูกต้อง ต้องดูที่คู่มือด้วยทุกครั้ง และจำนวนลูกสัญญาณพัลส์จะมีผลต่อองศาในการหมุนด้วยเช่นเดียวกัน


จำนวนสัญญาณพัลส์มีผลต่อองศาของเซอร์โวมอเตอร์


หากป้อนจำนวนลูกสัญญาณพัลส์น้อย จะทำให้องศาในการหมุนน้อย


วงจรที่ใช้ในการทดลอง


ในงานที่ต้องการให้มอเตอร์การหมุนสลับไปมาซ้ายและขวา เซอร์โวมอเตอร์จึงเป็นตัวเลือกที่เหมาะสม แต่ราคาของมอเตอร์ชนิดนี้ค่อนข่างสูง สินค้าที่มีเซอร์โวมอเตอร์รวมอยู่ด้วยเช่น เครื่องบิน หรือ เรือบังคับวิทยุ ซึ่งจะใช้ตัวเซอร์โวมอเตอร์ในการบังคับทิศทางการเลี้ยว


รูปการทดลอง


การทดสอบและ code

ในการทดสอบนั้นจะให้เซอร์โมมอเตอร์หมุน ซ้าย ขวา และ หยุด สลับกันไปเรือยๆ

int led1 = 13;

void setup()
{
pinMode(led1,OUTPUT);

}
void loop()
{
for (int i=0; i <= 75; i++)
{
digitalWrite(led1,HIGH);
delayMicroseconds(1000);
digitalWrite(led1,LOW);
delay(19);
}

for (int i=0; i <= 100; i++)
{
digitalWrite(led1,HIGH);
delayMicroseconds(2000);
digitalWrite(led1,LOW);
delay(18);
}

for (int i=0; i <= 75; i++)
{
digitalWrite(led1,HIGH);
delayMicroseconds(1500);
digitalWrite(led1,LOW);
delay(19);
}

โปรเจค งานที่5 Arduino กับพื้นฐานการควบคุมความเร็วมอเตอร์เบื้องต้น

Arduino กับพื้นฐานการควบคุมความเร็วมอเตอร์เบื้องต้น

การควบคุมความเร็วมอเตอร์กระแสตรงนั้นสามารถจะทำได้ง่ายๆ โดยใช้วิธีลดระดับแรงดันให้ต่ำลงกว่าแรงดันปกติ ก็จะทำให้มอเตอร์หมุนช้าลงได้

การลกละดับแรงดันให้มอเตอร์


โดยทั่วไปแล้วในการปรับความเร็วมอเตอร์กระแสตรงแบบง่ายๆ จะมีวงจรปรับความเร็วมอเตอร์ซึ่งจะทำการกำเนิดสัญญาณความถี่ ที่แตกต่างกันออกไป แล้วไปขับวงจรขับมอเตอร์ทำให้มอเตอร์หมุนช้า เร็วได้


วงจรปรับความเร็วรอบมอเตอร์


การปรับความเร็วรอบด้วยความถี่ 
ในการทดลองนี้จะใช้สร้างสัญญาณความถี่แบบง่ายๆในการปรับความเร็ว เพราะ เมื่อความถี่เปลี่ยนไป แรงดันที่ตกคร่อมที่มอเตอร์จะลดลงทำให้มอเตอร์หมุนช้าลงไปด้วย ซึ่งค่า % จะเรียกว่า ค่า Duty cycle และ การสร้างความถี่แบบนี้ เราจะเรียกว่า PWM ( Pulse Width Modulation)


การเปลี่ยน ค่า% ความถี่


Duty cycle 100 % มอเตอร์จะหมุนด้วยความเร็วเต็มที่ ( ความเร็วปกติ)
Duty cycle 75 % มอเตอร์จะหมุนด้วยความเร็ว ลดลงมา
Duty cycle 50 % มอเตอร์จะหมุนด้วยความเร็ว ลดลงมา
Duty cycle 30 % มอเตอร์จะหมุนด้วยความเร็วช้ามาก หรือ อาจจะหยุดหมุนได้


วงจรในการทดสอบ 
ในการทดสอบวงจรนั้นจะใช้วงจรเดียวกันกับวงจรการขับมอเตอร์ทั่วไป


วงจรที่ใช้ในการทดลอง





รูปการทดลอง


ในการทดสอบจะทดลองตั้งที่ความถี่ใช้งาน 50Hz ซึ่งจะได้ค่าเวลา 20 mS โดยจะกำหนดค่า Duty cycle 3 ค่าดังนี้ Duty cycle ประมาณ 5% มอเตอร์จะหมุนช้า
digitalWrite(led1,HIGH);
delay(4);
digitalWrite(led1,LOW);
delay(16);

++++++++++++++++
Duty cycle ประมาณ 50% มอเตอร์จะหมุนเร็วขึ้น
digitalWrite(led1,HIGH);
delay(10);
digitalWrite(led1,LOW);
delay(10);

++++++++++++++++++++
Duty cycle ประมาณ 90% มอเตอร์จะหมุนเร็ว
digitalWrite(led1,HIGH);
delay(19);
digitalWrite(led1,LOW);
delay(1);
++++++++++++++++

ตัวอย่าง code ที่ใช้ในการทดสอบ 

int led1 = 13;

void setup()
{
pinMode(led1,OUTPUT);

}
void loop()
{
for (int i=0; i <= 200; i++)
{
digitalWrite(led1,HIGH);
delay(4);
digitalWrite(led1,LOW);
delay(16);
}
for (int i=0; i <= 200; i++)
{
digitalWrite(led1,HIGH);
delay(10);
digitalWrite(led1,LOW);
delay(10);
}

for (int i=0; i <= 200; i++)
{
digitalWrite(led1,HIGH);
delay(19);
digitalWrite(led1,LOW);
delay(1);
}

โปรเจค งานที่ 4 Arduino กับพื้นฐานการกลับทางหมุนมอเตอร์(DC motor)

Arduino กับพื้นฐานการกลับทางหมุนมอเตอร์(DC motor)

การหมุนกลับทางของมอเตอร์นั้นสามารถจะใช้วงจรได้หลายรูปแบบ เช่น ใช้ ทรานซิสเตอร์ เป็นตัวขับวงจร หรือ ใช้ IC สำเร็จรูปในการขับวงจร หรือ ใช้รีเลยในการจับวงจรก็สามารถทำได้ แต่ในตอนนี้จะใช้ ทรานซิสเตอร์เป็นตัวขับซึงเรียกวงจรแบบนี้ H -bridge

การกลับทางหมุนมอเตอร์


วงจรขับมอเตอร์แบบกลับทางหมุนโดยใช่ทรานซิสเตอร์ 
ในวงจรดังกล่าวจะใช้ทรานซิสเตอร์ 4 ตัว ในการควบคุมมอเตอร์ 1 ตัว โยอาจจะใช้ ทรานซิสเตอร์ NPN หรือ PNP ก็สามารถทำได้แต่จะมีการออกแบบที่แตกต่างกันออกไป ในการทำงานนั้น ทรานซิสเตอร์ จะทำงานเพียง 2 ตัว เท่านั้น เพื่อควบคุมการหมุนด้านหนึ่ง และ จะสลับการทำงานอีก 2 ตัว เพื่อควบคุมหรือสลับการหมุนของมอเตอร์ ดังนั้น ในการป้อนไฟ ไปจะเลี่ยงทรานซิสเตอร์ 2 ตัวเท่านั้นที่ทำงาน อีก 2 ตัว จะหยุดทำงาน จนกว่าเราจะสลับการทำงาน )(ห้ามป้อนไฟให้ทรานซิสเตอร์ทำงานพร้อมกันทั้งหมด) แต่ในการออกแบบมอเตอร์ที่มีขนาดใหญ่ขึ้น วงจรอาจจะออกแบบให้มีระบบป้องกันที่มากขึ้นและซับซ้อมขึ้นตามไปด้วยครับ


วงจรขับมอเตอร์แบบกลับทางหมุน H -bridge



การต่อวงจร



รูปการทอลอง


หลักการการทำงาน และ Code
ในการทำงาน นี้จะให้มอเตอร์ไป 2 วินาที และหยุด 2 วินาที่ จากนั้นจะให้หมุนสลับกันไป เรื่อยๆ ครับ คือจะเป็นการสลับการทำงานของ ขา 13 และ ขา 12 ดังนี้ ขา 12 = 0 ขา 13 = 1 มอเตอร์หมุนทางใดทางหนึ่ง
ขา 12 = 1 ขา 13 = 0 มอเตอร์หมุนสลับกัน
ขา 12 = 0 ขา 13 = 0 มอเตอร์หยุดหมุน
ขา 12 = 1 ขา 13 = 1 แบบนี้ห้ามครับ จะเกิดอันตรายได้


int led1 = 13;
int led2 = 12;

void setup()
{
pinMode(led1,OUTPUT);
pinMode(led2,OUTPUT);

}
void loop()
{
digitalWrite(led1,HIGH);
digitalWrite(led2,LOW);
delay(2000);
digitalWrite(led1,LOW);
digitalWrite(led2,LOW);
delay(2000);
digitalWrite(led1,LOW);
digitalWrite(led2,HIGH);
delay(2000);
digitalWrite(led1,LOW);
digitalWrite(led2,LOW);
delay(2000);
}


ใช้วงจรรีเลย์ในการกลับทางหมุน 
การใช้รีเลย์นั้นสามารถทำได้เล่นกัน แต่ต่องระวังในการหมุนหลับทางแบบทันทีทันใด เพราะอาจจะเกิดความเสียหายกับตัวมอเตอร์ได้เช่นเดียวกัน แต่ข้อดีของการใช้รีเลย์คือจะทำให้กระแสที่ไหลผ่านมอเตอร์ไม่ตก ทสามารถใช้งานได้เต็มกำลัง


ใช้วงจรรีเลย์ในการกลับทางหมุน


ใช้ IC ในการกลับทางหมุน
ในการใช้ IC แทนการใช้ทรานซิสเตอร์ก็สามารถทำได้ โดยนิยมใช้เบอร์ L293D ซึ่งใน IC 1 ตัวสามารถขับมอเตอร์ได้ 2 ตัว


วงจรL293Dในการกลับทางหมุน

วันอาทิตย์ที่ 8 กรกฎาคม พ.ศ. 2561

โปรเจค งานที่3 ตัวอย่างการใช้งาน Arduino + Relay Module ควบคุมการปิดเปิดเครื่องใช้ไฟฟ้า

ตัวอย่างการใช้งาน 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

งานครั้งที่ 5 ในสถานที่ฝึกงานของ นศ ใช้ระบบควบคุณภาพอย่างไร

มาตรฐาน ISO 9001 ISO 9001 เป็นมาตรฐานสากลที่องค์กรธุรกิจทั่วโลกให้ความสำคัญ เพื่อความเป็นเลิศทางด้านคุณภาพ และความมีประสิทธิภาพของการด...