Posted on Leave a comment

Microcontroller ก้าวแรก

หลังจากที่เราแนะนำ Arduino Nano คืออะไร มาก่อนหน้านี้แล้ว คราวนี้เราจะมาลองใช้กันจริง ๆ ว่าการใช้งานเป็นอย่างไร

สิ่งที่ต้องมี

  1. บอร์ดควบคุม Arduino Nano หรือ Arduino Nano compatible
  2. โปรแกรม Arduino IDE โดยใช้ version 1.8.19 หรือ version 2.x ก็ได้ แต่ในตัวอย่างจะใช้ 2.0.2 (IDE คืออะไร)
  3. สายเชื่อมต่อระหว่าง computer และ บอร์ดควบคุม

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

หลังจากลองสำรวจคร่าว ๆ แล้ว เราก็มาเริ่มกันเลย

  1. เริ่มแรกให้เปิดโปรแกรม Arduino IDE ขึ้นมา จะเจอกับหน้าว่าง ๆ ที่มี 2 ฟังก์ชั้นคือ setup() กับ loop()
  2. ต่อบอร์ด microcontroller เข้ากับ computer แล้วเลือก Arduino Nano ถ้าไม่มีให้เลือกให้ไปข้อ 3 ถ้ามีให้เลือกให้ไปที่ข้อ 4 ได้เลย
  3. กดที่เครื่องหมายสามเหลี่ยม เพื่อดูว่ามีอะไรบ้าง แล้วถอดสาย Arduino Nano สัก 5 วินาทีแล้วต่อกับ computer อีกครั้ง แล้วดูว่า มีอะไรหายไปตอนถอดและกลับเข้ามาตอนเสียบ ให้เลือกอันนั้น แล้วเลือก Arduino Nano แล้วกด OK (ตัว clone ให้เลือกเหมือนตัวจริง)
  4. ถ้าทุกอย่างเรียบร้อยดี เราจะได้ ชื่อ Arduino Nano และมีสัญลักษณ์ USB อยู่ข้างหน้า
  5. กดที่ลูกศร ซึ่งจะเป็นการ compile โปรแกรม และ upload โปรแกรมที่ compile แล้วไปใส่ใน Arduino Nano ระหว่างนั้น ตัว IDE ก็จะแสดง output ของการ compile และการ upload ที่หน้าต่าง output ส่วนที่ตัว Arduino Nano ก็จะเห็นว่ามี LED สว่างดวงเดียวนิ่งๆ ซึ่งก็ถูกแล้ว เพราะทั้งใน setup() และ loop() ไม่มีคำสั่งอะไร board ก็ไม่ทำอะไรนั่นเอง ส่วน LED ที่สว่างอยู่ดวงเดียวนั้น แสดงว่ามีไฟเลี้ยงบอร์ดอยู่เท่านั้นเอง ถ้าของใครมีปัญหา ขึ้นตัวแดงๆ ในหน้าต่าง Output ให้ไปข้อ 6 ถ้าไม่มีปัญหาให้ไปข้อ 7
  6. สำหรับคนที่ขึ้นตัวแดงว่า “avrdude: stk500_recv(): programmer is not responding” อาจเป็นเพราะว่าใช้ Bootloader คนละ version ให้ลองไปเปลี่ยนที่เมนู Tools -> Processor -> แล้วเลือก ATmega328P ตัวที่ยังไม่ได้เลือก แล้วกด compile และ upload อีกครั้ง
  7. ต่อไปจะเป็นการใส่โปรแกรมจริงๆลงไป โดยไปที่เมนู file -> examples -> 01_Basic -> Blink นี่เป็นการเปิด code ตัวอย่างขึ้นมา ตอนนี้ถึงจะขอให้ดูอะไรก็คงไม่สนใจแล้ว อยากกด compile และ upload กันแล้วใช่ไหมครับ (บางคนอาจกดแล้วด้วยซ้ำ) ถ้าอย่างนั้น กดเลยครับ!! เมื่อ upload เสร็จ เราจะเห็น LED ที่ บอร์ด Arduino Nano อีกดวงกะพริบเหมือนอย่างที่ชื่อบอก (Blink) เย้!!!! ถึงตอนนี้ เราสามารถถอดบอร์ด Arduino Nano ออกจาก computer แล้วนำไปต่อกับ charger หรือ power bank เพื่อจ่ายไฟเข้าบอร์ด แล้วเราก็จะเห็น LED กะพริบ นั่นคือโปรแกรมที่เรา upload เข้าไปเมื่อสักครู่ และมันจะอยู่จนกว่าจะ upload โปรแกรมอื่นลงไปใหม่นั่นเอง
  8. คราวนี้ให้เราลองสำรวจดูว่ามีอะไรใน Blink บ้าง จะเห็นว่า มีเนื้อหาแบ่งได้เป็นสองส่วนหลัก ๆ คือ ส่วนที่เป็นตัวหนังสือสีเทาที่อยู่ระหว่าง /* กับ */ หรือ อยู่หลัง //  ส่วนสีเทานี้เรียกว่า comment กับส่วนที่ไม่เป็นสีเทา เรียกว่า code โดยที่ส่วนที่เป็น comment เป็นส่วนที่เขียนไว้เพื่อให้คนอ่าน microcontroller จะไม่รับรู้ในส่วนนี้ microcontroller จะรับรู้เฉพาะส่วนที่เป็น code เท่านั้น คนที่เขียน code จะเขียน comment เพื่อสื่อสารกับคนอื่นว่า โปรแกรมนี้มีไว้เพื่ออะไร หรือแต่ละส่วนทำงานอย่างไร หรืออาจเขียนไว้เพื่อเตือนความจำตัวเองเฉย ๆ ก็ได้ ตัวอย่างของ Blink นี้ ในส่วนแรก ก็เป็น comment ที่บอกว่า code นี้ใช้ทำอะไร ใช้กับอุปกรณ์ตัวไหนได้บ้าง ใช้ port ไหนบ้าง ถูกเขียนขึ้นโดยใคร และเมื่อไร หรืออื่นๆที่อยากจะสื่อสารเลยครับ
  9. คราวนี้ลองมาดูในส่วนของ code กันบ้าง จะเห็นว่า แบ่งเป็นสองส่วน หรือ สองฟังก์ชั่น คือ setup() และ loop() ถ้าใครเคยอ่านเรื่อง Microcontroller ทำงานอย่างไร ก็คงจะพอเข้าใจว่ามันหมายถึงอะไร ทบทวนง่าย ๆ ก็คือ ส่วนที่เป็น setup() นั้นจะทำงานครั้งเดียว ในขณะที่ loop() นั้น จะทำงานซ้ำๆ ไปเรื่อยๆ ไม่มีวันจบ จนกว่าจะกด reset ระบบก็จะทำงานที่ setup() อีกครั้ง แล้วก็มาวนที่ loop() เหมือนเดิม โดยมีรายละเอียดดังนี้
    • setup() นั้นจะมีคำสั่งเดียว คือ pinMode(LED_BUILTIN, OUTPUT); นี่คือคำสั่งที่กำหนดให้ ขาที่ชื่อ LED_BUILTIN ทำหน้าที่เป็น OUTPUT เนื่องจากขานี้เป็นได้ทั้งขา INPUT (รับข้อมูลเข้ามา) หรือ OUTPUT (ส่งข้อมูลออกไป) ดังนั้นก่อนจะใช้งาน เราต้องกำหนดเสียก่อนว่าจะใช้เป็น INPUT หรือ OUTPUT จะเห็นว่า การกำหนดหน้าที่ให้ LED_BUILTIN เป็น OUTPUT นั้น เราสั่งครั้งเดียวก็พอ แล้วไม่ต้องสั่งอีก หลังจากนี้ก็แค่สั่งให้ output เป็น 1 (HIGH) หรือ เป็น 0 (LOW) แค่นั้น ดังนั้น การกำหนดให้ขานี้เป็น OUTPUT นั้นจึงเขียนไว้ใน setup() ก็เหมาะสมดีแล้ว แต่หาก เราอยากให้ขานี้เปลี่ยนเป็น OUTPUT บ้าง INPUT บ้าง เราก็ต้องนำไปเขียนใน loop() นั่นเอง แต่มักจะไม่ทำอย่างนั้นถ้าไม่จำเป็น มักจะหาขาอื่นเป็น input จะดีกว่า เพราะยิ่งคำสั่งมากขึ้น ก็ยิ่งซับซ้อนมากขึ้น มีโอกาสผิดพลาดมากขึ้น และเสียเวลามากขึ้น และอาจมีข้อจำกัดอื่น ๆ ที่ต้องระวังอีก code ที่ดีต้องอ่านแล้วเข้าใจง่าย
    • Loop() คำสั่งในนี้จะถูกเรียกซ้ำวนไปเรื่อยๆ
      • คำสั่งแรกคือ digitalWrite(LED_BUILTIN, HIGH); ถ้าอ่านจาก comment ด้านหลังคำสั่งนี้ก็คงเข้าใจได้ว่า เป็นการส่ง HIGH หรือ 1 ออกไปให้ LED ซึ่งก็จะทำให้ LED สว่างนั่นเอง
      • คำสั่งที่สองคือ delay(1000); คือให้ controller หยุดนิ่ง ไม่ทำอะไรเลยเป็นเวลา 1000 ms หรือ 1 วินาที
      • คำสั่งที่สามคือ dititalWrite(LED_BUILTIN, LO); ใช่ครับ คือสั่งให้ส่ง LOW หรือ 0 ออกไปให้ LED ก็จะทำให้ LED ดับนั่นเอง
      • คำสั่งที่สี่ คือ delay(1000); ก็ให้หยุดนิ่ง 1 วินาทีอีกครั้ง
  10. หลังจากที่คิดว่าเข้าใจคำสั่งต่างๆแล้ว ลองเปลี่ยนคำว่า LED_BUILTIN ทั้ง 3 ที่ ให้เป็น 13 แล้ว กด compile และ upload ดู จะเห็นว่า ผลเหมือนกัน นั่นคือ LED_BUILTIN คือ ขา 13 (D13) นั่นเอง ซึ่งถ้าเคยอ่านเรื่อง Arduino Nano คืออะไร ก็จะรู้ว่า จะมี LED ต่ออยู่กับขา D13 ของ board (D คือ Digital)

หวังว่า ผู้อ่านจะเห็นภาพรวมการเขียนโปรแกรมและ upload โปรแกรมลงบอร์ด Arduino Nano กันแล้วนะครับใครสนใจอยากรู้ว่า นอกจากคำสั่งในตัวอย่างนี้แล้ว มีคำสั่งอะไรให้ใช้บ้าง ลองเข้าไปดูรายละเอียดได้ที่ Language Reference ได้นะครับ

แบบฝึกหัด

สุดท้ายนี้อยากให้ลอง แก้ code ให้ LED กะพริบ โดยสว่างครึ่งวินาที และดับครึ่งวินาทีดูนะครับ หวังว่าจะสนุกนะครับ แล้วพบกันใหม่

แนวทางการเรียนรู้เพิ่มเติม

สิ่งสำคัญอย่างหนึ่งคือ ภาษาที่ใช้ในการเขียนโปรแกม ภาษา C/C++ เป็นภาษาที่ใช้กันมายาวนาน และน่าจะอยู่ไปอีกนานเช่นกัน โดยมีแหล่งความรู้มากมายให้เลือก เช่น w3schools หรือ ลองศึกษาจากตัวอย่างใน IDE เหมือนในตัวอย่างนี้ ซึ่งก็มีตัวอย่างที่น่าสนใจหลายอย่าง หรืออาจค้นหาตัวอย่างที่น่าสนใจใน internet ซึ่งมีให้เลือกมากมายเลยทีเดียว

ใส่ความเห็น