ใบงานที่ 4.20 การเขียนโปรแกรมแสดงผลดว้ ยจอ OLED 128×64 245 ใบงานที่ 4.20 การเขยี นโปรแกรมแสดงผลด้วยจอ OLED ทเี่ ช่ือมต่อแบบ I2C 1. จุดประสงค์ทวั่ ไป เพื่อใหส้ ามารถเขียนโปรแกรมแสดงผลดว้ ยจอ OLED ท่ีเช่ือมตอ่ แบบ I2C ได้ 2. จุดประสงค์เชิงพฤตกิ รรม 1. บอกวธิ ีเขียนโปรแกรมแสดงผลดว้ ยจอ OLED ท่ีเชื่อมต่อแบบ I2C ได้ 2. บอกข้นั ตอนการตอ่ วงจรเพอ่ื ทดลองบนบอร์ดทดลองได้ 3. ทดสอบการทางานของบอร์ด Arduino ได้ 4. ปฏิบตั ิงานตามใบงานเสร็จทนั เวลาท่ีกาหนด 3. เคร่ืองมือและอปุ กรณ์ 1. บอร์ดทดลอง Breadboard 830 Point 1 แผน่ 2. บอร์ด Arduino Nano 3.0 1 ตวั 3. OLED ขนาด 128×64 แบบ I2C ที่ใชไ้ ดร์เวอร์เบอร์ SSD1306 1 ตวั 4. สายเช่ือมต่อ USB (Mini USB) 1 เส้น 5. สายเช่ือมตอ่ วงจร 1 ชุด 6. คอมพิวเตอร์ 1 เครื่อง 4. ลาดบั ข้นั การปฏบิ ตั งิ าน 1. ศึกษาจุดประสงคท์ วั่ ไป จุดประสงคเ์ ชิงพฤติกรรมและทฤษฎีพ้ืนฐานท่ีเกี่ยวขอ้ ง 2. ดาเนินการต่อวงจรลงบอร์ดทดลองตามวงจรที่กาหนด 3. เขียนโปรแกรมควบคุมและทดสอบการทางานของวงจร 4. สรุปผลการปฏิบตั ิงาน
246 เรียนรู้และลองเล่น Arduino เบ้ืองตน้ [ครูประภาส สุวรรณเพชร] 5. ทฤษฎพี ืน้ ฐาน OLED (Organic Light-Emitting Diode) เป็ นจอแสดงผลกราฟิ กประเภทหน่ึงท่ีสร้างจากวสั ดุ \"สารก่ึงตวั นาอินทรีย\"์ (Organic Semiconductor) ที่สามารถเปล่งแสงเองได้เมื่อได้รับพลงั งานไฟฟ้า เรียกวา่ กระบวนการอิเล็คโทรลูมิเนเซนส์ (Electroluminescence) โดยท่ีไม่ตอ้ งพ่ึงพาแสงสวา่ งท่ีส่องมา จากดา้ นหลงั (Backlight) และจะไม่มีการเปล่งแสงแสดงในบริเวณท่ีเป็ นภาพสีดาส่งผลให้สีดาน้ันดา สนิทและยงั ช่วยประหยดั พลงั งาน โมดูลแสดงผล OLED ขนาด 128×64 มีหลายแบบใหผ้ ใู้ ชง้ านสามารถ เลือกใชต้ ามความเหมาะสมของแตล่ ะงานไดด้ งั รูปท่ี 4.20-1 รูปที่ 4.20-1 โมดูลจอ OLED ที่นิยมนามาใชง้ านกบั ไมโครคอนโทรลเลอร์ โมดูลจอแสดงผลกราฟิ กแบบ OLED 128×64 ท้งั ท่ีใชก้ ารเช่ือมต่อแบบ I2C และแบบ SPI มีชิพ ไดร์เวอร์อยดู่ ว้ ยกนั 2 เบอร์ท่ีมีการใชง้ านอยา่ งแพร่หลายคือ SSD1306 และ SH1106 ดงั น้นั การเตรียมการ จดั หาอุปกรณ์เพ่ือนามาใชง้ านตอ้ งรู้วา่ โมดูลจอ OLED ใชช้ ิพไดร์เวอร์ตวั ใดเนื่องจากจะตอ้ งใชไ้ ลบรารี่ ใหต้ รงกบั ชิพไดร์เวอร์ของโมดูลจอ ใบงานน้ีเป็นการทดลองใชง้ านโมดูลจอแสดงผลกราฟิ กแบบ OLED ขนาด 128×64 พกิ เซลเป็ น จอแสดงผลแบบให้แสงเพียงสีเดียว (Monochrome) ที่ใชก้ ารเช่ือมต่อส่ือสารแบบ I2C และใชช้ ิพควบคุม เบอร์ SSD1306 การเขียนโคด้ โปรแกรมเพ่ือใชง้ านการแสดงผลจอ OLED จาเป็นตอ้ งใชไ้ ลบรารี่ช่วยงาน พร้อม ๆ กนั สองตวั ซ่ึงท้งั หมดตอ้ งดาวน์โหลดเพิ่มเติมเนื่องจากโปรแกรม Arduino IDE ไม่ไดม้ ีการ ติดต้งั มาใหต้ ้งั แต่เริ่มตน้ จึงจาเป็ นตอ้ งมีการติดต้งั เพม่ิ เติ่มเขา้ ไปในโปรแกรม ไลบราร่ีท้งั สองตวั คือ ไลบรารี่ แหล่งดาวน์โหลด Adafruit_GFX.h https://github.com/adafruit/Adafruit-GFX-Library Adafruit_SSD1306.h https://github.com/adafruit/Adafruit_SSD1306 สาหรับ OLED ที่ใชช้ ิพควบคุม SH1106.h จะตอ้ งเปล่ียนไลบราร่ีมาใช้ Adafruit_SH1106.h แทน Adafruit_SH1106.h https://github.com/wonho-maker/Adafruit_SH1106
ใบงานท่ี 4.20 การเขียนโปรแกรมแสดงผลดว้ ยจอ OLED 128×64 247 การตดิ ต้ังไลบรารี่ มีข้นั ตอนการดาเนินการเพื่อนาไลบราร่ีมาใชง้ านดงั น้ี 1. ดาวนโ์ หลดไลบราร่ี Adafruit_GFX.h ซ่ึงเป็นไฟล์ Zip ดงั รูป รูปท่ี 4.20-2 การดาวน์โหลดไลบราร่ีท่ีนามาใชง้ าน 2. ดาวน์โหลดไลบรารี่ Adafruit_SSD1306.h ซ่ึงเป็นไฟล์ Zip ดงั รูป รูปที่ 4.20-3 การดาวน์โหลดไลบรารี่ท่ีนามาใชง้ าน 3. ทาการเพิม่ ไลบราร่ีท้งั สองตวั ลงในโปรแกรม Arduino IDE โดยการเพ่ิมจากไฟล์ zip แลว้ ทาการ หาไฟล์ zip ที่ไดจ้ ากการดาวนโ์ หลดในขอ้ 1 และ 2 รูปท่ี 4.20-4 การเพิม่ ไลบรารี่ลงในโปรแกรม Arduino IDE เน่ืองจากค่าเร่ิมตน้ ของไลบรารี่กาหนดขนาด OLED เป็ น 128×32 ดงั น้นั เมื่อใชง้ านกบั OLED ขนาด 128×64 จะทาให้ตวั อกั ษรยืดในแนวต้งั ซ่ึงจะตอ้ งแกไ้ ขไฟลไ์ ลบาร่ี Adafruit_SSD1306.h โดยเขา้ ไปยงั โฟลเดอร์ที่เกบ็ ไลบราร่ี แลว้ ทาการแกไ้ ขค่าในไฟลด์ งั กล่าว ซ่ึงมีข้นั ตอนดงั น้ี
248 เรียนรู้และลองเลน่ Arduino เบ้ืองตน้ [ครูประภาส สุวรรณเพชร] 1. เขา้ โฟลเดอร์ Documents ของเครื่องแลว้ เขา้ โฟลเดอร์ Arduino (คลิก 1, 2, 3) รูปท่ี 4.20-5 วธิ ีเขา้ โฟลเดอร์ Arduino 2. เขา้ ไปในโฟลเดอร์ libraries ซ่ึงอยภู่ ายในโฟลเดอร์ Arduino รูปท่ี 4.20-6 วธิ ีเขา้ โฟลเดอร์ libraries 3. เขา้ ไปในโฟลเดอร์ Adafruit_SSD1306 ซ่ึงอยภู่ ายในโฟลเดอร์ libraries รูปท่ี 4.20-7 วธิ ีเขา้ โฟลเดอร์ Adafruit_SSD1306 4. เขา้ ไปแกไ้ ขไฟล์ Adafruit_SSD1306.h โดยใชโ้ ปรแกรมท่ีใชเ้ ปิ ดไฟล์เอกสารไดเ้ ช่น WordPad รูปท่ี 4.20-8 ไฟล์ Adafruit_SSD1306.h
ใบงานที่ 4.20 การเขียนโปรแกรมแสดงผลดว้ ยจอ OLED 128×64 249 5. คน้ หาค่าเดิมท่ีต้งั คา่ ไวด้ งั รูป รูปท่ี 4.20-9 คา่ เดิมของไลบรารี่ Adafruit_SSD1306.h 6. ทาการแกไ้ ขใหเ้ ป็นการกาหนดคา่ ใชง้ าน OLED ขนาด 128x64 รูปที่ 4.20-10 การแกค้ ่าใหม่ ฟังก์ช่ันทม่ี ใี ห้ใช้งานของไลบราร่ี ฟังกช์ นั่ ใชง้ าน OLED จากไลบรารี่ที่ติดต้งั มีใหใ้ ชง้ านมากพอสมควรดงั ตารางที่ 4.20-1 ตารางที่ 4.20-1 รายการฟังกช์ น่ั ท่ีมีใหใ้ ชง้ าน ฟังกช์ นั่ ใชง้ าน OLED ฟังกช์ น่ั ใชง้ าน OLED .begin(SSD1306_SWITCHCAPVCC,addr); .fillRect(x0,y0,w,h,color); .clearDisplay(); .fillRoundRect(x0,y0,w,h,radius,color); .dim(dim) .fillScreen(color); .display(); .fillTriangle(x0,y0,x1,y1,x2,y2,color); .drawBitmap( x,y,*bitmap,w,h,color) .invertDisplay(i) .drawChar(x,y,c,color,background,size); .print(); .drawCircle(x0,y0,radius,color); .println(); .drawFastHLine(x0,y0,length,color); .setCursor(x0,y0); .drawFastHLineInternal(x0,y0,w,color) .setRotation(rotation); .drawFastVLine(x0,y0,length,color); .setTextColor(color); .drawFastVLineInternal(x,y,h,color) .setTextColor(color,background) .drawLine(x0,y0,x1,y1,color); .setTextSize(sizes); .drawPixel(x, y,color); .startscrolldiagleft(start,stop) .drawRect(x0,y0, w,h,color); .startscrolldiagright(start,stop) .drawRoundRect(x0,y0,w,h,radius,color); .startscrollleft(start,stop) .drawTriangle(x0,y0,x1,y1,x2,y2,color); .startscrollright(start,stop) .fillCircle(x0,y0,radius,color); .stopscroll() // Dim the display, dim = true: display is dimmed, dim = false: display is normal //i=1,0 //The rotation screen parameter can be 0, 1, 2 or 3. // printable sizes from 1 to 8; typical use is 1, 2 or 3
250 เรียนรู้และลองเล่น Arduino เบ้ืองตน้ [ครูประภาส สุวรรณเพชร] การกาหนดพิกดั ตาแหน่งของฟังกช์ น่ั เขียนภาพในแตล่ ะฟังกช์ นั่ จะมีการกาหนดคา่ พกิ ดั ตา่ ง ๆ ในแตล่ ะฟังกช์ น่ั ตวั อยา่ งเช่น 1. ฟังกช์ น่ั พลอ๊ ตจุด .drawPixel(x, y,color); รูปท่ี 4.20-11 การกาหนดพิกดั ของฟังกช์ น่ั พลอ๊ ตจุด 2. ฟังกช์ น่ั ลากเส้น เช่น .drawLine(x0,y0,x1,y1,color); รูปที่ 4.20-12 การกาหนดพกิ ดั ของฟังกช์ นั่ ลากเส้น 3. ฟังกช์ น่ั วาดรูปสี่เหล่ียม เช่น .drawRect(x0,y0, w,h,color); รูปท่ี 4.20-13 การกาหนดพิกดั ของฟังกช์ น่ั วาดรูปสี่เหล่ียม
ใบงานที่ 4.20 การเขียนโปรแกรมแสดงผลดว้ ยจอ OLED 128×64 251 4. ฟังกช์ นั่ วาดรูปวงกลม เช่น .drawCircle(x0,y0,radius,color); รูปท่ี 4.20-14 การกาหนดพกิ ดั ของฟังกช์ นั่ วาดรูปวงกลม 5. ฟังกช์ น่ั วาดรูปสี่เหล่ียมหวั มน เช่น .drawRoundRect(x0,y0,w,h,radius,color); รูปที่ 4.20-15 การกาหนดพิกดั ของฟังกช์ นั่ วาดรูปส่ีเหล่ียมหวั มน 6. ฟังกช์ น่ั วาดรูปสามเหล่ียม เช่น .drawTriangle(x0,y0,x1,y1,x2,y2,color); รูปท่ี 4.20-16 การกาหนดพกิ ดั ของฟังกช์ นั่ วาดรูปสามเหลี่ยม
252 เรียนรู้และลองเลน่ Arduino เบ้ืองตน้ [ครูประภาส สุวรรณเพชร] ฟอนต์ทม่ี ใี ห้ใช้งานของไลบรารี่ การแสดงผลที่เป็ นขอ้ ความผูใ้ ช้งานสามารถเปล่ียนฟอนต์ได้ โดยไฟล์ฟอนตจ์ ะอยู่ในไลบรารี่ Adafruit_GFX ภายในโฟลเดอร์ \\libraries\\Adafruit_GFX_Library\\Fonts มีรายการฟอนตใ์ ห้เลือกใช้ได้ ดงั ตารางท่ี 4.20-2 ตารางที่ 4.20-2 รายการฟอนตท์ ี่มีใหเ้ ลือกใชง้ าน Font Font FreeMono12pt7b.h FreeSansBoldOblique12pt7b.h FreeMono18pt7b.h FreeSansBoldOblique18pt7b.h FreeMono24pt7b.h FreeSansBoldOblique24pt7b.h FreeMono9pt7b.h FreeSansBoldOblique9pt7b.h FreeMonoBold12pt7b.h FreeSansOblique12pt7b.h FreeMonoBold18pt7b.h FreeSansOblique18pt7b.h FreeMonoBold24pt7b.h FreeSansOblique24pt7b.h FreeMonoBold9pt7b.h FreeSansOblique9pt7b.h FreeMonoBoldOblique12pt7b.h FreeSerif12pt7b.h FreeMonoBoldOblique18pt7b.h FreeSerif18pt7b.h FreeMonoBoldOblique24pt7b.h FreeSerif24pt7b.h FreeMonoBoldOblique9pt7b.h FreeSerif9pt7b.h FreeMonoOblique12pt7b.h FreeSerifBold12pt7b.h FreeMonoOblique18pt7b.h FreeSerifBold18pt7b.h FreeMonoOblique24pt7b.h FreeSerifBold24pt7b.h FreeMonoOblique9pt7b.h FreeSerifBold9pt7b.h FreeSans12pt7b.h FreeSerifBoldItalic12pt7b.h FreeSans18pt7b.h FreeSerifBoldItalic18pt7b.h FreeSans24pt7b.h FreeSerifBoldItalic24pt7b.h FreeSans9pt7b.h FreeSerifBoldItalic9pt7b.h FreeSansBold12pt7b.h FreeSerifItalic12pt7b.h FreeSansBold18pt7b.h FreeSerifItalic18pt7b.h FreeSansBold24pt7b.h FreeSerifItalic24pt7b.h FreeSansBold9pt7b.h FreeSerifItalic9pt7b.h ผูใ้ ช้งานสามารถเรียกใช้ได้โดยการ include ไฟล์ฟอนต์ดงั กล่าวเขา้ ในโปรแกรมแล้วทาการ เรียกใช้ เพยี งแต่ตาแหน่งของตวั อกั ษรที่ใชก้ าหนดตาแหน่งจะแตกต่างกนั กบั ที่ไม่ไดม้ ีการใชฟ้ อนตด์ งั รูป รูปที่ 4.20-17 การกาหนดพิกดั เมื่อใชฟ้ อนตป์ กติกบั ฟอนตใ์ หม่
ใบงานท่ี 4.20 การเขียนโปรแกรมแสดงผลดว้ ยจอ OLED 128×64 253 6. ฟังก์ชั่น Arduino ทใ่ี ช้งานในใบงาน 1. ฟังก์ชั่นหน่วงเวลาหรือฟังก์ช่ันหยุดค้าง การใช้งานสามารถกาหนดตวั เลขของเวลาท่ี ตอ้ งการหยุดคา้ งโดยตวั เลขท่ีใส่เป็ นตวั เลขของเวลาหน่วยเป็ นมิลลิวินาที ตวั เลขของเวลาที่ ใส่ไดส้ ูงสุดคือ 4,294,967,295 ซ่ึงเป็นขนาดของตวั แปร unsigned long delay(ms); ms: ตวั เลขท่ีหยดุ คา้ งของเวลาหน่วยมิลลิวนิ าที (unsigned long) ฟังก์ช่ันใช้งานของไลบรารี่ (เฉพาะในใบงาน) การใช้งานแสดงผลดว้ ยโมดูลจอ OLED ที่ใช้ไลบรารี่ของ Adafruit มีฟังก์ชนั่ ให้ใช้งานจานวน มากดงั ไดก้ ล่าวมาแลว้ ขา้ งตน้ สาหรับรายละเอียดการใชง้ านของแต่ละฟังกช์ นั่ จะกล่าวเฉพาะที่นามาใช้ งานในการทดลองเพือ่ เป็นแนวทางในการใชง้ านฟังกช์ นั่ ๆ ไดแ้ ก่ 1. ฟังก์ชั่นเร่ิมต้นการใช้งานและกาหนดแอดเดรส ใช้ในการเร่ิมตน้ การใช้งานไลบรารี่และ กาหนดแอดเดรสของโมดูลจอ OLED ที่สื่อสารแบบ I2C รูปแบบเป็นดงั น้ี .begin(SSD1306_SWITCHCAPVCC,addr); addr: แอดเดรสของโมดูล I2C ตัวอย่าง OLED.begin(SSD1306_SWITCHCAPVCC,0x3C); หมายถงึ เริ่มตน้ การใชง้ านไลบราร่ีโดยโมดูลเชื่อมตอ่ มีแอดเดรสเป็น 3CH 2. ฟังก์ชั่นล้างข้อมูลหน้าจอ ใชใ้ นการลา้ งขอ้ มูลที่แสดงผลบนหนา้ จอ OLED รูปแบบเป็นดงั น้ี .clearDisplay(); 3. ฟังก์ช่ันแสดงผล ใชใ้ นการแสดงผลบนหนา้ จอ OLED จากขอ้ มูลในบฟั เฟอร์ รูปแบบเป็ น ดงั น้ี .display(); 4. ฟังก์ช่ันวาดเส้นวงกลม ใชใ้ นการวาดเส้นวงกลมไม่มีสีพ้นื รูปแบบเป็นดงั น้ี .drawCircle(x0,y0,radius,color);
254 เรียนรู้และลองเลน่ Arduino เบ้ืองตน้ [ครูประภาส สุวรรณเพชร] ตัวอย่าง x0: พิกดั ท่ีตาแหน่งเร่ิมวาดแกน x หมายถึง y0: พิกดั ท่ีตาแหน่งเริ่มวาดแกน y radius: รัศมีของวงกลม color: สีท่ีตอ้ งการแสดง (BLACK, WHITE) OLED.drawCircle(110, 50, 12, WHITE); วาดเส้นวงกลมสีขาวท่ีพิกดั (110,50) โดยมีรัศมี 12 พิกเซล 5. ฟังก์ช่ันวาดเส้นตรง ใชใ้ นการเส้นตรง รูปแบบเป็นดงั น้ี .drawLine(x0,y0,x1,y1,color); ตวั อย่าง x0: พิกดั ท่ีตาแหน่งเร่ิมวาดแกน x หมายถงึ y0: พิกดั ท่ีตาแหน่งเริ่มวาดแกน y x1: พิกดั ท่ีตาแหน่งทา้ ยของการวาดเส้นตรงในแกน x y1: พกิ ดั ที่ตาแหน่งทา้ ยของการวาดเส้นตรงในแกน y color: สีท่ีตอ้ งการแสดง (BLACK, WHITE) OLED.drawLine(0, 63, 127, 0, WHITE); วาดเส้นตรงสีขาวเร่ิมท่ีพกิ ดั (0,63) ไปสิ้นสุดที่พิกดั (127,0) 6. ฟังก์ชั่นวาดรูปสี่เหลย่ี ม วาดรูปสี่เหลี่ยมพ้ืนโปร่งใส รูปแบบเป็นดงั น้ี .drawRect(x0,y0, w,h,color); ตัวอย่าง x0: พกิ ดั ท่ีตาแหน่งเร่ิมวาดแกน x หมายถงึ y0: พิกดั ท่ีตาแหน่งเริ่มวาดแกน y w: ความกวา้ งของรูปสี่เหล่ียม h: ความสูงของรูปสี่เหล่ียม color: สีท่ีตอ้ งการแสดง (BLACK, WHITE) OLED.drawRect(10,10, 100,40,WHITE); วาดรูปส่ีเหล่ียมสีขาวเร่ิมท่ีพกิ ดั (10,10) ไปสิ้นสุดที่พิกดั (100,40) 7. ฟังก์ช่ันวาดรูปสามเหลยี่ ม วาดรูปสามเหล่ียมพ้ืนโปร่งใส รูปแบบเป็นดงั น้ี .drawTriangle(x0,y0,x1,y1,x2,y2,color); x0: พิกดั ที่ตาแหน่งเริ่มวาดแกน x y0: พิกดั ท่ีตาแหน่งเร่ิมวาดแกน y
ใบงานที่ 4.20 การเขียนโปรแกรมแสดงผลดว้ ยจอ OLED 128×64 255 ตัวอย่าง x1: พิกดั จุดท่ีสองของการลากเส้นของแกน x หมายถึง y1: พิกดั ที่จุดที่สองของการลากเส้นของแกน y x2: พิกดั จุดท่ีสามของการลากเส้นของแกน x y2: พกิ ดั จุดท่ีสามของการลากเส้นของแกน y color: สีที่ตอ้ งการแสดง (BLACK, WHITE) OLED.drawTriangle(70, 60, 90, 60, 80, 46, WHITE); วาดรูปสามเหลี่ยมสีขาวท่ีพิกดั แกน x, y ดงั น้ี (70,60) (90,60) (80,46) 8. ฟังก์ชั่นวาดวงกลมชนิดมีสีพืน้ รูปแบบเป็นดงั น้ี .fillCircle(x0,y0,radius,color); ตัวอย่าง x0: พิกดั ท่ีตาแหน่งเร่ิมวาดแกน x หมายถึง y0: พกิ ดั ที่ตาแหน่งเริ่มวาดแกน y radius: รัศมีของวงกลม color: สีท่ีตอ้ งการแสดง (BLACK, WHITE) OLED.fillCircle(110, 50, 12, WHITE); วาดวงกลมทึบสีพ้ืนเป็นสีขาวที่พกิ ดั (110,50) โดยมีรัศมี 12 พกิ เซล 9. ฟังก์ช่ันวาดรูปส่ีเหลย่ี มชนิดมีสีพืน้ รูปแบบเป็นดงั น้ี .fillRect(x0,y0,w,h,color); ตวั อย่าง x0: พกิ ดั ท่ีตาแหน่งเร่ิมวาดแกน x หมายถึง y0: พิกดั ท่ีตาแหน่งเร่ิมวาดแกน y w: ความกวา้ งของรูปส่ีเหลี่ยม h: ความสูงของรูปสี่เหล่ียม color: สีท่ีตอ้ งการแสดง (BLACK, WHITE) OLED.fillRect(10,10, 100,40,WHITE); วาดรูปสี่เหลี่ยมพ้นื สีขาวเร่ิมท่ีพิกดั (10,10) ไปสิ้นสุดที่พิกดั (100,40) 10. ฟังก์ชั่นวาดรูปส่ีเหลยี่ มหวั มนชนิดมีสีพืน้ รูปแบบเป็นดงั น้ี .fillRoundRect(x0,y0,w,h,radius,color); x0: พิกดั ท่ีตาแหน่งเร่ิมวาดแกน x y0: พิกดั ท่ีตาแหน่งเร่ิมวาดแกน y
256 เรียนรู้และลองเลน่ Arduino เบ้ืองตน้ [ครูประภาส สุวรรณเพชร] ตัวอย่าง w: ความกวา้ งของรูปส่ีเหล่ียม หมายถงึ h: ความสูงของรูปส่ีเหล่ียม radius: รัศมีของส่วนโคง้ หวั มน color: สีที่ตอ้ งการแสดง (BLACK, WHITE) OLED.fillRoundRect (10,10, 100,40,WHITE); วาดรูปสี่เหล่ียมพ้นื สีขาวเร่ิมท่ีพกิ ดั (10,10) ไปสิ้นสุดที่พกิ ดั (100,40) 11. ฟังก์ชั่นพิมพ์ข้อความ เป็ นฟังก์ชนั่ ที่ใช้ในพิมพข์ อ้ ความหรือค่าในตวั แปรให้แสดงบนจอ OLED รูปแบบการใชง้ านคลา้ ยคลึงกบั Serial.print() นน่ั คือเมื่อพิมพเ์ สร็จตวั เคอร์เซอร์จะ รออยทู่ ่ีทา้ ยสิ่งที่พิมพน์ ้นั ๆ รูปแบบเป็นดงั น้ี .print(); 12. ฟังก์ช่ันพมิ พ์ข้อความ ใชใ้ นพิมพข์ อ้ ความหรือค่าในตวั แปรใหแ้ สดงบนจอ OLED รูปแบบ การใช้งานคลา้ ยคลึงกบั Serial.println() น่ันคือเมื่อพิมพ์เสร็จตวั เคอร์เซอร์จะขยบั มาข้ึน บรรทดั ใหมร่ อฟังกช์ นั่ พิมพข์ อ้ ความตอ่ ไป รูปแบบเป็นดงั น้ี .println(); 13. ฟังก์ช่ันกาหนดตาแหน่งเคอร์เซอร์สาหรับพิมพ์ข้อความ เป็ นฟังก์ช่ันกาหนดพิกดั ให้กบั เคอร์เซอร์เพื่อใชพ้ ิมพข์ อ้ ความในตาแหน่งที่ตอ้ งการ รูปแบบเป็นดงั น้ี .setCursor(x0,y0); x0: พิกดั แกน x y0: พิกดั แกน y 14. ฟังก์ชั่นเรียกใช้งานฟอนต์ เป็ นฟังก์ชน่ั ท่ีใชเ้ รียกใชง้ านฟอนต์ท่ีตอ้ งการโดยใส่ชื่อฟอนต์ที่ ตอ้ งการใชง้ าน (ช่ือฟอนตใ์ นตารางท่ี 4.20-2) รูปแบบเป็นดงั น้ี .setFont(&Font); Font: ช่ือฟอนตท์ ่ีตอ้ งการใชง้ าน(ไมต่ อ้ งใส่สกลุ .h) ตัวอย่าง OLED.setFont(&FreeMonoBold9pt7b); หมายถึง ใชง้ านฟอนตท์ ี่ชื่อวา่ FreeMonoBold9pt7b
ใบงานที่ 4.20 การเขียนโปรแกรมแสดงผลดว้ ยจอ OLED 128×64 257 15. ฟังก์ช่ันกาหนดสีข้อความ ใชใ้ นการกาหนดสีของตวั ขอ้ ความและพ้ืนหลงั ขอ้ ความ รูปแบบ เป็นดงั น้ี .setTextColor(color,background) color: สีของขอ้ ความที่ตอ้ งการแสดง (BLACK, WHITE) background: สีของพ้ืนหลงั ขอ้ ความที่ตอ้ งการแสดง (BLACK, WHITE) 16. ฟังก์ช่ันกาหนดขนาดของตัวอกั ษร ใชใ้ นการกาหนดขนาดของตวั อกั ษรท่ีตอ้ งการแสดงผล บนจอ OLED รูปแบบเป็นดงั น้ี .setTextSize(sizes); sizes: ตวั เลขขนาดท่ีตอ้ งการสามารถใชง้ านไดต้ ้งั แต่ 1-8 7. วงจรทใี่ ช้ทดลอง วงจรเพื่อใชท้ ดลองในใบงานสามารถทาได้ 2 แนวทาง คือ 1. วงจรไมโครคอนโทรลเลอร์ Arduino ท่ีสร้างเองจากไมโครคอนโทรลเลอร์ AVR 2. วงจรไมโครคอนโทรลเลอร์ Arduino ท่ีใชบ้ อร์ดโมดูล Arduino สาเร็จรูป เนื่องจากไม่มีโมเดลจาลอง OLED ในโปรแกรม Proteus จึงไม่สามารถจาลองการทางานได้ กรณีที่ใชว้ งจรท่ีสร้างข้ึนเองจากไอซีไมโครคอนโทรลเลอร์ AVR ที่ลงบูตโหลดเดอร์เป็ น Arduino เรียบร้อยแลว้ ต่อวงจรดงั รูป 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 X1 9 XTAL1 16MHz 10 XTAL2 C2,C3 GND 22pF 8,22 รูปท่ี 4.20-18 วงจรท่ีใชไ้ อซี AVR ในการทดลอง
258 เรียนรู้และลองเลน่ Arduino เบ้ืองตน้ [ครูประภาส สุวรรณเพชร] กรณีท่ีใช้ Arduino ในการทดลอง ตอ่ วงจรดงั รูป VCC ARDUINO VCC A4(SDA) A5(SCL) VCC GND SCL SDA GND รูปท่ี 4.20-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 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.20-20 การต่อลงบอร์ดทดลอง 8. การเขยี นโค้ดโปรแกรมควบคุม การทดลองท่ี 1 เขียนโปรแกรมแสดงผลบนจอ OLED ท่ีมีท้งั ขอ้ ความและค่าในตวั แปร ผงั งาน จากโจทยส์ ามารถเขียนเป็นผงั งานไดด้ งั น้ี START กาหนดค่าเริม่ ต้นต่าง แสดงผล แปลงผงั งานเป็ นโปรแกรม จากผงั งานสามารถเขียนเป็นโคด้ โปรแกรมควบคุม Arduino 1 #include <Wire.h> 2 #include <Adafruit_GFX.h> 3 #include <Adafruit_SSD1306.h> 4 Adafruit_SSD1306 OLED(4); 5 int x; 6 void setup() 7{ 8 OLED.begin(SSD1306_SWITCHCAPVCC,0x3C); // initialize with the I2C addr 0x3C 9} 10 void loop() 11 { 12 OLED.clearDisplay();
ใบงานท่ี 4.20 การเขียนโปรแกรมแสดงผลดว้ ยจอ OLED 128×64 259 13 OLED.setTextColor(WHITE,BLACK); //Text is white ,background is black 14 OLED.setCursor(0, 0); 15 OLED.setTextSize(2); 16 OLED.println(\"OLED \"); 17 OLED.setTextSize(1); 18 OLED.println(\"Arduino Laboratory\"); 19 OLED.setTextColor(BLACK,WHITE); // 'inverted' text 20 OLED.print(\"www.praphas.com\"); 21 OLED.setTextColor(WHITE,BLACK); // 'inverted' text again 22 OLED.setCursor(60,0); 23 OLED.setTextSize(2); 24 OLED.println(x,DEC); 25 OLED.display(); // 26 x++; 27 delay(250); 28 } รายละเอยี ดโค้ดโปรแกรม - บรรทดั ท่ี 1 รวมไฟลไ์ ลบราร่ี Wire.h เขา้ มาในโคด้ โปรแกรม - บรรทดั ท่ี 2 รวมไฟลไ์ ลบราร่ี Adafruit_GFX.h เขา้ มาในโคด้ โปรแกรม - บรรทดั ท่ี 3 รวมไฟลไ์ ลบรารี่ Adafruit_SSD1306.h เขา้ มาในโคด้ โปรแกรม - บรรทดั ท่ี 4 กาหนดชื่อเรียกโมดูลจอวา่ OLED - บรรทดั ที่ 8 ประกาศเริ่มใชง้ านไลบรารี่พร้อมระบุแอดเดรสจอ OLED - บรรทดั ที่ 12 ลา้ งขอ้ มูลท่ีแสดงผลหนา้ จอ - บรรทดั ท่ี 13 กาหนดสีตวั อกั ษรและสีพ้นื หลงั ของตวั อกั ษร - บรรทดั ที่ 14 กาหนดพิกดั ที่จะพิมพข์ อ้ ความ - บรรทดั ที่ 15 กาหนดขนาดของตวั อกั ษร - บรรทดั ท่ี 16 แสดงผลขอ้ ความแลว้ ใหเ้ คอร์เซอร์ข้ึนไปรอท่ีบรรทดั ใหม่ - บรรทดั ที่ 24 แสดงผลจากคา่ ของตวั แปรแลว้ ใหเ้ คอร์เซอร์ข้ึนไปรอที่บรรทดั ใหม่ - บรรทดั ที่ 25 สัง่ ใหแ้ สดงผล ทดลองการทางาน 1. ทดลองดว้ ยวงจรจริง 2. ทดลองเปล่ียนรูปแบบการแสดงผล การทดลองที่ 2 เขียนโปรแกรมวาดวตั ถุแบบต่าง ๆ โดยแสดงผลท่ีจอ OLED ผงั งาน จากโจทยส์ ามารถเขียนเป็นผงั งานไดด้ งั น้ี START กาหนดคา่ เริม่ ต้นต่าง วาดวัตถแุ บบต่าง แสดงผล
260 เรียนรู้และลองเลน่ Arduino เบ้ืองตน้ [ครูประภาส สุวรรณเพชร] แปลงผงั งานเป็ นโปรแกรม จากผงั งานสามารถเขียนเป็นโคด้ โปรแกรมควบคุม Arduino 1 #include <Wire.h> 2 #include <Adafruit_GFX.h> 3 #include <Adafruit_SSD1306.h> 4 Adafruit_SSD1306 OLED(4); 5 void setup() 6{ 7 OLED.begin(SSD1306_SWITCHCAPVCC,0x3C); //initialize I2C addr 0x3c 8} 9 void loop() 10 { 11 OLED.clearDisplay(); 12 OLED.setTextColor(WHITE,BLACK); 13 OLED.drawRect(10,10, 100,40,WHITE); 14 OLED.drawLine(0, 63, 127, 0, WHITE); 15 OLED.drawCircle(110, 50, 12, WHITE); 16 OLED.fillCircle(45, 50, 8, WHITE); 17 OLED.drawTriangle(70, 60, 90, 60, 80, 46, WHITE); 18 OLED.fillRect(15,15,20,20,WHITE); 19 OLED.fillRoundRect(50,15,50,20,10,WHITE); 20 OLED.setCursor(5,30); 21 OLED.setTextSize(1); 22 OLED.println(\"www.praphas.com\"); 23 OLED.display(); // 24 delay(250); 25 } รายละเอยี ดโค้ดโปรแกรม - บรรทดั ที่ 1 รวมไฟลไ์ ลบราร่ี Wire.h เขา้ มาในโคด้ โปรแกรม - บรรทดั ท่ี 2 รวมไฟลไ์ ลบราร่ี Adafruit_GFX.h เขา้ มาในโคด้ โปรแกรม - บรรทดั ท่ี 3 รวมไฟลไ์ ลบราร่ี Adafruit_SSD1306.h เขา้ มาในโคด้ โปรแกรม - บรรทดั ท่ี 4 กาหนดชื่อเรียกโมดูลจอวา่ OLED - บรรทดั ที่ 7 ประกาศเร่ิมใชง้ านไลบรารี่พร้อมระบุแอดเดรสจอ OLED - บรรทดั ที่ 11 ลา้ งขอ้ มูลที่แสดงผลหนา้ จอ - บรรทดั ที่ 12 กาหนดสีตวั อกั ษรและสีพ้นื หลงั ของตวั อกั ษร - บรรทดั ท่ี 13 วาดรูปส่ีเหลี่ยมพ้นื โปร่งใส - บรรทดั ที่ 14 วาดเส้นตรง - บรรทดั ท่ี 15 วาดรูปวงกลมพ้นื โปร่งใส - บรรทดั ที่ 16 วาดรูปวงกลมพ้ืนทึบสีขาว - บรรทดั ที่ 17 วาดรูปสามเหลี่ยมพ้นื โปร่งใส - บรรทดั ที่ 25 สั่งใหแ้ สดงผล ทดลองการทางาน 1. ทดลองดว้ ยวงจรจริง 2. ทดลองเปลี่ยนรูปแบบการแสดงผล
ใบงานท่ี 4.20 การเขียนโปรแกรมแสดงผลดว้ ยจอ OLED 128×64 261 การทดลองที่ 3 เขียนโปรแกรมแสดงขอ้ ความโดยเปลี่ยนฟอน์ตการแสดงผล ผงั งาน จากโจทยส์ ามารถเขียนเป็นผงั งานไดด้ งั น้ี START กาหนดค่าเริม่ ต้นต่าง เลือกใช้ฟอนต์ แสดงผล แปลงผงั งานเป็ นโปรแกรม จากผงั งานสามารถเขียนเป็นโคด้ โปรแกรมควบคุม Arduino 1 #include <Wire.h> 2 #include <Adafruit_GFX.h> 3 #include <Adafruit_SSD1306.h> 4 #include <Fonts/FreeMonoBold9pt7b.h> //include font MonoBold size 9pt7b 5 Adafruit_SSD1306 OLED(4); 6 void setup() 7{ 8 OLED.setFont(&FreeMonoBold9pt7b); // Use font from file include 9 OLED.begin(SSD1306_SWITCHCAPVCC,0x3C); // initialize with the I2C addr 0x3C 10 } 11 void loop() 12 { 13 OLED.clearDisplay(); 14 OLED.setTextColor(WHITE,BLACK); //Text is white ,background is black 15 OLED.setCursor(0,20); 16 OLED.setTextSize(1); 17 OLED.println(\"Change font\"); 18 OLED.setCursor(0,50); 19 OLED.print(\"OLED 128x64\"); 20 OLED.display(); // 21 delay(250); 22 } รายละเอยี ดโค้ดโปรแกรม - บรรทดั ที่ 1 รวมไฟลไ์ ลบรารี่ Wire.h เขา้ มาในโคด้ โปรแกรม - บรรทดั ที่ 2 รวมไฟลไ์ ลบรารี่ Adafruit_GFX.h เขา้ มาในโคด้ โปรแกรม - บรรทดั ท่ี 3 รวมไฟลไ์ ลบรารี่ Adafruit_SSD1306.h เขา้ มาในโคด้ โปรแกรม - บรรทดั ท่ี 4 รวมไฟลฟ์ อนตเ์ ขา้ มาในโคด้ โปรแกรม - บรรทดั ที่ 5 กาหนดช่ือเรียกโมดูลจอวา่ OLED - บรรทดั ท่ี 8 ประกาศใชง้ านฟอนต์ - บรรทดั ที่ 9 ประกาศเริ่มใชง้ านไลบราร่ีพร้อมระบุแอดเดรสจอ OLED - บรรทดั ท่ี 13 ลา้ งขอ้ มูลที่แสดงผลหนา้ จอ - บรรทดั ที่ 14 กาหนดสีตวั อกั ษรและสีพ้ืนหลงั ของตวั อกั ษร - บรรทดั ที่ 15 กาหนดพิกดั ที่จะพิมพข์ อ้ ความ
262 เรียนรู้และลองเลน่ Arduino เบ้ืองตน้ [ครูประภาส สุวรรณเพชร] - บรรทดั ที่ 16 กาหนดขนาดของตวั อกั ษร - บรรทดั ที่ 17 แสดงผลขอ้ ความแลว้ ใหเ้ คอร์เซอร์ข้ึนไปรอที่บรรทดั ใหม่ - บรรทดั ท่ี 20 สั่งใหแ้ สดงผล ทดลองการทางาน 1. ทดลองดว้ ยวงจรจริง 2. ทดลองเปล่ียนรูปแบบการแสดงผล 9. สรุปผลการปฏบิ ตั งิ าน 10. งานทมี่ อบหมาย 1. เขียนโปรแกรมแสดงผลเวลาที่บอร์ดเริ่มทางานโดยให้แสดงผลเวลาหน่วยเป็ นวินาทีพร้อม ขอ้ ความบอกรายละเอียดต่าง ๆ พอสมควร วงจรที่ใชท้ ดลองเป็นดงั รูป ARDUINO VCC VCC A4(SDA) A5(SCL) VCC GND SCL SDA GND รูปท่ี 4.20-21 วงจรท่ีใชบ้ อร์ด Arduino ในการทดลอง
ใบงานท่ี 4.21 การเขียนโปรแกรมแสดงผลรูปภาพดว้ ยจอ OLED 128×64 263 ใบงานท่ี 4.21 การเขยี นโปรแกรมแสดงผลรูปภาพด้วยจอ OLED 128×64 1. จุดประสงค์ทว่ั ไป เพ่อื ใหส้ ามารถเขียนโปรแกรมแสดงผลรูปภาพดว้ ยจอ OLED 128×64 ได้ 2. จุดประสงค์เชิงพฤตกิ รรม 1. บอกวธิ ีเขียนโปรแกรมแสดงผลรูปภาพดว้ ยจอ OLED 128×64ได้ 2. บอกข้นั ตอนการต่อวงจรเพ่อื ทดลองบนบอร์ดทดลองได้ 3. ทดสอบการทางานของบอร์ด Arduino ได้ 4. ปฏิบตั ิงานตามใบงานเสร็จทนั เวลาท่ีกาหนด 3. เคร่ืองมือและอปุ กรณ์ 1. บอร์ดทดลอง Breadboard 830 Point 1 แผน่ 2. บอร์ด Arduino Nano 3.0 1 ตวั 3. OLED ขนาด 128×64 แบบ I2C ท่ีใชไ้ ดร์เวอร์เบอร์ SSD1306 1 ตวั 4. สายเชื่อมตอ่ USB (Mini USB) 1 เส้น 5. สายเชื่อมต่อวงจร 1 ชุด 6. คอมพวิ เตอร์ 1 เคร่ือง 4. ลาดับข้นั การปฏบิ ัติงาน 1. ศึกษาจุดประสงคท์ ว่ั ไป จุดประสงคเ์ ชิงพฤติกรรมและทฤษฎีพ้นื ฐานท่ีเกี่ยวขอ้ ง 2. ดาเนินการต่อวงจรลงบอร์ดทดลองตามวงจรท่ีกาหนด 3. เขียนโปรแกรมควบคุมและทดสอบการทางานของวงจร 4. สรุปผลการปฏิบตั ิงาน
264 เรียนรู้และลองเล่น Arduino เบ้ืองตน้ [ครูประภาส สุวรรณเพชร] 5. ทฤษฎพี ืน้ ฐาน รูปภาพที่แสดงผลบนจอ OLED ขนาด 128×64 สามารถทาได้ 2 วิธีหลกั ๆ คือ เขียนข้ึนมาใหม่ และใชร้ ูปภาพท่ีมีอยูแ่ ลว้ สาหรับการเขียนรูปภาพข้ึนมาใหม่สามารถใช้โปรแกรมวาดรูปภาพทว่ั ๆ ไป เขียนรูปภาพที่ตอ้ งการไดเ้ พียงการเขียนรูปภาพให้ไดต้ ามตอ้ งการมีความซบั ซอ้ นมากพอสมควรสาหรับ ผทู้ ่ีไมม่ ีทกั ษะในการวาดรูปดว้ ยแลว้ แทบจะเป็ นไปไม่ไดเ้ ลย งานคร้ังน้ีเสนอการนารูปภาพที่มีอยแู่ ลว้ ซ่ึง เป็นวธิ ีที่ง่ายสุดคือการคน้ หารูปภาพที่ตอ้ งการทางอินเตอร์เน็ตมีข้นั ตอนการดาเนินการดงั น้ี ข้นั ตอนการดาเนินการ 1. เปิ ดหาภาพทต่ี ้องการ เป็นการหารูปภาพจากแหล่งตา่ ง ๆ ที่มีลกั ษณะตามท่ีตอ้ งการและมีขนาดท่ี สามารถใช้งานได้ ตวั อย่างเช่นจากเวปไซต์ http://www.alessioatzeni.com/meteocons ซ่ึงเป็ น ภาพขาวดาและมีขนาดใกลเ้ คียงกบั ท่ีตอ้ งการ หากภาพเล็กหรือใหญ่เกินความตอ้ งการสามารถ ปรับขยาย/ยอ่ การแสดงผลในโปรแกรมบราวน์เซอร์ (โปรแกรมท่ีกาลงั เปิ ดเวป) เพือ่ ใหไ้ ดข้ นาด ที่ตอ้ งการและมีขนาดไม่เกินขนาดของหนา้ จอ OLED ที่ใชง้ าน การปรับขยาย/ยอ่ ทาไดโ้ ดยการ กดแป้นพมิ พ์ Ctrl คา้ งไวแ้ ลว้ กลิ้งเมาส์ใหไ้ ดข้ นาดตามตอ้ งการ รูปท่ี 4.21-1 ตวั อยา่ งภาพจากเวปไซตท์ ี่ตอ้ งการจบั ภาพ 2. จับภาพหน้าจอด้วยโปรแกรมจับภาพ เช่นโปรแกรม SnagIt สามารถดาวน์โหลดโปรแกรมไดท้ ี่ https://www.techsmith.com/download/snagit ทาการจบั ภาพเฉพาะไอคอนท่ีตอ้ งการ โดยขนาด ของภาพท้งั แนวต้งั และแนวนอนจะตอ้ งเป็นค่าที่เลข 8 สามารถหารไดล้ งตวั ถึงจะสามารถนาไป แสดงผลไดถ้ ูกตอ้ ง เช่น 56×56 ดงั รูป รูปท่ี 4.21-2 จบั ภาพท่ีตอ้ งการโดยขนาดที่ใชเ้ ลข 8 หารลงตวั
ใบงานท่ี 4.21 การเขียนโปรแกรมแสดงผลรูปภาพดว้ ยจอ OLED 128×64 265 รูปท่ี 4.21-3 ภาพท่ีจบั ไดจ้ ากหนา้ จอดว้ ยโปรแกรม Snagit 3. ใช้โปรแกรมแปลงภาพเป็ นรหัส \"LCD Image Converter\" สามารถดาวน์โหลดโปรแกรมไดท้ ี่ http://www.riuson.com/lcd-image-converter ทาการเปิ ดให้โปรแกรมค้างไว้ แล้วกลับไปยงั โปรแกรม Snagit (รูปที่ 4.21-3) ทาการคดั ลอกภาพโดยใช้ Ctrl+c แลว้ กลบั มายงั โปรแกรม LCD Image Converter อีกคร้ังทาการวางภาพที่คดั ลอกมาโดยใช้ Ctrl+v ทาการซูมภาพเพื่อใหส้ ามารถ ปรับสีในแต่ละพิกเซลได้ถนัดโดยการกดคีย์ Ctrl คา้ งไวแ้ ล้วกลิ้งลูกกลิ้งเมาส์ให้ได้ขนาดที่ สามารถแกไ้ ขภาพไดอ้ ยา่ งถนดั ตามความตอ้ งการ ทาการปรับสีภาพแต่ละพิกเซลให้ไดต้ ามท่ี ตอ้ งการโดยใชก้ ารคลิกเมาส์ที่เคร่ืองมือดินสอ แลว้ มาคลิกที่ภาพดงั น้ี - คลิกซา้ ยจะเติมสีดา - คลิกขวาจะเติมสีขวา รูปที่ 4.21-4 ภาพท่ีนาเขา้ โปรแกรม LCD Image Converter รูปที่ 4.21-5 ภาพท่ีตกแต่งเรียบร้อยแลว้
266 เรียนรู้และลองเลน่ Arduino เบ้ืองตน้ [ครูประภาส สุวรรณเพชร] 4. การดูขนาดรูปภาพ วา่ ใชง้ านไดห้ รือไม่ หากเป็ นขนาดที่เลข 8 หารไม่ลงตวั จะตอ้ งทาการปรับ เพม่ิ /ลดขนาดใหห้ ารลงตวั ใหไ้ ด้ การดูขนาดดูไดท้ ่ีมุมขวาล่างของโปรแกรมดงั รูป รูปที่ 4.21-6 ดูขนาดภาพ 5. ปรับขนาดรูปภาพให้แสดงผลได้ ขนาดรูปภาพท่ีใชง้ านไดจ้ ะตอ้ งมีขนาดพกิ เซลไม่เกินจอคือไม่ เกิน 128×64 และตอ้ งเป็ นขนาดท่ีเลข 8 หารลงตวั หากดูขนาดจากข้นั ตอนท่ี 4 แลว้ เห็นวา่ ขนาด ยงั ไม่ถูกตอ้ งจะตอ้ งปรับขนาดโดยดาเนินการดงั รูป รูปที่ 4.21-6 ดูขนาดภาพ รูปท่ี 4.21-7 ปรับขนาดภาพเพม่ิ ลดซา้ ย/ขวา/บน/ล่าง 6. กลบั สีรูปภาพเป็ นตรงข้าม ในกรณีท่ีรูปภาพที่ไดต้ อ้ งการใหต้ ิดสวา่ งบริเวณที่เป็ นสีขาวและให้ มืดบริเวณที่เป็นสีดาจะตอ้ งทาการกลบั สีภาพโดยใชเ้ มนู Image-> Inverse ดงั รูป รูปท่ี 4.21-7 กลบั สีภาพ
ใบงานที่ 4.21 การเขียนโปรแกรมแสดงผลรูปภาพดว้ ยจอ OLED 128×64 267 รูปที่ 4.21-8 ผลของการกลบั สีรูปภาพ 7. เตรียมการคัดลอกโค้ด คลิกที่เมนู Option เลือก Conversion คลิกเลือก Monochrome(1) และ Show Preview(2) รูปที่ 4.21-9 เตรียมการคดั ลอกโคด้ รูปภาพ 8. คดั ลอกโค้ดรูปภาพ โดยการคลิกขวาที่บริเวณโคด้ เลือก Select All และ Copy ตามลาดบั รูปท่ี 4.21-10 เลือกโคด้ ภาพท้งั หมด รูปท่ี 4.21-11 คดั ลอกโคด้ ภาพ
268 เรียนรู้และลองเลน่ Arduino เบ้ืองตน้ [ครูประภาส สุวรรณเพชร] 9. นาโค้ดรูปภาพไปวางในโปรแกรม โดยวางไวใ้ นตวั แปรอาเรยท์ ี่เก็บขอ้ มูลไวใ้ นหน่วยความจา เกบ็ โปรแกรม const unsigned char logo [] PROGMEM = { รูปท่ี 4.21-12 วางโคด้ รูปภาพในตวั แปรอาเรย์ 10. แก้ขนาดรูปภาพทกี่ าหนด ทาการแกข้ นาดรูปภาพใหต้ รงตามขนาดจริงในฟังกช์ น่ั .drawBitmap รูปที่ 4.21-13 แกข้ นาดใหต้ รงกบั ขนาดภาพท่ีใชง้ าน 6. ฟังก์ชั่น Arduino ทใี่ ช้งานในใบงาน 1. ฟังก์ช่ันหน่วงเวลาหรือฟังก์ช่ันหยุดค้าง การใช้งานสามารถกาหนดตัวเลขของเวลาที่ ตอ้ งการหยดุ คา้ งโดยตวั เลขที่ใส่เป็ นตวั เลขของเวลาหน่วยเป็ นมิลลิวนิ าที ตวั เลขของเวลาที่ ใส่ไดส้ ูงสุดคือ 4,294,967,295 ซ่ึงเป็นขนาดของตวั แปร unsigned long delay(ms); ms: ตวั เลขที่หยดุ คา้ งของเวลาหน่วยมิลลิวนิ าที (unsigned long) ฟังก์ชั่นใช้งานของไลบราร่ี (เฉพาะในใบงาน) ฟังกช์ นั่ ท่ีใชใ้ นการทดลองในใบงาน ไดแ้ ก่ 1. ฟังก์ช่ันเร่ิมต้นการใช้งานและกาหนดแอดเดรส ใช้ในการเริ่มตน้ การใช้งานไลบรารี่และ กาหนดแอดเดรสของโมดูลจอ OLED ท่ีส่ือสารแบบ I2C รูปแบบเป็นดงั น้ี .begin(SSD1306_SWITCHCAPVCC,addr); addr: แอดเดรสของโมดูล I2C
ใบงานที่ 4.21 การเขียนโปรแกรมแสดงผลรูปภาพดว้ ยจอ OLED 128×64 269 2. ฟังก์ช่ันวาดรูปภาพ ใชใ้ นวาดรูปภาพท่ีเก็บไวใ้ นตวั แปร รูปแบบเป็นดงั น้ี .drawBitmap( x,y,*bitmap,w,h,color) ตวั อย่าง x: พกิ ดั ท่ีตาแหน่งเร่ิมวาดแกน x หมายถงึ y: พกิ ดั ท่ีตาแหน่งเร่ิมวาดแกน y *bitmap: ชื่อตวั แปรที่เกบ็ รูปภาพ w: ขนาดพกิ เซลดา้ นความกวา้ งของรูปภาพ h: ขนาดพิกเซลดา้ นความสูงของรูปภาพ color: สีท่ีใชว้ าด (0,1) OLED.drawBitmap(20,10,logo,56,56,1); วาดรูปภาพจากตวั แปร logo ที่พกิ ดั (20,10) โดยขนาดของรูปภาพคือ (56,56) 3. ฟังก์ชั่นล้างข้อมูลหน้าจอ ใชใ้ นการลา้ งขอ้ มูลท่ีแสดงผลบนหนา้ จอ OLED รูปแบบเป็นดงั น้ี .clearDisplay(); 4. ฟังก์ชั่นแสดงผล ใชใ้ นการแสดงผลบนหนา้ จอ OLED จากขอ้ มูลในบฟั เฟอร์ รูปแบบเป็ น ดงั น้ี .display(); 5. ฟังก์ชั่นพมิ พ์ข้อความ เป็ นฟังก์ชนั่ ที่ใชใ้ นการพิมพข์ อ้ ความหรือค่าในตวั แปรให้แสดงบน จอ OLED โดยรูปแบบการใช้งานคล้ายคลึงกับ Serial.print() นั่นคือเมื่อพิมพ์เสร็จตัว เคอร์เซอร์จะรออยทู่ ี่ทา้ ยส่ิงที่พมิ พน์ ้นั ๆ รูปแบบเป็นดงั น้ี .print(); 6. ฟังก์ชั่นพมิ พ์ข้อความ ใชใ้ นการพิมพข์ อ้ ความหรือค่าในตวั แปรให้แสดงบนจอ OLED โดย รูปแบบการใชง้ านคลา้ ยคลึงกบั Serial.println() นนั่ คือเมื่อพิมพเ์ สร็จตวั เคอร์เซอร์จะขยบั มา ข้ึนบรรทดั ใหม่รอฟังกช์ น่ั พมิ พข์ อ้ ความต่อไป รูปแบบเป็นดงั น้ี .println(); 7. ฟังก์ช่ันกาหนดตาแหน่งเคอร์เซอร์สาหรับพิมพ์ข้อความ เป็ นฟังก์ชน่ั กาหนดพิกดั ให้กบั เคอร์เซอร์เพอื่ ใชพ้ มิ พข์ อ้ ความในตาแหน่งท่ีตอ้ งการ รูปแบบเป็นดงั น้ี
270 เรียนรู้และลองเลน่ Arduino เบ้ืองตน้ [ครูประภาส สุวรรณเพชร] .setCursor(x0,y0); x0: พกิ ดั แกน x y0: พกิ ดั แกน y 8. ฟังก์ช่ันเรียกใช้งานฟอนต์ เป็ นฟังก์ชนั่ ที่ใชเ้ รียกใชง้ านฟอนต์ที่ตอ้ งการโดยใส่ช่ือฟอนตท์ ่ี ตอ้ งการใชง้ าน (ช่ือฟอนตใ์ นตารางที่ 4.20-2) รูปแบบเป็นดงั น้ี .setFont(&Font); Font: ช่ือฟอนตท์ ี่ตอ้ งการใชง้ าน (ไม่ตอ้ งใส่สกุล .h) 9. ฟังก์ชั่นกาหนดสีข้อความ ใชใ้ นการกาหนดสีของตวั ขอ้ ความและพ้ืนหลงั ขอ้ ความ รูปแบบ เป็นดงั น้ี .setTextColor(color,background) color: สีของขอ้ ความท่ีตอ้ งการแสดง (BLACK, WHITE) background: สีของพ้ืนหลงั ขอ้ ความท่ีตอ้ งการแสดง (BLACK, WHITE) 10. ฟังก์ช่ันกาหนดขนาดของตัวอักษร ใชใ้ นการกาหนดขนาดของตวั อกั ษรท่ีตอ้ งการแสดงผล บนจอ OLED รูปแบบเป็นดงั น้ี .setTextSize(sizes); sizes: ตวั เลขขนาดท่ีตอ้ งการสามารถใชง้ านไดต้ ้งั แต่ 1-8 7. วงจรทใ่ี ช้ทดลอง วงจรเพือ่ ใชท้ ดลองในใบงานสามารถทาได้ 2 แนวทาง คือ 1. วงจรไมโครคอนโทรลเลอร์ Arduino ท่ีสร้างเองจากไมโครคอนโทรลเลอร์ AVR 2. วงจรไมโครคอนโทรลเลอร์ Arduino ที่ใชบ้ อร์ดโมดูล Arduino สาเร็จรูป เนื่องจากไม่มีโมเดลจาลอง OLED ในโปรแกรม Proteus จึงไม่สามารถจาลองการทางานได้ กรณีที่ใชว้ งจรท่ีสร้างข้ึนเองจากไอซีไมโครคอนโทรลเลอร์ AVR ที่ลงบูตโหลดเดอร์เป็น Arduino เรียบร้อยแลว้ ต่อวงจรดงั รูป
ใบงานท่ี 4.21 การเขียนโปรแกรมแสดงผลรูปภาพดว้ ยจอ OLED 128×64 271 1DN15819 VCC Peripheral circuit R1 CPU circuit VCC 10k 7,20 ATMEGA328 VCC GND SCL SDA SW1 VCC 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 X1 9 XTAL1 16MHz 10 XTAL2 C2,C3 GND 22pF 8,22 รูปท่ี 4.20-18 วงจรที่ใชไ้ อซี AVR ในการทดลอง กรณีที่ใช้ Arduino ในการทดลอง ต่อวงจรดงั รูป VCC ARDUINO VCC A4(SDA) A5(SCL) VCC GND SCL SDA GND รูปท่ี 4.20-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 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.20-20 การต่อลงบอร์ดทดลอง
272 เรียนรู้และลองเล่น Arduino เบ้ืองตน้ [ครูประภาส สุวรรณเพชร] 8. การเขยี นโค้ดโปรแกรมควบคุม การทดลองท่ี 1 เขียนโปรแกรมแสดงภาพบนจอ OLED ผงั งาน จากโจทยส์ ามารถเขียนเป็นผงั งานไดด้ งั น้ี START กาหนดคา่ เริ่มต้นต่าง แสดงผล แปลงผงั งานเป็ นโปรแกรม จากผงั งานสามารถเขียนเป็นโคด้ โปรแกรมควบคุม Arduino 1 #include <Wire.h> 2 #include <Adafruit_GFX.h> 3 #include <Adafruit_SSD1306.h> 4 Adafruit_SSD1306 OLED(4); 5 const unsigned char logo [] PROGMEM = { 6 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 7 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 8 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 9 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 10 0x00, 0x00, 0x01, 0xc0, 0x00, 0x00, 0x00, 11 0x00, 0x00, 0x01, 0xc0, 0x00, 0x00, 0x00, 12 0x00, 0x00, 0x01, 0xc0, 0x00, 0x00, 0x00, 13 0x00, 0x00, 0x01, 0xc0, 0x00, 0x00, 0x00, 14 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 15 0x00, 0x18, 0x00, 0x00, 0x0c, 0x00, 0x00, 16 0x00, 0x1c, 0x00, 0x00, 0x1c, 0x00, 0x00, 17 0x00, 0x0e, 0x00, 0x00, 0x38, 0x00, 0x00, 18 0x00, 0x06, 0x07, 0xf8, 0x30, 0x00, 0x00, 19 0x00, 0x00, 0x1f, 0xfc, 0x00, 0x00, 0x00, 20 0x00, 0x00, 0x3f, 0xfe, 0x00, 0x00, 0x00, 21 0x00, 0x00, 0x78, 0x0f, 0x00, 0x00, 0x00, 22 0x00, 0x00, 0xf0, 0x07, 0x80, 0x00, 0x00, 23 0x00, 0x01, 0xe0, 0x03, 0x80, 0x00, 0x00, 24 0x00, 0x01, 0xc0, 0x01, 0xc0, 0x00, 0x00, 25 0x00, 0x03, 0x80, 0x01, 0xc0, 0x00, 0x00, 26 0x00, 0x03, 0x80, 0x00, 0xe0, 0x00, 0x00, 27 0x03, 0xc3, 0x80, 0xff, 0xe1, 0xe0, 0x00, 28 0x07, 0xe3, 0x81, 0xff, 0xf3, 0xf0, 0x00, 29 0x03, 0xc3, 0x87, 0xff, 0xf9, 0xe0, 0x00, 30 0x00, 0x03, 0x8f, 0x80, 0x7c, 0x00, 0x00, 31 0x00, 0x01, 0xfe, 0x00, 0x1e, 0x00, 0x00, 32 0x00, 0x01, 0xfc, 0x00, 0x0f, 0x00, 0x00, 33 0x00, 0x0f, 0xf8, 0x00, 0x07, 0xfc, 0x00, 34 0x00, 0x3f, 0xf0, 0x00, 0x03, 0xff, 0x00, 35 0x00, 0x7f, 0xc0, 0x00, 0x01, 0xff, 0x80, 36 0x00, 0xfc, 0x00, 0x00, 0x00, 0x07, 0xc0, 37 0x01, 0xf0, 0x00, 0x00, 0x00, 0x01, 0xe0, 38 0x03, 0xe0, 0x00, 0x00, 0x00, 0x00, 0xf0, 39 0x07, 0x80, 0x00, 0x00, 0x00, 0x00, 0x70, 40 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 41 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 42 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 43 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 44 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 45 0x07, 0x80, 0x00, 0x00, 0x00, 0x00, 0x78, 46 0x07, 0x80, 0x00, 0x00, 0x00, 0x00, 0x78, 47 0x03, 0xc0, 0x00, 0x00, 0x00, 0x00, 0xf0, 48 0x03, 0xc0, 0x00, 0x00, 0x00, 0x01, 0xf0,
ใบงานท่ี 4.21 การเขียนโปรแกรมแสดงผลรูปภาพดว้ ยจอ OLED 128×64 273 49 0x01, 0xe0, 0x30, 0x00, 0x01, 0x83, 0xe0, 50 0x00, 0xfc, 0x78, 0x00, 0x07, 0xc7, 0xc0, 51 0x00, 0x7f, 0xfc, 0x00, 0x1f, 0xff, 0x80, 52 0x00, 0x3f, 0xff, 0x00, 0x3f, 0xff, 0x00, 53 0x00, 0x0f, 0xcf, 0xe0, 0xfe, 0x7c, 0x00, 54 0x00, 0x00, 0x07, 0xff, 0xfc, 0x00, 0x00, 55 0x00, 0x00, 0x03, 0xff, 0xf0, 0x00, 0x00, 56 0x00, 0x00, 0x00, 0xff, 0xc0, 0x00, 0x00, 57 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 58 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 59 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 60 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 61 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 62 }; 63 void setup() 64 { 65 OLED.begin(SSD1306_SWITCHCAPVCC,0x3C); // initialize with the I2C addr 0x3C 66 OLED.clearDisplay(); 67 OLED.drawBitmap(20,10,logo,56,56,1); 68 OLED.display(); 69 } 70 void loop() 71 { 72 delay(250); 73 } รายละเอยี ดโค้ดโปรแกรม - บรรทดั ที่ 1 รวมไฟลไ์ ลบรารี่ Wire.h เขา้ มาในโคด้ โปรแกรม - บรรทดั ท่ี 2 รวมไฟลไ์ ลบราร่ี Adafruit_GFX.h เขา้ มาในโคด้ โปรแกรม - บรรทดั ที่ 3 รวมไฟลไ์ ลบรารี่ Adafruit_SSD1306.h เขา้ มาในโคด้ โปรแกรม - บรรทดั ที่ 4 กาหนดช่ือเรียกโมดูลจอวา่ OLED - บรรทดั ที่ 5-62 ตวั แปรท่ีใชเ้ ก็บรูปภาพ - บรรทดั ท่ี 65 ประกาศเร่ิมใชง้ านไลบราร่ีพร้อมระบุแอดเดรสจอ OLED - บรรทดั ที่ 66 ลา้ งขอ้ มูลที่แสดงผลหนา้ จอ - บรรทดั ที่ 67 วาดรูปภาพจากตวั แปรเกบ็ รูปภาพ - บรรทดั ที่ 68 ส่งั ใหแ้ สดงผล ทดลองการทางาน 1. ทดลองดว้ ยวงจรจริง 2. ทดลองเปลี่ยนรูปภาพในการแสดงผล 9. สรุปผลการปฏบิ ตั งิ าน
274 เรียนรู้และลองเล่น Arduino เบ้ืองตน้ [ครูประภาส สุวรรณเพชร] 10. งานทม่ี อบหมาย 1. เขียนโปรแกรมแสดงรูปภาพ (เป็ นรูปภาพท่ีเลือกเองตามตอ้ งการ) พร้อมแสดงขอ้ ความ ประกอบและเวลาท่ีบอร์ดเปิ ดใชง้ านผา่ นมา (หน่วยเป็นวนิ าที) วงจรท่ีใชท้ ดลองเป็นดงั รูป ARDUINO VCC VCC A4(SDA) A5(SCL) VCC GND SCL SDA GND รูปท่ี 4.20-21 วงจรที่ใชบ้ อร์ด Arduino ในการทดลอง
ใบงานท่ี 4.22 การประยกุ ตก์ ารแสดงผลท่ี LCD 4 bit กบั เซนเซอร์ต่าง ๆ 275 ใบงานที่ 4.22 การประยุกต์การแสดงผลที่ LCD 4 bit กบั เซนเซอร์ต่าง ๆ 1. จุดประสงค์ทว่ั ไป เพ่ือใหส้ ามารถประยกุ ตก์ ารแสดงผลที่ LCD 4 bit กบั เซนเซอร์ตา่ ง ๆ ได้ 2. จุดประสงค์เชิงพฤติกรรม 1. บอกวธิ ีประยกุ ตก์ ารแสดงผลท่ี LCD 4 bit กบั เซนเซอร์ตา่ ง ๆ ได้ 2. บอกข้นั ตอนการต่อวงจรเพ่ือทดลองบนบอร์ดทดลองได้ 3. ทดสอบการทางานของบอร์ด Arduino ได้ 4. ปฏิบตั ิงานตามใบงานเสร็จทนั เวลาท่ีกาหนด 3. เคร่ืองมือและอปุ กรณ์ 1. บอร์ดทดลอง Breadboard 830 Point 1 แผน่ 2. อุปกรณ์อิเล็กทรอนิกส์ประกอบดว้ ย 4 ตวั 4 ตวั 2.1 Trim pot 10k 1 ตวั 2.5 LED 3mm 1 ตวั 2.6 ตวั ทา้ นทาน 220 1 ตวั 2.2 Potentiometer 10k 1 ตวั 2.7 ตวั ทา้ นทาน 4.7k 2.8 ตวั ทา้ นทาน 10k 1 เส้น 2.3 Thermistor NTC 10k 1 ตวั 1 ชุด 3.5 สายเช่ือมตอ่ USB (Mini) 1 เคร่ือง 2.4 IC DS18B20 1 ตวั 3.6 สายเช่ือมต่อวงจร 3.7 คอมพิวเตอร์ 3. อุปกรณ์ร่วมอ่ืน ๆ 3.1 บอร์ด Arduino Nano 3.0 1 ตวั 3.2 LCD ชนิดตวั อกั ษร 16×2 1 ตวั 3.3 โมดูลวดั อุณหภูมิ DHT22 1 ตวั 3.4 โมดูลอลั ตร้าโซนิค HC-SR04 1 ตวั 4. ลาดบั ข้นั การปฏบิ ตั ิงาน 1. ศึกษาจุดประสงคท์ ว่ั ไป จุดประสงคเ์ ชิงพฤติกรรมและทฤษฎีพ้นื ฐานที่เกี่ยวขอ้ ง 2. ดาเนินการต่อวงจรลงบอร์ดทดลองตามวงจรที่กาหนด 3. เขียนโปรแกรมควบคุมและทดสอบการทางานของวงจร 4. สรุปผลการปฏิบตั ิงาน
276 เรียนรู้และลองเล่น Arduino เบ้ืองตน้ [ครูประภาส สุวรรณเพชร] 5. ทฤษฎพี ืน้ ฐาน การประยุกตใ์ ชง้ านในใบงานน้ีเป็ นการเปลี่ยนเป้าหมายการแสดงผลจากเดิมในใบงานท่ี 4.6, 4.7, 4.8, 4.9 และ 4.10 ท่ีเป็ นการอ่านค่าจากเซนเซอร์แบบต่าง ๆ แลว้ นาผลมาคานวณ (หรือนามาใช้ได้ เลยในบางใบงาน) ไปแสดงผลผ่านทางจอคอมพิวเตอร์ผ่านทางการส่ือสารทางพอร์ตอนุกรมซ่ึงการ ดาเนินการดังกล่าวเป็ นการเขียนโค้ดโปรแกรมเพื่อใช้ทดสอบผลการทางานกบั เซนเซอร์ต่าง ๆ ใน เบ้ืองตน้ ซ่ึงไม่ตอ้ งต่อตวั แสดงผลอ่ืน ๆ สาหรับใบงานน้ีเป็ นการเปลี่ยนเป้าหมายจากการแสดงผลจาก จอคอมพิวเตอร์มาเป็นจอ LCD ชนิดตวั อกั ษรที่ต่อเช่ือมแบบ 4 บิต 6. วงจรทใ่ี ช้ทดลอง วงจรเพอื่ ใชท้ ดลองในใบงานเป็นการทดลองจากเซนเซอร์ท้งั 5 แบบโดยแสดงผลท่ีจอ LCD ชนิดตวั อกั ษรท่ีเช่ือมต่อแบบ 4 บิต วงจรที่ใชท้ ดลองมีดงั น้ี 1. วงจรที่ใชเ้ ซนเซอร์เป็นตวั ตา้ นทานปรับคา่ ได้ 2. วงจรท่ีใชเ้ ซนเซอร์เป็นเทอร์มิสเตอร์วดั อุณหภูมิที่อ่านค่ามาเป็นแรงดนั แอนาลอก 3. วงจรที่ใชเ้ ซนเซอร์เป็น DHT22 4. วงจรที่ใชเ้ ซนเซอร์เป็น Ultrasonic 5. วงจรที่ใชเ้ ซนเซอร์เป็น DS18B20 วงจรทใี่ ช้เซนเซอร์เป็ นตัวต้านทานปรับค่าได้ D1 VCC Peripheral circuit 1N5819 CPU circuit R1 7,20 ATMEGA328 10k VCC SW1 1 RST AVCC C1 D2 4 11 D4 0.1uF D3 5 12 D5 D4 6 13 D6 D5 11 14 D7 USB to UART (TTL Level) R2,R3 3 E R/W RS Vo VCC GND 1k 2 6 54321 DTR RXD D1(TXD) D6 12 VCC TXD D0(RXD) D7 13 10k +5V GND 3V3 VCC X1 9 XTAL1 A5 28 10k 16MHz 10 XTAL2 C2,C3 GND 22pF 8,22 รูปท่ี 4.22-1 วงจรที่ใชไ้ อซี AVR ในการทดลอง
รูปท่ี 4.22-4 การต่อวงจรทดลองในโปรแกรมจาลองการทางาน รูปที่ 4.22-3 การตอ่ ลงบอร์ดทดลอง ABCDE F GH I J การต่อวงจรไมโครคอนโทรลเลอร์ Arduino ที่ใชบ้ อร์ดโมดูล Arduino สาเร็จรูปลงบอร์ดทดลอง รูปที่ 4.22-2 วงจรที่ใชบ้ อร์ด Arduino ในการทดลอง ใบงานที่ 4.22 การประยกุ ตก์ ารแสดงผลที่ LCD 4 bit กบั เซนเซอร์ตา่ ง ๆ 277 การตอ่ วงจรเพอ่ื ทดลองดว้ ยการจาลองการทางานดว้ ยโปรแกรม Proteus 1 D13 D12 1 D11 กรณีที่ใช้ Arduino ในการทดลอง ต่อวงจรดงั รูป 3V3 D10 REF D9 VCC ARDUINO A0 D8 5 5 A1 D7 5V D2 11 D4 A2 D6 D3 12 D5 A3 D5 D4 13 D6 A4 D4 D5 14 D7 A5 D3 10 E R/W RS Vo VCC GND 10 A6 D2 654321 A7 D6 VCC 5V GND D7 RST RST 10k GND 15 VIN D0 VCC D1 15 20 20 A5 GND 25 25 30 30 35 35 10k 40 40 45 45 50 50 55 55 60 60 ABCDE F GH I J
278 เรียนรู้และลองเลน่ Arduino เบ้ืองตน้ [ครูประภาส สุวรรณเพชร] การทดลองท่ี 1 เขียนโปรแกรมแสดงค่าที่อา่ นไดจ้ ากโพเทนธิโอมิเตอร์ ผงั งาน จากโจทยส์ ามารถเขียนเป็นผงั งานไดด้ งั น้ี START กา นดค่าเริม่ ต้นต่าง ๆ อ่านค่าจาก POT แสดงค่าทอี่ ่านได้ แปลงผงั งานเป็ นโปรแกรม จากผงั งานสามารถเขียนเป็นโคด้ โปรแกรมควบคุม Arduino 1 #include <LiquidCrystal.h> // set up the LCD's connection pins 2 /* The circuit: // set LCD size 3 * LCD RS pin to digital pin 7 4 * LCD E pin to digital pin 6 5 * LCD D4 pin to digital pin 2 6 * LCD D5 pin to digital pin 3 7 * LCD D6 pin to digital pin 4 8 * LCD D7 pin to digital pin 5 9 * LCD R/W pin to ground 10 */ 11 #define POT 5 12 LiquidCrystal lcd(7,6,2,3,4,5); 13 void setup() 14 { 15 lcd.begin(16, 2); 16 lcd.print(\"Analog Read :\"); 17 } 18 void loop() 19 { 20 int adc=analogRead(POT); 21 lcd.setCursor(8,1); 22 lcd.print(adc); 23 delay(100); 24 } ทดลองการทางาน 1. จาลองการทางานดว้ ยโปรแกรม Proteus 2. ทดลองดว้ ยวงจรจริง 3. ทดลองเปลี่ยนแปลงคา่ โพเทนธิโอมิเตอร์แลว้ สงั เกตผล
ใบงานที่ 4.22 การประยกุ ตก์ ารแสดงผลท่ี LCD 4 bit กบั เซนเซอร์ต่าง ๆ 279 วงจรทใ่ี ช้เซนเซอร์เป็ นเทอร์มสิ เตอร์วดั อณุ ภูมิ D1 VCC Peripheral circuit 1N5819 CPU circuit R1 7,20 ATMEGA328 10k VCC SW1 1 RST AVCC D2 4 C1 D3 5 11 D4 0.1uF D4 6 12 D5 D5 11 13 D6 14 D7 USB to UART (TTL Level) R2,R3 3 R/W RS Vo VCC GND 1k 2 E 54321 DTR 6 RXD D1(TXD) D6 12 TXD D0(RXD) D7 13 VCC +5V 10k GND 3V3 VCC X1 9 XTAL1 A5 28 R4 16MHz 10 XTAL2 10k GND T NTC Thermistor C2,C3 8,22 10k 22pF รูปท่ี 4.22-5 วงจรที่ใชไ้ อซี AVR ในการทดลอง กรณีที่ใช้ Arduino ในการทดลอง ต่อวงจรดงั รูป VCC ARDUINO 5V D2 11 D4 R/W RS Vo VCC GND D3 12 D5 54321 D4 13 D6 D5 14 D7 D6 E D7 6 A5 VCC GND 10k VCC R1 NTC 10k T1h0ekrmistor T รูปท่ี 4.22-6 วงจรท่ีใชบ้ อร์ด 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 ABCDE D13 3V3 REF A0 A1 A2 A3 A4 A5 A6 A7 5V RST GND VIN 1 5 10 15 รูปที่ 4.22-7 การต่อลงบอร์ดทดลอง
280 เรียนรู้และลองเลน่ Arduino เบ้ืองตน้ [ครูประภาส สุวรรณเพชร] การตอ่ วงจรเพ่อื ทดลองดว้ ยการจาลองการทางานดว้ ยโปรแกรม Proteus รูปที่ 4.22-8 การต่อวงจรทดลองในโปรแกรมจาลองการทางาน การทดลองที่ 2 เขียนโปรแกรมแสดงผลท่ีอ่านค่าจากเทอร์มิสเตอร์แลว้ คานวนเป็นอุณหภูมิ ผงั งาน จากโจทยส์ ามารถเขียนเป็นผงั งานไดด้ งั น้ี START กา นดคา่ เริม่ ต้นต่าง ๆ อ่านคา่ จาก NTC คานวณ แสดงผล แปลงผงั งานเป็ นโปรแกรม จากผงั งานสามารถเขียนเป็นโคด้ โปรแกรมควบคุม Arduino 1 #include <LiquidCrystal.h> 2 /* The circuit: 3 * LCD RS pin to digital pin 7 4 * LCD E pin to digital pin 6 5 * LCD D4 pin to digital pin 2 6 * LCD D5 pin to digital pin 3 7 * LCD D6 pin to digital pin 4 8 * LCD D7 pin to digital pin 5 9 * LCD R/W pin to ground 10 */ 11 #define NTC A5 12 double Thermistor(int RawADC) ; 13 LiquidCrystal lcd(7,6,2,3,4,5); // set up the LCD's connection pins 14 void setup() 15 { 16 lcd.begin(16, 2); // set LCD size 17 lcd.print(\"Temperature is:\"); 18 lcd.setCursor(13,1); 19 lcd.print(\"'C\"); 20 } 21 void loop() 22 { 23 float Temp=Thermistor(analogRead(NTC)); 24 lcd.setCursor(7,1); 25 lcd.print(Temp);
ใบงานท่ี 4.22 การประยกุ ตก์ ารแสดงผลที่ LCD 4 bit กบั เซนเซอร์ตา่ ง ๆ 281 26 delay(500); 27 } 28 double Thermistor(int RawADC) 29 { 30 double Cal; 31 Cal = log(10000.0/((1024.0/RawADC-1))); 32 Cal = 1 / (0.001129148 + (0.000234125 + (0.0000000876741 * Cal * Cal))* Cal); 33 Cal = Cal - 273.15; // Convert Kelvin to Celcius 34 return Cal; 35 } ทดลองการทางาน 1. จาลองการทางานดว้ ยโปรแกรม Proteus 2. ทดลองดว้ ยวงจรจริง 3. ทดลองเพมิ่ /ลดอุณหภูมิที่เทอร์มิสเตอร์สงั เกตผล วงจรทใ่ี ช้เซนเซอร์เป็ น DHT22 D1 VCC Peripheral circuit 1N5819 CPU circuit R1 7,20 ATMEGA328 10k VCC SW1 1 RST AVCC D2 4 C1 D3 5 11 D4 0.1uF D4 6 12 D5 D5 11 13 D6 14 D7 USB to UART (TTL Level) R2,R3 3 R/W RS Vo VCC GND 1k 2 E 54321 DTR 6 RXD D1(TXD) D6 12 TXD D0(RXD) D7 13 VCC +5V 10k GND 3V3 VCC X1 R4 DHT22 16MHz 4k7 9 XTAL1 D8 14 10 XTAL2 DATA C2,C3 GND 22pF 8,22 รูปท่ี 4.22-9 วงจรที่ใชไ้ อซี AVR ในการทดลอง กรณีที่ใช้ Arduino ในการทดลอง ตอ่ วงจรดงั รูป VCC ARDUINO 5V D2 11 D4 D3 12 D5 VCC D4 13 D6 10k D5 14 D7 E R/W RS Vo VCC GND 654321 D6 D7 VCC R1 DHT22 4k7 D8 GND DATA รูปที่ 4.22-10 วงจรท่ีใชบ้ อร์ด Arduino ในการทดลอง
F GH I J282 เรียนรู้และลองเลน่ 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การต่อวงจรไมโครคอนโทรลเลอร์ Arduino ท่ีใชบ้ อร์ดโมดูล Arduino สาเร็จรูปลงบอร์ดทดลอง D10 D9 รูปที่ 4.22-11 การตอ่ ลงบอร์ดทดลอง D8 5การตอ่ วงจรเพือ่ ทดลองดว้ ยการจาลองการทางานดว้ ยโปรแกรม Proteus D7 D6รูปท่ี 4.22-12 การต่อวงจรทดลองในโปรแกรมจาลองการทางาน D5การทดลองท่ี 3 เขียนโปรแกรมแสดงอุณภูมิและความช้ืนจาก DHT22 D4ผงั งาน จากโจทยส์ ามารถเขียนเป็นผงั งานไดด้ งั น้ี D3 10 D2START กา นดคา่ เริม่ ต้นต่าง ๆ GNDอ่านคา่ จากโมดลู DHT22 RST แสดงผล D0 D1 15แปลงผงั งานเป็ นโปรแกรม จากผงั งานสามารถเขียนเป็นโคด้ โปรแกรมควบคุม Arduino ABCDE1 #include <LiquidCrystal.h> ABCDE 1 D132 /* The circuit: 3 * LCD RS pin to digital pin 7 3V34 * LCD E pin to digital pin 6 REF5 * LCD D4 pin to digital pin 2 A06 * LCD D5 pin to digital pin 3 5 A17 * LCD D6 pin to digital pin 4 A28 * LCD D7 pin to digital pin 5 A3 A4 A5 10 A6 A7 5V RST GND 15 VIN
ใบงานท่ี 4.22 การประยกุ ตก์ ารแสดงผลท่ี LCD 4 bit กบั เซนเซอร์ตา่ ง ๆ 283 9 * LCD R/W pin to ground 10 */ 11 #include <DHT.h> 12 #define DHTPIN 8 // pin to connect DHT22 13 #define DHTTYPE DHT22 // Type of use DHT11,DHT21,DHT22 14 DHT dht(DHTPIN, DHTTYPE); 15 LiquidCrystal lcd(7,6,2,3,4,5); // set up the LCD's connection pins 16 void setup() 17 { 18 lcd.begin(16, 2); // set LCD size 19 lcd.print(\"Humidity:\"); 20 lcd.setCursor(0,1); 21 lcd.print(\"Temp:\"); 22 dht.begin(); 23 } 24 void loop() 25 { 26 delay(2000); 27 float h = dht.readHumidity(); 28 float t = dht.readTemperature(); 29 if (isnan(h) || isnan(t)) 30 { 31 lcd.clear(); 32 lcd.print(\"Failed read DHT\"); 33 return; 34 } 35 lcd.setCursor(10,0); 36 lcd.print(h); 37 lcd.setCursor(10,1); 38 lcd.print(t); 39 } ทดลองการทางาน 1. จาลองการทางานดว้ ยโปรแกรม Proteus 2. ทดลองดว้ ยวงจรจริง 3. ทดลองเพมิ่ /ลดอุณหภูมิและความช้ืน สงั เกตผล วงจรทใี่ ช้เซนเซอร์เป็ น Ultasonic D1 VCC Peripheral circuit 1N5819 CPU circuit R1 10k 7,20 ATMEGA328 VCC SW1 11 D4 1 RST AVCC D2 4 12 D5 C1 D3 5 13 D6 0.1uF D4 6 14 D7 D5 11 E USB to UART (TTL Level) R2,R3 3 D6 12 6 R/W RS Vo VCC GND 1k 2 D7 13 54321 DTR RXD D1(TXD) VCC TXD D0(RXD) 10k +5V GND 3V3 X1 9 XTAL1 D9 15 VCC HC-SR04 16MHz 10 XTAL2 D8 14 1 VCC 2 Trig C2,C3 GND 3 Echo 22pF 4 GND 8,22 รูปที่ 4.22-13 วงจรที่ใชไ้ อซี AVR ในการทดลอง
รูปที่ 4.22-16 การตอ่ วงจรทดลองในโปรแกรมจาลองการทางาน รูปท่ี 4.22-15 การต่อลงบอร์ดทดลอง ABCDE F GH I J รูปท่ี 4.22-14 วงจรท่ีใชบ้ อร์ด Arduino ในการทดลอง VCC กรณีท่ีใช้ Arduino ในการทดลอง ตอ่ วงจรดงั รูป 284 เรียนรู้และลองเลน่ Arduino เบ้ืองตน้ [ครูประภาส สุวรรณเพชร] การต่อวงจรเพอ่ื ทดลองดว้ ยการจาลองการทางานดว้ ยโปรแกรม Proteus 1 D13 D12 1 การตอ่ วงจรไมโครคอนโทรลเลอร์ Arduino ที่ใชบ้ อร์ดโมดูล Arduino สาเร็จรูปลงบอร์ดทดลอง 5V D11 3V3 D10 D9 REF D9 D8 A0 D8 5 5 A1 D7 GND A2 D6 A3 D5 A4 D4 A5 D3 10 10 A6 D2 A7 5V GND RST RST GND 15 VIN D0 D1 15 20 20 E ARDUINO 6 HC-SR04 HC-SR04 D6 D2 D3 VCC D7 D4 Trig D5 Echo 25 25 GND 11 D4 12 D5 13 D6 14 D7 30 30 35 35 R/W RS Vo VCC GND 54321 40 40 VCC 1 VCC 2 Trig 3 Echo 4 GND 45 45 50 50 55 55 VCC 10k 60 60 ABCDE F GH I J
ใบงานท่ี 4.22 การประยกุ ตก์ ารแสดงผลท่ี LCD 4 bit กบั เซนเซอร์ตา่ ง ๆ 285 การทดลองที่ 4 เขียนโปรแกรมวดั ระยะดว้ ย Ultrasonic แสดงผลดว้ ยจอ LCD ผงั งาน จากโจทยส์ ามารถเขียนเป็นผงั งานไดด้ งั น้ี START กา นดคา่ เริ่มต้นต่าง ๆ อ่านคา่ จากโมดลู Ultrasonic แสดงผล แปลงผงั งานเป็ นโปรแกรม จากผงั งานสามารถเขียนเป็นโคด้ โปรแกรมควบคุม Arduino 1 #include <LiquidCrystal.h> 2 /* The circuit: 3 * LCD RS pin to digital pin 7 4 * LCD E pin to digital pin 6 5 * LCD D4 pin to digital pin 2 6 * LCD D5 pin to digital pin 3 7 * LCD D6 pin to digital pin 4 8 * LCD D7 pin to digital pin 5 9 * LCD R/W pin to ground 10 */ 11 #include <Ultrasonic.h> 12 Ultrasonic ultrasonic(9,8); // (Trig PIN,Echo PIN) 13 LiquidCrystal lcd(7,6,2,3,4,5); // set up the LCD's connection pins 14 void setup() 15 { 16 lcd.begin(16, 2); // set LCD size 17 lcd.print(\"Length is :\"); 18 lcd.setCursor(13,1); 19 lcd.print(\"cm\"); 20 } 21 void loop() 22 { 23 delay(500); 24 lcd.setCursor(7,1); 25 float L=ultrasonic.Ranging(CM); 26 lcd.print(L); 27 } ทดลองการทางาน 1. จาลองการทางานดว้ ยโปรแกรม Proteus 2. ทดลองดว้ ยวงจรจริง 3. ทดลองเปล่ียนแปลงรูปแบบการแสดงผล
286 เรียนรู้และลองเล่น Arduino เบ้ืองตน้ [ครูประภาส สุวรรณเพชร] วงจรทใ่ี ช้เซนเซอร์เป็ น DS18B20 D1 VCC Peripheral circuit 1N5819 CPU circuit R1 10k 7,20 ATMEGA328 VCC SW1 11 D4 1 RST AVCC D2 4 12 D5 C1 D3 5 13 D6 0.1uF D4 6 14 D7 D5 11 E USB to UART (TTL Level) R2,R3 3 D6 12 6 R/W RS Vo VCC GND 1k 2 D7 13 54321 DTR RXD D1(TXD) VCC TXD D0(RXD) +5V GND R4 10k 3V3 4.7k 4R.75k VCC VCC 3 DS18B20 3 DS18B20 2 DQ VCC D8 14 2 VCC D9 15 GND DQ X1 1 GND 16MHz 9 XTAL1 10 XTAL2 1 C2,C3 GND 22pF 8,22 รูปท่ี 4.22-17 วงจรที่ใชไ้ อซี AVR ในการทดลอง กรณีท่ีใช้ Arduino ในการทดลอง ต่อวงจรดงั รูป VCC ARDUINO 5V D2 11 D4 R/W RS Vo VCC GND D3 12 D5 54321 D4 13 D6 D5 14 D7 D6 E D7 6 D8 VCC D9 GND 10k R1 VCC R2 VCC 4.7k 4.7k 3 DS18B20 3 DS18B20 2 VCC 2 DQ VCC DQ GND GND 1 1 รูปที่ 4.22-18 วงจรท่ีใชบ้ อร์ด 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 D S1 8 D S1 8 ABCDE D13 B 20 B 20 3V3 REF A0 A1 A2 A3 A4 A5 A6 A7 5V RST GND VIN 1 5 10 15 รูปที่ 4.22-19 การต่อลงบอร์ดทดลอง
ใบงานท่ี 4.22 การประยกุ ตก์ ารแสดงผลท่ี LCD 4 bit กบั เซนเซอร์ตา่ ง ๆ 287 การต่อวงจรเพอ่ื ทดลองดว้ ยการจาลองการทางานดว้ ยโปรแกรม Proteus รูปที่ 4.22-20 การต่อวงจรทดลองในโปรแกรมจาลองการทางาน การทดลองท่ี 5 เขียนโปรแกรมแสดงค่าอุณหภูมิที่วดั จากไอซี DS18B20 จานวน 2 ตวั โดยแสดงผลที่จอ LCD ที่เชื่อมตอ่ แบบ 4 บิต ผงั งาน จากโจทยส์ ามารถเขียนเป็นผงั งานไดด้ งั น้ี START กา นดค่าเริ่มต้นต่าง ๆ อ่านคา่ จากไอซี แสดงค่าทอ่ี า่ นได้ แปลงผงั งานเป็ นโปรแกรม จากผงั งานสามารถเขียนเป็นโคด้ โปรแกรมควบคุม Arduino 1 #include <LiquidCrystal.h> 2 #include <OneWire.h> 3 #include <DallasTemperature.h> 4 OneWire ds_1(8); //sensor 1 on pin D8 5 OneWire ds_2(9); //sensor 2 on pin D9 6 DallasTemperature sensor_1(&ds_1); 7 DallasTemperature sensor_2(&ds_2); 8 float temp_1; //variable keep temp value 9 float temp_2; //variable keep temp value 10 void temp_read(); 11 LiquidCrystal lcd(7,6,2,3,4,5); // 7->RS,6->E,2->D4,3->D5,4->D6,5->D7 12 void setup() 13 { 14 lcd.begin(16, 2); // set LCD size 15 lcd.print(\"Sensor1: 'C\"); 16 lcd.setCursor(0,1); 17 lcd.print(\"Sensor2: 'C\"); 18 sensor_1.begin(); 19 sensor_2.begin(); 20 } 21 void loop() 22 {
288 เรียนรู้และลองเลน่ Arduino เบ้ืองตน้ [ครูประภาส สุวรรณเพชร] 23 temp_read(); 24 lcd.setCursor(10,0); 25 lcd.print(temp_1,1); 26 lcd.setCursor(10,1); 27 lcd.print(temp_2,1); 28 delay(500); 29 } 30 void temp_read() 31 { 32 sensor_1.requestTemperatures(); 33 sensor_2.requestTemperatures(); 34 //------------------------------------------ 35 temp_1 = sensor_1.getTempCByIndex(0); //read temp from sensor_1 36 temp_2 = sensor_2.getTempCByIndex(0); //read temp from sensor_2 37 } ทดลองการทางาน 1. จาลองการทางานดว้ ยโปรแกรม Proteus (ใช้ Arduino IDE v. 1.6.5 ในการคอมไพล)์ 2. ทดลองดว้ ยวงจรจริง 3. ทดลองใหอ้ ุณหภูมิท่ีตวั ไอซีเปล่ียนแปลงแลว้ สงั เกตผล 9. สรุปผลการปฏบิ ัติงาน 10. งานทม่ี อบ มาย 1. เขียนโปรแกรมที่ใช้เซนเซอร์วดั อุณหภูมิและความช้ืน DHT22 โดยใช้ค่าอุณภูมิและ ความช้ืนเป็นตวั ควบคุมการทางานของ LED พร้อมท้งั แสดงผลท่ีจอ LCD VCC ARDUINO 11 D4 5V 12 D5 D2 13 D6 D3 14 D7 D4 D5 D6 E R/W RS Vo VCC GND D7 6 54321 D10 D11 R1-R4 220 VCC D12 10k D13 LED1-LED4 VCC R5 DATA DHT22 D8 4k7 GND รูปที่ 4.22-21 วงจรที่ใชท้ ดลอง
ใบงานที่ 4.23 การประยกุ ตก์ ารแสดงผลท่ี LCD I2C กบั เซนเซอร์ตา่ ง ๆ 289 ใบงานท่ี 4.23 การประยุกต์การแสดงผลท่ี LCD I2C กบั เซนเซอร์ต่าง ๆ 1. จุดประสงค์ทว่ั ไป เพอื่ ใหส้ ามารถประยกุ ตก์ ารแสดงผลท่ี LCD I2C กบั เซนเซอร์ตา่ ง ๆ ได้ 2. จุดประสงค์เชิงพฤติกรรม 1. บอกวธิ ีประยกุ ตก์ ารแสดงผลท่ี LCD I2C กบั เซนเซอร์ต่าง ๆ ได้ 2. บอกข้นั ตอนการต่อวงจรเพ่ือทดลองบนบอร์ดทดลองได้ 3. ทดสอบการทางานของบอร์ด Arduino ได้ 4. ปฏิบตั ิงานตามใบงานเสร็จทนั เวลาที่กาหนด 3. เคร่ืองมือและอปุ กรณ์ 1. บอร์ดทดลอง Breadboard 830 Point 1 แผน่ 2. อุปกรณ์อิเลก็ ทรอนิกส์ประกอบดว้ ย 2.1 Potentiometer 10k 1 ตวั 2.5 ตวั ทา้ นทาน 220 ohm 4 ตวั 2.6 ตวั ทา้ นทาน 4.7k 1 ตวั 2.2 Thermistor NTC 10k 1 ตวั 2.7 ตวั ทา้ นทาน 10k 1 ตวั 2.3 IC DS18B20 1 ตวั 2.4 LED 3mm 4 ตวั 3. อุปกรณ์ร่วมอื่น ๆ 3.1 บอร์ด Arduino Nano 3.0 1 ตวั 3.5 โมดูลอลั ตร้าโซนิค HC-SR04 1 ตวั 3.2 LCD ชนิดตวั อกั ษร 16x2 1 ตวั 3.6 สายเชื่อมต่อ USB (Mini) 1 เส้น 3.3 โมดูล I2C สาหรับ LCD 1 ตวั 3.7 สายเช่ือมตอ่ วงจร 1 ชุด 3.4 โมดูลวดั อุณหภูมิ DHT22 1 ตวั 3.8 คอมพิวเตอร์ 1 เคร่ือง 4. ลาดับข้นั การปฏบิ ตั งิ าน 1. ศึกษาจุดประสงคท์ วั่ ไป จุดประสงคเ์ ชิงพฤติกรรมและทฤษฎีพ้นื ฐานท่ีเก่ียวขอ้ ง 2. ดาเนินการตอ่ วงจรลงบอร์ดทดลองตามวงจรท่ีกาหนด 3. เขียนโปรแกรมควบคุมและทดสอบการทางานของวงจร 4. สรุปผลการปฏิบตั ิงาน
290 เรียนรู้และลองเลน่ Arduino เบ้ืองตน้ [ครูประภาส สุวรรณเพชร] 5. ทฤษฎพี ืน้ ฐาน การประยุกต์ใช้งานในใบงานน้ีเป็ นการเปล่ียนเป้าหมายการแสดงผลจากเดิมในใบงานท่ี 4.6, 4.7, 4.8, 4.9 และ 4.10 ที่เป็ นการอ่านค่าจากเซนเซอร์แบบต่าง ๆ แลว้ นาผลมาคานวณ (หรือนามาใช้ได้ เลยในบางใบงาน) ไปแสดงผลผ่านทางจอคอมพิวเตอร์ผ่านทางการส่ือสารทางพอร์ตอนุกรมซ่ึงการ ดาเนินการดงั กล่าวเป็ นการเขียนโค้ดโปรแกรมเพื่อใช้ทดสอบผลการทางานกบั เซนเซอร์ต่าง ๆ ใน เบ้ืองตน้ ซ่ึงไม่ตอ้ งต่อตวั แสดงผลอื่น ๆ สาหรับใบงานน้ีเป็ นการเปลี่ยนเป้าหมายจากการแสดงผลจาก จอคอมพวิ เตอร์มาเป็นจอ LCD ชนิดตวั อกั ษรท่ีต่อเช่ือมแบบ I2C ผา่ นทางโมดูลสื่อสาร 6. วงจรทใี่ ช้ทดลอง วงจรเพื่อใชท้ ดลองในใบงานเป็นการทดลองจากเซนเซอร์ท้งั 5 แบบโดยแสดงผลท่ีจอ LCD ชนิดตวั อกั ษรท่ีเชื่อมต่อแบบ 4 บิต วงจรที่ใชท้ ดลองมีดงั น้ี 1. วงจรท่ีใชเ้ ซนเซอร์เป็นตวั ตา้ นทานปรับคา่ ได้ 2. วงจรท่ีใชเ้ ซนเซอร์เป็นเทอร์มิสเตอร์วดั อุณหภูมิที่อ่านค่ามาเป็นแรงดนั แอนาลอก 3. วงจรที่ใชเ้ ซนเซอร์เป็น DHT22 4. วงจรที่ใชเ้ ซนเซอร์เป็น Ultrasonic 5. วงจรท่ีใชเ้ ซนเซอร์เป็น DS18B20 วงจรทใ่ี ช้เซนเซอร์เป็ นตวั ต้านทานปรับค่าได้ D1 VCC Peripheral circuit 1N5819 CPU circuit VCC VCC R1 SDA 10k 7,20 ATMEGA328 SCL VCC GND 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 X1 9 XTAL1 A3 26 VCC 16MHz 10 XTAL2 10k C2,C3 GND 22pF 8,22 รูปท่ี 4.23-1 วงจรท่ีใชไ้ อซี AVR ในการทดลอง
รูปท่ี 4.23-4 การต่อวงจรทดลองในโปรแกรมจาลองการทางาน รูปที่ 4.23-3 การต่อลงบอร์ดทดลอง ABCDE F GH I J VCC ARDUINO กรณีท่ีใช้ Arduino ในการทดลอง ต่อวงจรดงั รูป การตอ่ วงจรเพ่ือทดลองดว้ ยการจาลองการทางานดว้ ยโปรแกรม Proteus 1 D13 D12 1 VCC VCC การทดลองที่ 1 เขียนโปรแกรมแสดงคา่ ที่อ่านไดจ้ ากโพเทนธิโอมิเตอร์ D11 A3 10k ผงั งาน จากโจทยส์ ามารถเขียนเป็นผงั งานไดด้ งั น้ี 3V3 D10 REF D9 GND A0 D8 5 5 A1 D7 รูปที่ 4.23-2 วงจรท่ีใชบ้ อร์ด Arduino ในการทดลอง A2 D6 การตอ่ วงจรไมโครคอนโทรลเลอร์ Arduino ที่ใชบ้ อร์ดโมดูล Arduino สาเร็จรูปลงบอร์ดทดลอง A3 D5 A4 D4 A5 D3 10 10 A6 D2 A7 5V GND RST RST GND 15 VIN D0 D1 15 20 20 A4(SDA) ใบงานท่ี 4.23 การประยกุ ตก์ ารแสดงผลท่ี LCD I2C กบั เซนเซอร์ตา่ ง ๆ 291 A5(SCL) 25 25 GND VCC SDA SCL 30 30 GND VCC SDA SCL 35 35 40 40 45 45 50 50 55 55 60 60 ABCDE F GH I J
292 เรียนรู้และลองเลน่ Arduino เบ้ืองตน้ [ครูประภาส สุวรรณเพชร] START กา นดคา่ เริ่มต้นต่าง ๆ อ่านค่าจาก POT แสดงค่าท่ีอา่ นได้ แปลงผงั งานเป็ นโปรแกรม จากผงั งานสามารถเขียนเป็นโคด้ โปรแกรมควบคุม Arduino 1 #include <Wire.h> 2 #include <LiquidCrystal_I2C.h> 3 #define POT 3 4 LiquidCrystal_I2C lcd(0x3F,16,2); //0x27 for PCF8574 and 0x3F for PCF8574A 5 void setup() 6{ 7 lcd.init(); 8 lcd.backlight(); // set LCD size 9 lcd.begin(16, 2); 10 lcd.print(\"Analog Read :\"); 11 } 12 void loop() 13 { 14 int adc=analogRead(POT); 15 lcd.setCursor(8,1); 16 lcd.print(adc); 17 delay(100); 18 } ทดลองการทางาน 1. จาลองการทางานดว้ ยโปรแกรม Proteus 2. ทดลองดว้ ยวงจรจริง 3. ทดลองเปล่ียนแปลงค่าโพเทนธิโอมิเตอร์แลว้ สงั เกตผล วงจรทใ่ี ช้เซนเซอร์เป็ นเทอร์มสิ เตอร์วดั อณุ ภูมิ D1 VCC Peripheral circuit 1N5819 CPU circuit VCC VCC R1 SDA 10k 7,20 ATMEGA328 SCL VCC GND 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 1R04k 16MHz 10 XTAL2 T GND NTC C2,C3 Thermistor 22pF 8,22 10k รูปท่ี 4.23-5 วงจรท่ีใชไ้ อซี AVR ในการทดลอง
รูปท่ี 4.23-8 การตอ่ วงจรทดลองในโปรแกรมจาลองการทางาน รูปที่ 4.23-7 การต่อลงบอร์ดทดลอง ABCDE F GH I J การต่อวงจรไมโครคอนโทรลเลอร์ Arduino ที่ใชบ้ อร์ดโมดูล Arduino สาเร็จรูปลงบอร์ดทดลอง รูปที่ 4.23-6 วงจรท่ีใชบ้ อร์ด Arduino ในการทดลอง ARDUINO กรณีท่ีใช้ Arduino ในการทดลอง ต่อวงจรดงั รูป การต่อวงจรเพอ่ื ทดลองดว้ ยการจาลองการทางานดว้ ยโปรแกรม Proteus 1 D13 D12 1 VCC VCC D11 3V3 D10 REF D9 A0 D8 5 5 A1 D7 A2 D6 A3 D5 A4 D4 A5 D3 10 10 A6 D2 A7 5V GND RST RST GND 15 VIN D0 D1 15 A3 A4(SDA) GND A5(SCL) 20 20 ใบงานที่ 4.23 การประยกุ ตก์ ารแสดงผลท่ี LCD I2C กบั เซนเซอร์ตา่ ง ๆ 293 25 25 GND VCC SDA SCL 30 30 R1 GND 10k VCC SDA T SCL VCC 35 35 NTC Thermistor 10k 40 40 45 45 50 50 55 55 60 60 ABCDE F GH I J
294 เรียนรู้และลองเลน่ Arduino เบ้ืองตน้ [ครูประภาส สุวรรณเพชร] การทดลองท่ี 2 เขียนโปรแกรมแสดงผลท่ีอา่ นคา่ จากเทอร์มิสเตอร์แลว้ คานวนเป็นอุณหภูมิ ผงั งาน จากโจทยส์ ามารถเขียนเป็นผงั งานไดด้ งั น้ี START กา นดค่าเริ่มต้นต่าง ๆ อ่านคา่ จาก NTC คานวณ แสดงผล แปลงผงั งานเป็ นโปรแกรม จากผงั งานสามารถเขียนเป็นโคด้ โปรแกรมควบคุม Arduino 1 #include <Wire.h> 2 #include <LiquidCrystal_I2C.h> 3 #define NTC A3 4 double Thermistor(int RawADC) ; 5 LiquidCrystal_I2C lcd(0x3F,16,2); // 0x27 for PCF8574 and 0x3F for PCF8574A 6 void setup() 7{ 8 lcd.init(); 9 lcd.backlight(); 10 lcd.begin(16, 2); // set LCD size 11 lcd.print(\"Temperature is:\"); 12 lcd.setCursor(13,1); 13 lcd.print(\"'C\"); 14 } 15 void loop() 16 { 17 float Temp=Thermistor(analogRead(NTC)); 18 lcd.setCursor(7,1); 19 lcd.print(Temp); 20 delay(500); 21 } 22 double Thermistor(int RawADC) 23 { 24 double Cal; 25 Cal = log(10000.0/((1024.0/RawADC-1))); 26 Cal = 1 / (0.001129148 + (0.000234125 + (0.0000000876741 * Cal * Cal))* Cal); 27 Cal = Cal - 273.15; // Convert Kelvin to Celcius 28 return Cal; 29 } ทดลองการทางาน 1. จาลองการทางานดว้ ยโปรแกรม Proteus 2. ทดลองดว้ ยวงจรจริง 3. ทดลองเพ่ิม/ลดอุณหภูมิท่ีเทอร์มิสเตอร์สงั เกตผล
Search
Read the Text Version
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
- 101
- 102
- 103
- 104
- 105
- 106
- 107
- 108
- 109
- 110
- 111
- 112
- 113
- 114
- 115
- 116
- 117
- 118
- 119
- 120
- 121
- 122
- 123
- 124
- 125
- 126
- 127
- 128
- 129
- 130
- 131
- 132
- 133
- 134
- 135
- 136
- 137
- 138
- 139
- 140
- 141
- 142
- 143
- 144
- 145
- 146
- 147
- 148
- 149
- 150
- 151
- 152
- 153
- 154
- 155
- 156
- 157
- 158
- 159
- 160
- 161
- 162
- 163
- 164
- 165
- 166
- 167
- 168
- 169
- 170
- 171
- 172
- 173
- 174
- 175
- 176
- 177
- 178
- 179
- 180
- 181
- 182
- 183
- 184
- 185
- 186
- 187
- 188
- 189
- 190
- 191
- 192
- 193
- 194
- 195
- 196
- 197
- 198
- 199
- 200
- 201
- 202
- 203
- 204
- 205
- 206
- 207
- 208
- 209
- 210
- 211
- 212
- 213
- 214
- 215
- 216
- 217
- 218
- 219
- 220
- 221
- 222
- 223
- 224
- 225
- 226
- 227
- 228
- 229
- 230
- 231
- 232
- 233
- 234
- 235
- 236
- 237
- 238
- 239
- 240
- 241
- 242
- 243
- 244
- 245
- 246
- 247
- 248
- 249
- 250
- 251
- 252
- 253
- 254
- 255
- 256
- 257
- 258
- 259
- 260
- 261
- 262
- 263
- 264
- 265
- 266
- 267
- 268
- 269
- 270
- 271
- 272
- 273
- 274
- 275
- 276
- 277
- 278
- 279
- 280
- 281
- 282
- 283
- 284
- 285
- 286
- 287
- 288
- 289
- 290
- 291
- 292
- 293
- 294
- 295
- 296
- 297
- 298
- 299
- 300
- 301
- 302
- 303
- 304
- 305
- 306
- 307
- 308
- 309
- 310
- 311
- 312
- 313
- 314
- 315
- 316
- 317
- 318
- 319
- 320
- 321
- 322
- 323
- 324
- 325
- 326
- 327
- 328
- 329
- 330
- 331
- 332
- 333
- 334
- 335
- 336
- 337
- 338