วันพฤหัสบดีที่ 23 พฤษภาคม พ.ศ. 2556

accelerometer sensor ตอนที่ 1


Accelerometor Sensor เป็นโมดูลเซนเซอร์ตัวหนึ่งที่ถูกติดตั้งอยู่บนตัวเครื่องของอุปกรณ์แอนดรอยด์ ไม่ว่าจะเป็นสมาทโฟน หรือว่าแท็บเล็ต
รายละเอียดอ่านได้จากที่นี่ครับ เป็นบล็อกของคุณเอก วิศวกรผู้เชียวชาญการเขียนโปรแกรมบนแอนดรอยด์เขียนไว้ดีมากครับ http://www.akexorcist.com/2013/03/android-code-accelerometer.html   ความรู้ผมสู้ไม่ได้ครับ  55 

ผมขอสรุปสั้นๆเพื่อให้เข้าใจอย่างนี้น่ะครับว่า ในการใช้งาน Accelerometor sensor นั้น จะอาศัย การอ่านค่าของเซนเซอร์ จากแกน X Y และ Z   แล้วนำค่าที่ได้มาเขียนเป็นเงื่อนไขในการใช้งานโปรแกรมตามต้องการ



การอ่านค่าแกน X Y  มีทั้งบวกและลบ  เพราะฉะนั้นเอียงไปด้านไหน ค่าก็จะได้ตามนั้น ครับ


 การอ่านค่าแกน  X Y และ Z


ออกแบบหน้าตาโปรแกรม โดยค่าที่อ่านได้จาก Accel X  Accel Y  จะนำไปแสดงผลแทนที่ของ Label  โดยในตัวอย่างจะใช้ภาพเป็นตัวแสดงผล การเปลี่ยนแปลงของตำแหน่งในแนวแกน X Y เพราะฉะนั้นเมื่อเราเอียงอุปกรณ์แอนดรอยด์ของเราไปด้านไหน ภาพก็จะเลื่อนไปยังตำแหน่งนั้นๆ


ตัวอย่างการเขียนโปรแกรมด้วย AppInventor เพื่ออ่านค่าจาก Accelerometor ในแนวแกน X Y Z ค่าที่อ่านได้จะไปแสดงที่ label ที่ชื่อ XAccel  และ YAccel   ส่วนค่าของ Z ในที่นี้ไม่ได้ใช้งาน เลยขี้เกียจเขียน


ตัวอย่างการประยุกต์ใช้งาน  Accelerometor sensor  เพื่อให้ภาพเคลื่อนที่ไปในแนวแกน X Y  โดยมีการใช้เงื่อนไขในการตรวจเช็คค่าที่ได้จากเซนเซอร์ว่ามีค่ามากหรือน้อยกว่าค่าที่กหนดไว้ เช่น ถ้าค่าของเซนเซอร์ที่อ่านได้ในแนวแกน X มีค่ามากกว่า 2  ให้ภาพเคลื่อนที่ไปข้างหน้า  ถ้าค่าที่อ่านได้น้อยกว่า 2 จะให้ภาพเคลื่อนที่ไปข้างหลัง  ซึ่งในการเคลื่อนที่ของภาพแต่ละครั้งจะเคลื่อนไปหน้าหรือหลัง ครั้งละสองพิกเซล  


สังเกตการทำงานของโปรแกรม


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

ดาวน์โหลดซอร์สโค๊ด   ตัวอย่างปรับแก้ดูครับ ลองเอาไปทำเกมส์ได้น่ะครับ


บทความหน้าจะมีเรื่องราวเกี่ยวกับการควบคุมหุ่นยนต์ พร้อมกับการทำเกมส์เล่นแบบขำๆมาฝากน่ะครับ

วันศุกร์ที่ 10 พฤษภาคม พ.ศ. 2556

Slider

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


นำเครื่องมือ Label มาวางต่อ จากนั้นปรับแต่งค่าคุณสมบัติต่างๆตามต้องการ

เราสามารถปรับสีของสไลด์ด้านขวา และ ด้านซ้ายได้ ค่าปกติจะเป็นสีส้มกับสีเทา  
  • MaxValue เป็นค่าสูงสุดของสไลด์ที่สามารถอ่านได้ ซึ่งเราสามารถตั้งได้ตามต้องการ
  • Min Value เป็นค่าตำสุดที่สามารถอ่านได้จากสไลด์  ตั้งได้ตามต้องการ
  • ThumbPosition เป็นค่าตำแหน่งของตัวของตัวสไลด์



ทดสอบการทำงานเขียนคำสั่งตามภาพ 


ผลการทำงาน








วันศุกร์ที่ 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();
    }
  }
}





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




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



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


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




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





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





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


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


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