USB Keyboard from Arduino : เครื่องใส่รหัส อัตโนมัติ


(25/08/2552)

How to Make USB Keyboard by Arduino (No C/C++ and ISP Programmer !!)
ทำ USB Keyboard จาก Arduino โดยไม่ต้องง้อเครื่องเบิร์น และ C/C++

AVR-USB Keyboard จาก DuinoThumb ใช้ Arduino IDE พัฒนา
เพียงแก้ไข code 3 บรรทัด !!! ไม่ต้องใช้เครื่อง Burn ไม่้ต้องเขียน C/C++ ง่ายโคตรๆ


เคยไหมครับ คนเป็นโปรแกรมเมอร์ส่วนใหญ่ จะมีวิถีชีวิตที่แตกต่างจาก "ผู้ใช้" ทั่วๆ ไป เช่น มีโลกส่วนตัวสูง (และชอบดูหนังโป๊) 
นอกจากนี้ "รหัส" ที่ใช้ตั้งตามเวป (โป๊,เกย์,กะเทย,เด็ก) ก็จะไม่ใช่รหัสที่ตั้งได้ง่ายๆ หรือเดาได้ง่าย ..

ปัญหาคือ พอเป็นสมาชิกหลายๆ เวปเข้าก็มักจะ "ลืม" (- -')  
บางครั้งลืมจนเสียการเสียงาน  คนรอบๆ ข้างก็มักจะถามว่า... : "แล้ว (เมิง) จะตั้งให้มันยากทำไม (ฟร่ะ)"

programmer : "(กูคิดว่า) เท่ห์ .." .....  (- -')

หรือบางทีเวลาตั้งรหัสง่ายๆ (ง่ายเวอร์) เช่น 123456789 , 87654, abc123, หรือเบอร์โทรกิ๊กๆ ฯลฯ
ปัญหาคือ เวลาจะกดรหัสต่อหน้าคนอื่น ก็อาจจะกลัวโดนจับได้ 

    โครงงานนี้จะช่วยแก้ปัญหาเรื่องนั้นให้หมดไป และยังทำให้คุณดูเป็น "Professional Programmer" ดูหน้าตาดี และไฮโซ อีกด้วย (^^)
เชิญชมครับ

    สำหรับโครงงานนี้ ถ้าใช้ DuinoThumb (ทุกรุ่น) หรือ Pico ก็จะค่อนข้างได้เปรียบกว่าบอร์ด Arduino ทั่วไปมาก (ลูกค้าที่ใช้ DuinoThumb ทุกรุ่น สามารถใช้งานได้ทันที!!) เพราะบอร์ด Arduino ปกติจะใช้ไอซี FDTI ในการแปลง USB เป็น Serial ซึ่งเมื่อเสียบอุปกรณ์เข้าไปปุ๊บ ก็จะกลายเป็น Serial ปั๊บ อีกทั้งขนาดที่ค่อนข้างใหญ่เทอะทะ แต่เนื่องด้วย DuinoThumb V2 ได้ออกแบบให้ใช้ขาสัญญาณ 2 ขา และมี bootloader ทำเป็น USB ในตัว จึงสามารถที่จะพัฒนาโครงงานที่เป็น USB Device ได้ง่ายกว่า โดยก่อนหน้านี้เราเคยลองใช้ DuinoThumb ทำเป็นตัวแปลง USB to Serial Converter กันไปแล้ว วันนี้เราจะมาทำ USB Keyboard กัน แต่ที่เด็ดกว่านั้นคือ เราไม่ใช้ AVR-GCC (C/C++) พัฒนานะครับ แต่เราจะใช้ "Arduino" ครับ ที่สำคัญ ไม่ต้องใช้เครื่องเบิร์นด้วย !!

    ความสามารถจะคล้ายๆ Avatar MacroKey แต่ Avatar นั้นจะสามารถจำลองได้เป็นทั้ง mouse และ keyboard อีกทั้งยังรองรับการเขียน script ควบคุมปุ่มได้ทั้ง 8 ปุ่มว่าจะให้ทำงานอย่างไร โดยรวมแล้ว Avatar MacroKey จะเหนือกว่าโครงงานนี้มาก แต่นั่นก็ต้องใช้ภาษา C/C++ และความยุ่งยากกว่ามาก ไม่เหมือนโครงงานนี้จะค่อนข้างง่ายและจบได้ด้วยบอร์ด DuinoThumb เพียงตัวเดียว...



หลักการ
    ตามปกติแล้ว เราสามารถที่จะใช้ Arduino เขียนโปรแกรมควบคู่ไปกับภาษา C/C++ ได้ หลักการคือเขียน C/C++ ให้เป็น library แล้วไปให้ Arduino เรียกใช้นั่นเอง สำหรับการพัฒนา AVR ให้เป็น USB Device นั้น เรามักจะใช้ OpenSource Library ของ Obdev ซึ่งนอกจากจะมีตัวอย่าง ที่มากมายแล้ว ยังค่อนข้างเสถียรด้วย (สบายแฮ ~)  ดังนั้นแล้วตาม step ก็ไม่มีอะไรมาก เพราะ library USBKeyboard ก็พัฒนามาจาก Library ของ Obdev เราเพียงแค่ทำการเปลี่ยนค่า หรือแก้ไข config ขาของสัญญาณให้ตรงกับวงจรเท่านั้นก็เป็นอันเสร็จพิธี


การพัฒนาโปรแกรมด้วย Arduino
    เพียงแค่เอา library ที่ได้แก้ไขแล้ว โดยต้องเลือกให้ตรงกับรุ่น MCU ATmega8 หรือ ATmega168 (ผมได้จัดการแก้ไขให้เข้ากับ DuinoThumb เรียบร้อยแล้ว) ไป copy ไว้ที่ \hardware\libraries ของ folder ที่ติดตั้ง Arduino แล้วเปลี่ยนชื่อ folder ให้เป็น "UsbKeyboard" จากนั้นก็เปิด Arduino IDE จากนั้นก็ทำตาม step ง่ายๆ เหมือนนับ 1-2-3 ดังนี้

1. เรียกใช้
    ทำโดยการใช้คำสั่ง #include <UsbKeyboard.h> ไว้ที่ส่วนบนของโปรแกรม

2. กำหนดค่าจำเป็น ที่ฟังก์ชั่น setup()
    เนื่องด้วยมีการใช้งาน timer0 เราจึงต้องยกเลิก timer0 interruptด้วยคำสั่งดังนี้
 
void setup()
{
    TIMSK0&=!(1<<TOIE0); // atmega8 ไม่ต้องใช้
}

3. ส่วนเงื่อนไขโปรแกรมในฟังก์ชั่น loop()

void loop()
{
    // สั่ง update keyboard library
    UsbKeyboard.update();

    if (ถ้ากดปุ่มบนบอร์ด())
    {
        // ตัวอย่าง สั่งเรียกใช้ให้จำลองการกด keyboard รหัส "LOVE" แล้ว Enter
        UsbKeyboard.sendKeyStroke(KEY_L);
        UsbKeyboard.sendKeyStroke(KEY_O);
        UsbKeyboard.sendKeyStroke(KEY_V);
        UsbKeyboard.sendKeyStroke(KEY_E);
        UsbKeyboard.sendKeyStroke(KEY_ENTER);
    }
}


    ถ้าเป็น DuinoThumb ก็ Jump ขา 7 ลง Gnd กด Reset (ทำทุกครั้ง ก่อนที่จะ upload โปรแกรมไปบอร์ด) จากนั้นก็เลือกเบอร์ MCU แล้ว compile แล้วกด upload มาที่บอร์ดได้เลย หลังจากที่โหลดโปรแกรมลงมาแล้ว ก็ให้ถอดบอร์ดออกจาก USB แล้วเสียบเข้าไปใหม่ PC จะเห็นว่ามี USB keyboard เสียบเข้ามา และเราสามารถใช้งาน keyboard ตัวนี้ได้เลยทันที !!! ง่ายชิมิ

    จากตรงนี้ถ้าท่านตั้งรหัสให้เป็นคำว่า "love" ก็จะสามารถเข้าใช้งานได้ทันที ส่วน keyอื่นๆ เช่น keyพิเศษก็รองรับครับผม (รายละเอียดว่ามี key อะไรบ้าง ให้ดูใน Source Code หรือคู่มือครับ) (^_^)
   ท่านใดอยากลองทำปุ่มกดแบบ USB เผื่อว่าจะเอาไปใช้ในเกมส์ หรืองานอื่นๆ ลองเล่นดูครับ เร็ว ง่าย สะดวก สบายแฮร์ ~ (ไม่ปวดหัว)


ขอบคุณครับ (^_^)
เป็นหนึ่ง
ċ
Test_with_DuinoV2.pde
(1k)
Tanakur Vitoonrach,
25 ส.ค. 2552 07:59
ċ
UsbKeyboardDuino168-Lib.zip
(199k)
Tanakur Vitoonrach,
25 ส.ค. 2552 07:59
ċ
UsbKeyboardDuino8-Lib.zip
(194k)
Tanakur Vitoonrach,
25 ส.ค. 2552 07:59
Comments