วันจันทร์ที่ 31 ธันวาคม พ.ศ. 2555

AppInventor กับการใช้งาน RoboCreator ตอนที่ 1

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

ก่อนอื่นทำการเชื่่อมต่อชุดอุปกรณ์บลูทูธ เข้ากับตัวหุ่นยนต์ก่อน โดยการต่อให้ต่อดังนี้คือ
RX -- TX
TX -- RX
ดังภาพ

ติดตั้งซอฟต์แวร์ที่พัฒนาเสร็จเรียบร้อยแล้วด้วยโปรแกรม AppInventor  ลงบนโทรศัพท์มือถือแอนดรอยด์ที่ต้องการ   


วีดีโอตัวอย่างการทำงาน


เขียนโค๊ดโปรแกรมตัวอย่างลงบนตัวหุ่นยนต์ ด้วยโปรแกรม Wiring 

#include <robot.h>

void forward()
{
  motor(0,100);
  motor(1,100);
  motor(2,100);
  motor(3,100);
}
void backward()
{
  motor(0,-100);
  motor(1,-100);
  motor(2,-100);
  motor(3,-100);
}
void turnleft()
{
  motor(0,-100);
  motor(1,-100);
  motor(2,100);
  motor(3,100);
}
void turnright()
{
  motor(0,100);
  motor(1,100);
  motor(2,-100);
  motor(3,-100);
}
void setup()
{
}

void loop()
{
  
  if(uart1_available())
  {
    char  c = uart1_getkey();
    if(c=='F')
    {
      forward();
    }
    else if(c=='B')
    {
      backward();
    }
    else if(c=='L')
    {
      turnleft();
    }  
    else if(c=='R')
    {
      turnright();
    }
    else
    {
      motor_stop(ALL);
    }
  }
}

อัพโหลดเสร็จ  ทำการเชื่อมต่อ ทดสอบการทำงาน  จบ.

สอบถามข้อมูลเพิ่มเติม www.microbotshop.com




วันอาทิตย์ที่ 23 ธันวาคม พ.ศ. 2555

AppInventor กับการพัฒนาโปรแกรมแอนดรอยด์แบบ OFFLINE ตอนที่ 1

 AppInventor กับการพัฒนาโปรแกรมแอนดรอยด์แบบ OFFLINE



ก่อนอื่นเลยให้เข้าไปดาวน์โหลดไฟล์โปรแกรมสำหรับใช้งานก่อน ตามลิงค์ด้านล่างนี้


ไฟล์ที่ได้จากการดาวน์โหลด



ทำการแตกไฟล์ให้เรียบร้อย


ขั้นตอนการเริ่มต้นเข้าใช้งาน

ไฟล์แรกชื่อว่า startAI.cmd  จะอยู่ในโฟลเดอร์ที่ชื่อว่า AppInventor  

ไฟล์ที่สองชื่อว่า launch-buildserver จะอยู่ในโฟลเดอร์ที่ชื่อว่า  BuildServer

เริ่มต้นให้ทำการดับเบิ้ลคลิกที่ไฟล์ launch-buildser  ก่อน  ...Personal\BuildServer\launch-buildserver.cmd   จะปรากฏหน้าต่างดังภาพ ให้รอจนกว่าไฟล์สคริปจะทำงานเสร็จ  จนขึ้นข้อความว่า Server runing

หลังจากนั้นดับเบิ้ลคลิกไปที่ไฟล์ startAI    ...Personal\AppInventor\startAI.cmd  จะปรากฏหน้าต่างดังภาพ ให้รอจนกว่าไฟล์สคริปจะทำงานเสร็จ จนหยุดนิ่ง


เปิดโปรแกรมเว็บบราวเซอร์ขึ้นมา แนะนำให้ใช้เป็น google chrome  ที่ตำแหน่ง URL ให้พิมพ์  http://localhost:8888  จะปรากฏหน้าต่างสำหรับเข้าใช้งาน ให้คลิกเลือกที่ Log In เพื่อเข้าใช้งาน






 จะปรากฏไฟล์โปรเจ็คให้เห็น 1 ไฟล์ชื่อว่า Simple




แค่นี้ก็ถือเป็นอันเรียบร้อยแล้ว  ขั้นตอนการใช้งานโปรแกรมไม่ขอกล่าวถึงในที่นี้





















วันอาทิตย์ที่ 16 ธันวาคม พ.ศ. 2555

BlockEditor Connect to WiFi

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

 ก่อนจะส่งท้ายวันนี้ขอแนะนำเรื่องใหม่ของตัว AppInventor ให้ได้ทราบถึงสิ่งที่ได้พัฒนาขึ้นตอนนี้ คือ
 AppInventor กับการเชื่อมต่อผ่าน Wifi

            หลังจากที่ผ่านมาหลายๆท่านมีปัญหาเรื่องไดรเวอร์อุปกรณ์แอนดรอยด์ กับคอมพิวเตอร์ หรือเรื่องการเชื่อมต่อกับ Block Editor ไม่ได้ ปัจจุบัน AppInventor มีการพัฒนาให้สามารถเชื่อมต่ออุปกรณ์แอนดรอยด์เข้ากับโปรแกรม AppInventor ได้แล้ว โดยจะมีการทำงานผ่านทางสัญญาณไวไฟ นั่นหมายถึงว่าอุปกรณ์แอนดรอยด์ของเราก็ต้องรองรับการทำงานตรงนี้ด้วย    สำหรับท่านที่ใช้ไวไฟได้นั้นจำเป็นต้องโหลดแอพพลิเคชั่นมา 1ตัว ชื่อว่า MIT AICompani  




จาก Google Play หรือจะดาวน์โหลดโดยตรงจากเว็บของ AppInventor.mit.edu ก็ได้






หลังจากดาวน์โหลดโปรแกรมเสร็จเรียบร้อยแล้ว ขั้นตอนต่อไปให้ทำการติดตั้งโปรแกรมให้เรียบร้อยแล้ว  




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




ที่โปรแกรม Block Editor ให้เราเลือกการเชื่อมต่อเป็น Wifi   




 ใส่ข้อความให้ถูกต้องตรงกัน





หรือจะใช้วิธีการแสกน QR Code ก็ได้




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


x

วันศุกร์ที่ 19 ตุลาคม พ.ศ. 2555

AppInventor กับการใช้งาน POPBOT XT ตอนที่ 1

เริ่มต้นการเขียนโปรแกรม  ไปที่เว็บ appinventor.mit.edu



คลิกเลือกที่ Invent  สำหรับเริ่มต้นเข้าใช้งาน AppInventor



ทำการ Login เข้าสู่ระบบ โดยใส่ชื่อที่อยู่อีเมลล์และรหัสผ่าน ที่เราได้สมัครไว้แล้ว
สำหรับผู้เริ่มต้นใช้งานซึ่งยังไม่มี google account นั้น  สามารถใช้ที่อยู่ของ gmail ในการเข้าใช้งานได้
***วิธีการสมัครเข้าใช้งาน AppInventor ดูได้จากเนื้อหาในบทความตอนต้นได้



การขออนุญาตในการเข้าถึงที่อยู่อีเมลล์ของเรา   ให้เราคลิกเลือกที่อนุญาต 



เริ่มต้นสร้างโปรเจ็คขึ้นมาใหม่  คลิกที่ New ตั้งชื่องานที่ต้องการ ในที่นี้ผมตั้งชื่อโปรเจ็คผมว่า bluetooth_popxt 


เริ่มต้นเข้าสู่หน้าต่างการออกแบบ ดังภาพ



เริ่มต้นออกแบบหน้าตาโปรแกรม โดยจะเพิ่มเครื่องมือตัวแรก คือ ListPicker



หลังจากนั้นเพิ่มเครื่องมือ Button เข้ามาอีก 5 ตัว ปรับแต่งแก้ไขหน้าตาตามใจชอบ  ตัวอย่าง เลือกเครื่องมือที่ต้องการปรับแต่ง  ที่เมนู Properties  เลือกที่คุณสมบัติ FontSize เพื่อปรับขนาดตัวอักษรเลือกที่ Text เพื่อปรับเปลี่ยนข้อความใหม่  เลือกที่ TextAlignment เพื่อปรับตำแหน่งของข้อความ



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




ทำการเปลี่ยนชื่อเครื่องมือที่เหลือทั้งหมด




เครื่องมือที่สำคัญที่ทำหน้าที่เชื่อมต่อสื่อสารข้อมูลผ่านบลูทูธคือ BluetoothClient 


เปิดหน้าต่างโปรแกรม Blocks Editor ขึ้นมา เพื่อทำการเขียนคำสั่งให้กับโปรแกรม


หน้าตาของ Blocks Editor ก่อนเริ่มต้นเขียนคำสั่งโปรแกรม


เริ่มต้นเขียนโค้ดคำสั่งสำหรับทำหน้าที่เชื่อมต่อบลูทูธ



ชุดคำสั่งที่คอยทำหน้าที่เชื่อมต่อบลูทูธ ของโทรศัพท์มือถือกับอุปกรณ์บลูทูธอื่นๆ




เขียนโค้ดโปรแกรมดังนี้



คำอธิบายโปรแกรม
หลังจากที่ปุ่มกดแต่ละปุ่มทำงาน จะมีการส่งค่าข้อมูล ตามที่ได้กำหนดไว้ออกไป ด้วยคำสั่ง BTClient.Sent1ByteNumber >  ตามด้วยข้อมูลที่มีชนิดของข้อมูลเป็น Byte ส่งออกไปในที่นี้คือ 1


หน้าตาโปรแกรมบนมือถือที่ได้ออกแบบไว้สำหรับควบคุมการทำงานของหุ่นยนต์ popbot xt


คำอธิบาย
โปรแกรมออกแบบมาเพื่อใช้เป็นตัวอย่างในการส่งข้อมูแบบง่าย โดยจะประกอบไปด้วย 
  • ปุ่ม Connect  สำหรับเชื่อมต่อกับอุปกรณ์บูลทูธ ในที่นี้ก็คือหุ่นยนต์ popbot xt ที่ได้ติดตั้งโมดูลสื่อสารไร้สายบลูทูธ ชื่อว่า BlueSticks
  • ปุ่ม Disconnect สำหรับยกเลิกการเชื่อมต่อ
  • ปุ่ม Motor 1 ON สำหรับส่งข้อมูลค่า 1 ออกไป เพื่อให้มอเตอร์ตัวที่ 1 ของหุ่นยนต์ popxt ทำงาน
  • ปุ่ม Motor 1 OFF สำหรับส่งข้อมูลค่า 2 ออกไป เพื่อให้มอเตอร์ตัวที่ 1 ของหุ่นยนต์ popxt หยุดทำงาน
  • ปุ่ม Motor 2 ON  สำหรับส่งข้อมูลค่า 3 ออกไป เพื่อให้มอเตอร์ตัวที่ 2 ของหุ่นยนต์ popxt ทำงาน
  • ปุ่ม Motor 2 OFF สำหรับส่งข้อมูลค่า 4 ออกไป เพื่อให้มอเตอร์ตัวที่ 2 ของหุ่นยนต์ popxt หยุดทำงาน



ติดตั้ง BlueSticks 

โมดูลสำหรับการเชื่่อมต่อบลูทูธ เข้ากับบอร์ดหุ่นยนต์ POPXT

RX ที่ตัวโมดูล BlueSticks  ต่อกับ  TX ของบอร์ดหุ่นยนต์ POPXT 
TX ที่ตัวโมดูล BlueSticks  ต่อกับ  RX ของบอร์ดหุ่นยนต์ POPXT 




Source Code โปรแกรมสำหรับ POPBOT-XT














สามารถเรียกใช้งานคำสั่งต่างๆที่อยู่ภายในไลบารี่ popxt.h กับคำสั่งมาตรฐานของ arduino ได้
โดยเริ่มต้นทำการดึงไฟล์ไลบารี่ popxt.h เข้ามาใช้งาน  ประกาศค่าบอดเรด ที่จะใช้ในการเชื่อมต่อ ในที่นี้ตั้งเป็น 9600 ซึ่งโดยปกติจะเป็นค่าดีฟอล ซึ่งอาจจะไม่ต้องใส่ก็ได้


Code POPBOT XT

#include <popxt.h>
void setup() {
  glcdClear();
  Serial.begin(9600);
  Serial1.begin(9600);
}
void loop() {

  if (Serial1.available()) {
    int inByte = Serial1.read();
    Serial.println(inByte, DEC);  
    if(inByte==1)
    {
      motor(1,50);
      sleep(100);
    }
    else if(inByte==2)
    {
      motor(1,0);
      sleep(100);
    }
    else if(inByte==3)
    {
      motor(2,50);
      sleep(100);
    }
    else if(inByte==4)
    {
      motor(2,0);
      sleep(100);
    }
  }
}


  • คำสั่ง Serial.begin(9600)  เป็นการสั่งให้มีการส่งข้อมูลผ่านทาง Serial Port ด้วยอัตราความเร็ว 9600 bit /sec  *** การสื่่อสารระหว่างบอร์ดไมโครคอนโทรลเลอร์กับคอมพิวเตอร์
  • คำสั่ง Serial1.begin(9600)  เป็นการสั่งให้มีการส่งข้อมูลผ่านทาง Serial Port ที่ ด้วยอัตราความเร็ว 9600 bit /sec  ***การสื่อสารระหว่างบอร์ดไมโครคอนโทรลเลอร์กับโทรศัพท์มือถือ
  • Serial1.available() ชุดคำสั่งใช้ตรวจสอบข้อมูลว่ามีข้อมูลถูกส่งเข้ามาหรือไม่
  • Int  inByte   ประกาศตัวแปรชื่อ inByte มีชนิดข้อมูลเป็น integer
  • Serial.read()  อ่านค่าข้อมูลที่ถูกส่งเข้ามาแล้วไปเก็บไว้ที่ตัวแปร inByte
  • Serial.Println()  แสดงผลข้อมูลที่รับเข้ามาผ่านทางซีเรียลพอร์ต ซึ่งสามารถดูได้จากการเปิดหน้าต่าง Terminal ที่อยู่บริเวณมุมด้านขวาของโปรแกรม Arduino
  • If(inByte==1)  ตรวจสอบข้อมูลที่เข้ามาว่าเป็น ใช่หรือไม่ ถ้าใช่ให้ทำงานชุดคำสั่งในเครื่องหมายปีกกา ในที่นี่เราจะสั่งให้มอเตอร์ตัวที่หนึ่งของหุ่นยนต์หมุน แต่ถ้าข้อมูลที่ส่งเข้ามาไม่ตรงกับเงื่อนไขที่ได้ทำการประกาศไว้นั้น โปรแกรมจะทำการตรวจสอบเงื่อนไขต่อไปด้วยคำสั่ง else if 


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





วันพุธที่ 10 ตุลาคม พ.ศ. 2555

Bluetooth ตอนที่ 7 เขียนโปรแกรมติดต่อกับ UniconBoard


  ในบทความนี้จะเป็นตัวอย่างการเชื่อมต่อบลูทูธระหว่างโทรศัพท์มือถือระบบปฏิบัติการแอนดรอย์ที่พัฒนาด้วยโปรแกรม AppInventor ติดต่อสื่อสารข้อมูลแบบไร้สายบลูทูธโดยใช้โมดูลบลูทูธที่ชื่อว่า BlueStick ที่ทำการเชื่อมต่ออยู่กับบอร์ดทดลองไมโครคอนโทรลเลอร์ UniconBoard ที่ทำหน้าที่ประมวลผลข้อมูลต่างๆที่ถูกมาจากมือถือ 
      สร้างโปรเจ็คขึ้นมาใหม่ ตั้งชื่อตามใจชอบ  หลังจากนั้นออกแบบหน้าตาโปรแกรมดังภาพ ซึ่งประกอบด้วยคอมโพเน้นต่างๆดังนี้คือ    HorizontalArangement1,HorizontalArrangement2 , Button1,Button2 ,Notifier1,BluetoothClient1  เราสามารถปรับเปลี่ยนชื่อของคอมโพเน้นต่างๆได้ตามต้องการเพื่อให้ง่ายต่อการจำหรือการนำไปใช้งาน แล้วยังสามารถปรับแต่งปุ่มต่างด้วยรูปภาพได้ โดยแต่ละปุ่มของผมก็จะใช้สำหรับสื่อความหมายดังนี้คือ ปุ่มบลูทูธคอนเนคสำหรับเชื่อมต่อบลูทูธ  ปุ่มบลูทูธดิสคอนเนคสำหรับยกเลิกการเชื่อมต่อ  ปุ่่มหลอดไฟติด เมื่อกดแล้วไฟที่หลอด Led จะติด และหลอดไฟไม่ติด ใช้แทนการปิดไฟ หลอด Led ก็จะดับ


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


ที่บอร์ดไมโครคอนโทรลเลอร์ UniconBoard นั้น ให้เราทำการเชื่อมต่อชุดโมดูลสื่อสารไร้สายบลูทูธ ที่ชื่อว่า BlueStick เข้ากับตำแหน่งขาพอร์ตของ UniconBoard ดังนี้คือ


ขา  RX(0) ของ UniconBoard   ต่อเข้ากับขา  TX ของ BlueStick
ขา  TX(1) ของ UniconBoard   ต่อเข้ากับขา  RX ของ BlueStick
เพื่อให้การเชื่อมต่อเป็นไปง่ายขึ้นสามารถเชื่อมต่อบลูทูธเข้ากับ ADX-Btstick ก่อนแล้วค่อยนำไปเชื่อมต่อกับ UniconBoard


BlueStick


เป็นอุปกรณ์บลูทูธที่ใช้โปรไฟล์พอร์ตอนุกรม (Serial port profile : SPP) ในการติดต่อเพื่อใช้งาน จึงเหมาะอย่างยิ่งสําหรับใชในสื่อสารขอมูลอนุกรมแบบไร้สายผานคลื่นวิทยุระบบบลูทูธ
คุณสมบัติทางเทคนิค
• ความไวในการทํางาน -80dBm
• กําลังส่งสูงสุด +4dBm
• เป็นอุปกรณ์ที่ เข้ากันได้ตามมาตรฐานบลูทูธ V2.0 + EDR (Enhanced Data Rate) ถ่ายทอดข้อมูลด้วยอัตราเร็ว 3 เมกะบิตต่อวินาที
• ความถี่ใช้งาน 2.4GHz
• เป็นอุปกรณ์บลูทูธที่ทํางานในโหมดสเลฟ และใช้โปรไฟล์พอร์ตอนุกรม (SPP)
• ระยะทําการสูงสุด 10 เมตร
• อัตราบอดตั้งต้น 9,600 บิตต่อวินาที โดยใช้รู ปแบบข้อมูล 8 บิต, บิตหยุด 1 บิต และไม่มีบิตตรวจสอบพาริตี้ หรือ 8N1
• ตั้งค่าอัตราบอดใหม่ได้ ประกอบด้วย 1200, 4800, 9600, 19200, 38400, 57600, 115200, 230400, 460800, 921600, 1382400 บิตต่อวินาที
• รหัสประจําตัวสําหรั บใช้ในการจั บคู่ ตั้งได้ ตั้งแต่ 0000 ถึง 9999 (4 หลัก) ค่าตั้งต้นคือ 1234
• ย่านไฟเลี้ยง +3.3 ถึง +5.5V
• มีวงจรสื่อสารข้อมูลอนุกรมหรือ UART ในตัว
• มีสายอากาศติดตั้งภายในตัว
• ขนาด 1.5 ซม. x 4.0 ซม.
ในชุดประกอบด้วย : โมดูล BlueStick, คอนเน็กเตอร์ IDC ตัวผู้ 4 ขาทั้งแบบขาตรงและขางอ


ADX-Btstick



บอร์ดใช้งานโมดูล BlueStick
มีจุดต่อ IDC ตัวเมียสำหรับติดตั้งโมดูล BlueStick
จุดเชื่อมต่อ TxD และ RxD สามารถเชื่อมต่อกับคอนเน็กเตอร์ JST ของ INEX ได้


Code ตัวอย่างการรับข้อมูลผ่าน SerialPort


void setup() {
  pinMode(30,OUTPUT);
  Serial.begin(9600);
  Serial1.begin(9600);
}
void loop() {
  
  if (Serial1.available()) {
    int inByte = Serial1.read();
    Serial.println(inByte, DEC);  
    if(inByte==1)
    {
      digitalWrite(30,HIGH);
    }
    else {
      digitalWrite(30,LOW);

    }

  }
}

วันศุกร์ที่ 5 ตุลาคม พ.ศ. 2555

Bluetooth ตอนที่ 6 เขียนโปรแกรมมือถือควบคุมหุ่นยนต์ RoboCircle3s



ปรับแต่งแก้ไขงานจากไฟล์โปรเจ็คในบทความตอนที่แล้ว
เลือกเครื่องมือ Table Arrangement

กำหนดรูปแบบตารางขนาด Columns 3 x Row 3

ปรับแต่งแก้ไขหน้าตาของโปรแกรมตามลักษณะการใช้งาน คือ จะมีปุ่มกดอยู่ 5 ปุ่ม ประกอบด้วย ปุ่มเดินหน้า ถอยหลัง เลี้ยวซ้าย เลี้ยวขวา และหยุด



หน้าตาของโปรแกรมที่เราได้ออกแบบเสร็จเรียบร้อย

ปรับแต่งแก้ไขชื่อของ componance แต่ละตัวให้เหมาะสม เพื่อให้ง่ายต่อการเขียนโปรแกรม



เปิด Blocks Editor ขึ้นมา เขียนโปรแกรมคำสั่งดังภาพ  แค่นี้ก็เสร็จสิ้นกระบวนการในการเขียนโปรแกรมบนมือถือแล้ว



เขียนชุดคำสั่งโปรแกรมภาษา LOGO ลงบนตัวหุ่นยนต์ แล้วทดสอบการต่อสายมอเตอร์ว่าสามารถทำงานได้ถูกต้องตามที่ต้องการหรือไม่