Atx2 resuce pptx

Page 1


µÒÃÒ§¡ÒÃͺÃÁ ª ǧઠÒÇѹ·Õè 1 ¶Ö§ ¡ ͹à·ÕÂè §Çѹ·Õè 2

ͺÃÁ¡ÒÃ㪠§Ò¹ËØ ¹Â¹µ

ª ǧઠÒÇѹ·Õè 3

ª ǧº Ò¢ͧÇѹ·Õè 2

àÃÔèÁ·´Êͺ´ ǵ¹àͧ

ᨠ§¡µÔ¡Ò áÅЫ ÍÁʹÒÁ¨ÃÔ§ ª ǧº ÒÂÇѹ·Õè 3

ᢠ§¢Ñ¹


รู้จกั บอร์ด ATX2

การสร้างฟังก์ชนั

ภาษา C/C++ กับ ARDUINO

เลขฐาน 2 /ฐาน 16

ขับเคลือนหุ่นยนต์

Wireless Remote Control

เซอร์โวมอเตอร์

แขนจับ Gripper

โจทย์การแข่งขัน ฝึ กซ้อม แข่งขัน


หลักการของระบบควบคุม อินพุต

ประมวลผล

เอาต์พตุ


หลักการของระบบควบคุม

อิ นพุต

ประมวลผล

เอาต์พตุ


อะนาลอก

USB (Download)

ดิจิตอล /อะนาลอก

แบตเตอรี

อแดปเตอร์

เปิด/ปิด

เซอร์โว I2C

มอเตอร์


ลําโพงเปี ยโซ

ไฟเตือนแบต knob

สือสารอนุกรม 1

จอสี

128x160 จุด

RESET OK

ไฟเลียง CPU

ไฟเลียง SERVO


คอมไพเลอร์ Open Source

Edit+Compile+Download

Arduino

ATX2


ติดตังโปรแกรม Arduino 1.07

1. เปิดโปรแกรมในแผ่น CDROM 2. ดับเบิลคลิกไฟล์ Arduino 1.07_TPA150313 3. ทําตามขันตอนติดตังโปรแกรม


ขันตอนติดตังโปรแกรม

เมือจบขันตอนนี จะมี หน้ าต่าง ติดตังไดรเวอร์ ห้ามกด Cancel

10


ขันตอนติดตังไดรเวอร์ งไดรเว

เพือให้คอมพิวเตอร์ร้จู กั กับบอร์ด ATX2


ขันตอนติดตังไดรเวอร์


รูปแบบของโปรแกรม Arduino

void setup(){

สําหรับกําหนดค่า เกิดขึนครังเดียว

} void loop(){ }

โปรแกรมหลักทํางานต่อเนื อง


รูปแบบของโปรแกรม Arduino START

ทํางานใน Setup ทํางานใน Loop


ตรวจสอบว่าเลือกบอร์ด ATX2 แล้ว


แบตเตอรีและขัวต่อ

2 เซล 7.4V กระแส 1100mA จ่ายกระแส 30 เท่า ชาร์จ 5 เท่า

สายเชือมต่อแบตเตอรี

แดง บวก ดํา ลบ

แบตเตอรี Li-Po


รายละเอียดแบตเตอรี ลิเธี ยม-โพลิเมอร์ 2 เซล 7.4V กระแส 1100mAh จ่ายกระแส 30 เท่า ชาร์จ 5 เท่า

1 เซล 3.7V อนุกรมกัน 2 เซล = 7.4V จ่ายไฟ 1100 mA ต่อเนื องได้ประมาณ 1 ชัวโมง

จ่ายกระแสชัวขณะได้ 1100 x 30 = 33000mA O_o! ชาร์จได้ 5 เท่า 1100x5 = 5500mA ใช้เวลาประมาณ 20 นาที


ติดตังแบตเตอรีกับหุ่นยนต์


สถานะแบตเตอรี

ถ้า LED ติด ต้อง เปลียนแบตทันที


ขันตอนการเชือมต่อ

2.ต่อสาย USB กับคอมพิวเตอร์ 3.ไฟ USB ติดสว่าง 1. ต่อแบตเตอรี


เลือกพอร์ตอนุกรม


ทดสอบโปรแกรมแรก

#include <ATX2.h> void setup(){ glcd(0,0,"Hello World"); } void loop(){ }


ตรวจสอบไวยกรณ์ /อัพโหลด 1. คอมไพล์

2. แจ้งว่าคอมไพล์ผา่ น

3. อัพโหลดไปยัง ATX2


ผลลัพธ์ทีบอร์ด ATX2


คุณสมบัติของขอ GLCD


คําสังของ GLCD

glcd แสดงข้อความทีจอ GLCD ได้ 21 ตัว 16 บรรทัด (size 1) รูปแบบ void glcd(x,y,*p,...) พารามิเตอร์ x คือตําแหน่ งบรรทัดมีค่าตังแต่ 0-15 y คือตําแหน่ งตัวอักษรมีค่าตังแต่ 0-24 *p คือข้อความทีต้องการนํามาแสดง ค่าพิเศษ %d แสดงตัวเลขจํานวนเต็มในช่วง -32,768 ถึง 32,767 %h แสดงตัวเลขฐานสิบหก %b แสดงตัวเลขฐานสอง %l แสดงตัวเลขจํานวนเต็มในช่วง -2,147,483,648 ถึง 2,147,483,647 %f แสดงผลตัวเลขจํานวนจริง (แสดงทศนิยม 3 หลัก)


คําสังของ glcdMode (หมุนหน้ าจอ)

ปกติเป็ น Mode 0

ตัวอย่าง : glcdMode(1);


ปรับขนาดตัวอักษร setTextSize() ขนาดตัวอักษรเป็ น 4 เท่าขนาดปกติ

ตัวอย่าง : setTextSize(4);


ค่าสีตวั อักษร

ตัวอย่าง

#include <ATX2.h> void setup(){ setTextColor(GLCD_WHITE); glcd(0,0,"Hello"); setTextColor(GLCD_GREEN); glcd(1,0,"World"); } void loop(){}

setTextColor(COLOR) KRIT

GLCD_RED, GLCD_GREEN, GLCD_BLUE, GLCD_YELLOW, GLCD_BLACK, GLCD_WHITE, GLCD_CYAN, GLCD_MAGENTA GLCD_ORANGE GLCD_LIME GLCD_VIOLET GLCD_PINK GLCD_DOLLAR GLCD_SKY GLCD_BROWN GLCD_DARKGREEN GLCD_NAVY GLCD_GRAY GLCD_DARKGRAY


ค่าสีพนหลั ื งตัวอักษร ตัวอย่าง

#include <ATX2.h> void setup(){ setTextBackgroundColor(GLCD_RED); setTextColor(GLCD_YELLOW); glcd(0,0,"Hello World"); } void loop(){}

setTextBackgroundColor(COLOR)


แสดงรูปทรงเรขาคณิต

glcdRect(x,y,width,height,color) glcdFillRect(x,y,width,height,color) glcdCircle(x,y,radius,color) glcdFillCircle(x,y,radius,color) glcdLine(x1,y1,x2,y2,color)

x y

ตําแหน่ งแนวนอน ตําแหน่ งแนวตัง

ความกว้า ง height ความสูง redius รัศ มี color สี width


บททดสอบ 1

สร้า งวงกลมสีแ ดงอยู่ก ึงกลางจอภาพ รัศ มีเต็ม จอพอดี


บททดสอบ 2

ลากเส้น พอดี

4

เส้น โดยมีจ ดุ ตัด อยู่ก ลางจอภาพ


บททดสอบ 3

สร้า งสีเหลียมซ้อ นกัน ดังรูป


คําสังของ GLCD

glcd แสดงข้อความทีจอ GLCD ได้ 21 ตัว 16 บรรทัด (size 1) รูปแบบ void glcd(x,y,*p,...) พารามิเตอร์ x คือตําแหน่ งบรรทัดมีค่าตังแต่ 0-15 y คือตําแหน่ งตัวอักษรมีค่าตังแต่ 0-24 *p คือข้อความทีต้องการนํามาแสดง ค่าพิเศษ %d แสดงตัวเลขจํานวนเต็มในช่วง -32,768 ถึง 32,767 %h แสดงตัวเลขฐานสิบหก %b แสดงตัวเลขฐานสอง %l แสดงตัวเลขจํานวนเต็มในช่วง -2,147,483,648 ถึง 2,147,483,647 %f แสดงผลตัวเลขจํานวนจริง (แสดงทศนิยม 3 หลัก)


การแสดงผลค่าตัวเลข glcd(0,0,"%d",100);


ค่าตัวแปรทีใช้งานบ่อยๆ byte word boolean int char float

0-255 (unsigned char) 0-65535 (unsigned int) 0-1 True False

-32768 ถึง 32767 -128 ถึง 127 -3.4 x 1038 ถึง 3.4 x 1038

หาข้อมูลเพิมเติมจาก reference


ATX2 กับ ลําโพงเปี ยโซ

• ใช้ลาํ โพงเปี ยโซ มีอิมพีแดนซ์ 32W • มีค่าความถีย่าน 300Hz ถึง 3000 Hz

beep(); กําเนิด เสีย งความถี 500 Hz นาน 0.1 วิน าที

sound(freq,time);

freq ความถีเสียง time เวลาทีเสียงดัง


ตัวอย่าง : สร้างเสียงติดทุกๆ 1 วินาที #include <ATX2.h> void setup(){ } void loop(){ beep(); delay(1000); }


ตัวอย่าง : สร้างเสียงความถี 1200 Hz นาน 0.5 วินาที #include <ATX2.h> void setup(){} void loop(){ sound(1200,500); sleep(1000); }


knob() : ตัวต้านทานปรับค่าได้

หมุนเพือปรับค่า 0-1000


การใช้งานคําสัง knob()

knob() ใช้อ่านค่าตัวต้านทานปรับค่าได้บน ATX2 ค่าอยู่ในช่วง 0-1000 รูปแบบ

knob(); การคืนค่า ตัวอย่าง

ค่าทีอ่านได้จาก knob มีค่าระหว่าง 0-1000

glcd(1,1,"%d",knob());


การใช้งานคําสัง knob(x) รูปแบบ ตัวอย่าง

knob(x);

x คือค่า Scale หรือช่วงทีต้องการ

glcd(1,1,"%d",knob(180));

หน้ าจอจะแสดงค่า 0-180 เพราะตังค่าสเกลเป็ น 180


การใช้งานคําสัง knob(x,y)

รูปแบบ

ตัวอย่าง

knob(x,y);

x คือค่า Scale ช่วงเริมต้น y คือค่า Scale ช่วงท้าย

glcd(1,1,"%d",knob(10,90));

หน้ าจอจะแสดงค่า 10-90 ตามการหมุน knob()


การแสดงผลค่า knob() ทีจอ GLCD glcd(0,0,"%d",knob());


คําสัง sw_OK()

กดเป็ นจริง ไม่กดเป็ นเท็จ

ตัวอย่าง

#include <ATX2.h> void setup(){} void loop(){ if(sw_OK()){ sound(1200,100); } }

สวิตช์ OK


คําสัง sw_OK_press()

รอจนกระทังกดสวิตช์ OK แล้วปล่อยสวิตช์ จึงจะทํางาน ตัวอย่าง

#include <ATX2.h> void setup(){} void loop(){ sw_OK_press(); beep(); }

สวิตช์ OK


คําสัง OK ()

1. แสดงข้อความทีหน้ าจอ 2. รอจนกระทังกดสวิตช์ OK 3. ทํางานคําสังถัดไป ตัวอย่าง

#include <ATX2.h> void setup(){ OK(); } void loop(){ }


คําสังขับมอเตอร์ CH

POW

motor (CH,POW)

คือ มอเตอร์ 1 ถึง 6 12 สํา หรับ มอเตอร์ 1 และ 2 34 สํา หรับ มอเตอร์ 3 และ 4 56 สํา หรับ มอเตอร์ 5 และ 6 100,ALL,ALL4 สํา หรับ มอเตอร์ 1 ถึง 4 106 หรือ ALL6 สํา หรับ มอเตอร์ท งั 6 ตัว 1-6

ความเร็ว -100 ถึง ค่า บวก เดิ น หน้ า ค่า ลบ ถอยหล งั

100


ตัวอย่าง : motor()

motor (CH,POW)

motor(1,60); ให้ม อเตอร์ 1 ไปหน้ า ความเร็ว 60% motor(12,-80); ให้ ม อเตอร์ 1 และ 2 ถอยหล งั ความเร็ว 80% motor(ALL,100); ให้ม อเตอร์ 1-4 ไปด้านหน้ าด้ว ยความเร็ว

100% %


คําสังหยุดมอเตอร์ CH

motor_stop(CH)

คือ มอเตอร์ 1 ถึง 6 12 สํา หรับ มอเตอร์ 1 และ 2 34 สํา หรับ มอเตอร์ 3 และ 4 56 สํา หรับ มอเตอร์ 5 และ 6 100,ALL,ALL4 สํา หรับ มอเตอร์ 1 ถึง 4 106 หรือ ALL6 สํา หรับ มอเตอร์ท งั 6 ตัว 1-6

คําสัง ao() เท่ากับ motor_stop(12); มอเตอร์ 1 และ 2 หยุด คําสัง AO() เท่ากับ motor_stop(ALL); มอเตอร์ 1-4 หยุด


ฟังก์ชนขั ั บเคลือนหุ่นยนต์ กรณี ขบั เคลือน 2 ล้อ เดินหน้ า

motor1

motor2

fd(speed);

ถอยหลัง

motor1

motor2

bk(speed);

เลียวซ้าย

motor1

motor2

sl(speed);

เลียวด้านเดียว

tl(speed); tr(speed);

เลียวขวา

motor1

motor2

sr(speed);

หยุดหุ่นยนต์ ao();

speed = 0-100


ฟังก์ชนขั ั บเคลือนหุ่นยนต์ กรณี ขบั เคลือน 4 ล้อ เดินหน้ า เลียวขวา เลียวซ้าย

motor1 motor2

motor3

motor4

FD(speed);

ถอยหลัง

motor1 motor2

motor3 motor4

BK(speed);

motor1 motor2

motor3

motor4

SL(speed);

หยุดหุ่นยนต์ AO();

motor1 motor2

motor3

motor4

SR(speed);

speed = 0-100


ทดสอบขับเคลือน เดินหน้ า 1 วินาที ถอยหลัง 1 วินาที #include <ATX2.h> void setup(){OK();} void loop(){ FD(50); delay(1000); BK(50); delay(1000); }


ทดสอบขับเคลือน

ทดสอบเคลือนที ผ่านปุ่ มกด

#include <ATX2.h> void setup(){ } void loop(){ OK(); FD(50); delay(500);AO(); OK(); BK(50); delay(500);AO(); OK(); SL(50); delay(500);AO(); OK(); SR(50); delay(500);AO(); }


ทดสอบขับเคลือน เดินวนเป็ นรูปสีเหลียม #include <ATX2.h> void setup(){ OK(); } void loop(){ FD(50); delay(1000); SR(50); delay(700); }


ปรับหุ่นยนต์ให้เคลือนทีตรง

FD2(Speed1,speed2); เดินหน้ า BK2(Speed1,speed2); ถอยหลัง

Speed1 คือมอเตอร์ 1 และ 2 Speed2 คือมอเตอร์ 3 และ 4 motor2

motor4

motor1

motor3


เซอร์โวมอเตอร์มาตรฐาน GND (-)

แกนหมุน 180 องศา

สัญญาณ (S) ไฟเลียง (+) GND (-) สัญญาณ (S)


SM Gripper XT

SERVO2: SV2

SERVO1 : SV1


ฟังก์ชนขั ั บเซอร์โวมอเตอร์

servo(CH,POS);

CH ช่องทีใช้ขบั = 1 ถึง 8

POS ตําแหน่ งองศาเซอร์โว = 0-180 ,-1

ค่า -1 หมายถึงหยุดจ่ายสัญญาณให้เซอร์โว เซอร์โวจะไม่ลอ็ กแกน


โปรแกรมทดสอบ SERVO1 #include <ATX2.h> int x; void setup(){ OK(); } void loop(){ x=knob(180); servo(1,x); glcd(1,1,"%d ",x); }

หมุน knob ทดสอบ


โปรแกรมทดสอบ SERVO2

หมุน knob ทดสอบ


สร้างฟังก์ชนั sHome() เพือให้เซอร์โวอยู่ในตําแหน่ ง home


รูปแบบการสร้างฟั งก์ชนั ชือฟังก์ชนั

void sHome(int x){ ชุดคําสัง y=x+2; ชุดคําสังในฟังก์ชนั . }

การใช้งานฟั งก์ชนั

sHome(200);

64


สร้างฟังก์ชนั sHome() เพือให้เซอร์โวอยู่ในตําแหน่ ง home

void sHome(){ servo(2,64); delay(300); servo(1,33); delay(300); }


สร้างฟังก์ชนั keep()

เพือคีบกระป๋อง

STEP1 STEP2

void keep(){ servo(2,160); delay(300); servo(1,156); delay(300); servo(2,64); delay(300); }

STEP3


สร้างฟังก์ชนั drop() เพือวางกระป๋อง

STEP1 STEP2

void drop(){ servo(2,160); delay(300); servo(1,33); delay(300); servo(2,64); delay(300); }

STEP3


กดปุ่ ม OK เพือเรียกฟังก์ชนั #include <ATX2.h> void setup(){ OK(); glcdClear(); sHome(); glcd(1,0,"SM-Gripper XT"); glcd(2,5,"Home"); } void loop(){ sw_OK_press(); glcd(2,5,"Keep"); keep(); sw_OK_press(); glcd(2,5,"Drop"); drop(); }

void sHome(){ servo(2,64); delay(300); servo(1,33); delay(300); } void keep(){ servo(2,160); delay(300); servo(1,156); delay(300); servo(2,64); delay(300); } void drop(){ servo(2,160); delay(300); servo(1,33); delay(300); servo(2,64); delay(300); }


รีโมตคอนโทรล Wireless-X

โมดูลตัวส่ง

โมดูลตัวรับ


บิตข้อมูลเมืออ่านค่าออกมา


ติดตังและต่อสาย ต่อสายเข้าทีขา RxD1


ไลบรารี uart1


ทดสอบอ่านค่า #include <ATX2.h> int x; void setup(){ glcdMode(3); setTextSize(2); } void loop(){ while(uart1_ready()>0){ // read last x x=uart1_read(); } glcd(1,0,"DEC=%d ",x); glcd(2,0,"HEX=%h ",x); glcd(3,0,"BIN=%b ",x); }


ทดสอบขับเคลือนหุ่นยนต์ด้วย 4 ปุ่ มขวา #include <ATX2.h> byte x; void setup(){} void loop(){ while(uart1_ready()>0){ x=uart1_read(); } if(x==0x01) { BK(60); } else if(x==0x02){ SR(60);} else if(x==0x04){ SL(60);} else if(x==0x08){ FD(60);} else{ AO(); } }


switch case

switch (var) { case 1: // ทํางานเมือค่าของตัวแปรเท่ากับ 1 break; case 2: //ทํางานเมือค่าของตัวแปรเท่ากับ 2 break; default: // ถ้าหากค่าของตัวแปรไม่ใช่ case ทีกล่าวมา ทําส่วนนี }

var ตัวแปรทีต้องการทดสอบว่าตรงกั บเงือนไขใด default ถ้าไม่ตรงกับเงือนไขใดๆ เลยให้ทาํ คําสังต่อท้ายนี break เขียนต่อท้าย case ต่างๆ เพือไม่ต้องทําเงือนไขอืน ๆ ต่อ


ทดสอบขับเคลือนหุ่นยนต์ด้วย SWITCH CASE #include <ATX2.h> byte x; void setup(){} void loop(){ while(uart1_ready()>0){ x=uart1_read(); } switch (x){ case 0x01: BK(60);break; case 0x02: SR(60);break; case 0x04: SL(60);break; case 0x08: FD(60);break; default: AO(); } }


เพิมปุ่ ม Turbo

#include <ATX2.h> byte x; void setup(){} void loop(){ while(uart1_ready()>0){ x=uart1_read(); } switch (x){ case 0x01: BK(60);break; case 0x02: SR(60);break; case 0x04: SL(60);break; case 0x08: FD(60);break; // Turbo Mode case 0x81: BK(100);break; case 0x82: SR(100);break; case 0x84: SL(100);break; case 0x88: FD(100);break; default: AO(); } }


สังงาน servo void sHome(){ servo(2,64); delay(300); servo(1,33); delay(300); } void keep(){ servo(2,160); delay(300); servo(1,156); delay(300); servo(2,64); delay(300); } void drop(){ servo(2,160); delay(300); servo(1,33); delay(300); servo(2,64); delay(300); }

#include <ATX2.h> byte x; void setup(){} void loop(){ while(uart1_ready()>0){ x=uart1_read(); } switch (x){ case 0x01: BK(60);break; case 0x02: SR(60);break; case 0x04: SL(60);break; case 0x08: FD(60);break; // Turbo Mode case 0x81: BK(100);break; case 0x82: SR(100);break; case 0x84: SL(100);break; case 0x88: FD(100);break; // Servo case 0x40: sHome();break; case 0x20: keep();break; case 0x10: drop();break; default: AO(); } }


สังงาน servo ค่อยๆเพิม

#include <ATX2.h> byte x; int s1=90,s2=90; void setup(){ servo(1,s1); servo(2,s2); } void loop(){ while(uart1_ready()>0){ x=uart1_read(); } switch (x){ case 0x01: BK(60);break; case 0x02: SR(60);break; case 0x04: SL(60);break; case 0x08: FD(60);break; // Turbo }


เขียนเมนูอย่างง่าย #include <ATX2.h> int k; void setup(){ OK();glcdClear();} void loop(){ k=knob(3); glcd(0,0,"Prog %d ",k+1); if(sw_OK()){ if(k==0){P1();} else if(k==1){P2();} else if(k==2){P3();} else if(k==3){P4();} }}

void P1(){ while(1){ glcd(1,1,"L=%d ",analog(0)); glcd(3,1,"R=%d ",analog(1)); }} void P2(){ while(1){ beep(16); }} void P3(){ while(1){ fd(100); }} void P4(){ while(1){bk(100); }}


KRITSADA JAIYEN กฤษดา ใจเย็น

บริษทั อินโนเวตีฟ เอ็กเพอริเมนต์ จํากัด 108 ซอยสุขมุ วิท 101/2 ถ.สุขมุ วิท แขวงบางนา เขตบางนา กรุงเทพฯ 10260 โทรศัพท์ 02-7477001-4 โทรสาร 02-7477005 www.inex.co.th

facebook.com/innovativeexperiment

kritsada@inex.co.th


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.