นาฬิกา+อุณหภูมิแสดงผลแบบ Dot matrix ขนาด 8×32

 .

นาฬิกา+อุณหภูมิแสดงผลแบบ Dot matrix ขนาด 8×32

อภิรักษ์ นามแถ่ง

aphirak112@gmail.com

งบประมาณ 2,000 บาท

 

                โครงงานนี้เป็นการสร้างนาฬิกาและอุณหภูมิแบบ Dot matrix ที่มีขนาดเล็กกระทัดรัด แสดงผลสวยๆ พร้อมทั้งสามารถตั้งเวลาปลุกได้ด้วย  โครงงานนี้ใช้ Arduino UNO เป็นตัวควบคุม

นาฬิกาเป็นเครื่องบอกเวลาที่แทบทุกบ้านต้องมี ถ้าท่านเบื่อกับนาฬิกาแขวนผนังรูปแบบเดิมๆ หรือรําคาญเสียงดัง “แก๊ก แก๊ก แก๊ก” ตอนที่เข็มวินาทีทำงาน มาอัพเดทนาฬิกาของท่านให้มีความสวยงามมากยิ่งขึ้น อีกทั้งยังสามารถตั้งเวลาปลุกได้ด้วยซึ่งโครงงานนี้ผู้เขียนได้สร้างแอพพลิเคชั่นบนโทรศัพท์ Android เพื่อตั้งเวลา, ตั้งเวลาปลุก, ตั้งความเร็วในการเปลี่ยนโหมดและตั้งค่าความสว่างของ Dot Matrix

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

เพื่อให้สะดวกต่อการใช้งานโครงงานนี้เลือกใช้โมดูลแอลอีดีสำเร็จรูปที่ถูกจัดเรียงกันในรูปแบบแมตทริก (matrix) 8×8 ภายในใช้ไอซี MAX7219 ควบคุมการแสดงผล ข้อดีหลักๆ ของไอซี MAX7219 นี้ คือ ใช้ขาเพื่อควบคุมการแสดงผล (Interface) เพียงแค่สามเส้น, สามารถปรับระดับความสว่างได้, มีหน่วยความจำในตัวเพียงแค่ส่งข้อมูลเข้าไปในหน่วยความจำก็สามารถแสดงผลตามข้อมูลนั้นๆ ได้เลย

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

1

รูปที่ 1 วงจรสมบูรณ์

รูปที่ 2

รูปที่ 2 วงจรของโมดูล MAX7219 DotMatrix

รูปที่ 33

รูปที่ 3 รูปชิ้นส่วนของโมดูล MAX7219 DotMatrix 

หลักการทำงาน

รูปที่ 1 เป็นวงจรสมบูรณ์ของโครงงานนี้ จะเห็นว่าวงจรเราไม่มีความซับซ้อนแต่อย่างใด มีหัวใจหลักการ คือ Arduino UNO ทำหน้าที่อ่านเวลาจากไอซีฐานเวลา DS1307และค่าอุณหภูมิจาก NTCจากนั้นก็ส่งข้อมูลการแสดงผลไปยังโมดูล MAX7219 DotMatrix ขนาด 8×8 เพื่อแสดงเวลา, วัน, เดือน, ปี และอุณหภูมิ นอกจากนั้นจะรับค่าการกดสวิตช์เพื่อเปลี่ยนเพจการแสดงผล

รูปที่ 2 เป็นวงจรภายในของโมดู MAX7219 DotMatrix จะประกอบด้วยไอซี MAX7219 ที่เป็นไอซีสำหรับการแสดงตัวเลขด้วย 7 เซกเมนต์ได้สูงสุด 8 หลัก แต่ในที่นี้เราจะนำมาขับ LED DotMatrix ขนาด 8×8 มีการสื่อสารด้วยมาตรฐาน SPI มีขาใช้งานอยู่ 3 ขาด้วยกัน คือ LOAD (หรือ Chip Select), CLK และ DIN ในกรณีที่ขับ LED Dot Matrix มากกว่าหนึ่งหลักจะต้องต่อ MAX7219 หลายตัว ดังนั้นขา DOUT จะถูกนำมาใช้ต่อกับขา DIN ของ MAX7219 ตัวถัดไป (ดังแสดงในรูปที่ 2) จะเห็นว่า DOUT (ขา 24) จะถูกตระเตรียมไว้ที่ J2 เพื่อจะนำไปต่อกับ DIN ของโมดูลถัดไป ซึ่งจะถูกเตรียมไว้ที่ J1

จากรูปที่ 2 ในส่วนของ Dot Matrix ขา DIG0-DIG7 จะต่อเข้ากับแถวที่ 1-8 ตามลำดับ ในส่วนของคอลัมน์ที่ 1-8 จะต่อเข้ากับขา SEG DP, SEG A- SEG G การจะให้ LED ที่ตำแหน่งใดติดจะใช้หลักการสแกนลอจิกที่ตำแหน่งแถวและคอลัมน์ตามลำดับ ยกตัวอย่าง หากต้องการให้ LED ที่ตำแหน่งแถวที่ 1 และคอลัมน์ที่ 1 ติด จะต้องกำหนดให้ขา SEG DP เป็นลอจิกสูงและขา DIG0 เป็นลอจิกต่ำ เท่านี้ LED ที่ตำแหน่งดังกล่าวก็จะติดสว่างขึ้นมา

4

รูปที่ 4 กราฟกำหนดปริมาณกระแสสำหรับขับ LED แต่ละเซกเมนต์

ขา ISET เป็นขาที่ใช้กำหนดกระแสในแต่ละเซกเมนต์โดยการต่อตัวต้านทานค่าพูลอัพ ค่าของตัวต้านทานจะเป็นตัวกำหนดปริมาณกระแส ซึ่งสามารถดูได้จากกราฟรูปที่ 4 จะเห็นว่าวงจรจะใช้ตัวต้านทานค่ามาตรฐาน 10 กิโลโอห์มต่อพูลอัพไว้ แต่ถึงอย่างไรก็ตาม ความสว่างของ LED Dot Matrix นั้นจะต้องกำหนดด้วยซอฟต์แวร์อีกครั้งหนึ่งด้วย โดยการกำหนดที่ค่า Intensity เพื่อกำหนดปริมาณกระแสที่ไหลออกจากขา SEG A-SEG G และ SEG DP ซึ่งการเชื่อมต่อกับโมดูล MAX7219 DotMatrix จะใช้ 3 ขาดังที่กล่าวข้างต้น โดยขา PB2 จะต่อกับขา LOAD (หรือ Chip Select), ขา PB5 จะต่อเข้ากับขา CLK และขา PB3 จะต่อเข้ากับขา DIN

รีจิสเตอร์ที่จำเป็นต้องกำหนด

  • Decode Mode (0x9) กำหนดให้เท่ากับ 0xFF เพื่อแจ้งว่าต้องการใช้งาน Decode Mode

  • Shutdown (0xC) กำหนดให้เท่ากับ 0x01 เพื่อกำหนดให้ MAX7219 อยู่ในโหมดทำงานปกติ

  • Intensity (0xA) กำหนดให้เท่ากับ 0x0F ซึ่งหมายถึง กำหนดระดับความสว่างของ LED สูงสุด (0x00 = ต่ำสุด)

  • Scan Limit (0xB) กำหนดให้เท่ากับ 0x07 ซึ่งหมายถึงการเปิดใช้งาน DIG0 ถึง DIG7 ในการ “สแกน” โดยอัตโนมัติ

การสร้างฐานเวลาจริง โครงงานนี้ใช้ DS1307 ที่เป็นไอซีฐานเวลาของดัลลัสเซมิคอนดักเตอร์ (Dallas Semiconductor) มีบัสรับส่งข้อมูลแบบ I2C ซึ่งเป็นแบบ 2 wire (SDA และ SCL) สามารถสื่อสารได้ 2 ทิศทาง (bi-direction bus) ฐานเวลาของ DS1307 นั้นสามารถเก็บข้อมูล วินาที, นาที, ชั่วโมง, วัน, วันที่, เดือน และปีได้ การเชื่อมต่อกับ Arduino UNOจะเชื่อมต่อโดยใช้ขาI2C ที่บอร์ด UNO ได้ตระเตรียมไว้ให้แล้ว

การอ่านค่าอุณหภูมิจะใช้อุปกรณ์ที่มีค่าความต้านทานแปรผันกับอุณหภูมิชนิด NTC ที่มีค่าความต้านทาน 10 กิโลโอห์ม เชื่อมต่อกับขาอะนาลอก A0 เพื่ออ่านแรงดันแล้วแปลงกลับมาเป็นค่าอุณหภูมิ เนื่องจากคุณสมบัติของ NTC อยู่ในรูปแบบของความต้านทาน ดังนั้นจึงใช้หลักการแบ่งแรงดัน (Voltage Divider) เข้ามาช่วยในส่วนของการบอกค่าอุณหภูมิ

โมดูล Bluetooth HC-05 เป็นโมดูล Bluetooth ที่ผู้เขียนนำมารับคำสั่งจากโทรศัพท์ Android เอาต์พุตของโมดูล Bluetooth จะถูกส่งไปยัง Arduino UNO ผ่าน Serial port เข้าที่ขา Rx (ขา D0) ที่มีหน้าที่ขาเป็น Hardware Serial communicationในเชิงของการเขียนโปรแกรมนอกจากจะใช้รับคำสั่งจากโมดูล Bluetooth แล้วขานี้ยังถูกใช้รับข้อมูลทั้งจากคอมพิวเตอร์ (Serial Monitor) ด้วย

แหล่งจ่ายไฟของวงจรนี้สามารถเลือกใช้ได้ 2 แบบ คือ แบบแรกคือเสียบสาย USB เข้าบอร์ด Arduino UNO โดยตรง เหมือนการใช้งานบอร์ด Arduino ทั่วไป ซึ่งการใช้งานจริงท่านไม่จำเป็นต้องต่อเข้ากับคอมพิวเตอร์ก็ได้ เพียงแค่นำอะแด๊ปเตอร์ 5 โวลต์ทั่วไปมาใช้งานได้เลย อีกแบบหนึ่ง คือ เสียงไฟบ้าน (220 VAC) ผ่าน CON1 แรงดันนี้จะถูกป้อนให้กับสวิตชิ่ง 5 โวลต์เพื่อจ่ายแรงดันให้กับวงจร

5

รูปที่ 5 ลายวงจรพิมพ์ขนาดเท่าแบบ

6

รูปที่ 6 ตำแหน่งการลงอุปกรณ์ด้านบน (Top Overlay)

7

รูปที่ 7 ตำแหน่งการลงอุปกรณ์ด้านล่าง (Bottom Overlay)

รูปที่ 8

รูปที่ 8 ภาพถ่ายการบัดกรีคอนเน็กเตอร์ด้านล่าง

การประกอบ

จากรูปที่ 6 และ 7 เป็นตำแหน่งการลงอุปกรณ์ของโครงงานนี้ ลักษณะของวงจรที่เราสร้างจะเป็นบอร์ดชีล (shield) สำหรับเสียบกับบอร์ด Arduino การลงอุปกรณ์ไม่ยากมานัก เนื่องจากอุปกรณ์ที่ใช้มีไม่มาก แต่การลงอุปกรณ์จะมีทั้งด้านบน (Top Overlay) และด้านล่าง (Bottom Overlay)

การลงอุปกรณ์ควรเริ่มจากด้านบนก่อน (รูปที่ 6) และควรเริ่มจากอุปกรณ์ที่มีระดับความสูงน้อยที่สุดก่อน เช่น ตัวต้านทาน, ตัวเก็บประจุ เป็นต้น เมื่อบัดกรีด้านบนเสร็จแล้ว ก็ให้บัดกรีอุปกรณ์ด้านล่าง (รูปที่ 7) ซึ่งทั้งหมดเป็นคอนเน็กเตอร์ตัวผู้ สำหรับเสียบกับบอร์ด Arduino UNO ที่เป็นตัวเมีย เมื่อลงอุปกรณ์จนครบหมดแล้วให้สำรวจความถูกต้องอีกครั้งจนแน่ใจว่าถูกต้องทุกจุด อาทิเช่น ตำแหน่งขาอุปกรณ์และตำแหน่งขั้วของคอนเน็กเตอร์  เป็นต้น

9

รูปที่ 9 การเชื่อมต่อ Dotmatrix และ NTC เข้ากับวงจร 

การทดสอบ

ก่อนจะเริ่มทดสอบการทำงานให้ผู้ใช้ไปโหลดโปรแกรมสำหรับ Arduino UNO เสียก่อน โดยเข้าไปดาวน์โหลดที่เว็บไซต์ http://electronics.se-ed.com/download (การอัพโหลดหากขณะนั้นเสียบบอร์ดชีลอยู่ให้ถอดโมดูล Bluetooth ออกก่อน เนื่องจากโมดูลต่อกับขา Rx อยู่ จะทำให้การอัพโหลดผิดพลาด) เมื่ออัพโหลดเสร็จแล้วให้ทำการเชื่อมต่อบอร์ดชีลของเราเข้ากับบอร์ด Arduino UNO เพื่อทดสอบการทำงานในขั้นตอนต่อไป

ขั้นตอนต่อมาให้เริ่มจ่ายไฟเข้าบอร์ด ซึ่งจะจ่ายแรงดันผ่านพอร์ท USB หรือใช้ไฟ 220VAC จ่ายผ่านทาง CON1 ก็สามารถทำได้ทั้งคู่ ขณะนั้น Dot matrix จะแสดงเวลา, วัน, เดือน, ปี และอุณหภูมิสลับรูปแบบกันไป หากไม่ไม่เป็นตามที่ระบุ ให้ตรวจสอบความถูกต้องของการลงอุปกรณ์และการเชื่อมต่อสายไฟอีกครั้งหนึ่งซึ่งเวลา, วัน, เดือนและปี ที่แสดงขณะนั้นจะไม่ตรง ดังนั้นจะต้องตั้งค่าในขั้นตอนต่อไป

รูปที่ 10

รูปที่ 10 การตั้งค่าจากคอมพิวเตอร์

รูปที่ 11

รูปที่ 11 หน้าจอแอพพลิเคชั่นบนโทรศัพท์ Android

การตั้งค่า

การตั้งค่าของโครงงานนี้สามารถทำได้ 2 แบบ คือผ่าน Serial Monitor และแอพพลิเคชั่นบนโทรศัพท์ Android เนื่องจากการตั้งค่าสามารถเลือกใช้แบบใดแบบหนึ่งได้ ดังนั้นหากท่านที่ต้องการประหยัดงบก็สามารถตัดส่วนการตั้งค่าผ่านโมดูล Bluetooth ออกได้ โดยใช้การตั้งค่าผ่านคอมพิวเตอร์เพียงอย่างเดียว

คำสั่งที่ใช้ในการตั่งค่า

  • ตั้งเวลามีรูปแบบ ดังนี้ |Thhmmss#ยกตัวอย่างเช่น |T113025#

  • ตั้งวัน เดือน ปี มีรูปแบบ ดังนี้ |Dddmmyy#ยกตัวอย่างเช่น |D180116#

  • ตั้งวันในสัปดาห์มีรูปแบบ ดังนี้|Wd#ยกตัวอย่างเช่น|W6# (1-7 เลข 1 คือวันจันทร์)

  • ตั้งเวลาปลุกมีรูปแบบ ดังนี้ |Ahhmm#ยกตัวอย่างเช่น|A0710#

  • ตั้งความเร็วการวิ่ง ยกตัวอย่างเช่น@1# (1-5)

  • ตั้งความความสว่าง ยกตัวอย่างเช่น@A#(A-E)

จากรูปที่ 10 เป็นการตั้งค่าเวลาจาก Serial Monitor โดยตั้งค่า Baud rateเท่ากับ 9600 มีรูปแบบ |Thhmmss# มีนัยสำคัญ คือ

  • T หมายถึง Time (เวลา)

  • hh หมายถึง Hour (ชั่วโมง) ต้องใส่ 2 หลัก

  • mmหมายถึง Minute(นาที) ต้องใส่ 2 หลัก

  • ssหมายถึง Second(วินาที) ต้องใส่ 2 หลัก

  • ในการตั้งค่าจะต้องขึ้นต้นด้วย “|” และปิดท้ายด้วยเครื่องหมาย “#”เสมอ

 

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

 

รายการอุปกรณ์

ตัวต่านทาน ¼ วัตต์ +/-1%

R1- 220           1      ตัว

R2- 10            1       ตัว

R3-  10k         1       ตัว

ตัวเก็บประจุ

C1-  220uF 16V อิเล็กทรอไลต์     1      ตัว

C2- 0.1uF 50V โพลีเอสเตอร์       1       ตัว

อุปกรณ์สารกึ่งตัวนำ

IC1-  DS1307    1    ตัว

Q1-   BC547      1     ตัว

อื่นๆ

Arduino UNO-         บอร์ด Arduino UNO        1     ตัว

BATT1-  แบตเตอรี่ขนาด CR2032 พร้อมรังถ่าน         1       ตัว

BLUTOOTH-              โมดูล Bluetooth HC-05           1       ตัว

CON1-   เทอร์มินอลบล็อก 2 ขา           1      ตัว

CON2-    คอนเน็กเตอร์ 5 ขา        1     ตัว

CON3-    เทอร์มินอลบล็อก 2 ขา       1       ตัว

SW1-   สวิตช์กดติดปล่อยดับ        1       ตัว

TH1-   เทอร์มิสเตอร์ NTC 10k        1    ตัว

XTAL1-   คริสตอล 32.768kHz      1     ตัว

หมายเหตุ  ซอร์สโค้ดทั้งหมดที่ใช้ร่วมกับโครงงานสามารถดาวน์โหลดได้ที่ http://electronics.se-ed.com/download

 

Leave a Comment