วันศุกร์ที่ 5 เมษายน พ.ศ. 2556

บทสรุปส่งท้ายสำหรับการพัฒนาแอปพลิเคชั่นบนอุปกรณ์แอนดรอยด์ เพื่อควบคุมหุ่นยนต์

ผมนำภาพบรรยากาศการอบรม ที่ สถาบันเทคโนโลยีไทย ญี่ปุ่น มาฝากครับ งานนี้ส่วนหนึ่งของการแข่งขันหุ่นยนต์ยุวชน สสท ชิงแชมป์ประเทศไทย เพื่อคัดเลือกหาผู้เข้ารอบไปแข่งขันรอบสุดท้ายที่เดอะมอลล์บางกะปิ  การอบรมการพัฒนาแอปพลิเคชั่นสำหรับอุปกรณ์แอนดรอยด์ เพื่อควบคุมหุ่นยนต์นี้ เป็นเพียงส่วนหนึ่งของการแข่งขันหุ่นยนต์ยุวชน สสท ซึ่งแต่ละทีมจะได้เรียนรู้หุ่นยนต์ 2 รูปแบบด้วยกันคือ หุ่นยนต์บังคับมือที่ควบคุมไร้สายบลูทูธ กับ หุ่นยนต์อัตโนมัติครับ โดยแต่ละทีมจะได้รับหุ่นยนต์ จำนวน 2 ตัวด้วยกันครับ หุ่นยนต์ที่ใช้ในการอบรมครั้งนี้คือ RoboCreator ทางฝังอัตโนมัติจะใช้หุ่นยนต์แบบขับเคลื่อนสี่ล้อ ส่วนฝั่งหุ่นยนต์บังคับมือจะใช้หุ่น่ยนต์ขับเคลื่อนด้วยสายพาน


ในการอบรมครั้งนี้มีจำนวนทีมทั้งหมดกว่า 120 ทีม ซึ่งแบ่งออกเป็น 3 รอบละกว่า  40 ทีม  แต่ละรอบจะใช้เวลาในการอบรมและแข่งขันทั้งสิ้น 3 วัน วันแรกเต็มวันกับวันที่สองช่วงเช้าจะเป็นการอบรม  ส่วนก่อนพักเที่ยงวันที่สองจะเป็นการแถลงกติกาการแข่งขัน เพื่อที่บ่ายวันที่สองและเช้าวันที่สามเด็กๆจะได้ซ้อมหุ่นยนต์ และแข่งขันกันในบ่ายของวันที่สาม   ส่วนผมอบรมทั้งสามรอบอยู่ 10 วัน อิอิ เหนื่อยเหมือนกันครับ  เจอคนเยอะๆแบบนี้ ปัญหาก็เยอะเหมือนกัน  แต่ต้องยกเครดิตให้ผู้ช่วยคนเก่ง อย่างคุณเอก วิศวกรจาก INEX ครับ ที่ช่วยดูแลเด็กและแก้ปัญหาตั้งแต่วันแรกจนจบการอบรม จริงๆแล้วเขาเก่งกว่าผมเยอะครับ 55 แต่ผมอายุมากกว่า 

สำหรับผู้ที่สนใจสามารถดาวน์โหลดไฟล์ที่เกี่ยวข้องได้ที่นี่ครับ

 Jdk-7u17-windows-i586   ,  Jdk-7u17-windows-x64
https://www.rapidshare.com/files/4193952109/notepad.jnlp  ไฟล์สำหรับทดสอบการทำงานจาวา
https://www.rapidshare.com/files/852089513/FileOffline.zip   ไฟล์หลักของ app inventor ทำงานแบบ offline
https://www.rapidshare.com/files/531581519/MyTest.zip  ไฟล์โค๊ดควบคุมหุ่นยต์
https://www.rapidshare.com/files/949260022/HelloCat.zip  ทดสอบการใช้งาน กับ hello cat
https://www.rapidshare.com/files/1916207488/App%20Inventor%20Devices%20Support.pdf  รายชื่ออุปกรณ์แอนดรอยด์รุ่นต่างๆ ที่รองรับการใช้งาน app inventor
http://issuu.com/innovativeexperiment/docs/bluetoothandroidchecking คู่มือทดสอบการทำงานบลูทูธ
http://issuu.com/innovativeexperiment/docs/appinventorofflinemanual_tpa2013-in  คู่มือใช้งานเบื้องต้น



สรุปสาระสำคัญของการอบรมดังนี้ครับ

1. ติดตั้ง java jdk ให้เรียบร้อย โดยให้ตรงกับระบบปฏิบัติการที่เราใช้ เพราะโปรแกรม app inventor มันจะเรียก java jre ขึ้นมาทำงาน 
2. ติดตั้งโปรแกรม app inventor ให้เรียบร้อย  ตัวโปรแกรมจะมีเครื่องมือต่างๆให้ใช้เช่น Block Editor และ Emulator 
3 . ตั้งค่าตำแหน่งที่ติดตั้ง java ใน environent Variables ให้เรียบร้อย  JAVA_HOME ถ้าไม่เซต จะไม่สามารถสร้างไฟล์ apk ได้
4 . รันไฟล์ buildserver และ start AI ที่อยู่ในโฟลเดอร์ AppInventor 
5. เข้าใช้งานผ่านเว็บบราวเซอร์ โดยพิมพ์ localhost:8888 จากนั้นก็เข้าใช้งานโปรแกรม 
คร่าวก็ประมาณนี้น่ะครับ  














ปัญหาที่เจอในการอบรมวันแรกของทุกๆรอบ
  • สายสัญญาณ ไม่ได้เตรียมมา  งานนี้ใหญ่สุด แต่มีให้ยืม เป็น micro  usb แก้ปัญหาเรื่องสายได้หลายเครื่องเหมือนกัน
  • ไดรเวอร์ของแอนดรอยด์  หลายรุ่น หลายยี่ห้อหาไดรเวอร์ไม่ได้  ไดรเวอร์ที่เตรียมไม่เพียงพอ
  • ความรู้ความเข้าใจในระบบปฏิบัติการ  32 bit 64 bit  java jdk  , java jre  เรื่องนี้ต้องฝากให้ครูสอนคอมช่วยสอนเด็กๆต่อด้วย อิอิ 
  • เซต javahome part ที่ติดตั้ง jdk ผิด build sever ไม่ได้ ขึ้นมาแล้วก็แว๊บหายไป เป็นปัญหาที่ตัว jre
  • แอนดรอยด์บางตัว เช่น ยี่ห้อ acer ติด permission bluetooth  ทำให้ใช้คำสั่ง  bluetooth ของ app inventorไม่ได้  ตอนนี้ยังหาทางแก้ไขอยู่ 

บรรยากาศการอบรม AppInentor




วิทยากรสุดหล่อ เจ้าของบล็อกเอง อิอิ


            เนื้อหาส่วนใหญ่ของการอบรมเป็นเรื่องที่พูดถึงเกี่ยวกับการใช้งานโปรแกรม app inventor เพื่อพัฒนาโปรแกรมบนแอนดรอยด์ให้สามารถควบคุมหุ่นยนต์ได้ โดยจะประกอบด้วยสองเรื่องด้วยกันคือ การรับข้อมูล และ การส่งข้อมูล โดยวันแรกช่วงเช้าเป็นการอธิบายเกี่ยวกับขั้นตอนการติดตั้งและใช้งาน app inventor แบบปิด Offline ไม่ต้องเชื่อมต่อกับอินเตอร์เนตก็สามารถใช้งานได้ ส่วนช่วงบ่ายจะเป็นการเชื่อมต่อบลูทูธพร้อมทั้งควบคุมหุ่นยนต์ โดยหุ่นยนต์ที่ใช้จะเป็น ATBOT ที่ติดตั้งโมดูลไร้สายบลูทูธชื่อว่า blueStick ไว้ที่ตัวหุ่นเรียบร้อยแล้ว พร้อมทั้งติดตั้งเฟริมแวร์ที่หุ่นยนต์ให้สามารถรับข้อมูลจากมือถือได้เลยโดยไม่ต้องเขียนโปรแกรมใหม่ ช่วงก่อนเลิกให้เด็กได้หัดเขียนโปรแกรมหุ่นยนต์กันบ้าง เพราะเดี๋ยวจะคุยกับเด็กที่อบรมหุ่นยนต์อัตโนมัติไม่รู้เรื่อง ก็เลยให้ติดตั้งและเขียนโปรแกรมให้หุ่นยนต์ ATBOT ใหม่ โดยคำสั่งง่ายๆ อย่าง Hello World ทำให้เด็กๆกลับไปที่พักแล้วต้องเขียนโปรแกรมเพื่อรับค่าข้อมูลจากมือถือกันใหม่ อิอิ ก็คิดเสียว่าเป็นการบ้านแล้วกัน



  • appinventor ถูกออกแบบให้ใช้งานแบบ online การใช้งาน offline ได้นั้นจึงต้องมีขั้นตอนกระบวนการดังที่กล่าวมา  เพราะฉะนั้นถ้าใครเห็นว่ายุ่งยากก็ให้ไปใช้แบบ online นะครับ  เข้าไปที่ appinventor.mit.edu นะครับ ทุกอย่างอยู่ที่นั้นแล้ว
  • การศึกษาหาข้อมูลเรื่องราวเกี่ยวกับ app inventor นั้น ทำได้ไม่ง่ายเลยครับ เพราะโดยส่วนตัวแล้วผมไม่เก่งภาษาอังกฤษ ทำให้เรียนรู้ได้ช้า  ส่วนเนื้อหาที่เป็นภาษาไทย ยังไม่มีหนังสือ หรือคู่มือออกมาครับ อยากให้ทุกคนเข้าใจว่า ไม่ต้องรอผมน่ะครับ  งานนี้ต้องร่วมด้วยช่วยกัน  ใครก็ได้ช่วยแปลหนังสือภาษาอังกฤษเป็นไทยสักเล่มนะครับ  แล้วผมจะอุดหนุน 
  • ผมไม่สามารถตอบคำถามได้ทุกคำถาม หรือแก้ไขปัญหาทุกปัญหาได้ครับ เพราะว่าผมไม่ใช่เทพครับ 555 ไม่ใช่ว่าทำไม่ได้ แต่ต้องใช้เวลาในการศึกษาหาคำตอบครับ 
  • จุดมุ่งหมายในการอบรม ทุกคนต้องสามารถสร้างแอพพลิเคชั่นของตัวเอง เพื่อควบคุมหุ่นยนต์ได้ครับ  เพราะฉะนั้นระหว่างการอบรมอาจเจอปัญหาอุปสรรคบ้าง บางคนไม่เข้าใจบ้าง บางเรื่องผมก็ไม่อธิบายบ้าง  มันคือเรื่องธรรมดาของการอบรมครับ เพราะสุดท้าย ท้ายสุดแล้วหวังว่าคนที่เข้าอบรม จะลอง เล่น และรู้จักแก้ปัญหาให้เป็นนะครับ  เชื่อว่าสุดท้ายแล้วทุกๆคน ก็จะทำได้ด้วยตัวเอง 
  • หลายๆเรื่องที่สอนไป ต้องการให้พัฒนาต่อยอดเองครับ  เพราะฉนั้นผมว่า ไม่มีความสำเร็จใดได้มาโดยไม่พยายาม   



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


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


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




blue rover หุ่นยนต์สำหรับทดสอบการเชื่อมต่อบลูทูธ กับ robo creator ล้อรถถังขับเคลื่อนด้วยสายพาน หุ่นยนต์สำหรับอบรม

   


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



เรียนไป เล่นไป แก้ปัญหาไป  ก่อนจะประสบผลสำเร็จก็อย่างนี้แหละครับ  สู้ๆ 

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


ผมชอบแจ็คเก็ตของหลายๆทีมน่ะครับ  ออกแบบสวยๆ เท่ห์ดีครับ 

หน้าจอขนาดใหญ่กดง่ายดี 

ถึงปุ่มจะเล็กแต่ก็ทำงานได้ไม่แพ้แอนดรอยด์เครื่องใหญ่น่ะ




ตัวอย่างการออกแบบโปรแกรมในมุมมองของการออกแบบ
ปรับแต่งเติมสีสันนิดหน่อย


ตัวอย่างโค๊ดบล็อก คำสั่งที่ใช้ในการส่งค่าข้อมูลผ่านบลูทูธ 


ตัวอย่างคำสั่งที่ใช้กับหุ่นยนต์ในการรับค่าข้อมูลที่ถูกส่งมายังตัวหุ่นยนต์ผ่านบลูทูธ

#include <atx.h>
#define POW 70
void forward(unsigned int time) { 
  motor(0, POW); 
  motor(1, POW);  
  motor(2, POW);  
  motor(3, POW);  
  sleep(time);
}
void backward(unsigned int time) { 
  motor(0, -POW);  
  motor(1, -POW);  
  motor(2, -POW); 
  motor(3, -POW); 
  sleep(time);
}
void turn_left(unsigned int time) {  
  motor(0, -POW + 20); 
  motor(1, -POW + 20);  
  motor(2, POW - 20); 
  motor(3, POW - 20); 
  sleep(time);
}
void turn_right(unsigned int time) { 
  motor(0, POW - 20); 
  motor(1, POW - 20);  
  motor(2, -POW + 20);  
  motor(3, -POW + 20); 
  sleep(time);
}

void setup() {
}
void loop()
{
  if(uart1_available()) {
    char x = uart1_getkey();
    lcd("%c",x);
    if(x == '8') { 
      forward(10);
    } 
    else if(x == '2' ) { 
      backward(10);
    } 
    else if(x == '4') { 
      turn_left(10);
    } 
    else if(x == '6') { 
      turn_right(10);
    } 
    else { 
      ao();
    }
  }
}





ชื่อทีม ชื่อสถาบัน และตราประจำโรงเรียน คือสิ่งที่เด็กๆภูมิใจเสนอครับ น่าเอาแบบอย่าง




คนหนึ่งเขียนโปรแกรมหุ่นยนต์อัตโนมัติ อีกคนก็เขียนอัตโนมือ  อิอิ สามัคคีคือพลังครับ



ปุ่มนี้ท่านได้แต่ใดมา เด็กๆเขาสรรหามาใส่เพิ่มครับ เวลากดคงไม่ต้องกลัวกดไม่ถูก   ดูสวยดี 


มาดูน้องๆผู้หญิงกันบ้างครับ  ถ้าตั้งใจก็ไม่แพ้ผู้ชายเหมือนกัน สู้ๆเขาน่ะ




กำลังออกแบบหน้าตาโปรแกรมกันครับ





ปุ่มอะไรเยอะแยะมากมายนี่ 





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


"ไม่มีความสำเร็จใด  ได้มาโดยไม่พยายามนะครับ"


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


1 ความคิดเห็น:

  1. สุดยอดเลยคะ ประสงค์จะเรียนบ้าง เพื่อจะนำมาใช้สอนนักเรียน จะทำอย่างไรคะ

    ตอบลบ