Page 1
251
บทท 8
การสรางสรรคผลงานดวยโปรแกรมภาษาซ
ในบทนกลาวถงการใชงานโปรแกรมจ าลองและการประยกตใชงานโครงการ การเรมตนการใชงานโปรแกรม Fritzing (fritzing.org) ซงเปนซอฟตแวรแบบ Open Source ทสามารถน ามาใชในการวางแผนตอวงจรบนเบรดบอรด ซงจะใชเวอรชน fritzing.0.9.3b.64.pc การฝกตอวงจรอเลกทรอนกสบนเบรดบอรด ถอวาเปนทกษะทส าคญในการเรยนรดานอเลกทรอนกสและระบบสมองกลฝงตว นอกจาก Fritzing จะน าไปใชในการฝกตอวงจรบนเบรดบอรดแบบเสมอนจรงแลว ยงสามารถใชส าหรบวาดผงวงจร (Schematics) ไดดวย
1. การดาวนโหลดและการตดตงโปรแกรม Fritzing
ในการการฝกตอวงจรบนเบรดบอรดแบบเสมอนจรง เบองตนมขนตอนดงตอไปน
1. ในการการฝกตอวงจรบนเบรดบอรดแบบเสมอนจรง จะตองใชโปรแกรมเพอฝกตอวงจรผาน ทางโปรแกรม Fritzing ซงสามารถดาวนโหลดไดจาก http://fritzing.org/home/
ภาพท 8.1 การดาวนโหลดโปรแกรม
ดาวนโหลดโปรแกรม
Page 2
252
ภาพท 8.2 เลอกระบบปฏบตการในการลงโปรแกรม
ภาพท 8.3 ท าการดาวนโหลดโปรแกรม Fritzing
2. ขนตอนการตดตงใชงานโปรแกรม Fritzing โดยการท าการแยกไฟลจากโปรแกรมบบอดไฟล
ภาพท 8.4 ท าการแยกไฟลโปรแกรม
เลอกระบบปฏบตการ
ทจะลงโปรแกรม
เลอก Extract file
Page 3
253
ภาพท 8.5 ไฟลโปรแกรม Fritzing
3. ขนตอนการเรยกใชงานโปรแกรม Fritzing โดยการดบเบลคลก สญลกษโปรแกรม ดงภาพ
ภาพท 8.6 ไอคอนโปรแกรม Fritzing
ภาพท 8.7 ขนตอนการเปดโปรแกรม Fritzing
Page 4
254
ภาพท 8.8 เรมตนการใชงานโปรแกรม Fritzing
4. ขนตอนการใชงานโปรแกรม Fritzing 4.1 เลอกบอรดทดลอง ใหไปทเมน Breadboard
ภาพท 8.9 เลอกบอรดทดลอง
คลก >> Breadboard
Page 5
255
4.2 ท าการปรบขนาดบอรดทดลอง ตามทตองการ
ภาพท 8.10 เลอกขนาดบอรดทดลอง
4.3 ท าการเลอกบอรดไมโครคอนโทรเลอรทตองการ ใหท าการเลอกบอรด Arduino Uno แลวท าการคลกคางไว แลวลากมาวางในต าแหนงทตองการ แลวท าการหมนดานตามทตองการ
ภาพท 8.11 การเลอกใชงานบอรด Arduino Uno
คลก >> เลอก size
คลก >> 1. ไอคอน Arduino
คลก >>2. เลอก Arduino Uno
คลกคาง >> 3.ลากมาวางในต าแหนงทตองการ
คลก >> 4. ท าการหมนดานตามตองการ
Page 6
256
5. ท าการทดลองใชงาน ในกรณการใชงานกบ ไดโอดเปลงแสง LED
ภาพท 8.12 การเลอกใชหลอด LED
6. ท าการตอวงจร โดยลากสายไฟ และ ท าการตอวงจรตวตานทาน
ภาพท 8.13 การเชอมตอวงจรบอรดทดลองกบ Arduino
1. >> คลกท CORE
2. >> คลกท LED
3. >> คลกคาง วาง LED
1. >> คลกเลอกตวตานทาน
2. >> คลกใชสายไฟจากบอรด
3. >> ท าการเปลยนสสายไฟ
Page 7
257
7. ขนตอนการเรยกใชงาน Code จากโปรแกรม Arduino IDE
ภาพท 8.14 การเรยกใช Code โปรแกรม
8. ขนตอนการอพโหลดโปรแกรมลงบนบอรด Arduino เปนอนเสรจสมบรณ
ภาพท 8.15 การเรยกอพโหลดโปรแกรมลงบนบอรด Arduino
1. >> คลกเลอกCode
2. >> คลก Open
3. >> คลก Code แลว Open
คลก >> Upload
Page 8
258
2. ตวอยางโครงงานเครองนบเหรยญ โครงงานเครองนบเหรยญมรายละเอยดดงน อปกรณ มดงน 1. บอรตไมโครคอนโทรลเลอร Arduino รน UNO 1 ตว 2. โมดลนบเหรยญ 4 ตว 3. โมดลปมกด 1 อน 4. โมดลแอลซดตอรวมกบ 12c 1 ชด 5. สายตอวงจร 6. สายยเอสบ เงอนไขการท างาน โครงงานจะมชองจ านวน 4 ชองส าหรบการหยอดเหรยญจ านวน 4 ขนาดโดย
มรายละเอยดดงน ชองท 1 ตรวจจบเหรยญ 1 บาท ชองท 2 ตรวจจบเหรยญ 2 บาท ชองท 3 ตรวจจบเหรยญ 5 บาท ชองท 4 ตรวจจบเหรยญ 10 บาท โดยลกษณะการตดตงดงแสดงในภาพท 8.1
ภาพท 8.16 แสดงการออกแบบชองส าหรบหยอดเหรยญชนดตาง ๆ
เหรยญ 1 บาท เหรยญ 2 บาท เหรยญ 5 บาท เหรยญ 10 บาท
Page 9
259
วงจรการตอใชงาน ดงแสดงในภาพท 8.17
ภาพท 8.17 แสดงวงจรการตอใชงานเครองนบจ านวนเหรยญชนด 4 ชอง
ทมา : ประภาส พมพวง. (2560). การเขยนและการประยกตใชงานโปรแกรม Arduino. : 135
โคดโปรแกรม มดงน #include <Wier.h> //เรยกใชไลบราร #include <LiquidCrystal_l2C.h> //เรยกใชไลบราร LiquidCrystal_l2C lcd(0x3F, 20, 40); //ตงคาจอแอลซดขนาด 20 ตวอกษร 4 แถว #include < TM1637Display.h > //เรยกใชไลบราร const int buttonPin 2; //ประกาศชอตวแปร bottonPin เทากบ 2(ขา 2) const int ledPin13; //ประกาศชอตวแปร ledPin เทากบ 13(ขา 13) int buttonState 0; //ประกาศชอตวแปร bottonState เทากบ 0(ขา A0) #define D0Sensor 4 //ก าหนดวาขา D0 ของเซนเซอรตวท 1 ตออยกบขา 4 #define D0Sensor1 5 //ก าหนดวาขา D0 ของเซนเซอรตวท 1 ตออยกบขา 5 #define D0Sensor2 6 //ก าหนดวาขา D0 ของเซนเซอรตวท 1 ตออยกบขา 6 #define D0Sensor3 7 //ก าหนดวาขา D0 ของเซนเซอรตวท 1 ตออยกบขา 7 int i = 0; //ประกาศตวแปร i เทากบ 0
Page 10
260
int i1 = 0; //ประกาศตวแปร i1 เทากบ 0 int i2 = 0; //ประกาศตวแปร i2 เทากบ 0 int i3 = 0; //ประกาศตวแปร i3 เทากบ 0 const int digitalPin 2; void setup() { lcd.begin(); pinMode(ledPin, OUTPUT); pinMode( buttonPin, INPUT); pinMode(D0Sensor, INPUT); //ก าหนดใหขาทตอกบ 4 ของเซนเซอรเปนขาอนพต pinMode(D0Sensor1, INPUT); //ก าหนดใหขาทตอกบ 5 ของเซนเซอรเปนขาอนพต pinMode(D0Sensor2, INPUT); //ก าหนดใหขาทตอกบ 6 ของเซนเซอรเปนขาอนพต pinMode(D0Sensor3, INPUT); //ก าหนดใหขาทตอกบ 7 ของเซนเซอรเปนขาอนพต lcd.setCursor(0, 0); //ตงคาต าแหนงของจอแอลซด lcd.print(“WELCOME”); //พมพขอความ “WELCOME” delay(1000); //หนวงเวลา 1 วนาท } void loop() { lcd.setCursor(0, 0); //ตงคาต าแหนงของจอแอลซด lcd.print(“COIN 1 BATH =”); //พมพขอความ “COIN 1 BATH=” lcd.setCursor(0, 1); //ตงคาต าแหนงของจอแอลซด lcd.print(“COIN 2 BATH =”); //พมพขอความ “COIN 2 BATH=” lcd.setCursor(0, 2); //ตงคาต าแหนงของจอแอลซด lcd.print(“COIN 5 BATH =”); //พมพขอความ “COIN 5 BATH=” lcd.setCursor(0, 3); //ตงคาต าแหนงของจอแอลซด lcd.print(“COIN 10 BATH =”); //พมพขอความ “COIN 10 BATH=” buttonState= digitalRead(digitalPin); //รบคาจากตวแปร digitalPin if (buttonState==LOW) //ถามการกดปมหเชคคา i เปน 0 { i= 0; i1 = 0;
Page 11
261
i2 =0; i3 = 0; lcd.setCursor(16, 0); lcd.print(“ ”); lcd.setCursor(16, 1); lcd.print(“ ”); lcd.setCursor(16, 2); lcd.print(“ ”); lcd.setCursor(16, 3); lcd.print(“ ”); } ///////////////////Senser1///////////////// if(digitalRead(D0Sensor)==HIGH) //ถาขาทตอกบ D0 มสถานะเปน HIGH { while(digitalRead(D0Sesor)==HIGH); //ใหรอจนกวาขาทตอกบ D0 เปน LOW i++; //เพมคาในตวแปร i ขน 1 จ านวน } lcd.setCursor(16, 0); lcd.print(i); ///////////////////Senser 2 ////////////////// if(digitalRead(D0Densor1)==HIGH) { while(digitalRead(D0Densor1)==HIGH); i1++; } lcd.setCursor(16, 1); lcd.print(i1); ///////////////////////////Senser 3///////////////////// if(digitalRead(D0Sensor2)==HIGH) { while(digitalRead(D0Densor2)==HIGH); i2++;
Page 12
262
} lcd.setCursor(16, 2); lcd.print(i2); ///////////////////////////Senser 4/////////////////// If(digitalRead(D0Sensor3)==HIGH) { while(digitalRead(D0Densor3)==HIGH); i3++; } lcd.setCursor(16, 3); lcd.print(i3); }
2. ตวอยางโครงงานเครองเตอนไขสง โครงงานเครองเตอนไขสงมรายละเอยดดงน
อปกรณ มดงน 1. บอรดไมโครคอนโทรลเลอร Arduino รน UNO 1 ตว 2. โมดลวดอณหภมแบบแทง 1 ตว 3. โมดลแอลซดตอรวมกบ I2C 1 ชด 4. โมดลเครองเสยง 1 ตว 5. โมดลรเลย 1 ชอง 1 ตว 6. สวตชแบบปมกด 1 ตว 7. ล าโพงขนาด 0. 5 วตต 8 โอหม 1 ตว 8. สายตอวงจร 9. สายยเอสบ
เงอนไขการท างาน ในการท างานจะมเซนเซอรวดอณหภมเปนตวทสมผสกบรางกายผปวยเชนหลงเปนตนโดยเซนเซอรจะรบอณหภมของรางกายเมออณหภมสงเกน 37. 5 องศาเซลเซยสโปรแกรมจะสงเสยงเพอแจงเตอนเพอใหผดแลผปวยมาเชดตวเพอปองกนผปวยหมดสตโดยเซนเซอรทใชดงแสดงในภาพท 8.18
Page 13
263
ภาพท 8.18 แสดงรปเซนเซอรทใชในการท างาน
ทมา: https://www.arduitronics.com/product/478/waterproof-temperature-sensor-ds18b20-3-meter
วงจรการตอใชงานดงแสดงในภาพท 8.19
ภาพท 8.19 แสดงวงจรการตอใชงาน ทมา : ประภาส พมพวง. (2560). การเขยนและการประยกตใชงานโปรแกรม Arduino. : 138
Page 14
264
โคดโปรแกรมมดงน # include <OneWire. h> //เรยกใชไลบราร OneWire # include <Wire. h>// เรยกใชไลบราร Wire # include <LiquidCrystal _ 12C. h>// เรยกใชไลบรารแอลซด LiquidCrystal _12C lcd (Ox27, 16, 2); // ตงคาจอแอลซดเปน 16 ตวอกษร 2 แถว # include <DallasTemperature. h> // เรยกใชไลบรารของเซนเซอรวดอณหภม # define ONE _ WIRE _ BUS 2 เเตงคาเสนทางการสอสารขอมลโดยใชขาท 2 OneWire oneWire (ONE _ WIRE _ BUS); // ตงการสอสารในระบบเสนทางขอมลโดยใชตวแปร oneWire DallasTemperature sensors (& oneWire); // อานคาอณหภมมายงตวแปร oneWire int led = 13; // ประกาศตวแปร led ใหเทากบ 13 (ขา 13) void setup () { lcd. begin (); // เรมตนการใชงานจอแอลซด lcd. backlight (); // เรมตนการใชงานระบบการแสดงผล pinMode (led, OUTPUT); // ตงคาใหตวแปร led เปนเอาตพต Serial. begin (9600); // ตงคาการสอสารเปน 9, 600 บตตอวนาท Serial. println ("Dallas Temperature IC Control Library Demo"); sensors. begin (); เรมตนการใชเซนเซอร } void loop () { Serial. print ("Requesting temperatures..."); sensors. requestTemperatures: // สงคาของอณหภม Serial. println ("DONE"); // พมพขอความ“ DONE "ออกทางมอนเตอร Serial. print (" Temperature for the device 1 (index 0) is: "); Serial. println (sensors. getTempCByIndex (0)); // พมพคาอณหภมออกทางมอนเตอร lcd. setCursor (0, 0); // ตงคาต าแหนงจอแอลซด lcd. print (" Temperature "); // พมพขอความออกจอแอลซด lcd.setCursor (5, 1); // ตงคาต าแหนงจอแอลซด lcd. print (sensors. getTempCByIndex (O)); // พมพขอความออกจอแอลซด if (sornsors. getTempCByIndex (0)> 37. 5) // ตรวจสอบเงอนไขวาอณหภมมากกวา 37. 5 หรอไม {
Page 15
265
digitalWrite (led, LOW); // สงใหตวแปร led มคาเปน Low } else { digitalWrite (led, HIGH); // สงใหตวแปร led มคาเปน HIGH } }
3. ตวอยางโครงงานตหยอดเหรยญจายไฟ
โครงงานตหยอดเหรยญจายไฟโครงงานตหยอดเหรยญจายไฟ มดงน อปกรณ มดงน
1. บอรดไมโครคอนโทรลเลอร Arduino รน UNO 1 ตว 2. โมดลแอลซดรวมกบ I2C 1 ชด 3. โมดลรเลย 4 ชอง 1 ตว 4. โมดลสวตซแบบปมกด 3 ตว 5. โมดลเครองรบเหรยญ 1 ตว 6. โมดลยเอสบ 1 ตว 7. ตวความตานทานขนาด 4, 700 โอหม 1 ตว 8. แหลงจายแรงดนไฟฟากระแสตรง 12 โวลต 1 ตว 9. สายตอวงจร 10. สายยเอสบ
เงอนไขการท างานในการท างาน จะตองใชอปกรณในการรบเหรยญประกอบการตอวงจรเพอรบคาของสญญาณทไดจากเหรยญในแตละขนาดทแตกตางกนโดยเมอเหรยญแตละชนดหยอดลงไปในเครองรบเหรยญคาของเหรยญจะไปบวกเพมอตโนมตและจะหยดการบวกจ านวนเงนเมอผใชกดปมสวตชเพอจายไฟโดยลกษณะเครองรบเหรยญ และการตอวงจรเครองรบเหรยญดงแสดงในภาพท 8.20
Page 16
266
ภาพท 8.20 แสดงเครองรบเหรยญ ทมา : https://www.myarduino.net/product/175/coin-validatorเครองรบเหรยญ-เครองหยอดเหรยญ-รน-sg-1
วงจรการตอใชงาน ดงแสดงในภาพท 8.21
ภาพท 8.21 แสดงรปวงจรการตอใชงาน ทมา : ประภาส พมพวง. (2560). การเขยนและการประยกตใชงานโปรแกรม Arduino. : 142
Page 17
267
โคดโปรแกรม มดงน ///////////////////////////////อตราคาบรการ/////////////////////////////// // 2 บาท 15 นาท // // 5 บาท 30 นาท // // 10 บาท 60 นาท // ////////////////////////////////////////////////////////////////////////// # include <Wire. h> # include <LiquidCrystal _ 12c. h> LiquidCrystal _ t2C Icd (0 x 3F, 16, 2); Int pin = 7 // อานคาเครองหยอดเหรยญซองท 1 unsigned long duration; int count = 0; ประกาศตวแปรส าหรบเกบคา int d = 0; //ประกาศตวแปรส าหรบเกบคาเงน 2 บาท int b = 0; // ประกาศตวแปรส าหรบเกบคาเงน 5 บาท int c = 0; // ประกาศตวแปรส าหรบเกบคาเงน 10 บาท int d = 0; // ประกาศตวแปรส าหรบเกบคารวมเงนทงหมด int i = 0; //ประกาศตวแปรส าหรบเกบคาเวลาทงหมด int d1 = 0; //ประกาศตวแปรส าหรบเกบคาเงนรวมเงน 2 บาท int d2 = 0; //ประกาศตวแปรส าหรบเกบคาเงนรวมเงน 5 บาท int d3 = 0; // ประกาศตวแปรส าหรบเกบคาเงนรวมเงน 10 บาท int f1 = 0; // ประกาศตวแปรส าหรบเกบคาเวลา int + 2 = 0; //ประกาศตวแปรส าหรบเกบคาเวลา int f3 = 0; // ประกาศตวแปรส าหรบเกบคาเวลา int t = 0; // เวลาเงน 2 บาท int t2 = 0; // เวลาเงน 5 บาท int t3 = 0; // เวลาเงน 10 บาท int ti1 = 0; // นบเวลารเลยชองท 1 int ti2 = 0; // นบเวลารเลยของท 2 int ti3 = 0; // นบเวลารเลยซองท 3 const int buttonPin1 = 4; // สวตชชองท 1 const int buttonPin2 = 5; //สวตชชองท 2 const int buttonPin3 = 5; //สวตชชองท 3
Page 18
268
const int ledPin1 = 11; //รเลยชองท 1 const int ledPin2 = 12; //รเลยชองท 2 const int ledPin3 = 13; //รเลยชองท 3 int buttonState1 = 0; //อานคาสวตชตวท 1 int buttonState2 = 0; //อานคาสวตชตวท 2 int buttonState3 = 0; //อานคาสวตชตวท 3 void setup() { lcd, begin (); Serial. begin (9600); // ตงคาการสอสารท 9, 500 บตตอวนาท pinMode (pin, INPUT); // ตงคาใหตวแปร pin เปนอนพต pinMode (ledPin1, OUTPUT); // ตงคาตวแปร ledPin1 เปนเอาตพต pinMode (ledPin2, OUTPUT); // ตงคาตวแปร ledPin2 เปนเอาตพต pinMode (ledPin3, OUTPUT); // ตงคาตวแปร ldPin3 เปนเอาตพต pinMode (buttonPint, INPUTD; //ตงคาตวแปร buttonPin1 เปนอนพต pinMode (buttonPn2, INPUTD; //ตงคาตวแปร buttonPin2 เปนอนพต pinMode (buttonPin3, INPUT); // ตงคาตวแปร buttonPin3 เปนอนพต lcd. clear (); //สงเคลยรหนาจอแอลซด lcd. setCursor (6, 0); // ตงคาต าแหนงจอแอลซด lcd. print ("WELCOME"); // พมพขอความ“ WELCOME”ออกจอแอลซด lcd. setCursor (0, 2); //ตงคาต าแหนงจอแอซด lcd. print ("VENDING SUPPLY"); // พมพขอความ“ VENDING SUPPLY” // ออกจอแอลซด delay (2000); // หนวงเวลา 2 วนาท } void loop () { loop: duration = pulseln (pin, HIGH, 1000000); // ก าหนดสญญาณพลสในการท างาน float time = duration / 1000. 00 // ประกาศตวแปร time และค านวณ Serial. print (" DelT = "); // พมพขอความออกมอนเตอร Serial. print (time); // พมพขอมลตวแปร time ออกมอนเตอร
Page 19
269
Serial. println (" ms "); buttonState] = digitalRead (buttonPin1); // สวตชตวท 1 ขาท 4 buttonState] = digitalRead (buttonPin1); // สวตชตวท 2 ขาท 5 buttonState] = digitalRead (buttonPin1); // สวตชตวท 3 ขาท 6 if (time >2 ) //ตวสอบตวแปร time มากกวา 2 หรอไม { d=0; f=0; count=count + 1; //ท าการเพมคาใหตวแปร count Serial.print(count); //พมพคาตวแปร count ออกมอนเตอร } if(time==0) //ตรวจสอบตวแปร time เทากบ 0 หรอไม { if(count > 0 &&count<3) //ตรวจสอบตวแปร count มากกวา 0 //และนอยกวา 3 หรอไม { Serial.println(“2 Bath”); //พมพขอความ “2 Bath” ออกมอนเตอร a = a +2 ; //เพมจ านวนครง 2 บาท t1 = t1+15; //เพมจ านวนเวลาครงละ 15 นาท } if (count> 3 & & count <7) // ตรวจสอบตวแปร Count มากกวา 3 // และนอยกวา 7 หรอไม { Serial. println ("5 Bath"); // พมพขอความ“ 5 Bath” ออกมอนเตอร b = b + 5; //เพมจ านวนเงนครง 5 บาท t2 = + 2 + 30; //เพมจ านวนเวลาครงละ 30 นาท } if (count> 7 & & count <12) // ตรวจสอบตวแปร count มากกวา 7 //และนอยกวา 12 หรอไม { Serial. println ("10 Bath"); // พมพขอความ“ 5 Bath” ออกมอนเตอร C = C + 10; // เพมจ านวนเงนครง 10 บาท t3 = t3 + 60; // เพมจ านวนเวลาครงละ 60 นาท
Page 20
270
} d = a + b + c; // ตงสตรค านวณการรวมคาจ านวนเงน f = t1 + t2 + t3; // ตงสตรค านวณรวมคาเวลา d1 = d; f1 = f; lcd. clear (); lcd. setCursor (0, 0); // ก าหนดต าแหนงเรมตนของ cursor ทต าแหนง (0, 1) lcd. print ("PLZ INSERT COIN"); // แสดงขอความปรากฏหนาจอแอลซด lcd. setCursor (5, 2); //ก าหนดต าแหนงจอแอลซด lcd. print ("BATH"); // พมพขอความออกจอแอลซด lcd. setCursor (14, 2); //ก าหนดต าแหนงจอแอลซด lcd. print ("MIN"); // พมพขอความออกจอแอลซด lcd. setCursor (2, 2); // ก าหนดต าแหนงจอแอลซด lcd. print (d); // พมพขอมลตวแปร d ออกจอแอลซด lcd. setCursor (11, 2); //ตงคาต าแหนงจอแอลซด lcd. print (f); / / พมพขอมลของตวแปร f ออกจอแอลซด count = 0; ///////////////////////////////////////ปมท 1 //////////////////////////////////////////////// if (buttonState1 = = HIGH) // ตรวจสอบการกดสวตชเมอกชองจายไฟท 1 { lcd. clear (); lcd. setCursor (1, 0); lcd. print ("POWER SUPPLY 1"); lcd. setCursor (2, 2); lcd. print (d1); lcd. print ("BATH"); lcd. setCursor (11, 2); lcd. print (f1); lcd. print ("MIN"); for (ti1 = 1; ti1> 0: ti1--) // ลดคาเวลาจากตวแปร 1 ครงละ 1 { digitalWrite (ledPin1, HIGH); //สงใหตวแปร ledPin เปน HIGH
Page 21
271
//(รเลยท างาน) Serial. println (ti1); lcd. setCursor (11, 2); lcd. print (ti1); lcd. print (" "); delay (60000); } digitalWrite (ledPin1, LOW); //สงใหตวแปร ledPin เปน Low count = 0; // (รเลยหยดท างาน) d = 0; f = 0; a = 0; b = 0; C = 0; t1 = 0; t2 = 0; t3 = 0; lcd. setCursor (11, 2); lcd. print (ti1); //////////////////////////////ปมท 2 //////////////////////////////// if (buttonState2 = = HIGH) //ตรวจสอบการกดสวตชเลอกซองจายไฟท 2 { lcd. clear (); lcd. setCursor (1, 0); lcd. print ("POWER SUPPLY 2"); lcd. setCursor (2, 2); lcd. print (d1); lcd. print ("BATH"); lcd. setCursor (11, 2); lcd. print (f1); lcd. print ("MIN");
Page 22
272
for (ti2 = f1; ti2> 0; ti2--) //ลดคาเวลาจากตวแปร t2 ครงละ 1 { digitalWrite (ledPin2, HIGH); //สงใหตวแปร ledPin2 เปน HIGH //(รเลยท างาน) Serial. println (ti2); lcd. setCursor (11, 2); lcd. print (ti2); lcd. print (" "); delay (60000); } digitalWrite (ledPin2, LOW); // สงใหตวแปร ledPin2 เปน Low //(รเลยหยดท างาน) count = 0; d = 0; f = 0; a = 0; b = 0; c = 0; t1 = 0; t2 = 0; t3 = 0; lcd. setCursor (11, 2); lcd. print (ti2); } ///////////////////////////////ปมท 3 ////////////////////////// if (buttonState3 = = HIGH) // ตรวจสอบการกดสวตชเลอกชองจายไฟท 3 { lcd. clear (); lcd. setCursor (1, 0); lcd. print ("POWER SUPPLY 3"); lcd. setCursor (2, 2);
Page 23
273
lcd. print (d1); lcd. print ("BATH"); lcd. setCursor (11, 2); lcd. print (f1); lcd. print ("MIN"); for (ti3 = f1; ti3> 0; ti3--) //ลดคาเวลาจากตวแปร t3 ครงละ 1 { digitalWrite (ledPin3, HIGH); // สงใหตวแปร ledPin3 เปน HIGH //(รเลยท างาน) Serial. println (ti3); lcd. setCursor (11, 2); lcd. print (13): lcd. print (" "); delay (60000); digitalWrite (ledPin3, LOW); // สงใหตวแปร ledPin3 เปน Low //(รเลยหยดท างาน) count = 0; d = 0; f = 0; a = 0; b = 0; c= 0; t1 = 0; t2 = 0; t3 = 0; lcd.setCursor (11, 2); lcd. print (ti3); } } }
Page 24
274
4. ตวอยางโครงงานตแจงเตอนจดหมาย
โครงงานตแจงเตอนจดหมายมรายละเอยดดงน อปกรณ มดงน
1. บอรดไมโครคอนโทรลเลอร Arduino รน UNO 1 ตว 2. โมดลเซนเซอรอลตราโซนก 1 ตว 3. โมดล gsm800 1 ตว 4. หลอดแอลอด 1 ตว 5. ตวความตานทานขนาด 220 โอหม 1 ตว 6. สายตอวงจร 7. สายยเอสบ
เงอนไขการท างานการท างาน ของโครงงานนจะเปนตจดหมายทคอยรบจดหมายทกไปรษณยโดยเมอมจดหมายเขามาในตจดหมายภายในตจดหมายจะมเซนเซอรตรวจจบเมอพบจดหมายจะสงขอความไปยงเจาของบานเพอแจงเตอนวามจดหมายเขามาแลวโดยอปกรณทส าคญในการใชงาน ไดแก โมดล gsm800 ดงแสดงในภาพท 8.22
ภาพท 8.22 แสตงโมดล gsm800 ทมา : https://elementztechblog.wordpress.com/2016/06/28/interfacing-sim800-gsm-modem-with-arduino/
Page 25
275
วงจรการตอใชงาน ดงแสดงในภาพท 8.23
ภาพท 8.23 แสดงวงจรการตอใชงาน
ทมา : ประภาส พมพวง. (2560). การเขยนและการประยกตใชงานโปรแกรม Arduino. : 148
โคดโปรแกรมมดงน # define echoPin 9 // ก าหนดใหขา 9 เปนขารบสญญาณ # define trigPin 10 // ก าหนดใหขา 10 เปนขาสงสญญาณ # define LEDPin 13 // ก าหนดใหขา 13 เปนขาควบคมหลอดแอลอด # include <SoftwareSerial. h> // เรยกใชไลบราร long duration, inches, Cm; // ประกาศตวแปรเปนชนด long int maximumRange = 100 // ประกาศตวแปรในการก าหนดระยะสงสด int minimumRange1 = 15 // ประกาศตวแปรในการก าหนดระยะต าสด # define SIM800 _ TX _ PIN 8 // ก าหนดขาของโมดล gsm800 # define SIM800 _ RX _ PIN 7 / / ก าหนดขาของโมดล gsm800 SoftwareSerial serialSIM800 (SIM800 _ TX _ PIN, SIM800 _ RX _ PIN); // ประกาศการเรยกใชโมดล gsm void setup () { Serial. begin (9600); //ตงคาการสอสารท 9600 บตตอวนาท while (! Serial); serialSIM800. begin (9600); // ก าหนดการสอสารของโมดล gsm800 ท 9600 บตตอนาท delay (1000); // หนวงเวลา 1 วนาท } void loop ()
Page 26
276
{ digitalWrite (trigPin, LOW); // สงใหตวแปร trigPin มสถานะเปน Low delayMicroseconds (2); // หนวงเวลา 2 มลลวนาท digitalWrite (trigPin, HIGH); // สงใหตวแปร trigPin มสถานะเปน HIGH delayMicroseconds (10); // หนวงเวลา 10 มลลวนาท digitalWrite (trigPin, LOW); // สงใหตวแปร trigPin มสถานะเปน Low duration = pulseln (echoPin, HIGH); // สงใหมการสงสญญาณออกไป cm = microsecondsToCentimeters (duration); // การค านวณระยะหางเปนเซนตเมตร Serial. print (cm);// พมพขอมลของตวแปร cm ออกทางมอนเตอร Serial. print ("cm"); // พมพขอความ“ cm” ออกทางมอนเตอร Serial. println (); // พมพเวนบรรทด /////////////////////////////////// sensor //////////////////////////////// if (cm <= minimumRange1) // ก าหนดเงอนไขถาตวแปร cm นอยกวาคาระยะต าสด { digitalWrite (LEDPin, HIGH); // สงใหตวแปร LEDPin มสถานะเปน HIGH serialSIM800. begin (9600); // ตงคาการสอสารของพอรตโมดล gsm800 delay (1000); // หนวงเวลา 1 วนาท Serial. println ("Setup Complete!"); // พมพขอความ“ Setup Complete!” ออกมอนเตอร Serial. println ("Sending SMS..."); // พมพขอความ“ Sanding SMS” ออกมอนเตอร serialSIM800. write ("AT + CMGF = 1 \ r \ n");//ตงคารปแบบของขอความในรปแบบของรหสแอสก delay (1000); // หนวงเวลา 1 วนาท SerialSIM800. write ("AT + CMGS = \" 466923456850 \ "\ r \ n"); // ตงคาเบอรโทรศพทเพอสงขอความ delay (1000); // หนวงเวลา 1 วนาท serialSIM800. write ("MAIL"); // ท าการสงขอความ“ MAIL " delay (1000); // หนวงเวลา 1 วนาท SerialSIM800. write (char) 26): // สงขอความเปนลกษณะตวอกษร delay (1000); // หนวงเวลา 1 วนาท Serial. println (" SMS Sent! "); // พมพขอความ“ SMS Sent!” ออกมอนเตอร } else
Page 27
277
{ digitalWrite (LEDPin, LOW); // สงใหตวแปร LEDPin มสถานะเปน Low } } long microsecondsToinches (long microseconds) // โปรแกรมยอยในการสงคาตวแปรการ // แปลงคาเปนนว { return rmicroseconds / 74 72; // สงคาตวแปร microseconds } long microsecondsToCentimeters (long microseconds) // โปรแกรมยอยในการสงค าตวแปรการ // แปลงคาเปนเซนตเมตร { return microseconds / 29/2; // สงคาตวแปร microseconds }
5. ตวอยางโครงงานเปด-ปดหลอดแอลอดผานสมารทโฟน โครงงานเปดปดหลอดแอลอดผานสมารตโฟนมรายละเอยดดงน
อปกรณมดงน 1. บอรดไมโครคอนโทรลเลอร Arduino รน UNO 1 ตว 2. หลอดแอลอด 3 หลอด 3. ตวความตานทานขนาด 220 โอหม 3 ตว 4. สายตอวงจร 5. สายยเอสบ
เงอนไขการท างาน โครงงานนเปนการควบคมการเปด-ปดหลอดแอลอดผานสมารตโฟน โดยเชอมตอผานสญญาณบลทธ โดยจะตองมการใชแอปพลเคชนในระบบแอนดรอยดทใชควบคมลกษณะเปน โดยการเขยนแอปพเคชนจะพดถงในบทท 7 ตอไปและแอปพลเคชนสามารถดาวนโหลดจากควอารโคดได
Page 28
278
วงจรการตอใชงานดงแสดงในภาพท 8.24
ภาพท 8.24 แสดงการตอวงจร
ทมา : ประภาส พมพวง. (2560). การเขยนและการประยกตใชงานโปรแกรม Arduino. : 151
โคดโปรแกรมมดงน char val; ประกาศตวแปรชอ val int ledpin 1=11; // ประกาศตวแปรชอ ledpin เทากบขา 11 int ledpin 1=12; // ประกาศตวแปรชอ ledpin เท ากบขา 12 int ledpin 1=13; // ประกาศตวแปรชอ lodgin เทากบขา 13 void setup () { pinMode (lotpln1, OUTPUT); // ทงค าใหตวแปร ledpin1 เปน OUTPUT pinMode (ledpin2, OUTPUT); // ตงค าใหตวแปร lednin2 เปน OUTPUT pinMode (ledpin3, OUTPUT); //ตงคาใหตวแปร lodpin3 เปน OUTPUT Serial. begin (9600); //เรมตนการสอสารท 9, 600 ปตตอวนาท } void loop () { if (Serial available ()) // ถามขอมลเขามาใหท าการอานขอมล { val Serial. read (); //น าขอมลทอานไดไปเกบในตวแปร val } if (Val == "a") // ตรวจสอบคาในตวแปร val เทากบตวอกษร "a" หรอไม { digitalWrite (ledpln1, HIGH); // สงใหตวแปร lodin1 เปน HIGH (หลอดไฟตด) }
Page 29
279
if (Val == "b") // ตรวจสอบคาในตวแปร val เทากบตวอกษร "b" หรอไม { digitalWrite (ledpln1, LOW); // สงใหตวแปร lodin1 เปน LOW (หลอดไฟดบ) } if (Val == "c") // ตรวจสอบคาในตวแปร val เทากบตวอกษร "c" หรอไม { digitalWrite (ledpln2, HIGH); // สงใหตวแปร lodin2 เปน HIGH (หลอดไฟตด) } if (Val == "d") // ตรวจสอบคาในตวแปร val เทากบตวอกษร "d" หรอไม { digitalWrite (ledpln2, LOW); // สงใหตวแปร lodin2 เปน LOW (หลอดไฟดบ) } if (Val == "e") // ตรวจสอบคาในตวแปร val เทากบตวอกษร "e" หรอไม { digitalWrite (ledpln3, HIGH); // สงใหตวแปร lodin3 เปน HIGH (หลอดไฟตด) } if (Val == "f") // ตรวจสอบคาในตวแปร val เทากบตวอกษร "f" หรอไม { digitalWrite (ledpln3, LOW); // สงใหตวแปร lodin3 เปน LOW (หลอดไฟดบ) } delay(100); //หนวงเวลา 100 มลลวนาท }
6. ตวอยางโครงงานแสดงอณหภมผานสมารทโฟน โครงงานแสดงอณหภมผานสมารตโฟน มดงน
อปกรณมดงน 1. บอรดไมโครคอนโทรลเลอร Arduino รน UNO 1 ตว 2. โมดลบลทธ 1 ตว 3. โมดลเซนเซอรวดอณหภม 1 ตว 4. สายตอวงจร 5. สายยเอสบ
Page 30
280
เงอนไขการท างาน ในการท างานโครงงานแสดงอณหภมผานสมารตโฟนจะมตวเซนเซอรเปนตวรบคาอณหภมและสงคาผานสญญาณบลทธเพอมาแสดงในสมารตโฟนในระบบแอนดรอยดโดยเซนเซอรทใชจะเปนเซนเซอรแบบแทงแสดงลกษณะ และการเขยนแอปพลเคชนจะมขนตอนในการเขยน และสามารถดาวนโหลดแอปพลเคชนไดตามควอารโคด และแสดงหนาตางของแอปพลเคชนในภาพท 8.25
ภาพท 8.25 แสดงรปเซนเซอรแบบแทง
ทมา: https://www.arduitronics.com/product/478/waterproof-temperature-sensor-ds18b20-3-meter
วงจรการตอใชงานดงแสดงในภาพท 8.26
ภาพท 8.26 แสดงวงจรการตอใชงาน
ทมา : ประภาส พมพวง. (2560). การเขยนและการประยกตใชงานโปรแกรม Arduino. : 154
Page 31
281
โคดโปรแกรม ดงน # include <OneWire. h> // การเรยกใชไลบราร OneWire # include <Wire. h> // การเรยกใชไลบราร Wire # include <SoftwareSerial. h> // การเรยกใชไลบราร SoftwareSerial # include <DallasTemperature. h> // การเรยกใชไลบรารเซนเซอรวดอณหภม # include "SPI. h" //การเรยกใชไลบราร SPI # include "Adafruit _ GFX. h" // การเรยกใชไลบราร Adafruit _ GFX # include "Adafruit _ SH1106. h" // การเรยกใชไลบราร Adafruit _ SH1106 # define ONE _ WIRE _ BUS 2 // ประกาศตวแปรทใชในการอานคาอณหภมทขา 2 OneWire oneWire (ONE _ WIRE _ BUS); // การสงขอมลอณหภมไปยงอปกรณทเชอมตอ DallasTemperature sensors (& oneWire); // สงคาอณหภมไปทางเสนทางการสอสาร void setup (void) { mySerial. begin (9600); // ตงคาการสอสารผานบลทธท 9, 600 บต Serial. begin (9600); ตอวนาท // ตงคาการสอสารผานพอรตท 9, 600 บตตอวนาท Serial. println ("Dallas Temperature IC Control Library Demo"); // พมพขอความออกมอนเตอร sensors. begin (); // ตงคาเรมตนการใชเซนเซอร } void loop (void) { Sensors. requestTemperatures (): // สงคาอณหภม Serial. println (sensors. getTempCByIndex (0); // พมพคาอณหภมในมอนเตอร mySerial. println (sensors. getTempCByIndex (0); // สงคาอณหภมไปยงอปกรณทเชอมตอผานบลทธ }
Page 32
282
7. ตวอยางโครงงานหนยนตวงตาม โครงงานหนยนตวงตาม มดงน
อปกรณ มดงน 1. บอรดไมโครคอนโทรลเลอร Arduino รน UNO 1 ตว 2. โมดลวดระยะอลตราโซนก 1 ตว 3. โมดลขบมอเตอร L298N 1 ตว 4. มอเตอรไฟฟากระแสตรง 12 โวลต 2 ตว 5. สายตอวงจร 6. สายยเอสบ
เงอนไขการท างาน การท างานของโครงการหนยนตเดนตามจะท างานโดยเมอระยะหางจากผใชอยในชวงไมเกน 30 เซนตเมตรเมอผใชขยบหางไปหนยนตกจะวงตามโดยใชโมดณวดระยะเปนตววดระยะในการวงตามและสงสญญาณไปยงบอรดการตนโนเพอขบมอเตอรใหหมนท าใหหนยนตวงตามโดยบอรดขบมอเตอรจะใชโมดณรน L298N ยงแสดงในภาพท 8.27
ภาพท 8.27 แสตงโมดลขบมอเตอรรน L298N
ทมา : https://www.mosfex.com/product/199/l298n-โมดลขบมอเตอร-dc-2a-dual-channel-h-bridge-motor-driver-controller-l298n-module
Page 33
283
วงจรการตอใชงาน ดงแสดงในภาพท 8.28
ภาพท 8.28 แสดงการตอวงจร
โคดโปรแกรม มดงน # define echoPin 5 // ประกาศใหขา 5 เปน Echo # define trigPin 6 // ประกาศใหขา 6 เปน Trigger # define LED1 Pin 13 // ประกาศตวแปร LED1Pin เทากบขา 13 # define LED2Pin 12 // ประกาศตวแปร LED1Pin เทากบขา 12 # define LED3Pin 11 // ประกาศตวแปร LED1Pin เทากบขา 11 # define LED4Pin 10 // ประกาศตวแปร LED1Pin เทากบขา 10 เปนขาสญญาณพลส # define LED5Pin 9 // ประกาศตวแปร LED1 Pin เทากบขา 9 เปนชาสญญาณพลส # define LED6Pin 8// ประกาศตวแปร LED1Pin เทากบขา 8 long duration, inches, cm; // ประกาศตวแปรชนด long int maximumRange = 100; //ก าหนดคาใหตวแปรเปนระยะสงสด int minimumRange = 30; // ก าหนดคาใหตวแปรเปนระยะต าสด int i1 = 80, i2 = 80; // ก าหนดคาของตวแปรเพอใชในการก าหนดความเรวมอเตอร void setup () { Serial. begin (9600); // ตงคาการสอสารทความเรว 9, 600 บตตอวนาท pinMode (trigPin, OUTPUT); // ตงคาตวแปร trigPin ใหเปนเอาตพต pinMode (echoPin, INPUT); // ตงคาตวแปร echoPin ใหเปนอนพต
Page 34
284
pinMode (LED1Pin, OUTPUT); // ตงคาตวแปร LED1Pin ใหเปนเอาตพต pinMode (LED2Pin, OUTPUT); // ตงคาตวแปร LED2Pin ใหเปนเอาตพต pinMode (LED3Pin, OUTPUT); // ตงคาตวแปร LED3Pin ใหเปนเอาตพต pinMode (LED4Pin, OUTPUT); // ตงคาตวแปร LED4Pin ใหเปนเอาตพต pinMode (LED5Pin, OUTPUT); // ตงคาตวแปร LED5Pin ใหเปนเอาตพต pinMode (LED6Pin, OUTPUT); 1. ตงคาตวแปร LED6Pin ใหเปนเอาตพต } void loop () { digitalWrite (trigPin, LOW); //ตงคาใหตวแปร trigPin ใหมสถานะเปน Low delayMicroseconds (2); // หนวงเวลา 2 ไมโครวนาท digitalWrite (trigPin, HIGH); // ตงคาใหตวแปร trigPin ใหมสถานะเปน HIGH delayMicroseconds (10); // หนวงเวลา 10 ไมโครวนาท digitalWrite (trigPin, LOW); // ตงคาใหตวแปร trigPin ใหมสถานะเปน LOW duration = pulseln (echoPin, HIGH); // ประกาศตวแปรเพอรบคาสญญาณ inches = microsecondsTolnches (duration); // การเปลยนคาสญญาณเปนนว cm = microsecondsToCentimeters (duration); // การเปลยนคาสญญาณเปนเซนตเมตร Serial. print (inches); // พมพคาของตวแปร inches ออกมอนเตอร Serial. print (" in "); / / พมพคาขอความออกมอนเตอร Serial. print (cm); // พมพคาขอมลตวแปร cm ออกมอนเตอร Serial. print (" cm "); // พมพขอความออกมอนเตอร Serial. println (); if (cm> = minimumRange) // ก าหนดเงอนไขวาตวแปร cm มากกวาหรอเทากบระยะทตงหรอไม { digitalWrite (LED1Pin, HIGH); // สงใหตวแปร LED1Pin มสถานะเปน HIGH digitalWrite (LED2Pin, HIGH); // สงใหตวแปร LED2Pin มสถานะเปน HIGH digitalWrite (LED3Pin, LOW); // สงใหตวแปร LED3Pin มสถานะเปน Low analogWrite (LED4Pin, i1); // สงใหตวแปร LED4Pin สงสญญาณออกเปนพลสตามทก าหนด analogwrite (LED5Pin, i2); // สงใหตวแปร LED5Pin สงสญญาณออกเปนพลสตามทก าหนด digitalWrite (LED6Pin, LOW); // สงใหตวแปร LED6Pin มสถานะเปน LOW } else // ถาท างานนอกเหนอจากเงอนไข digitalWrite (LED1Plin, Low); // สงใหตวแปร LED1 Pin มสถานะเปน LOW
Page 35
285
digitalWrite (LED2Pin, LOW); // สงใหตวแปร LED2Pin มสถานะเปน Low digitalWrite (LED3Pin, LOW); // สงใหตวแปร LED3Pin มสถานะเปน LOW digitalWrite (LED4Pin, LOW); // สงใหตวแปร LED4Pin มสถานะเปน Low digitalWrite (LED5Pin, LOW); // สงใหตวแปร LED5Pin มสถานะเปน Low digitalWrite (LED6Pin, LOW); // สงใหตวแปร LED6Pin มสถานะเปน Low } delay (1000); // หนวงเวลา 1 วนาท } long microsecondsTolnches (long microseconds) // โปรแกรมยอยการสงคาเปนระยะนว { return microseconds / 74/2; // สงคา } long microsecondsToCentimeters (long microseconds) // โปรแกรมยอยการสงค าเปนระยะเซนตเมตร return microseconds / 29/2; // สงคา }
จากตวอยางการประยกตใชงานขางตนเปนการน าไปใชกบอปกรณตอพวงชนดตาง ๆ บางสวนเทานนซงอปกรณตอพวงยงมอกมากมายทน ามาใชกบงานทตองการไดซงลกษณะการตอใชงานและการเขยนโปรแกรมควบคมจะขนอยกบคณสมบตของอปกรณตอพวงนนนอกจากนโครงงานทยกตวอยางมากเปนสวนหนงทน าไปประยกตใชยงสามารถพฒนาไปเปนโครงงานแบบอน ๆ อกมากมาย