เฉลยโจทย์การแข่งขันทักษะไมโครคอนโทรลเลอร์ระดับภาค 2559

image

1. สั่งคำสั่งควบคุมจากหน้าต่าง Terminal (10 คะแนน)
ต่อ LED เข้ากับบอร์ด LeafHAT ตามรูปที่ 1 เขียนโปรแกรมเพื่อรับค่าจากคีย์บอร์ดโดยแสดงหน้าจอ
“Please Input String”
1.1 พิมพ์ “ON 1” LED1 ติด (1 คะแนน)
1.2 พิมพ์ “OFF 1” LED1 ดับ (1 คะแนน)
1.3 พิมพ์ “ON 2” LED2 ติด (1 คะแนน)
1.4 พิมพ์ “OFF 2” LED2 ดับ (1 คะแนน)
1.5 พิมพ์ “ON 3” LED3 ติด (1 คะแนน)
1.6 พิมพ์ “OFF 3” LED3 ดับ (1 คะแนน)
1.7 พิมพ์ “ALL ON” LED ติด 3 ดวง (2 คะแนน)
1.8 พิมพ์ “ALL OFF” LED ดับ 3 ดวง (2 คะแนน)

โค้ดที่ได้

image

2.ระบบติดต่อกับผู้ใช้ด้วยจอ OLED และสวิตช์จอยสติ๊ก (15 คะแนน)
ให้หน้าจอ OLED แสดงข้อความรายชื่อพนักงาน โดยมีพนักงานในเบื้องต้น 4 คน แต่ให้สามารถแสดงผลที่หน้าจอได้เพียง 3 คนเท่านั้น (กำหนดขนาดตัวอักษรเท่ากับ 22 พิกเซล)

image

2.1 ใช้สวิตช์จอยสติ๊กเลื่อนขึ้นและเลื่อนลงให้มีเครื่องหมาย > ปรากฎที่ด้านหน้าของรายชื่อนั้น ๆ ขึ้นลงตามการเลื่อนสวิตช์ เมื่อเลื่อนขึ้นถึงรายชื่อบนสุด ให้รายชื่อล่างสุดหลุดออกนอกจอไป เมื่อเลื่อนลงล่างสุดรายชื่อบนสุดจะถูกเลื่อนตกหน้าจอไป ดังรูป (5 คะแนน)

image

2.2 เมื่อโยกสวิตช์มาทางด้านขวา ให้แสดงข้อมูลเวลาเข้าและออกของพนักงานคนนั้น โดยต้องมีค่ารูปแบบตรงตามตัวอย่างครบทั้ง 4 คน (5 คะแนน)
2.3 จากโหมดข้อ 2.2 เมื่อโยกสวิตช์กลับมาทางด้านซ้าย ให้กลับมาแสดงที่หน้าจอหลัก และยังเลื่อนขึ้นเลื่อนลงได้เหมือนข้อ 2.1 (2 คะแนน)

image

2.4 เมื่อกดปุ่มตรงกลางของสวิตช์จอยสติ๊ก ให้แสดงเวลาและวันที่ปัจจุบันออกมาให้ถูกต้องและเมื่อกดอีกครั้งให้กลับไป แสดงรายการในข้อ 2.1 (3 คะแนน)

 

ก่อนอื่นเพื่อให้วันเวลา เที่ยงตรงให้ทำการตั้งเวลาก่อนด้วยคำสั่งต่อไปนี้ที่หน้าต่าง Terminal

sudo date --set "2017-01-12 10:02:00"

จากนั้นเขียนโค้ด ได้ดังนี้


image

 

3. ระบบเก็บข้อมูลในองค์กร (10 คะแนน)
แสดงค่าความเปลี่ยนแปลงความชื้นและอุณหภูมิทุกๆ 10 วินาที โดยทำตามขั้นตอนดังนี้
ทำการต่อโมดูล DHT11 เข้ากับบอร์ด Raspberry Pi จากนั้นเขียนโปรแกรมเพื่ออ่านค่าความชื้นและอุณหภูมิเก็บไว้ในไฟล์ชื่อ Logger.txt โดยรูปแบบการเก็บข้อมูลใน 1 บรรทัดประกอบด้วย วันที่ – เวลา – ค่าความชื้น – ค่าอุณหภูมิ รูปแบบของไฟล์ Text เมื่อเปิดขึ้นมามีรูปแบบดังนี้

image

3.1 สามารถสร้างไฟล์มีค่า ปี/เดือน/วัน/ชั่วโมง/นาทีและวินาที ถูกต้อง (2 คะแนน)
3.2 สามารถตัดการแสดงผลหน่วยไมโครวินาที ออกจากชุดเวลาได้ (2 คะแนน)
3.3 สามารถแสดงค่า Humidity ได้ถูกต้อง ( 2 คะแนน)
3.4 สามารถแสดงเครื่องหมาย “%” (เปอร์เซ็นต์) ได้ (2 คะแนน)
3.5 สามารถแสดงค่า Temparature ได้ถูกต้อง (2 คะแนน)

image

4. กดรหัสผ่านเพื่อเข้าสู่สถานที่ทำงาน (15 คะแนน)
ต่อสวิตช์เมตริกขนาด 4×4 เข้ากับพอร์ต GPIO ของบอร์ด Raspberry Pi จากนั้นเขียนโปรแกรมเพื่อรอรับการกดคีย์
4.1 ทุกครั้งที่มีการกดคีย์ คีย์ที่กดแสดงผลที่หน้าต่าง Terminal ได้ถูกต้อง (2 คะแนน)
4.2 เมื่อกดคีย์ครบ 4 ตัวและตรงกับรหัสผ่านของพนักงานคนที่ 1 (รหัส 2048) ให้ LED RGB ติดเป็นสีเขียว (2 คะแนน)
4.3 และเมื่อรหัสถูกต้องให้แสดงชื่อพนักงานคนที่ 1 (Ant Man) ที่หน้าจอ OLED (2 คะแนน)
4.4 เมื่อกดคีย์ครบ 4 ตัวและตรงกับรหัสผ่านของพนักงานคนที่ 2 (รหัส 4096) ให้ LED RGB ติดเป็นสีฟ้า (2 คะแนน)
4.5 และเมื่อรหัสถูกต้องให้แสดงชื่อพนักงานคนที่ 2 (Iron Man) ที่หน้าจอ OLED (2 คะแนน)
4.6 เมื่อกดคีย์ครบทั้ง 4 ตัวแล้วไม่ตรงกับรหัสของพนักงานทั้งสองให้ LED RGB ติดเป็นสีแดง (2 คะแนน)
4.7 และเมื่อรหัสไม่ตรงแสดงข้อความ “Access Denied” ที่หน้าจอ OLED (2 คะแนน)
4.8 ทุกครั้งที่มีการกดคีย์ให้มีเสียงออกลำโพงเปียโซ (1 คะแนน)

image

 

5. ระบบยืนยันตัวบุคคลด้วย RFID (20 คะแนน)
ใช้อ่านค่าข้อมูลจาก RFID ,ข้อมูลพนักงานในโจทย์ข้อ 2 ,การเก็บข้อมูลลงในไฟล์ในโจทย์ข้อ 3 และการอ่านค่ารหัสผ่านจากโจทย์ข้อ 4 มาใช้งานร่วมกัน โดยกำหนด Tag RFID 2 ใบสำหรับพนักงาน ใบที่ 1 เป็นของ Spider Man ใบที่ 2 เป็นของ Super Man สำหรับการป้อนรหัสผ่าน (01234567) ใช้สำหรับ Ant Man และรหัสผ่าน (89ABCDEF) สำหรับ Iron Man
5.1 เมื่อนำ Tag RFID แตะแต่ที่ตัวอ่าน RFID หน้าต่าง Terminal แสดงข้อมูลของการ์ด RFID ได้ถูกต้อง (2 คะแนน)
5.2 เมื่อแตะ Tag RFID ใบที่ 1 หน้าจอ OLED แสดงชื่อ Spider Man (2 คะแนน)
5.3 เมื่อแตะ Tag RFID ใบที่ 2 หน้าจอ OLED แสดงชื่อ Super Man (2 คะแนน)
5.4 เมื่อป้อนรหัสผ่าน 8 หลักถูกต้อง (01234567) หน้าจอ OLED แสดงชื่อ Ant Man (2 คะแนน)
5.5 เมื่อป้อนรหัสผ่าน 8 หลักถูกต้อง (89ABCDEF) หน้าจอ OLED แสดงชื่อ Iron Man (2 คะแนน)

image

5.6 เมื่อแตะ Tag RFID ให้นำรหัส Tag ที่อ่านได้ ชื่อพนักงาน วันที่และเวลาขณะแตะ Tag บันทึกในไฟล์ December.txt รูปแบบดังรูป โดยเมื่อแตะ Tag ถูกต้องทุกครั้งให้บันทึกต่อท้ายทุกครั้ง (4 คะแนน)
5.7 เมื่อป้อนรหัสผ่านถูกต้องสำหรับ Ant Man และ Iron Man ให้นำรหัสผ่าน ชื่อพนักงาน วันที่และเวลา บันทึกในไฟล์ December.txt โดยรหัสถูกต้องทุกครั้งให้บันทึกต่อท้ายทุกครั้ง (4 คะแนน)
5.8 เมื่อนำ Tag RFID จากกรรมการมาแตะ หน้าจอ OLED แสดงข้อความ “Access Denied” (2 คะแนน)

Facebook Comments