ไมโครคอนโทรลเลอร์ arduino
ช่างบ้านนอกอย่างเราในแต่ละวันหาอะไรทำไม่เคยว่าง อยู่กับบ้านอยู่กับตัวเองก็ประหยัดและมีความสุขดีครับ ในสมัยก่อนเคยคิดหาไมโครคอนโทลเลอร์ที่จะมาใช้งานก็มีแต่ของค่ายPIC ที่ง่ายที่สุดในขณะนั้นคือเบอร์16F84 ราคาก็ไม่แพงซึ่งมีโค้ด(Source Code)คือโปรแกรมที่ต้องใส่ลงในตัวไอซีค่อนข้างแพร่หลาย ส่วนอีกค่ายหนึ่งในตระกูลAVR 80c51 โค้ดก็ใช้ภาษาโปรแกรมที่เรียกว่าภาษาC เป็นภาษาเขียนโปรแกรมที่ง่ายและเขียนโปรแกรมต่างต่างๆใให้เราได้ใช้งานมากมายครับ แต่ค่ายAvrในขณะนั้นยังไม่มีไอซีขนาดเล็กเช่นตระกลูPIC และคนที่เริ่มเรียนการเขียนโปรแกรมหันมาหาไมโครคอนโทลเลอร์ตระกูลPicกันมากเพราะมีโค้ดเฉพาะของเขาเองซึ่งมีคำสั่งไม่กี่ตัวครับ.
แต่ในปัจุบันไอซีตระกูลAVRได้พัฒนาการโปรแกรมที่สามารถโปรแกรมลงบนตัวไอซีง่ายขึ้น ที่สำคัญคือโปรแกรมที่ใช้แปลภาษาจากภาษาที่เราใช้กันเช่นภาษาC เป็นโปรแกรมขนาดเล็กฟรีหาโหลดได้ง่ายกว่าแต่ก่อนมากครับและข้อดีอีกประการหนึ่งเป็นโค้ดที่เปิดเผยกันอย่างแพร่หลาย คนที่เก่งภาษาCอยู่แล้วจึงหันมาเล่นไอซีตระกูลAVRกันมากขึ้นอย่างรวดเร็วครับ.
การโปรแกรมลงไอซี
ในแต่ละตระกูลของไมโครคอนโทลเลอร์ มีโปรแกรมที่จะแปลภาษาแล้วเขียนลงไปในไอซีซึ่งโปรแกรมแปลภาษาที่เราเขียนเป็นภาษาเครื่องฝรั่งเรียกว่าการคอมพาย(compile) เหตุที่เราต้องแปลภาษาเป็นภาษาครื่องเพราะไอซีมันรู้จักแต่รหัส0กับ1 มันไม่รู้จักภาษาที่เราเขียนหรอกครับ จึงเป็นความสะดวกสบายสำหรับคนใช้งานครับ แต่ในตระกูลPICมีโปรแกรมที่เขียนหรือโค้ดมากมายและโปรแกรมที่ใช้แปลก็มากมายหลายคนก็สับสนว่าจะใช้โปรแกรมใหนดี ผิดกับตระกูลAVR โปรแกรมคอมพายหรือแปลภาษามีที่นิยมมากคือแปลภาษาC และที่สำคัญคือเป็นโปรแกรมที่เปิดเผยมากหรือที่ฝรั่งเรียกกันว่าโอเพนซ๊อต(OpenSource)เราหาดูและศึกษากันได้ง่ายครับ.
อะไรคืออาดุยโน่(Arduino)
อาดุยโน่คืออะไร ชื่อก็แปลกๆเป็นไอซีตระกูลใหม่หรือ ซึ่งไอซีตัวนี้ก็คือไอซีตระกูลAVRนั้นเองครับ มีคนคิดการโปรแกรมที่ง่ายโดยการเก็บตัวโหลดโปรแกรมเก็บข้อมูลไว้ในตัวไอซีเป็นสะพานถ่ายทอดข้อมูลลงบนหน่วยความจำในตัวไอซีโดยมีโปแกรมบนคอมพิวเตอร์เขียนแล้วโปรแกรมได้ทันที่และสามารถโปรแกรมได้หลายครั้งครับเขียนเสร็จแล้วทดลองการทำงานหากไม่ได้ตามต้องการก็แก้ไขแล้วเขียนทับลงไปใหม่ซึ่งง่ายและรวดเร็ว ทำให้คนที่ชอบไมโครคอนโทลเลอร์หันมาใช้งานไอซีตระกูลนี้กันอย่างมากและรวดเร็วมากจนราคาถูกลง ที่สำคัญคือคนคิดค้นไม่ได้หวงค่าความคิดใครจะเลียนแบบนำไปผลิตก็ตามสบาย ประเทศจีนได้โอกาสนำไปผลิตลอกแบบกันมากมายซึ่งผลก็คือของราคาถูกลงทำให้ช่างบ้านนอกอย่างเราได้เรียนรู้ง่ายขึ้นครับ.
การโปรแกรมไอซีตระกูลAVR
ช่างโหน่งเองก็ไม่ได้เรียนและจบมาจากใหนอาศัยเรียนรู้จากเน็ตค้นหาข้อมูลต่างๆและทำความเข้าใจ ที่สำคัญที่สุดทดลองด้วยตัวเองครับ มีข้อมูลมากมายลองทำตามแล้วสำเร็จบ้างไม่สำเร็จบ้างแต่อย่างไรก็ไม่ยากสำหรับผู้เริ่มต้นบ้านนอกอย่างเราครับ ขอให้อ่านภาษาอังกฤษได้บ้างก็ยังดีครับการโปรแกรมไอซีตัวนี้มีอุปกรณ์ที่มีขายในบ้านเรามากมายครับและราคาถูกด้วยครับ เราต้องมีวิธีและเครื่องมือดังนี้ครับ.
โปรแกรมที่ใช้เขียนคำสั่ง
ในตระกูลAVRที่ได้พัฒนามาเป็นอาดุยโน่มีโปรแกรมที่แจกฟรีคือarduino1.0.1หรือเวอร์ชั่นอื่นๆเพื่อนำมาใช้งานในการเขียนคำสั่งและโปรแกรมไอซีครับ.
หน้าตาเป็นแบบนี้ครับ โปรแกรมไม่ใหญ่ลูกเล่นไม่เยอะแต่เข้าใจง่ายครับและแจกฟรีจึงทำให้มีคนนิยมกันมากเมื่อมีคนใช้มากข้อมูลก็มากครับหลากหลายแนวความคิดและการทดลองมากมาย ทำให้เรามีความรู้และความเข้าใจมากขึ้นซึ่งในที่สุดไอซีตระกูลPICก็ต้องยอมแพ้คลื่นลูกใหม่ที่มาแรงมากครับ.
การเตรียมโปรแกรมสำหรับใช้งาน
โปรแกรมที่เราได้มาอาจใช้งานได้กับโค้ดง่ายๆพื้นฐานทั่วไปได้โดยไม่มีปัญหา แต่ถ้าเป็นโค้ดที่มีความสลับซับซ้อนกันมากเราต้องมีตัวช่วยครับซึ่งตัวช่วยนี้ฝรั่งเขาเรียกว่าไลบรารี่(library) ซึ่งตัวช่วยนี้จะเขียนข้อมูลต่างๆสำหรับโค้ดที่เราจะเขียนการทำงานต่างๆจะย่อไว้เก็บไว้ในส่วนที่เก็บโปรแกรมครับ ซึ่งถ้าโปรแกรมแปลแล้วไม่รู้ให้ไปถามหาข้อมูลตรงนี้ครับ ดังนี้เมื่อเราแปล(คอมพาย)ไม่ผ่านเราต้องเก็บตัวช่วยนี้เข้าไว้ในส่วนที่เก็บโปรแกรมซึ่งในระบบวินโด้จะเก็บไว้ที่Program Filesครับ.
เมื่อเราแปลไม่ผ่านเราต้องหาโหลดข้อมูลที่เกี่ยวข้องมาเก็บไว้ในนี้ครับ เช่นเราเขียนการควบคุมมอเตอร์การคือการสร้างความถี่ปรับขึ้นลงเราต้องเกี่ยวกับความถี่ซึ่งก็มีโปรแกรมสำหรับความถี่ที่เขียนรายละเอียดและการทำงานเก็บอยู่ในแฟ้มPWMเราต้องหามาเก็บไว้ก่อนที่จะแปล(คอมพาย)ครับ
การแปลหรือcompile เป็การตรวจสอบข้อมูลที่เขียนว่าเข้าหลักเกณฑ์ของโปรแกรมหรือไม่ก่อนที่เราจะส่งโปรแกรมเข้าไปในไอซีครับ โดยในโปรแกรมาอาดุยโน่จะเป็นเครื่องหมายถูกครับ ซึ่งถ้าแปลไม่ผ่านก็จะขึ้เออเร่อ(Error)ด้านล่างครับ
เราอ่านแล้วจะรู้สาเหตุว่าเราต้องแก้ไขที่จุดใหนครับ ซึ่งการใช้งานโปรแกรมก็ไม่ยากเกินไปครับต้องทดลองทำไปจากโปรแกรมที่ง่ายๆก่อนแล้วจะรู้วิธีการทำงานครับ.
ขั้นตอนการโปรแกรมไอซี
การโปรแกรมไอซีก็มีอยู่หลายวิธีครับอาจจะโปรแกรมภาษาเครื่องหรือที่เรียกว่าเฮ็กไฟล์(Hex Files)ลงไปโดยตรงหรือโปรแกรมผ่านโปรแกรมอาดุยโน่ครับ ในที่นี้ช่างโหน่งจะแนะนำวิธีโปรแกรมผ่านอาดุยโน่1.0.1ครับ.
เมื่อเราทดลองแปลภาษาที่เราเขียนผ่านแล้วเราจะเอาลงไปในไอซีได้อย่างไร ปัจจุบันการโปรแกรมพัฒนาโดยนำตัวถ่ายทอดข้อมูลหรือสะพานเชื่อมต่อระหว่างคอมพิวเตอร์ลงไปในไอซีหรือที่เรียกว่าบู๊ตโหลดเดอร์(Boot Loader) ปรกติไอซีที่มาจากโรงงานจะไม่มีตัวถ่ายทอดนี้อยู่ภายในเราต้องเอาตัวถ่ายทอดหรือที่เรียกว่าอับโหลด(Up Load)นี้เก็บเข้าไว้ในไอซีเสียก่อนครับซึ่งก็ไม่ยากและก็ไม่ง่ายครับไม่ว่าจะเป็นมือใหม่หรือมือเก่า ช่างโหน่งเองเป็นมือกลางเก่ากลางใหม่ก็ยังปวดหัวเลยครับกว่าจะจับจุดได้.
การติดตั้งตัวถ่ายทอดในไอซีใหม่(เปิดบริสุทธิ)
การที่จะเปิดบริสุทธิไอซีก็ไม่ยากเราก็ใช้บอร์ดอาดุยโน่ที่มีขายทั่วไปมาเป็นตัวเขียนอัดโปรแกรมลงไปครับ
ในที่นี้ช่างโหน่งในบอร์ของUNOมีชิพแบบTQFP 32 ขา ตัวเล็กราคาถูกกว่าแบบขาตะขาบครับช่างบ้านนอกทุนน้อยจะศึกษาอะไรก็ลำบากหน่อยครับ เมื่อได้มาแล้วก็หาวิธีต่อสายซึ่งมีมากมายอยู่ในเน็ตครับ.
ตามรูปการต่อสายเราจะใช้ทั้งหมด6เส้นครับ คือสายไฟเลี้ยงตัวไอซีสองเส้น สายไฟโปรแกรมสี่เส้นครับ และตัวไอซีใหม่ที่จะถูกเปิดบริสุทธิเราต้องต่อสัญญาณนาฬิกาให้ดวยครับ รายละเอียดและข้อมูลขาต่างๆหาดูในเน็ตครับ.
ใช้บอร์ดเป็นเครื่องมือเขียนตัวถ่ายทอด(Boot Loader Board)
ขั่นตอนนี้สำคัญครับและทำยากกว่าการโปรแกรมอย่างอื่นครับ ก่อนอื่นเราต้องเตรียมอุปกรณ์ต่อสายตามรูปให้เรียบร้อยก่อนครับ การต่อสายสำคัญที่สุดจะสำเร็จหรือไม่อยู่ตรงนี้ด้วยครับ
1.ต่อสายไฟถูกต้อง สายโปรแกรมถูกต้อง ต่อสัญญาณนาฬิกาถูกต้อง
2.การต่อสัญญาณนาฬิกาก็สำคัญครับอุปกรณ์ทีกำหนดความถี่ก็มีผลเช่นกันครับ เราควรต่อสายให้สั้นที่สุดใกล้กับไอซีมากที่สุดครับ ส่วนความถีให้ใช้ความถี่สูงในกาเขียนไว้ดีที่สุดครับเช่น16-20Mhz ในงานนี้ช่างโหน่งใช้ 16Mhzครับ โดยไม่ต้องคำนึงว่าไอซีเบอร์นี้จะใช้ความถี่เท่าไหร่ในการทำงานครับ.
3.ไฟที่ใช้เลี้ยงไอซีที่เปิดบริสุทธิควรแยกไฟต่างหากใช้แรงดันไม่เกิน5โวลท์ครับ.
ขั่นตอนเปิดบริสุทธิ(ติดตั้งBootloader)
1.เปิดโปรแกรมarduino1.0.1โปรแกรมไฟล์ลงไปที่บอร์ด
กดUpLoad ลงไปที่บอร์ดเพื่อใช้บอร์ดเป็นตัวโปรแกรมข้อมูลส่วนที่ทำหน้าที่เป็นสะพานเขียนโปรแกรมลงไปในไอซี(Bootloader)โดยเลือกการโปรแกรมแบบParallel
เหตุที่เลือกตัวนี้ช่างโหน่งเองก็ไม่ทราบเหตุผลแต่ลองทำตามดูสำเร็จครับ เมื่อทำบอร์ดเป็นตัวโปรแกรมเสร็จแล้วเลือกเบอร์ไอซีที่เราจะโปรแกรมครับ ในที่นี้ช่างโหน่งทดลองสองเบอร์คือAtmega328และ8ครับ ส่วนเบอร์อื่นๆก็หลักการไม่ต่างกันครับ
ถ้าเป็นเบอร์328 ก็เลือกไปที่Arduino Uno
ถ้าเป็นAtmega8 ก็เลือกไปที่ล่างสุดครับ ส่วนเบอร์อื่นๆทดลองดูตามนี้ครับ
หลังจากเลือกเรียบร้อยแล้วก็กด Burn Bootloader ขั้นตอนนี้ต้องรอคอยครับ หากสำเร็จไม่มีขึ้นเออเร่อ(Error)ตัวสีส้มก็ผ่านครับ แต่บางครั้งไม่ผ่านขึ้นข้อความต่างๆให้ตรวจดูตามนี้ครับ
1.การต่อสายถูกต้องหรือไม่ การลงโปรแกรมสามารถลงใหม่ได้เรื่อยๆครับถึงแม้ว่าจะเคยลงBootloaderมาแล้ว
2.เลือกเบอร์ไอซีถูกต้องหรือไม่ หากเขียนเบอร์ไอซีที่ต่างกันให้ปิดโปรแกรมแล้วเปิดใหม่หรือไม่แน่ใจปิดแล้วเปิดคอมใหม่
3.ไอซีที่โปรแกรมมีปัญหาครับลองเอาตัวอื่นๆหรือตัวใหม่มาทดลองก่อนเพื่อให้แน่ใจว่าทำตามขั้นตอนของเราถูกต้องครับ
เมื่อสร้างสะพานที่เป็นตัวนำโปรแกรมที่เราเขียนสำเร็จแล้วต่อไปเป็นโปรแกรมที่เราเขียนลงไปในไอซีเพื่อใช้งานครับ
ตัวโปรแกรมข้อมูลลงไปเพื่อใช้งาน
เครื่องมือที่จะโปรแกรมหรือเรียกว่าอับโหลดข้อมูลลงในไอซีมีมากมายหลายวิธีครับแต่ที่ช่างโหน่งใช้คือเสียบจากUSBของคอมพิวเตอร์ลงไปที่ตัวไอซีโดยตรงครับ หรือที่เรียกว่าUSB TO TTL
ตัวนี้ราคาไม่เกินร้อยบาทครับในเมืองไทยมีขายมากมาย ที่สำคัญคือการต่อสายเข้าไปไอซีครับ มีจุดสำคัญอยู่บ้างครับ
การต่อสายไฟ
1.DTR–Capacitor0.1Mfd(Mila)–Reset จากDTR ต่อผ่านคาปาซิตเตอร์แบบไมล่าค่า0.1ไมโครแล้วต่อเข้าขา1รีเซ็ต
2.Rx–pin3 Atmega จากRx ต่อสลับกันเข้าขา3 Tx ของไอซี
3.Tx–pin2 Atmega จากTx ต่อสลับกันเข้าขา3 Rx ของไอซี
4.Vcc–+5v จากVcc ต่อเข้าขา7ของไอซี
5.Gnd–0v จากGnd ต่อเข้าขา8ของไอซี