Important Announcement
PubHTML5 Scheduled Server Maintenance on (GMT) Sunday, June 26th, 2:00 am - 8:00 am.
PubHTML5 site will be inoperative during the times indicated!

Home Explore ณัฐวุฒิ มณีวรรณ์ 615

ณัฐวุฒิ มณีวรรณ์ 615

Published by Nattawut Maneewan, 2021-03-11 02:02:08

Description: ณัฐวุฒิ มณีวรรณ์ 615

Search

Read the Text Version

ใบงานท่ี 4.31 การประยกุ ตก์ ารแสดงผลดว้ ยโมดูล MAX7219 กบั เซนเซอร์ตา่ ง ๆ  397 ทดลองการทางาน 1. จาลองการทางานดว้ ยโปรแกรม Proteus 2. ทดลองดว้ ยวงจรจริง 3. ทดลองเพิ่ม/ลดอุณหภูมิท่ีเทอร์มิสเตอร์สังเกตผล วงจรทใ่ี ช้เซนเซอร์เป็ น DS18B20 D1 VCC Peripheral circuit 1N5819 CPU circuit VCC MAX7219 7-Segment 4-Digit 1R01k 7,20 ATMEGA328 VCC VCC Din SW1 Load 1 RST AVCC Clk GND C1 D11(MOSI) 17 0.1uF D10(SS) 16 19 D13(SCK) USB to UART (TTL Level) R2,R3 3 1k 2 DTR RXD D1(TXD) TXD D0(RXD) +5V GND R4 VCC R5 VCC 3V3 4.7k 4.7k 3 DS18B20 3 DS18B20 D8 14 2 VCC 2 VCC D9 15 DQ DQ GND GND X1 16MHz 9 XTAL1 1 1 10 XTAL2 C2,C3 22pF GND 8,22 รูปท่ี 4.31-13 วงจรที่ใชไ้ อซี AVR ในการทดลอง กรณีท่ีใช้ Arduino ในการทดลอง ตอ่ วงจรดงั รูป VCC ARDUINO VCC 5V MAX7219 7-Segment 4-Digit D11(MOSI) D10(SS) VCC D13(SCK) Din Load D8 Clk D9 GND GND R1 VCC R2 VCC 4.7k 4.7k 3 DS18B20 3 DS18B20 2 VCC 2 VCC DQ DQ GND GND 1 1 รูปท่ี 4.31-14 วงจรท่ีใชบ้ อร์ด Arduino ในการทดลอง

398  เรียนรู้และลองเลน่ Arduino เบ้ืองตน้ [ครูประภาส สุวรรณเพชร] การต่อวงจรไมโครคอนโทรลเลอร์ Arduino ที่ใชบ้ อร์ดโมดูล Arduino สาเร็จรูปลงบอร์ดทดลอง J 20 20 25 25 30 30 35 35 40 40 45 45 50 50 55 55 60 60 F GH I J 1 5 10 15 F GH I VCC D12 GND D11 DIN D10 CS D9 CL K D8 D7 D6 D5 D4 D3 D2 GND RST D0 D1 AB C DE D S1 8 D S1 8 AB C DE 1 D13 B 20 B 20 3V3 REF A0 5 A1 A2 A3 A4 A5 10 A6 A7 5V RST GND 15 VIN รูปท่ี 4.31-15 การตอ่ ลงบอร์ดทดลอง การตอ่ วงจรเพือ่ ทดลองดว้ ยการจาลองการทางานดว้ ยโปรแกรม Proteus รูปที่ 4.31-16 การต่อวงจรทดลองในโปรแกรมจาลองการทางาน ปัญ าการจาลองการทางานของไลบราร่ี DallasTemperature.h ในใบงานท่ีผา่ นมาการจาลองการทางานสามารถจาลองไดป้ กติไม่มีขอ้ ผดิ พลาดใด ๆ แต่สาหรับ ใบงานน้ีหากใชไ้ ลบราร่ี DallasTemperature.h เพ่ืออ่านค่าอุณหภูมิจากไอซี DS18B20 จะไม่สามารถอ่าน คา่ ไดแ้ มว้ า่ โคด้ น้นั สามารถทดลองในวงจรจริงไดก้ ต็ าม ท้งั น้ีเกิดจากเวอร์ชนั่ ของโปรแกรม Arduino IDE ซ่ึงถา้ หากตอ้ งการท่ีจะจาลองการทางานเพอ่ื ดูผลการทางานจะตอ้ งไปใชเ้ วอร์ชนั่ 1.6.5 (a) เมื่อใช้ Arduino IDE V. 1.8.5 (b) เมื่อใช้ Arduino IDE V. 1.6.5 รูปท่ี 4.31-17 ผลการทดลองในโปรแกรมจาลองการทางานจาก Arduino IDE ต่างเวอร์ชน่ั

ใบงานท่ี 4.31 การประยกุ ตก์ ารแสดงผลดว้ ยโมดูล MAX7219 กบั เซนเซอร์ตา่ ง ๆ  399 การทดลองท่ี 4 เขียนโปรแกรมแสดงค่าอุณหภูมิที่วดั จากไอซี DS18B20 จานวน 2 ตวั โดยแสดงผลท่ี โมดูลตวั เลข MAX7219 ผงั งาน จากโจทยส์ ามารถเขียนเป็นผงั งานไดด้ งั น้ี START กา นดคา่ เริม่ ต้นต่าง ๆ อ่านคา่ จากไอซี แสดงค่าท่อี า่ นได้ แปลงผงั งานเป็ นโปรแกรม จากผงั งานสามารถเขียนเป็นโคด้ โปรแกรมควบคุม Arduino 1 #include <HCMAX7219.h> 2 #include <SPI.h> 3 #include <OneWire.h> 4 #include <DallasTemperature.h> 5 OneWire ds_1(8); //sensor 1 on pin D8 6 OneWire ds_2(9); //sensor 2 on pin D9 7 DallasTemperature sensor_1(&ds_1); 8 DallasTemperature sensor_2(&ds_2); 9 float temp_1; //variable keep temp value 10 float temp_2; //variable keep temp value 11 void temp_read(); 12 HCMAX7219 HCMAX7219(10); /* D10 -> CS pin */ 13 void setup() 14 { 15 HCMAX7219.Intensity(10, 0); /*Sets the intensity of the LED 0 to 15 */ 16 sensor_1.begin(); 17 sensor_2.begin(); 18 } 19 void loop() 20 { 21 temp_read(); 22 HCMAX7219.Clear(); /* Clear the output buffer */ 23 HCMAX7219.print7Seg(temp_1*10,1,8); /* Write value to the output buffer */ 24 HCMAX7219.print7Seg(temp_2*10,1,4); /* Write value to the output buffer */ 25 HCMAX7219.Refresh(); /* Send the output buffer to display */ 26 delay(100); 27 } 28 void temp_read() 29 { 30 sensor_1.requestTemperatures(); 31 sensor_2.requestTemperatures(); 32 //------------------------------------------ 33 temp_1 = sensor_1.getTempCByIndex(0); //read temp from sensor_1 34 temp_2 = sensor_2.getTempCByIndex(0); //read temp from sensor_2 35 } ทดลองการทางาน 1. จาลองการทางานดว้ ยโปรแกรม Proteus (ใช้ Arduino IDE v. 1.6.5 ในการคอมไพล)์ 2. ทดลองดว้ ยวงจรจริง 3. ทดลองใหอ้ ุณหภูมิท่ีตวั ไอซีเปล่ียนแปลงแลว้ สังเกตผล

400  เรียนรู้และลองเลน่ Arduino เบ้ืองตน้ [ครูประภาส สุวรรณเพชร] วงจรทใี่ ช้เซนเซอร์เป็ น DHT22 D1 VCC Peripheral circuit 1N5819 CPU circuit VCC MAX7219 7-Segment 4-Digit VCC 1R01k 7,20 ATMEGA328 Din VCC Load SW1 Clk 1 RST AVCC GND C1 D11(MOSI) 17 VCC 0.1uF D10(SS) 16 19 D13(SCK) USB to UART (TTL Level) R2,R3 3 1k 2 DTR RXD D1(TXD) TXD D0(RXD) +5V GND R4 3V3 4k7 DATA DHT22 D8 14 X1 9 XTAL1 16MHz 10 XTAL2 C2,C3 GND 22pF 8,22 รูปที่ 4.31-18 วงจรที่ใชไ้ อซี AVR ในการทดลอง กรณีที่ใช้ Arduino ในการทดลอง ตอ่ วงจรดงั รูป VCC ARDUINO 5V VCC MAX7219 7-Segment 4-Digit D11(MOSI) D10(SS) VCC Din D13(SCK) Load Clk GND VCC R1 DHT22 4k7 D8 DATA GND รูปที่ 4.31-19 วงจรท่ีใชบ้ อร์ด Arduino ในการทดลอง การต่อวงจรไมโครคอนโทรลเลอร์ Arduino ที่ใชบ้ อร์ดโมดูล Arduino สาเร็จรูปลงบอร์ดทดลอง F GH I J VCC20 2025 2530 3035 3540 40 45 45 50 50 55 55 60 60 F GH I J D12 1 GND D11 DIN D10 CS D9 CL K D8 5 D7 รูปที่ 4.31-20 การต่อลงบอร์ดทดลอง D6 D5 D4 D3 10 D2 GND RST D0 D1 15 AB C DE AB C DE 1 D13 3V3 REF A0 5 A1 A2 A3 A4 A5 10 A6 A7 5V RST GND 15 VIN

ใบงานที่ 4.31 การประยกุ ตก์ ารแสดงผลดว้ ยโมดูล MAX7219 กบั เซนเซอร์ตา่ ง ๆ  401 การตอ่ วงจรเพ่อื ทดลองดว้ ยการจาลองการทางานดว้ ยโปรแกรม Proteus รูปท่ี 4.31-21 การตอ่ วงจรทดลองในโปรแกรมจาลองการทางาน การทดลองที่ 5 เขียนโปรแกรมแสดงอุณภูมิและความช้ืนจาก DHT22 ผงั งาน จากโจทยส์ ามารถเขียนเป็นผงั งานไดด้ งั น้ี START กา นดคา่ เริม่ ต้นต่าง ๆ อ่านคา่ จากโมดลู DHT22 แสดงผล แปลงผงั งานเป็ นโปรแกรม จากผงั งานสามารถเขียนเป็นโคด้ โปรแกรมควบคุม Arduino 1 #include <HCMAX7219.h> 2 #include \"SPI.h\" 3 #include <DHT.h> 4 #define DHTPIN 8 // pin to connect DHT22 5 #define DHTTYPE DHT22 // Type of use DHT11,DHT21,DHT22 6 HCMAX7219 HCMAX7219(10); /* D10 -> CS pin */ 7 DHT dht(DHTPIN, DHTTYPE); 8 void setup() 9{ 10 HCMAX7219.Intensity(10, 0); /*Sets the intensity of the LED 0 to 15 */ 11 dht.begin(); 12 } 13 void loop() 14 { 15 delay(2000); 16 float h = dht.readHumidity(); 17 float t = dht.readTemperature(); 18 HCMAX7219.Clear(); /* Clear the output buffer */ 19 if (isnan(h) || isnan(t)) 20 { 21 HCMAX7219.print7Seg(\"FALT\",8); /* Write \"FALT\" to the output buffer */ 22 return; 23 } 24 HCMAX7219.print7Seg(h*10,1,8); /* Write value to the output buffer */ 25 HCMAX7219.print7Seg(t*10,1,4); /* Write value to the output buffer */ 26 HCMAX7219.Refresh(); /* Send the output buffer to the display */ 27 }

402  เรียนรู้และลองเลน่ Arduino เบ้ืองตน้ [ครูประภาส สุวรรณเพชร] ทดลองการทางาน 1. จาลองการทางานดว้ ยโปรแกรม Proteus 2. ทดลองดว้ ยวงจรจริง 3. ทดลองเพิ่ม/ลดอุณหภูมิและความช้ืน สังเกตผล วงจรทใ่ี ช้เซนเซอร์เป็ น Ultasonic D1 VCC Peripheral circuit 1N5819 CPU circuit VCC MAX7219 7-Segment 4-Digit R1 7,20 ATMEGA328 VCC 10k VCC Din Load SW1 1 RST AVCC Clk GND C1 D11(MOSI) 17 0.1uF D10(SS) 16 VCC 19 1 VCC D13(SCK) 2 Trig 3 Echo USB to UART (TTL Level) R2,R3 3 4 GND 1k 2 DTR RXD D1(TXD) TXD D0(RXD) +5V GND 3V3 D9 15 HC-SR04 D8 14 X1 9 XTAL1 16MHz 10 XTAL2 C2,C3 GND 22pF 8,22 รูปที่ 4.31-22 วงจรท่ีใชไ้ อซี AVR ในการทดลอง VCC ARDUINO HC-SR04 5V VCC MAX7219 7-Segment 4-Digit VCC D11(MOSI) 1234 D10(SS) VCC VCC Din Trig D13(SCK) Load Echo Clk GND GND D8 D9 GND รูปที่ 4.31-23 วงจรที่ใชบ้ อร์ด Arduino ในการทดลอง F GH I J 20 20 25 25 30 30 VCC 35 35 40 40 45 45 50 50 55 55 60 60 F GH I J D12 1 GND D11 DIN D10 CS D9 CL K D8 5 D7 D6 D5 D4 D3 10 D2 GND RST D0 D1 15 AB C DE VCC 1 D13 Trig Echo 3V3 GND REF A0 HC-SR04 AB C DE 5 A1 A2 A3 A4 A5 10 A6 A7 5V RST GND 15 VIN รูปท่ี 4.31-24 การตอ่ ลงบอร์ดทดลอง

ใบงานที่ 4.31 การประยกุ ตก์ ารแสดงผลดว้ ยโมดูล MAX7219 กบั เซนเซอร์ต่าง ๆ  403 รูปท่ี 4.31-25 การต่อวงจรทดลองในโปรแกรมจาลองการทางาน การทดลองที่ 6 เขียนโปรแกรมวดั ระยะดว้ ย Ultrasonic แสดงผลดว้ ยจอ LCD ผงั งาน จากโจทยส์ ามารถเขียนเป็นผงั งานไดด้ งั น้ี START กา นดคา่ เริม่ ต้นต่าง ๆ อ่านคา่ จากโมดูล Ultrasonic แสดงผล แปลงผงั งานเป็ นโปรแกรม จากผงั งานสามารถเขียนเป็นโคด้ โปรแกรมควบคุม Arduino 1 #include <HCMAX7219.h> 2 #include \"SPI.h\" 3 #include <Ultrasonic.h> 4 Ultrasonic ultrasonic(9,8); // (Trig PIN,Echo PIN) 5 HCMAX7219 HCMAX7219(10); /* D10 -> CS pin */ 6 void setup() 7{ 8 HCMAX7219.Intensity(12, 0); /*Sets the intensity of the LED 0 to 15 */ 9} 10 void loop() 11 { 12 delay(500); 13 HCMAX7219.Clear(); /* Clear the output buffer */ 14 float L=ultrasonic.Ranging(CM); 15 HCMAX7219.print7Seg(L,8); /* Write value to the output buffer */ 16 HCMAX7219.print7Seg(\"CM\",5); /* Write value to the output buffer */ 17 HCMAX7219.Refresh(); /* Send the output buffer to the display */ 18 } ทดลองการทางาน 1. จาลองการทางานดว้ ยโปรแกรม Proteus 2. ทดลองดว้ ยวงจรจริง 3. ทดลองเปลี่ยนแปลงรูปแบบการแสดงผล

404  เรียนรู้และลองเลน่ Arduino เบ้ืองตน้ [ครูประภาส สุวรรณเพชร] 7. สรุปผลการปฏบิ ตั งิ าน 8. งานทม่ี อบ มาย 1. ออกแบบโจทยป์ ระยกุ ตใ์ ชง้ านท่ีใชเ้ ซนเซอร์วดั อุณหภูมิและความช้ืน DHT22 แสดงผลการ ทางานท่ีโมดูลตวั เลข MAX7219 VCC ARDUINO VCC MAX7219 7-Segment 4-Digit 5V D11(MOSI) VCC D10(SS) Din D13(SCK) Load Clk GND R1-R4 220 LED1-LED4 VCC DHT22 D2 R5 DATA D3 4k7 D4 D5 D8 GND รูปท่ี 4.31-26 วงจรท่ีใชท้ ดลอง 2. ออกแบบโจทยป์ ระยุกตใ์ ชง้ านที่ใชเ้ ซนเซอร์วดั ระยะทาง Ultrasonic แสดงผลการทางานท่ี โมดูลตวั เลข MAX7219 VCC ARDUINO VCC MAX7219 7-Segment 4-Digit 5V VCC D11(MOSI) Din D10(SS) Load D13(SCK) Clk GND R1-R4 220 LED1-LED4 D2 D3 VCC HC-SR04 D4 1 VCC D5 2 Trig 3 Echo D9 4 GND D8 GND รูปที่ 4.31-27 วงจรท่ีใชท้ ดลอง

ใบงานท่ี 4.32 การประยกุ ตก์ ารแสดงผลดว้ ยโมดูล LED Dot Matrixกบั เซนเซอร์ตา่ ง ๆ  405 ใบงานที่ 4.32 การประยกุ ต์การแสดงผลด้วยโมดลู LED Dot Matrixกบั เซนเซอร์ต่าง ๆ 1. จุดประสงค์ทว่ั ไป เพอื่ ใหส้ ามารถประยกุ ตก์ ารแสดงผลดว้ ยโมดูล LED Dot Matrix กบั เซนเซอร์ตา่ ง ๆ ได้ 2. จุดประสงค์เชิงพฤตกิ รรม 1. บอกวธิ ีประยกุ ตก์ ารแสดงผลดว้ ยโมดูล LED Dot Matrix กบั เซนเซอร์ตา่ ง ๆ ได้ 2. บอกข้นั ตอนการตอ่ วงจรเพ่อื ทดลองบนบอร์ดทดลองได้ 3. ทดสอบการทางานของบอร์ด Arduino ได้ 4. ปฏิบตั ิงานตามใบงานเสร็จทนั เวลาท่ีกาหนด 3. เคร่ืองมือและอปุ กรณ์ 1. บอร์ดทดลอง Breadboard 830 Point 1 แผน่ 2. อุปกรณ์อิเลก็ ทรอนิกส์ประกอบดว้ ย 4 ตวั 4 ตวั 2.1 Potentiometer 10k 1 ตวั 2.5 LED 3mm 1 ตวั 2.6 ตวั ทา้ นทาน 220 ohm 1 ตวั 2.2 Thermistor NTC 10k 1 ตวั 2.7 ตวั ทา้ นทาน 4.7k 2.8 ตวั ทา้ นทาน 10k 1 เส้น 2.3 IC DS18B20 1 ตวั 1 ชุด 3.5 สายเชื่อมตอ่ USB (Mini) 1 เคร่ือง 2.4 IC LM35 1 ตวั 3.6 สายเช่ือมตอ่ วงจร 3.7 คอมพวิ เตอร์ 3. อุปกรณ์ร่วมอื่น ๆ 3.1 บอร์ด Arduino Nano 3.0 1 ตวั 3.2 LED Dot Matrix 4 in 1 2 ตวั 3.3 โมดูลวดั อุณหภูมิ DHT22 1 ตวั 3.4 โมดูลอลั ตร้าโซนิค HC-SR04 1 ตวั 4. ลาดับข้นั การปฏบิ ัติงาน 1. ศึกษาจุดประสงคท์ วั่ ไป จุดประสงคเ์ ชิงพฤติกรรมและทฤษฎีพ้ืนฐานที่เกี่ยวขอ้ ง 2. ดาเนินการต่อวงจรลงบอร์ดทดลองตามวงจรที่กาหนด 3. เขียนโปรแกรมควบคุมและทดสอบการทางานของวงจร 4. สรุปผลการปฏิบตั ิงาน

406  เรียนรู้และลองเลน่ Arduino เบ้ืองตน้ [ครูประภาส สุวรรณเพชร] 5. ทฤษฎพี ืน้ ฐาน การประยุกตใ์ ชง้ านในใบงานน้ีเป็ นการเปล่ียนเป้าหมายการแสดงผลจากเดิมในใบงานที่ 4.5 ถึง ใบงานท่ี 4.12 ท่ีเป็นการอ่านคา่ จากเซนเซอร์แบบต่าง ๆ แลว้ นาผลมาคานวณ (หรือนามาใชไ้ ดเ้ ลยในบาง ใบงาน) ไปแสดงผลผ่านทางจอคอมพิวเตอร์ผ่านทางการสื่อสารทางพอร์ตอนุกรมซ่ึงการดาเนินการ ดงั กล่าวเป็ นการเขียนโคด้ โปรแกรมเพ่ือใชท้ ดสอบผลการทางานกบั เซนเซอร์ต่าง ๆ ในเบ้ืองตน้ ซ่ึงไม่ ตอ้ งตอ่ ตวั แสดงผลอ่ืน ๆ สาหรับใบงานน้ีเป็นการเปลี่ยนเป้าหมายจากการแสดงผลจากจอคอมพวิ เตอร์มา แสดงผลท่ีโมดูลตวั เลข LED Dot Matrix ฟังก์ชั่นช่วยงานเพมิ่ เติม 1. ฟังก์ชั่นแปลงตัวเลขเป็ นตัวอกั ษร ใชแ้ ปลงตวั เลขให้อยใู่ นรูปตวั อกั ษรท่ีพร้อมแสดงผลโดย ตวั อกั ษรถูกเก็บไวใ้ นตวั แปร char รูปแบบเป็นดงั น้ี dtostrf(floatVar, minStringWidthIncDecimalPoint, numVarsAfterDecimal, charBuf); floatVar: ตวั เลขที่ตอ้ งการแปลงซ่ึงเป็นค่าท่ีอยใู่ นตวั แปรก็ได้ minStringWidthIncDecimalPoint: คา่ ต่าสุดของจานวนตวั อกั ษรรวมจุดทศนิยม numVarsAfterDecimal: จานวนทศนิยม charBuf: ตวั แปรที่ใชส้ าหรับเก็บผลลพั ธ์ (เป็นตวั แปรอาร์เรยช์ นิด char) ตวั อย่าง dtostrf(1234.567,0,1,numMsg); หมายถึง แปลงตวั เลข 1234.567 เป็ นตวั อกั ษรตอ้ งการทศนิยม 1 ตาแหน่งเมื่อแปลงเสร็จ แลว้ เกบ็ ผลลพั ธ์ลงในตวั แปร numMsg 2. ฟังก์ชั่นเชื่อมตัวแปรท่ีเป็ นตัวอักษรเข้าด้วยกัน ใช้สาหรับเช่ือมขอ้ ความที่อยู่ในตวั แปร อาร์เรยเ์ ก็บตวั อกั ษร 2 ตวั แปรเขา้ ดว้ ยกนั รูปแบบเป็นดงั น้ี strcat(dest, src); ตัวอย่าง destr: ตวั แปรที่เก็บขอ้ ความแรก และเป็นตวั แปรที่เกบ็ ผลลพั ธ์ของการรวม หมายถงึ src: ตวั แปรที่เกบ็ ขอ้ ความที่สองโดยจะนาขอ้ ความมาต่อทา้ ย strcat (destr, src); นาขอ้ ความที่อยใู่ นตวั แปร src มาเช่ือมตอ่ ทา้ ยขอ้ ความในตวั แปร destr * หมายเหตุ ก่อนทาการเช่ือมขอ้ ความตอ้ งทาใหต้ าแหน่งแรกขอ้ ตวั แปรแรกเกบ็ คา่ null string ดว้ ยคาสั่ง destr [0]=0;

ใบงานที่ 4.32 การประยกุ ตก์ ารแสดงผลดว้ ยโมดูล LED Dot Matrixกบั เซนเซอร์ต่าง ๆ  407 6. วงจรทใี่ ช้ทดลอง วงจรเพ่ือใช้ทดลองในใบงานเป็ นการทดลองจากเซนเซอร์ท้งั 6 แบบโดยแสดงผลที่โมดูล แสดงผลตวั เลข LED Dot Matrix วงจรที่ใชท้ ดลองมีดงั น้ี 1. วงจรท่ีใชเ้ ซนเซอร์เป็นตวั ตา้ นทานปรับคา่ ได้ 2. วงจรท่ีใชเ้ ซนเซอร์วดั อุณหภูมิเป็นเทอร์มิสเตอร์ 3. วงจรท่ีใชเ้ ซนเซอร์วดั อุณหภูมิเป็นไอซี LM35 4. วงจรที่ใชเ้ ซนเซอร์วดั อุณหภูมิเป็นไอซี DS18B20 5. วงจรที่ใชเ้ ซนเซอร์เป็น DHT22 6. วงจรที่ใชเ้ ซนเซอร์เป็น Ultrasonic วงจรทใ่ี ช้เซนเซอร์เป็ นตัวต้านทานปรับค่าได้ D1 VCC Peripheral circuit 1N5819 CPU circuit R1 7,20 ATMEGA328 10k VCC SW1 1 RST AVCC VCC C1 VCC MAX7219 7-Segment 4-Digit 0.1uF GND D11(MOSI) 17 Din D10(SS) 16 CS 19 Clk D13(SCK) USB to UART (TTL Level) R2,R3 3 1k 2 DTR RXD D1(TXD) TXD D0(RXD) +5V GND VCC 3V3 A5 28 10k X1 9 XTAL1 16MHz 10 XTAL2 C2,C3 GND 22pF 8,22 รูปที่ 4.32-1 วงจรท่ีใชไ้ อซี AVR ในการทดลอง กรณีท่ีใช้ Arduino ในการทดลอง ตอ่ วงจรดงั รูป VCC ARDUINO 5V VCC MAX7219 7-Segment 4-Digit 10k A5 D11(MOSI) VCC D10(SS) GND Din D13(SCK) CS Clk GND รูปที่ 4.32-2 วงจรที่ใชบ้ อร์ด Arduino ในการทดลอง

F GH I J408  เรียนรู้และลองเลน่ Arduino เบ้ืองตน้ [ครูประภาส สุวรรณเพชร]20 2025 25 30 30 35 35 40 40 45 45 50 50 55 55 60 60 F GH I J D12 1 D11 รูปท่ี 4.32-3 การตอ่ ลงบอร์ดทดลอง D10 D9รูปที่ 4.32-4 การต่อวงจรทดลองในโปรแกรมจาลองการทางาน D8 5การทดลองที่ 1.1 เขียนโปรแกรมแสดงคา่ ท่ีอา่ นไดจ้ ากโพเทนธิโอมิเตอร์ แสดงผลขอ้ ความ 2 ขอ้ ความคือ D7“Analog” กบั ตวั เลขท่ีอ่านไดจ้ ากพอร์ตแอนะลอกไหลข้ึนทีละคา่ D6ผงั งาน จากโจทยส์ ามารถเขียนเป็นผงั งานไดด้ งั น้ี D5 D4 START D3 10กาหนดค่าเริม่ ต้นต่าง ๆ D2 อ่านคา่ จาก POT GNDแสดงค่าท่ีอา่ นได้ RST D0 D1 15 AB C DE AB C DE 1 D13 3V3 REF A0 5 A1 A2 A3 A4 A5 10 A6 A7 5V RST GND 15 VIN

ใบงานที่ 4.32 การประยกุ ตก์ ารแสดงผลดว้ ยโมดูล LED Dot Matrixกบั เซนเซอร์ตา่ ง ๆ  409 แปลงผงั งานเป็ นโปรแกรม จากผงั งานสามารถเขียนเป็นโคด้ โปรแกรมควบคุม Arduino 1 #include <MD_Parola.h> 2 #include <MD_MAX72xx.h> 3 #include <SPI.h> 4 #define HARDWARE_TYPE MD_MAX72XX::FC16_HW 5 #define MAX_DEVICES 4 6 #define CLK_PIN 13 7 #define DATA_PIN 11 8 #define CS_PIN 10 9 #define PAUSE 1000 10 #define SPEED 50 11 #define BUF_SIZE 20 12 char Text[BUF_SIZE] = { \"Analog\" }; 13 char NumMsg[BUF_SIZE] = { \"\" }; 14 MD_Parola P = MD_Parola(HARDWARE_TYPE, DATA_PIN, CLK_PIN, CS_PIN, MAX_DEVICES); 15 void setup(void) 16 { 17 P.begin(); 18 P.setIntensity(5); //intensity to set the display (0-15) 19 } 20 void loop(void) 21 { 22 static uint8_t cycle = 0; // cycle count 23 dtostrf(analogRead(A5), 0, 1, NumMsg); // converts val into an ASCII 24 if (P.displayAnimate()) // if end of animation 25 { 26 if(cycle==0) 27 P.displayText(Text,PA_CENTER,SPEED,PAUSE,PA_SCROLL_UP,PA_SCROLL_UP); 28 if(cycle==1) 29 P.displayText(NumMsg,PA_CENTER,SPEED,PAUSE,PA_SCROLL_UP,PA_SCROLL_UP); 30 cycle = (cycle + 1) % 2; // prepare for next pass 31 } 32 } ทดลองการทางาน 1. จาลองการทางานดว้ ยโปรแกรม Proteus 2. ทดลองดว้ ยวงจรจริง 3. ทดลองเปล่ียนแปลงคา่ โพเทนธิโอมิเตอร์แลว้ สังเกตผล การทดลองท่ี 1.2 เขียนโปรแกรมแสดงค่าที่อา่ นไดจ้ ากโพเทนธิโอมิเตอร์ แสดงผลขอ้ ความ 2 ขอ้ ความคือ “Analog” กบั ตวั เลขที่อา่ นไดจ้ ากพอร์ตแอนะลอกใหไ้ หลจากขวาไปซา้ ยตอ่ เนื่อง โปรแกรม 1 #include <MD_Parola.h> 2 #include <MD_MAX72xx.h> 3 #include <SPI.h> 4 #define HARDWARE_TYPE MD_MAX72XX::FC16_HW 5 #define MAX_DEVICES 4 6 #define CLK_PIN 13 7 #define DATA_PIN 11 8 #define CS_PIN 10 9 #define PAUSE 0 10 #define SPEED 50 11 #define BUF_SIZE 20 12 char Msg[BUF_SIZE] = { \"\" }; 13 char Text[BUF_SIZE] = { \"Analog Value: \" }; 14 char NumMsg[BUF_SIZE] = { \"\" }; 15 MD_Parola P = MD_Parola(HARDWARE_TYPE, DATA_PIN, CLK_PIN, CS_PIN, MAX_DEVICES); 16 void setup(void){ 17 P.begin(); 18 P.setIntensity(5); //intensity to set the display (0-15)

410  เรียนรู้และลองเลน่ Arduino เบ้ืองตน้ [ครูประภาส สุวรรณเพชร] 19 P.displayText(Msg,PA_LEFT,SPEED,PAUSE,PA_SCROLL_LEFT,PA_SCROLL_LEFT); 20 } 21 void loop(void){ 22 Msg[0]=0; // start with a null string: 23 dtostrf(analogRead(A5), 0, 1, NumMsg); // converts val into an ASCII 24 strcat(Msg,Text); // add first string 25 strcat(Msg,NumMsg); // add second string 26 if (P.displayAnimate()){ // if end of animation then restart animate again 27 P.displayReset(); 28 } 29 } ทดลองการทางาน 1. จาลองการทางานดว้ ยโปรแกรม Proteus 2. ทดลองดว้ ยวงจรจริง 3. ทดลองเปลี่ยนแปลงคา่ โพเทนธิโอมิเตอร์แลว้ สังเกตผล วงจรทใี่ ช้เซนเซอร์วดั อณุ หภูมเิ ป็ นเทอร์มสิ เตอร์ D1N15819 VCC Peripheral circuit CPU circuit R1 7,20 ATMEGA328 10k VCC SW1 1 RST AVCC VCC C1 VCC MAX7219 7-Segment 4-Digit 0.1uF GND D11(MOSI) 17 Din D10(SS) 16 CS 19 Clk D13(SCK) USB to UART (TTL Level) R2,R3 3 VCC 1k 2 DTR RXD D1(TXD) R4 TXD D0(RXD) 10k +5V GND A5 28 T 3V3 NTC Thermistor 10k X1 9 XTAL1 16MHz 10 XTAL2 C2,C3 GND 22pF 8,22 รูปท่ี 4.32-5 วงจรที่ใชไ้ อซี AVR ในการทดลอง กรณีที่ใช้ Arduino ในการทดลอง ตอ่ วงจรดงั รูป VCC ARDUINO 5V VCC VCC MAX7219 7-Segment 4-Digit GND R1 D11(MOSI) Din 10k D10(SS) CS Clk NTC A5 D13(SCK) Thermistor T 10k GND รูปที่ 4.32-6 วงจรท่ีใชบ้ อร์ด Arduino ในการทดลอง

F GH I J ใบงานที่ 4.32 การประยกุ ตก์ ารแสดงผลดว้ ยโมดูล LED Dot Matrixกบั เซนเซอร์ต่าง ๆ  41120 2025 2530 3035 3540 4045 4550 5055 5560 60F GH I J D12 1 D11การต่อวงจรไมโครคอนโทรลเลอร์ Arduino ท่ีใชบ้ อร์ดโมดูล Arduino สาเร็จรูปลงบอร์ดทดลอง D10 D9 รูปท่ี 4.32-7 การต่อลงบอร์ดทดลอง D8 5การต่อวงจรเพื่อทดลองดว้ ยการจาลองการทางานดว้ ยโปรแกรม Proteus D7 D6รูปท่ี 4.32-8 การต่อวงจรทดลองในโปรแกรมจาลองการทางาน D5หมายเหตุ ส่วนของภาคขบั LED Dot Matrix เป็นวงจรเช่นเดียวกบั รูปที่ 4.32-4 D4การทดลองที่ 2 เขียนโปรแกรมแสดงผลที่อา่ นค่าจากเทอร์มิสเตอร์แลว้ คานวนเป็นอุณหภูมิ D3 10ผงั งาน จากโจทยส์ ามารถเขียนเป็นผงั งานไดด้ งั น้ี D2 START GNDกาหนดค่าเริม่ ต้นต่าง ๆ RST อ่านค่าจาก NTC D0คานวณ D1 15แสดงผล AB C DE AB C DE 1 D13 3V3 REF A0 5 A1 A2 A3 A4 A5 10 A6 A7 5V RST GND 15 VIN

412  เรียนรู้และลองเลน่ Arduino เบ้ืองตน้ [ครูประภาส สุวรรณเพชร] แปลงผงั งานเป็ นโปรแกรม จากผงั งานสามารถเขียนเป็นโคด้ โปรแกรมควบคุม Arduino 1 #include <MD_Parola.h> 2 #include <MD_MAX72xx.h> 3 #include <SPI.h> 4 #define NTC A5 5 #define HARDWARE_TYPE MD_MAX72XX::FC16_HW 6 #define MAX_DEVICES 4 7 #define CLK_PIN 13 8 #define DATA_PIN 11 9 #define CS_PIN 10 10 #define PAUSE 0 11 #define SPEED 50 12 #define BUF_SIZE 20 13 double Thermistor(int RawADC) ; 14 char Msg[BUF_SIZE] = { \"\" }; 15 char Text[BUF_SIZE] = { \"Temperature : \" }; 16 char NumMsg[BUF_SIZE] = { \"\" }; 17 MD_Parola P = MD_Parola(HARDWARE_TYPE, DATA_PIN, CLK_PIN, CS_PIN, MAX_DEVICES); 18 void setup(void) 19 { 20 P.begin(); 21 P.setIntensity(5); //intensity to set the display (0-15) 22 P.displayText(Msg,PA_LEFT,SPEED,PAUSE,PA_SCROLL_LEFT,PA_SCROLL_LEFT); 23 } 24 void loop(void) 25 { 26 float Temp=Thermistor(analogRead(NTC)); 27 Msg[0]=0; // start with a null string: 28 dtostrf(Temp, 0, 1, NumMsg); // converts the val into an ASCII 29 strcat(Msg,Text); // add first string 30 strcat(Msg,NumMsg); // add second string 31 if (P.displayAnimate()) // if end of animation then restart animate again 32 { 33 P.displayReset(); 34 } 35 } 36 double Thermistor(int RawADC) 37 { 38 double Cal; 39 Cal = log(10000.0/((1024.0/RawADC-1))); 40 Cal = 1/(0.001129148+(0.000234125+(0.0000000876741*Cal*Cal))*Cal); 41 Cal = Cal - 273.15; // Convert Kelvin to Celcius 42 return Cal; 43 } ทดลองการทางาน 1. จาลองการทางานดว้ ยโปรแกรม Proteus 2. ทดลองดว้ ยวงจรจริง 3. ทดลองเพ่ิม/ลดอุณหภูมิที่เทอร์มิสเตอร์สงั เกตผล 4. ทดลองปรับโคด้ โปรแกรมเพื่อเปลี่ยนรูปแบบการแสดงผลเป็นแบบอ่ืน ๆ

ใบงานที่ 4.32 การประยกุ ตก์ ารแสดงผลดว้ ยโมดูล LED Dot Matrixกบั เซนเซอร์ต่าง ๆ  413 วงจรทใี่ ช้เซนเซอร์วดั อณุ หภูมเิ ป็ นไอซี LM35 D1 VCC Peripheral circuit 1N5819 CPU circuit R1 7,20 ATMEGA328 10k VCC SW1 1 RST AVCC VCC C1 VCC MAX7219 7-Segment 4-Digit 0.1uF GND D11(MOSI) 17 Din D10(SS) 16 CS 19 Clk D13(SCK) USB to UART (TTL Level) R2,R3 3 1k 2 DTR RXD D1(TXD) VCC TXD D0(RXD) +5V 1 LM35 GND 3V3 A5 28 2 VCC OUT GND 3 X1 9 XTAL1 16MHz 10 XTAL2 C2,C3 GND 22pF 8,22 รูปที่ 4.32-9 วงจรท่ีใชไ้ อซี AVR ในการทดลอง กรณีท่ีใช้ Arduino ในการทดลอง ต่อวงจรดงั รูป VCC ARDUINO VCC MAX7219 7-Segment 4-Digit 5V D11(MOSI) VCC D10(SS) GND Din D13(SCK) CS Clk VCC 1 LM35 A5 2 VCC GND OUT GND 3 รูปท่ี 4.32-10 วงจรที่ใชบ้ อร์ด Arduino ในการทดลอง การตอ่ วงจรไมโครคอนโทรลเลอร์ Arduino ท่ีใชบ้ อร์ดโมดูล Arduino สาเร็จรูปลงบอร์ดทดลอง F GH I J 20 20 25 25 30 30 35 35 40 40 45 45 50 50 55 55 60 60 F GH I J D12 1 D11 D10 D9 D8 5 D7 D6 D5 D4 D3 10 D2 GND RST D0 D1 15 AB C DE LM35 AB C DE 1 D13 รูปท่ี 4.32-11 การตอ่ ลงบอร์ดทดลอง 3V3 REF A0 5 A1 A2 A3 A4 A5 10 A6 A7 5V RST GND 15 VIN

414  เรียนรู้และลองเลน่ Arduino เบ้ืองตน้ [ครูประภาส สุวรรณเพชร] การตอ่ วงจรเพื่อทดลองดว้ ยการจาลองการทางานดว้ ยโปรแกรม Proteus รูปที่ 4.32-12 การต่อวงจรทดลองในโปรแกรมจาลองการทางาน การทดลองท่ี 3 เขียนโปรแกรมแสดงผลท่ีอา่ นคา่ จากเทอร์มิสเตอร์แลว้ คานวนเป็นอุณหภูมิ ผงั งาน จากโจทยส์ ามารถเขียนเป็นผงั งานไดด้ งั น้ี START กาหนดคา่ เริ่มต้นต่าง ๆ อ่านค่าจากไอซี LM35 คานวณ แสดงผล แปลงผงั งานเป็ นโปรแกรม จากผงั งานสามารถเขียนเป็นโคด้ โปรแกรมควบคุม Arduino 1 #include <MD_Parola.h> 2 #include <MD_MAX72xx.h> 3 #include <SPI.h> 4 #define LM35_pin A5 5 #define HARDWARE_TYPE MD_MAX72XX::FC16_HW 6 #define MAX_DEVICES 4 7 #define CLK_PIN 13 8 #define DATA_PIN 11 9 #define CS_PIN 10 10 #define PAUSE 0 11 #define SPEED 50 12 #define BUF_SIZE 20 13 char Msg[BUF_SIZE] = { \"\" }; 14 char Text[BUF_SIZE] = { \"Temperature is: \" }; 15 char NumMsg[BUF_SIZE] = { \"\" }; 16 MD_Parola P = MD_Parola(HARDWARE_TYPE, DATA_PIN, CLK_PIN, CS_PIN, MAX_DEVICES); 17 void setup(void) 18 { 19 P.begin(); 20 P.setIntensity(5); //intensity to set the display (0-15) 21 P.displayText(Msg,PA_LEFT,SPEED,PAUSE,PA_SCROLL_LEFT,PA_SCROLL_LEFT);

ใบงานที่ 4.32 การประยกุ ตก์ ารแสดงผลดว้ ยโมดูล LED Dot Matrixกบั เซนเซอร์ตา่ ง ๆ  415 22 } 23 void loop(void) 24 { 25 int adc = analogRead(LM35_pin); 26 float temp = adc*(5.0/1023)*100.0; 27 Msg[0]=0; // start with a null string: 28 dtostrf(temp, 0, 1, NumMsg); // converts val into an ASCII 29 strcat(Msg,Text); // add first string 30 strcat(Msg,NumMsg); // add second string 31 if (P.displayAnimate()) // if end of animation then restart animate again 32 { 33 P.displayReset(); 34 } 35 } ทดลองการทางาน 1. จาลองการทางานดว้ ยโปรแกรม Proteus 2. ทดลองดว้ ยวงจรจริง 3. ทดลองเพมิ่ /ลดอุณหภูมิที่เทอร์มิสเตอร์สังเกตผล วงจรทใี่ ช้เซนเซอร์เป็ น DS18B20 D1 VCC Peripheral circuit 1N5819 CPU circuit 1R01k 7,20 ATMEGA328 VCC SW1 VCC 1 RST AVCC VCC MAX7219 7-Segment 4-Digit C1 GND 0.1uF D11(MOSI) 17 Din D10(SS) 16 CS 19 Clk D13(SCK) USB to UART (TTL Level) R2,R3 3 1k 2 DTR RXD D1(TXD) R4 VCC TXD D0(RXD) 4.7k +5V GND 3 DS18B20 3V3 D8 14 2 VCC DQ GND 1 X1 9 XTAL1 16MHz 10 XTAL2 C2,C3 GND 22pF 8,22 รูปที่ 4.32-13 วงจรที่ใชไ้ อซี AVR ในการทดลอง VCC ARDUINO VCC 5V D11(MOSI) D10(SS) VCC MAX7219 7-Segment 4-Digit D13(SCK) GND Din D8 CS GND Clk 4R.71k VCC 3 DS18B20 2 DQ VCC GND 1 รูปท่ี 4.32-14 วงจรที่ใชบ้ อร์ด Arduino ในการทดลอง

416  เรียนรู้และลองเลน่ Arduino เบ้ืองตน้ [ครูประภาส สุวรรณเพชร]F GH I J20 2025 25 30 30 35 35 40 40 45 45 50 50 55 55 60 60 F GH I J D12 1 การต่อวงจรไมโครคอนโทรลเลอร์ Arduino ท่ีใชบ้ อร์ดโมดูล Arduino สาเร็จรูปลงบอร์ดทดลองD11 D10 D S1 8D9 B 20D8 5 D7 รูปท่ี 4.32-15 การตอ่ ลงบอร์ดทดลองD6 การตอ่ วงจรเพอ่ื ทดลองดว้ ยการจาลองการทางานดว้ ยโปรแกรม ProteusD5 D4 D3 10 D2 GND RST D0 D1 15 AB C DE AB C DE 1 D13 3V3 REF A0 5 A1 A2 A3 A4 A5 10 A6 A7 5V RST GND 15 VIN รูปท่ี 4.32-16 การต่อวงจรทดลองในโปรแกรมจาลองการทางาน ปัญหาการจาลองการทางานของไลบราร่ี DallasTemperature.h ในใบงานที่ผา่ นมาการจาลองการทางานสามารถจาลองไดป้ กติไม่มีขอ้ ผิดพลาดใด ๆ แตส่ าหรับ ใบงานน้ีหากใชไ้ ลบราร่ี DallasTemperature.h เพื่ออ่านค่าอุณหภูมิจากไอซี DS18B20 จะไม่สามารถอา่ น คา่ ไดแ้ มว้ า่ โคด้ น้นั สามารถทดลองในวงจรจริงไดก้ ็ตาม ท้งั น้ีเกิดจากเวอร์ชนั่ ของโปรแกรม Arduino IDE ซ่ึงถา้ หากตอ้ งการท่ีจะจาลองการทางานเพ่ือดูผลการทางานจะตอ้ งไปใชเ้ วอร์ชนั่ 1.6.5 (a) เม่ือใช้ Arduino IDE V. 1.8.5 (b) เม่ือใช้ Arduino IDE V. 1.6.5 รูปที่ 4.32-17 ผลการทดลองในโปรแกรมจาลองการทางานจาก Arduino IDE ต่างเวอร์ชน่ั

ใบงานท่ี 4.32 การประยกุ ตก์ ารแสดงผลดว้ ยโมดูล LED Dot Matrixกบั เซนเซอร์ต่าง ๆ  417 การทดลองท่ี 4 เขียนโปรแกรมแสดงคา่ อุณหภูมิท่ีวดั จากไอซี DS18B20 ผงั งาน จากโจทยส์ ามารถเขียนเป็นผงั งานไดด้ งั น้ี START กาหนดค่าเริ่มต้นต่าง ๆ อ่านค่าจากไอซี แสดงค่าทอ่ี ่านได้ แปลงผงั งานเป็ นโปรแกรม จากผงั งานสามารถเขียนเป็นโคด้ โปรแกรมควบคุม Arduino 1 #include <MD_Parola.h> 2 #include <MD_MAX72xx.h> 3 #include <SPI.h> 4 #include <OneWire.h> 5 #include <DallasTemperature.h> 6 OneWire ds(8); //sensor on pin D8 7 DallasTemperature sensor(&ds); 8 #define HARDWARE_TYPE MD_MAX72XX::FC16_HW 9 define MAX_DEVICES 4 10 #define CLK_PIN 13 11 #define DATA_PIN 11 12 #define CS_PIN 10 13 #define PAUSE 0 14 #define SPEED 50 15 #define BUF_SIZE 20 16 char Msg[BUF_SIZE] = { \"\" }; 17 char Text[BUF_SIZE] = { \"Temperature is: \" }; 18 char NumMsg[BUF_SIZE] = { \"\" }; 19 MD_Parola P = MD_Parola(HARDWARE_TYPE, DATA_PIN, CLK_PIN, CS_PIN, MAX_DEVICES); 20 void setup(void) 21 { 22 P.begin(); 23 P.setIntensity(5); //intensity to set the display (0-15) 24 P.displayText(Msg,PA_LEFT,SPEED,PAUSE,PA_SCROLL_LEFT,PA_SCROLL_LEFT); 25 } 26 void loop(void) 27 { 28 sensor.requestTemperatures(); 29 float temp = sensor.getTempCByIndex(0); //read temp from sensor 30 Msg[0]=0; // start with a null string: 31 dtostrf(temp, 0, 1, NumMsg); // converts val into an ASCII 32 strcat(Msg,Text); // add first string 33 strcat(Msg,NumMsg); // add second string 34 if (P.displayAnimate()) // if end of animation then restart again 35 { 36 P.displayReset(); 37 } 38 } ทดลองการทางาน 1. จาลองการทางานดว้ ยโปรแกรม Proteus (ใช้ Arduino IDE v. 1.6.5 ในการคอมไพล)์ 2. ทดลองดว้ ยวงจรจริง 3. ทดลองใหอ้ ุณหภูมิท่ีตวั ไอซีเปลี่ยนแปลงแลว้ สังเกตผล

418  เรียนรู้และลองเลน่ Arduino เบ้ืองตน้ [ครูประภาส สุวรรณเพชร] วงจรทใี่ ช้เซนเซอร์เป็ น DHT22 D1 VCC Peripheral circuit 1N5819 CPU circuit R1 7,20 ATMEGA328 10k VCC SW1 1 RST AVCC VCC C1 VCC MAX7219 7-Segment 4-Digit 0.1uF GND D11(MOSI) 17 Din D10(SS) 16 CS 19 Clk D13(SCK) USB to UART (TTL Level) R2,R3 3 VCC 1k 2 DTR R4 RXD D1(TXD) 4k7 TXD D0(RXD) +5V DATA GND DHT22 3V3 D8 14 X1 9 XTAL1 16MHz 10 XTAL2 C2,C3 GND 22pF 8,22 รูปท่ี 4.32-18 วงจรท่ีใชไ้ อซี AVR ในการทดลอง กรณีท่ีใช้ Arduino ในการทดลอง ตอ่ วงจรดงั รูป VCC ARDUINO VCC MAX7219 7-Segment 4-Digit 5V D11(MOSI) VCC D10(SS) GND Din D13(SCK) CS Clk VCC D8 R1 DHT22 GND 4k7 DATA รูปท่ี 4.32-19 วงจรที่ใชบ้ อร์ด Arduino ในการทดลอง การตอ่ วงจรไมโครคอนโทรลเลอร์ Arduino ท่ีใชบ้ อร์ดโมดูล Arduino สาเร็จรูปลงบอร์ดทดลอง F GH I J 20 20 25 25 30 30 35 35 40 40 45 45 50 50 55 55 60 60 F GH I J D12 1 D11 D10 D9 D8 5 D7 D6 D5 D4 D3 10 D2 GND RST D0 D1 15 AB C DE AB C DE 1 D13 3V3 REF A0 5 A1 A2 A3 A4 A5 10 A6 A7 5V RST GND 15 VIN รูปที่ 4.32-20 การตอ่ ลงบอร์ดทดลอง

ใบงานที่ 4.32 การประยกุ ตก์ ารแสดงผลดว้ ยโมดูล LED Dot Matrixกบั เซนเซอร์ต่าง ๆ  419 การต่อวงจรเพือ่ ทดลองดว้ ยการจาลองการทางานดว้ ยโปรแกรม Proteus รูปที่ 4.32-21 การตอ่ วงจรทดลองในโปรแกรมจาลองการทางาน การทดลองที่ 5 เขียนโปรแกรมแสดงอุณภูมิและความช้ืนจาก DHT22 ผงั งาน จากโจทยส์ ามารถเขียนเป็นผงั งานไดด้ งั น้ี START กาหนดคา่ เริม่ ต้นต่าง ๆ อ่านค่าจากโมดูล DHT22 แสดงผล แปลงผงั งานเป็ นโปรแกรม จากผงั งานสามารถเขียนเป็นโคด้ โปรแกรมควบคุม Arduino 1 #include <MD_Parola.h> 2 #include <MD_MAX72xx.h> 3 #include <SPI.h> 4 #include <DHT.h> 5 #define DHTPIN 8 // pin to connect DHT22 6 #define DHTTYPE DHT22 // Type of use DHT11,DHT21,DHT22 7 #define HARDWARE_TYPE MD_MAX72XX::FC16_HW 8 #define MAX_DEVICES 4 9 #define CLK_PIN 13 10 #define DATA_PIN 11 11 #define CS_PIN 10 12 #define PAUSE 0 13 #define SPEED 50 14 #define BUF_SIZE 20 15 DHT dht(DHTPIN, DHTTYPE); 16 double Thermistor(int RawADC) ; 17 char Msg[BUF_SIZE] = { \"\" }; 18 char Text[BUF_SIZE] = { \"Temperature : \" }; 19 char NumMsg[BUF_SIZE] = { \"\" }; 20 MD_Parola P = MD_Parola(HARDWARE_TYPE, DATA_PIN, CLK_PIN, CS_PIN, MAX_DEVICES); 21 void setup(void) 22 { 23 P.begin(); 24 P.setIntensity(5); //intensity to set the display (0-15) 25 P.displayText(Msg,PA_LEFT,SPEED,PAUSE,PA_SCROLL_LEFT,PA_SCROLL_LEFT); 26 dht.begin(); 27 }

420  เรียนรู้และลองเลน่ Arduino เบ้ืองตน้ [ครูประภาส สุวรรณเพชร] 28 void loop(void){ 29 float humid = dht.readHumidity(); 30 float temp = dht.readTemperature(); 31 if (isnan(humid) || isnan(temp)){ 32 return; 33 } 34 Msg[0]=0; // start with a null string: 35 dtostrf(temp, 0, 1, NumMsg); // converts val into an ASCII 36 strcat(Msg,Text); // add first string 37 strcat(Msg,NumMsg); // add second string 38 if (P.displayAnimate()){ // if end of animation then restart again 39 P.displayReset(); 40 } 41 } ทดลองการทางาน 1. จาลองการทางานดว้ ยโปรแกรม Proteus 2. ทดลองดว้ ยวงจรจริง 3. ทดลองเพ่ิม/ลดอุณหภูมิและความช้ืน สงั เกตผล วงจรทใี่ ช้เซนเซอร์เป็ น Ultasonic D1 VCC Peripheral circuit 1N5819 CPU circuit 1R01k 7,20 ATMEGA328 VCC SW1 VCC 1 RST AVCC VCC MAX7219 7-Segment 4-Digit C1 GND 0.1uF D11(MOSI) 17 Din D10(SS) 16 CS 19 Clk D13(SCK) USB to UART (TTL Level) R2,R3 3 1k 2 DTR RXD D1(TXD) TXD D0(RXD) +5V GND VCC 3V3 1 VCC 2 Trig D9 15 3 Echo HC-SR04 D8 14 4 GND X1 9 XTAL1 16MHz 10 XTAL2 C2,C3 GND 22pF 8,22 รูปท่ี 4.32-22 วงจรที่ใชไ้ อซี AVR ในการทดลอง VCC ARDUINO VCC HC-SR04 VCC MAX7219 7-Segment 4-Digit GND 5V D11(MOSI) Din D10(SS) CS VCC VCC D13(SCK) Clk Trig Echo GND 1234 D8 D9 GND รูปท่ี 4.32-23 วงจรที่ใชบ้ อร์ด Arduino ในการทดลอง

ใบงานที่ 4.32 การประยกุ ตก์ ารแสดงผลดว้ ยโมดูล LED Dot Matrixกบั เซนเซอร์ต่าง ๆ  421 F GH I J 20 20 25 25 30 30 35 35 40 40 45 45 50 50 55 55 60 60 F GH I J D12 1 D11 D10 D9 D8 5 D7 D6 D5 D4 D3 10 D2 GND RST D0 D1 15 A B C DE A B C DE 1 D13 3V3 REF A0 5 A1 A2 A3 A4 A5 10 A6 A7 5V RST GND 15 VIN VCC Trig Echo GND HC-SR04 รูปท่ี 4.32-24 การต่อลงบอร์ดทดลอง การทดลองท่ี 6 เขียนโปรแกรมวดั ระยะดว้ ย Ultrasonic ผงั งาน จากโจทยส์ ามารถเขียนเป็นผงั งานไดด้ งั น้ี START กาหนดค่าเริม่ ต้นต่าง ๆ อ่านคา่ จากโมดลู Ultrasonic แสดงผล แปลงผงั งานเป็ นโปรแกรม จากผงั งานสามารถเขียนเป็นโคด้ โปรแกรมควบคุม Arduino 1 #include <MD_Parola.h> 2 #include <MD_MAX72xx.h> 3 #include <SPI.h> 4 #include <Ultrasonic.h> 5 #define HARDWARE_TYPE MD_MAX72XX::FC16_HW 6 #define MAX_DEVICES 4 7 #define CLK_PIN 13 8 #define DATA_PIN 11 9 #define CS_PIN 10 10 #define PAUSE 0 11 #define SPEED 50 12 #define BUF_SIZE 20 13 double Thermistor(int RawADC) ; 14 char Msg[BUF_SIZE] = { \"\" }; 15 char Text[BUF_SIZE] = { \"distance : \" }; 16 char NumMsg[BUF_SIZE] = { \"\" }; 17 Ultrasonic ultrasonic(9,8); // (Trig PIN,Echo PIN) 18 MD_Parola P = MD_Parola(HARDWARE_TYPE, DATA_PIN, CLK_PIN, CS_PIN, MAX_DEVICES); 19 void setup(void){ 20 P.begin(); 21 P.setIntensity(5); //intensity to set the display (0-15) 22 P.displayText(Msg,PA_LEFT,SPEED,PAUSE,PA_SCROLL_LEFT,PA_SCROLL_LEFT); 23 } 24 void loop(void){ 25 int distance=ultrasonic.distanceRead(CM); 26 Msg[0]=0; // start with a null string: 27 dtostrf(distance, 0, 1, NumMsg); // converts val into an ASCII 28 strcat(Msg,Text); // add first string 29 strcat(Msg,NumMsg); // add second string 30 if (P.displayAnimate()){ // if end of animation then restart again 31 P.displayReset(); 32 } 33 }

422  เรียนรู้และลองเลน่ Arduino เบ้ืองตน้ [ครูประภาส สุวรรณเพชร] ทดลองการทางาน 1. ทดลองดว้ ยวงจรจริง 2. ทดลองเปล่ียนแปลงรูปแบบการแสดงผล หมายเหตุ การทดลองวดั ระยะดว้ ย Ultrasonic แสดงผลที่ LED Dot matrix ดว้ ยการจาลองการทางาน ดว้ ยโปรแกรม Proteus ไม่สามารถทาไดเ้ นื่องจากภายในโมดูลจาลอง Ultrasonic เป็ นซีพียเู บอร์เดียวกบั ซีพียู Arduino Nano เม่ือคอมไพลโ์ คด้ โปรแกรมนามาจาลองตวั โปรแกรม Proteus มองขนาดโคด้ รวมกนั เกินขนาดหน่วยความจาที่บรรจุไดจ้ ึงไม่สามารถจาลองการทางานได้ ใหท้ ดลองดว้ ยวงจรจริงเพียงอยา่ ง เดียว 7. สรุปผลการปฏบิ ัติงาน 8. งานทมี่ อบหมาย 1. เขียนโคด้ โปรแกรมแสดงค่าอุณหภูมิและความช้ืนโดยใชเ้ ซนเซอร์วดั อุณหภูมิและความช้ืน DHT22 แสดงผลการทางานท่ีโมดูล LED Dot Matrix VCC ARDUINO VCC MAX7219 7-Segment 4-Digit 5V D11(MOSI) VCC D10(SS) GND Din D13(SCK) CS Clk VCC D8 R1 DHT22 GND 4k7 DATA รูปที่ 4.32-25 วงจรที่ใชท้ ดลอง

ใบงานท่ี 4.33 การประยกุ ตก์ ารแสดงผลท่ี OLED กบั เซนเซอร์ตา่ ง ๆ  423 ใบงานที่ 4.33 การประยุกต์การแสดงผลท่ี OLED กบั เซนเซอร์ต่าง ๆ 1. จุดประสงค์ทวั่ ไป เพ่ือใหส้ ามารถประยกุ ตก์ ารแสดงผลท่ี OLED กบั เซนเซอร์ตา่ ง ๆ ได้ 2. จุดประสงค์เชิงพฤติกรรม 1. บอกวธิ ีประยกุ ตก์ ารแสดงผลท่ี OLED กบั เซนเซอร์ตา่ ง ๆ ได้ 2. บอกข้นั ตอนการต่อวงจรเพ่ือทดลองบนบอร์ดทดลองได้ 3. ทดสอบการทางานของบอร์ด Arduino ได้ 4. ปฏิบตั ิงานตามใบงานเสร็จทนั เวลาท่ีกาหนด 3. เคร่ืองมือและอปุ กรณ์ 1. บอร์ดทดลอง Breadboard 830 Point 1 แผน่ 2. อุปกรณ์อิเลก็ ทรอนิกส์ประกอบดว้ ย 4 ตวั 4 ตวั 2.1 Potentiometer 10k 1 ตวั 2.5 LED 3mm 1 ตวั 2.6 ตวั ทา้ นทาน 220 ohm 1 ตวั 2.2 Thermistor NTC 10k 1 ตวั 2.7 ตวั ทา้ นทาน 4.7k 2.8 ตวั ทา้ นทาน 10k 1 เส้น 2.3 IC DS18B20 1 ตวั 1 ชุด 3.5 สายเชื่อมต่อ USB (Mini) 1 เคร่ือง 2.4 IC LM35 1 ตวั 3.6 สายเชื่อมตอ่ วงจร 3.7 คอมพวิ เตอร์ 3. อุปกรณ์ร่วมอ่ืน ๆ 3.1 บอร์ด Arduino Nano 3.0 1 ตวั 3.2 โมดูลจอ OLED (SSD1306) 1 ตวั 3.3 โมดูลวดั อุณหภูมิ DHT22 1 ตวั 3.4 โมดูลอลั ตร้าโซนิค HC-SR04 1 ตวั 4. ลาดับข้นั การปฏบิ ตั ิงาน 1. ศึกษาจุดประสงคท์ วั่ ไป จุดประสงคเ์ ชิงพฤติกรรมและทฤษฎีพ้นื ฐานท่ีเก่ียวขอ้ ง 2. ดาเนินการต่อวงจรลงบอร์ดทดลองตามวงจรที่กาหนด 3. เขียนโปรแกรมควบคุมและทดสอบการทางานของวงจร 4. สรุปผลการปฏิบตั ิงาน

424  เรียนรู้และลองเลน่ Arduino เบ้ืองตน้ [ครูประภาส สุวรรณเพชร] 5. ทฤษฎพี ืน้ ฐาน การประยกุ ตใ์ ชง้ านในใบงานน้ีเป็ นการเปลี่ยนเป้าหมายการแสดงผลจากเดิมในใบงานท่ี 4.5 ถึง ใบงานที่ 4.12 ที่เป็นการอา่ นค่าจากเซนเซอร์แบบต่าง ๆ แลว้ นาผลมาคานวณ (หรือนามาใชไ้ ดเ้ ลยในบาง ใบงาน) ไปแสดงผลผ่านทางจอคอมพิวเตอร์ผ่านทางการส่ือสารทางพอร์ตอนุกรมซ่ึงการดาเนินการ ดงั กล่าวเป็ นการเขียนโคด้ โปรแกรมเพ่ือใช้ทดสอบผลการทางานกบั เซนเซอร์ต่าง ๆ ในเบ้ืองตน้ ซ่ึงไม่ ตอ้ งต่อตวั แสดงผลอื่น ๆ สาหรับใบงานน้ีเป็นการเปล่ียนเป้าหมายจากการแสดงผลจากจอคอมพิวเตอร์มา เป็นจอ OLED 6. วงจรทใ่ี ช้ทดลอง วงจรเพื่อใช้ทดลองในใบงานเป็ นการทดลองจากเซนเซอร์ท้งั 6 แบบโดยแสดงผลที่จอ OLED วงจรที่ใช้ทดลองมีดังน้ี (OLED ไม่สามารถจาลองการทางานด้วย Proteus ได้ต้องทดลองวงจรจริง เทา่ น้นั ) 1. วงจรท่ีใชเ้ ซนเซอร์เป็นตวั ตา้ นทานปรับคา่ ได้ 2. วงจรที่ใชเ้ ซนเซอร์วดั อุณหภูมิเป็นเทอร์มิสเตอร์ 3. วงจรที่ใชเ้ ซนเซอร์วดั อุณหภูมิเป็นไอซี LM35 4. วงจรที่ใชเ้ ซนเซอร์วดั อุณหภูมิเป็นไอซี DS18B20 5. วงจรที่ใชเ้ ซนเซอร์เป็น DHT22 6. วงจรที่ใชเ้ ซนเซอร์เป็น Ultrasonic วงจรทใ่ี ช้เซนเซอร์เป็ นตัวต้านทานปรับค่าได้ D1 VCC Peripheral circuit 1N5819 CPU circuit VCC R1 7,20 ATMEGA328 10k VCC SW1 AVCC 1 A4(SDA) 27 RST C1 A5(SCL) 28 0.1uF USB to UART (TTL Level) R2,R3 VCC GND SCL SDA 1k DTR 3 RXD 2 D1(TXD) TXD D0(RXD) +5V GND 3V3 X1 9 XTAL1 A3 26 VCC 16MHz 10 XTAL2 10k C2,C3 GND 22pF 8,22 รูปท่ี 4.33-1 วงจรท่ีใชไ้ อซี AVR ในการทดลอง

ใบงานท่ี 4.33 การประยกุ ตก์ ารแสดงผลท่ี OLED กบั เซนเซอร์ต่าง ๆ  425 กรณีท่ีใช้ Arduino ในการทดลอง ตอ่ วงจรดงั รูป VCC ARDUINO VCC A4(SDA) A5(SCL) VCC VCC GND SCL SDA A3 10k GND รูปท่ี 4.33-2 วงจรที่ใชบ้ อร์ด Arduino ในการทดลอง การต่อวงจรไมโครคอนโทรลเลอร์ Arduino ท่ีใชบ้ อร์ดโมดูล Arduino สาเร็จรูปลงบอร์ดทดลอง F GH I J 20 20 25 25 30 30 35 35 40 40 45 45 50 50 55 55 60 60 F GH I J D12 1 D11 D10 D9 D8 5 D7 D6 D5 D4 D3 10 D2 GND RST D0 D1 15 ABCDE VCC GND S CL S DA D13 3V3 ABCDE REF A0 A1 A2 A3 A4 A5 A6 A7 5V RST GND VIN 1 5 10 15 รูปท่ี 4.33-3 การตอ่ ลงบอร์ดทดลอง การทดลองท่ี 1 เขียนโปรแกรมแสดงค่าที่อ่านไดจ้ ากโพเทนธิโอมิเตอร์ ผงั งาน จากโจทยส์ ามารถเขียนเป็นผงั งานไดด้ งั น้ี START กา นดคา่ เริม่ ต้นต่าง ๆ อ่านคา่ จาก POT แสดงค่าท่อี ่านได้ แปลงผงั งานเป็ นโปรแกรม จากผงั งานสามารถเขียนเป็นโคด้ โปรแกรมควบคุม Arduino 1 #include <Wire.h> 2 #include <Adafruit_GFX.h> 3 #include <Adafruit_SSD1306.h> 4 int adc; 5 Adafruit_SSD1306 OLED(4); 6 void setup() 7{ 8 OLED.begin(SSD1306_SWITCHCAPVCC,0x3C); 9}

426  เรียนรู้และลองเลน่ Arduino เบ้ืองตน้ [ครูประภาส สุวรรณเพชร] 10 void loop() //Text is white ,background is black 11 { 12 adc=analogRead(A3); 13 OLED.clearDisplay(); 14 OLED.setTextColor(WHITE,BLACK); 15 OLED.setCursor(0, 0); 16 OLED.setTextSize(2); 17 OLED.println(\"Analog\"); 18 OLED.print(\"Read\"); 19 OLED.setCursor(50,40); 20 OLED.print(adc,DEC); 21 OLED.display(); 22 delay(200); 23 } ทดลองการทางาน 1. ทดลองดว้ ยวงจรจริง 2. ทดลองเปล่ียนแปลงคา่ โพเทนธิโอมิเตอร์แลว้ สังเกตผล วงจรทใ่ี ช้เซนเซอร์เป็ นเทอร์มสิ เตอร์วดั อณุ ภูมิ D1 VCC Peripheral circuit 1N5819 CPU circuit VCC R1 10k 7,20 ATMEGA328 VCC GND SCL SDA VCC SW1 1 RST AVCC C1 0.1uF A4(SDA) 27 A5(SCL) 28 USB to UART (TTL Level) R2,R3 3 1k 2 DTR RXD D1(TXD) TXD D0(RXD) +5V GND 3V3 VCC X1 9 XTAL1 A3 26 R4 16MHz 10 XTAL2 10k GND T NTC T1h0ekrmistor C2,C3 8,22 22pF รูปท่ี 4.33-4 วงจรที่ใชไ้ อซี AVR ในการทดลอง กรณีที่ใช้ Arduino ในการทดลอง ต่อวงจรดงั รูป ARDUINO VCC VCC A4(SDA) A5(SCL) VCC R1 VCC GND SCL SDA 10k A3 NTC GND T Thermistor 10k รูปที่ 4.33-5 วงจรที่ใชบ้ อร์ด Arduino ในการทดลอง

ใบงานที่ 4.33 การประยกุ ตก์ ารแสดงผลที่ OLED กบั เซนเซอร์ต่าง ๆ  427 การตอ่ วงจรไมโครคอนโทรลเลอร์ Arduino ที่ใชบ้ อร์ดโมดูล Arduino สาเร็จรูปลงบอร์ดทดลอง F GH I J 20 20 25 25 30 30 35 35 40 40 45 45 50 50 55 55 60 60 F GH I J D12 1 D11 D10 D9 D8 5 D7 D6 D5 D4 D3 10 D2 GND RST D0 D1 15 ABCDE VCC GND S CL S DA D13 3V3 ABCDE REF A0 A1 A2 A3 A4 A5 A6 A7 5V RST GND VIN 1 5 10 15 รูปท่ี 4.33-6 การต่อลงบอร์ดทดลอง การทดลองที่ 2 เขียนโปรแกรมแสดงผลท่ีอ่านคา่ จากเทอร์มิสเตอร์แลว้ คานวนเป็นอุณหภูมิ ผงั งาน จากโจทยส์ ามารถเขียนเป็นผงั งานไดด้ งั น้ี START กา นดค่าเริ่มต้นต่าง ๆ อ่านค่าจาก NTC คานวณ แสดงผล แปลงผงั งานเป็ นโปรแกรม จากผงั งานสามารถเขียนเป็นโคด้ โปรแกรมควบคุม Arduino 1 #include <Wire.h> 2 #include <Adafruit_GFX.h> 3 #include <Adafruit_SSD1306.h> 4 #define NTC A3 5 double Thermistor(int RawADC) ; 6 Adafruit_SSD1306 OLED(4); 7 void setup() 8{ 9 OLED.begin(SSD1306_SWITCHCAPVCC,0x3C); 10 } 11 void loop() 12 { 13 float Temp=Thermistor(analogRead(NTC)); 14 OLED.clearDisplay(); 15 OLED.setTextColor(WHITE,BLACK); //Text is white ,background is black 16 OLED.setCursor(0, 0); 17 OLED.setTextSize(1); 18 OLED.println(\"Temperature\"); 19 OLED.print(\"From NTC\"); 20 OLED.setCursor(50,40); 21 OLED.print(Temp); 22 OLED.display(); 23 delay(200); 24 } 25 double Thermistor(int RawADC) 26 { 27 double Cal; 28 Cal = log(10000.0/((1024.0/RawADC-1))); 29 Cal = 1/(0.001129148+(0.000234125+(0.0000000876741*Cal*Cal))*Cal ); 30 Cal = Cal-273.15; // Convert Kelvin to Celcius 31 return Cal; 32 }

428  เรียนรู้และลองเลน่ Arduino เบ้ืองตน้ [ครูประภาส สุวรรณเพชร] ทดลองการทางาน 1. ทดลองดว้ ยวงจรจริง 2. ทดลองเพมิ่ /ลดอุณหภูมิที่เทอร์มิสเตอร์สงั เกตผล วงจรทใ่ี ช้เซนเซอร์เป็ น LM35 D1 VCC Peripheral circuit 1N5819 CPU circuit R1 10k 7,20 ATMEGA328 VCC SW1 1 RST AVCC C1 VCC 0.1uF VCC GND SCL SDA A4(SDA) 27 A5(SCL) 28 USB to UART (TTL Level) R21,kR3 3 2 DTR D1(TXD) RXD D0(RXD) TXD +5V GND 3V3 VCC 1 LM35 A3 26 2 VCC DQ X1 GND 16MHz 9 XTAL1 10 XTAL2 3 C2,C3 GND 22pF 8,22 รูปท่ี 4.33-7 วงจรที่ใชไ้ อซี AVR ในการทดลอง ARDUINO VCC VCC A4(SDA) A5(SCL) VCC VCC GND SCL SDA 1 LM35 A3 2 VCC GND DQ GND 3 รูปท่ี 4.33-8 วงจรท่ีใชบ้ อร์ด Arduino ในการทดลอง F GH I J LM35 20 20 25 25 30 30 35 35 40 40 45 45 50 50 55 55 60 60 F GH I J D12 1 D11 D10 D9 D8 5 D7 D6 D5 D4 D3 10 D2 GND RST D0 D1 15 ABCDE VCC GND S CL S DA D13 3V3 ABCDE REF A0 A1 A2 A3 A4 A5 A6 A7 5V RST GND VIN 1 5 10 15 รูปที่ 4.33-9 การตอ่ ลงบอร์ดทดลอง

ใบงานท่ี 4.33 การประยกุ ตก์ ารแสดงผลท่ี OLED กบั เซนเซอร์ต่าง ๆ  429 การทดลองที่ 3 เขียนโปรแกรมแสดงค่าอุณหภูมิที่วดั จากไอซี LM35 โดยแสดงผลที่จอ OLED ผงั งาน จากโจทยส์ ามารถเขียนเป็นผงั งานไดด้ งั น้ี START กา นดคา่ เริม่ ต้นต่าง ๆ อ่านค่าจากไอซี แสดงค่าทีอ่ า่ นได้ แปลงผงั งานเป็ นโปรแกรม จากผงั งานสามารถเขียนเป็นโคด้ โปรแกรมควบคุม Arduino 1 #include <Wire.h> 2 #include <Adafruit_GFX.h> 3 #include <Adafruit_SSD1306.h> 4 #define LM35_pin A3 5 double Thermistor(int RawADC) ; 6 Adafruit_SSD1306 OLED(4); 7 void setup() 8{ 9 OLED.begin(SSD1306_SWITCHCAPVCC,0x3C); 10 } 11 void loop() 12 { 13 int adc = analogRead(LM35_pin); 14 float Temp = adc*(5.0/1023)*100.0; 15 OLED.clearDisplay(); 16 OLED.setTextColor(WHITE,BLACK); //Text is white ,background is black 17 OLED.setCursor(0, 0); 18 OLED.setTextSize(1); 19 OLED.println(\"Temperature\"); 20 OLED.print(\"From NTC\"); 21 OLED.setCursor(50,40); 22 OLED.print(Temp); 23 OLED.display(); 24 delay(200); 25 } ทดลองการทางาน 1. ทดลองดว้ ยวงจรจริง 2. ทดลองใหอ้ ุณหภูมิท่ีตวั ไอซีเปลี่ยนแปลงแลว้ สงั เกตผล

430  เรียนรู้และลองเลน่ Arduino เบ้ืองตน้ [ครูประภาส สุวรรณเพชร] วงจรทใ่ี ช้เซนเซอร์เป็ น DS18B20 1DN15819 VCC Peripheral circuit R1 CPU circuit 10k 7,20 ATMEGA328 SW1 VCC 1 RST AVCC C1 VCC 0.1uF VCC GND SCL SDA A4(SDA) 27 A5(SCL) 28 USB to UART (TTL Level) R2,R3 3 1k 2 DTR RXD D1(TXD) TXD D0(RXD) +5V GND R4 3V3 4.7k VCC 3 DS18B20 D8 14 2 VCC DQ X1 GND 16MHz 9 XTAL1 10 XTAL2 1 C2,C3 GND 22pF 8,22 รูปท่ี 4.33-10 วงจรที่ใชไ้ อซี AVR ในการทดลอง กรณีที่ใช้ Arduino ในการทดลอง ต่อวงจรดงั รูป VCC ARDUINO VCC A4(SDA) A5(SCL) R1 VCC VCC GND SCL SDA 4.7k D8 3 DS18B20 GND 2 DQ VCC GND 1 รูปที่ 4.33-11 วงจรที่ใชบ้ อร์ด Arduino ในการทดลอง การตอ่ วงจรไมโครคอนโทรลเลอร์ Arduino ท่ีใชบ้ อร์ดโมดูล Arduino สาเร็จรูปลงบอร์ดทดลอง F GH I J 20 20 25 25 30 30 35 35 40 40 45 45 50 50 55 55 60 60 F GH I J D12 1 D11 D10 D9 D8 5 D7 D6 D5 D4 D3 10 D2 GND RST D0 D1 15 ABCDE VCC GND S CL S DA 1 D13 D S1 8 3V3 B 20 REF A0 ABCDE 5 A1 A2 A3 A4 A5 10 A6 A7 5V RST GND 15 VIN รูปที่ 4.33-12 การต่อลงบอร์ดทดลอง

ใบงานที่ 4.33 การประยกุ ตก์ ารแสดงผลท่ี OLED กบั เซนเซอร์ตา่ ง ๆ  431 การทดลองท่ี 4 เขียนโปรแกรมแสดงค่าอุณหภูมิที่วดั จากไอซี DS18B20 โดยแสดงผลท่ีจอ OLED ผงั งาน จากโจทยส์ ามารถเขียนเป็นผงั งานไดด้ งั น้ี START กา นดคา่ เริม่ ต้นต่าง ๆ อ่านคา่ จากไอซี แสดงค่าทีอ่ ่านได้ แปลงผงั งานเป็ นโปรแกรม จากผงั งานสามารถเขียนเป็นโคด้ โปรแกรมควบคุม Arduino 1 #include <Wire.h> 2 #include <Adafruit_GFX.h> 3 #include <Adafruit_SSD1306.h> 4 #include <OneWire.h> 5 #include <DallasTemperature.h> 6 OneWire ds(8); //sensor on pin D8 7 DallasTemperature sensor(&ds); 8 Adafruit_SSD1306 OLED(4); 9 void setup() 10 { 11 OLED.begin(SSD1306_SWITCHCAPVCC,0x3C); 12 OLED.setTextColor(WHITE,BLACK); 13 sensor.begin(); 14 } 15 void loop() 16 { 17 sensor.requestTemperatures(); 18 float temp = sensor.getTempCByIndex(0); //read temp from sensor 19 delay(500); 20 OLED.clearDisplay(); 21 OLED.setCursor(0,10); 22 OLED.setTextSize(1); 23 OLED.println(\"Temperature\"); 24 OLED.print(\"From DS18B20\"); 25 OLED.setCursor(10,40); 26 OLED.setTextSize(2); 27 OLED.print(temp); 28 OLED.print(\" 'C\"); 29 OLED.display(); 30 } ทดลองการทางาน 3. ทดลองดว้ ยวงจรจริง 4. ทดลองใหอ้ ุณหภูมิท่ีตวั ไอซีเปลี่ยนแปลงแลว้ สงั เกตผล

432  เรียนรู้และลองเลน่ Arduino เบ้ืองตน้ [ครูประภาส สุวรรณเพชร] วงจรทใี่ ช้เซนเซอร์เป็ น DHT22 D1 VCC Peripheral circuit 1N5819 CPU circuit VCC R1 7,20 ATMEGA328 10k VCC SW1 AVCC 1 A4(SDA) RST 27 C1 A5(SCL) 28 0.1uF USB to UART (TTL Level) R2,R3 VCC GND SCL SDA 1k DTR 3 RXD 2 D1(TXD) TXD D0(RXD) +5V GND 3V3 X1 VCC DHT22 16MHz 9 XTAL1 D8 14 4Rk47 10 XTAL2 DATA C2,C3 GND 22pF 8,22 รูปที่ 4.33-13 วงจรที่ใชไ้ อซี AVR ในการทดลอง ARDUINO VCC VCC A4(SDA) A5(SCL) VCC GND SCL SDA VCC R1 DHT22 4k7 D8 DATA GND รูปท่ี 4.33-14 วงจรท่ีใชบ้ อร์ด Arduino ในการทดลอง F GH I J 20 20 25 25 30 30 35 35 40 40 45 45 50 50 55 55 60 60 F GH I J D12 1 D11 D10 D9 D8 5 D7 D6 D5 D4 D3 10 D2 GND RST D0 D1 15 ABCDE VCC GND S CL S DA D13 3V3 ABCDE REF A0 A1 A2 A3 A4 A5 A6 A7 5V RST GND VIN 1 5 10 15 รูปท่ี 4.33-15 การตอ่ ลงบอร์ดทดลอง

ใบงานที่ 4.33 การประยกุ ตก์ ารแสดงผลท่ี OLED กบั เซนเซอร์ต่าง ๆ  433 การทดลองท่ี 5 เขียนโปรแกรมแสดงอุณภูมิและความช้ืนจาก DHT22 ผงั งาน จากโจทยส์ ามารถเขียนเป็นผงั งานไดด้ งั น้ี START กา นดค่าเริ่มต้นต่าง ๆ อ่านคา่ จากโมดูล DHT22 แสดงผล แปลงผงั งานเป็ นโปรแกรม จากผงั งานสามารถเขียนเป็นโคด้ โปรแกรมควบคุม Arduino 1 #include <Wire.h> 2 #include <Adafruit_GFX.h> 3 #include <Adafruit_SSD1306.h> 4 #include <DHT.h> 5 #define DHTPIN 8 // pin to connect DHT22 6 #define DHTTYPE DHT22 // Type of use DHT11,DHT21,DHT22 7 DHT dht(DHTPIN, DHTTYPE); 8 Adafruit_SSD1306 OLED(4); 9 void setup() 10 { 11 OLED.begin(SSD1306_SWITCHCAPVCC,0x3C); 12 OLED.setTextColor(WHITE,BLACK); 13 OLED.setTextSize(1); 14 dht.begin(); 15 } 16 void loop() 17 { 18 delay(2000); 19 float h = dht.readHumidity(); 20 float t = dht.readTemperature(); 21 OLED.clearDisplay(); 22 if (isnan(h) || isnan(t)) 23 { 24 OLED.setCursor(0, 30); 25 OLED.setTextSize(1); 26 OLED.println(\"Failed read DHT !\"); 27 OLED.display(); 28 return; 29 } 30 OLED.setCursor(10,10); 31 OLED.print(\"Humidity: \"); 32 OLED.print(h); 33 OLED.setCursor(10,30); 34 OLED.print(\"Temperature: \"); 35 OLED.print(t); 36 OLED.display(); 37 } ทดลองการทางาน 1. ทดลองดว้ ยวงจรจริง 2. ทดลองเพิม่ /ลดอุณหภูมิและความช้ืน สังเกตผล

434  เรียนรู้และลองเลน่ Arduino เบ้ืองตน้ [ครูประภาส สุวรรณเพชร] วงจรทใ่ี ช้เซนเซอร์เป็ น Ultasonic 1DN15819 VCC Peripheral circuit R1 CPU circuit 10k 7,20 ATMEGA328 SW1 VCC C1 1 RST AVCC VCC 0.1uF A4(SDA) 27 A5(SCL) 28 VCC GND SCL SDA USB to UART (TTL Level) R2,R3 3 1k 2 DTR RXD D1(TXD) TXD D0(RXD) +5V GND 3V3 X1 9 XTAL1 D9 15 VCC HC-SR04 16MHz 10 XTAL2 D8 14 1 VCC 2 Trig GND 3 Echo 4 GND 8,22 C2,C3 22pF รูปที่ 4.33-16 วงจรที่ใชไ้ อซี AVR ในการทดลอง กรณีท่ีใช้ Arduino ในการทดลอง ต่อวงจรดงั รูป ARDUINO VCC VCC A4(SDA) A5(SCL) VCC GND SCL SDA D9 HC-SR04VCC D8 1 VCC VCC 2 Trig GND Trig 3 Echo Echo 4 GND GND รูปท่ี 4.33-17 วงจรท่ีใชบ้ อร์ด Arduino ในการทดลอง การต่อวงจรไมโครคอนโทรลเลอร์ Arduino ที่ใชบ้ อร์ดโมดูล Arduino สาเร็จรูปลงบอร์ดทดลอง F GH I J 20 20 25 25 30 30 35 35 40 40 45 45 50 50 55 55 60 60 F GH I J D12 1 D11 D10 D9 D8 5 D7 D6 D5 D4 D3 10 D2 GND RST D0 D1 15 ABCDE VCC GND S CL S DA D13 3V3 HC-SR04 ABCDE REF A0 A1 A2 A3 A4 A5 A6 A7 5V RST GND VIN 1 5 10 15 รูปที่ 4.33-18 การตอ่ ลงบอร์ดทดลอง

ใบงานท่ี 4.33 การประยกุ ตก์ ารแสดงผลที่ OLED กบั เซนเซอร์ตา่ ง ๆ  435 การทดลองท่ี 6 เขียนโปรแกรมวดั ระยะดว้ ย Ultrasonic แสดงผลดว้ ยจอ OLED ผงั งาน จากโจทยส์ ามารถเขียนเป็นผงั งานไดด้ งั น้ี START กา นดค่าเริม่ ต้นต่าง ๆ อ่านค่าจากโมดลู Ultrasonic แสดงผล แปลงผงั งานเป็ นโปรแกรม จากผงั งานสามารถเขียนเป็นโคด้ โปรแกรมควบคุม Arduino 1 #include <Wire.h> 2 #include <Adafruit_GFX.h> 3 #include <Adafruit_SSD1306.h> 4 #include <Ultrasonic.h> 5 Ultrasonic ultrasonic(9,8); // (Trig PIN,Echo PIN) 6 Adafruit_SSD1306 OLED(4); 7 void setup() 8{ 9 OLED.begin(SSD1306_SWITCHCAPVCC,0x3C); 10 OLED.setTextColor(WHITE,BLACK); 11 } 12 void loop() 13 { 14 float L=ultrasonic.Ranging(CM); 15 delay(500); 16 OLED.clearDisplay(); 17 OLED.setCursor(0,10); 18 OLED.setTextSize(1); 19 OLED.println(\"Distance measurable\"); 20 OLED.print(\"From Ultrasonic\"); 21 OLED.setCursor(10,40); 22 OLED.setTextSize(2); 23 OLED.print(L); 24 OLED.print(\" CM.\"); 25 OLED.display(); 26 } ทดลองการทางาน 1. ทดลองดว้ ยวงจรจริง 2. ทดลองเปล่ียนแปลงรูปแบบการแสดงผล 7. สรุปผลการปฏบิ ัตงิ าน

436  เรียนรู้และลองเลน่ Arduino เบ้ืองตน้ [ครูประภาส สุวรรณเพชร] 8. งานทมี่ อบ มาย 1. เขียนโปรแกรมประยกุ ตใ์ ชง้ านท่ีใชเ้ ซนเซอร์วดั อุณหภูมิ DS18B20 และควบคุมการทางาน ของ LED ตามคา่ ของอุณหภูมิที่กาหนดโดยแสดงผลการทางานที่จอ OLED ARDUINO VCC VCC A4(SDA) A5(SCL) R1-R2 LED1-LED2 220 VCC GND SCL SDA D2 D3 R3 VCC 4.7k 3 DS18B20 D8 2 VCC GND DQ GND 1 รูปที่ 4.33-19 วงจรท่ีใชท้ ดลอง 2. เขียนโปรแกรมรับค่าจากพอร์ตแอนาลอกโดยใหแ้ สดงผลที่จอ OLED เป็นโวลตม์ ิเตอร์แบบ เขม็ โดยมีคา่ แรงดนั เตม็ หนา้ ปัด (Full scale) ที่ 30V ARDUINO VCC VCC A4(SDA) A5(SCL) VCC VCC GND SCL SDA A3 10k GND รูปที่ 4.33-20 วงจรท่ีใชท้ ดลอง

เรียนรู้และลองเลน่ Arduino เบ้ืองตน้  437 บรรณานุกรม - Brian Evans Beginning Arduino Programming - Jonathan Oxer,Hugh Blemings Practical Arduino Cool Projects for Open Source Hardware - Michael Margolis Arduino Cookbook : O’Reilly Media, Inc - Julien Bayle C Programming for Arduino - Alan G. Smith Introduction to Arduino - Maik Schmidt Arduino A Quick-Start Guide

438  เรียนรู้และลองเลน่ Arduino เบ้ืองตน้ [ครูประภาส สุวรรณเพชร] ภาคผนวก ภาพตวั อยา่ งวงจรท่ีใชท้ ดลองที่ต่อลงโปรโตบ้ อร์ด ภาพตวั อยา่ งวงจรท่ีใชท้ ดลองท่ีต่อแผงทดลองท่ีสร้างแผน่ วงจรพมิ พด์ ว้ ยตวั เอง ภาพตวั อยา่ งวงจรที่ใชท้ ดลองที่ต่อแผงทดลองท่ีสร้างแผน่ วงจรพมิ พโ์ ดยสง่ั โรงงานผลิต ภาพตวั อยา่ งวงจรที่ใชท้ ดลองที่ตอ่ ลงแผน่ วงจรพมิ พเ์ อนกประสงค์

เรียนรู้และลองเลน่ Arduino เบ้ืองตน้  439 ภาพตวั อยา่ งวงจรที่ใชท้ ดลองท่ีต่อลงโปรโตบ้ อร์ด ภาพตวั อยา่ งวงจรที่ใชท้ ดลองที่ตอ่ แผงทดลองท่ีสร้างแผน่ วงจรพิมพด์ ว้ ยตวั เอง ภาพตวั อยา่ งวงจรท่ีใชท้ ดลองที่ต่อแผงทดลองท่ีสร้างแผน่ วงจรพิมพโ์ ดยสัง่ โรงงานผลิต

440  เรียนรู้และลองเลน่ Arduino เบ้ืองตน้ [ครูประภาส สุวรรณเพชร] ภาพตวั อยา่ งวงจรท่ีใชท้ ดลองท่ีตอ่ ลงแผน่ วงจรพมิ พเ์ อนกประสงค์ ตน้ แบบลายวงจรพิมพแ์ ละรายละเอียดการสร้างตลอดจนรายการอุปกรณ์ ผทู้ ่ีสนใจสามารถนาไป สร้างไดด้ ว้ ยตนเองโดยเขา้ ไปท่ีเวปไซตข์ องครูประภาส www.praphas.com เขา้ เมนู “งานท่ีมอบหมาย” แลว้ คลิกไปที่ “ไมโครคอนโทรลเลอร์ (Arduino)”

ประวตั ผิ ู้เขยี น ครูประภาส สุวรรณเพชร ครูชำนำญกำรพเิ ศษ แผนกวชิ ำช่ำงอิเล็กทรอนิกส์ วทิ ยำลยั เทคนิคชยั ภูมิ ประวตั ิการศึกษา • อนุปริญญำ (ปวส.) สำขำอิเลก็ ทรอนิกส์ สถำบนั เทคโนโลยรี ำชมงคล วทิ ยำเขตพระนครเหนือ • ปริญญำตรี (วศ.บ.) วศิ วกรรมไฟฟ้ำ-โทรคมนำคม (เกียรตินิยม) สถำบนั เทคโนโลยรี ำชมงคล วทิ ยำเขตนครรำชสีมำ • ปริญญำโท (ค.อ.ม.) ไฟฟ้ำ-อิเล็กทรอนิกส์ มหำวทิ ยำลยั เทคโนโลยพี ระจอมเกลำ้ พระนครเหนือ ผลงานเขยี นหนังสือ 1. เรียนรู้และทดลองอิเลก็ ทรอนิกส์อุตสำหกรรม 2. ไมโครคอนโทรลเลอร์ MCS-51 ดว้ ยภำษำแอสเซมบลี 3. เรียนไปเล่นไปกบั ไมโครคอนโทรลเลอร์ MCS-51 ดว้ ยภำษำซี 4. กำรออกแบบแผน่ วงจรพมิ พด์ ว้ ยคอมพวิ เตอร์ 5. เรียนรู้และลองเล่น Arduino เบ้ืองตน้


Like this book? You can publish your book online for free in a few minutes!
Create your own flipbook