เริ่มต้นการเขียนโปรแกรมหุ่นยนต์

Preview:

DESCRIPTION

เริ่มต้นการเขียนโปรแกรมหุ่นยนต์

Citation preview

• แนะน��ให้รู้�จั กก บ Arduino

• แกะกล่�อง ตรู้วจัสอบอ�ปกรู้ณ์�ในชุ�ด• ก�รู้ต�ดต �งซอฟต�แวรู้� • สรู้�งห้��นยนต� POP-BOT XT

• ขั้ �นตอนก�รู้เขั้$ยนโปรู้แกรู้มเพื่()อควบค�มห้��นยนต�• พื่ ฒน�ห้��นยนต�ให้ทำ��ต�มภ�รู้ก�จัต��งๆ• ก�รู้เคล่()อนทำ$)เบ(�องตน• ก�รู้ใชุเซนเซอรู้�สว�ตชุ�• ห้��นยนต�เคล่()อนทำ$)ต�มเสน

ขั้ �นตอนก�รู้อบรู้ม

อ�นพื่�ต เอ�ต�พื่�ต

ปรู้ะมวล่ผล่

ห้ล่ กก�รู้ขั้องรู้ะบบควบค�ม

ตนก��เน�ด Arduino www.ard

uino.cc

• ค��ม(ออ�งอ�งก�รู้ใชุง�น• ต วอย��ง

ฮ�รู้�ดแวรู้�• จั�ดก��เน�ด

IDEA• ทำ$)ด�วน�โห้ล่ด

โปรู้แกรู้ม• ทำ$)ซ กถ�มป2ญห้�

ขั้อม�ล่อ�งอ�งส��ห้รู้ บเขั้$ยนโปรู้แกรู้ม

• ชุ�ดค��ส )ง• ไล่บรู้�รู้$)• ต วแปรู้• ค��สงวน

ตนก��เน�ด POP-XT

โครู้งก�รู้ Opensource จั�ก Arduino

POP-XT ขั้อง inex

HARDWARE

POP-XT

Edit + Compile + Download

C/C++

คอมไพื่เล่อรู้� Opensource

SOFTWARE

ค�ณ์สมบ ต�ขั้อง POP-XT• ใชุไมโครู้คอนโทำรู้ล่เล่อรู้� ATMEGA32U4 ขั้อง ATMEL

• คว�มล่ะเอ$ยดอ��นค��อะน�ล่อก 10 บ�ต (0-1023) 1024 รู้ะด บ • ห้น�วยคว�มจั��โปรู้แกรู้ม 32 ก�โล่ไบต� • ทำ��ง�นทำ$)คว�มเรู้5ว 16 ล่�นค��ส )งต�อว�น�ทำ$• เชุ()อมต�อก บคอมพื่�วเตอรู้�ผ��นพื่อรู้�ต USB โดยตรู้งผ��นส�ย Mini-B

• ม$จัอ LCD กรู้�ฟ6กส$คว�มล่ะเอ$ยด 128x160 พื่�กเซล่• ขั้ บมอเตอรู้�ไฟตรู้งได 2 ต ว เซอรู้�โวมอเตอรู้�ได 3 ต ว• ต�อเซนเซอรู้�อะน�ล่อกได 8 ชุ�อง

220mF

100mF

TB66

12

ATM

eg

a32

U4

100

ต��แห้น�งก�รู้ว�งอ�ปกรู้ณ์�ขั้อง POP-XT

อ�ปกรู้ณ์�อ�นพื่�ต

Switch (Digital)

Reflect (Analog)

Distance (Analog)

ป�7ม OK (Digital)

knob (Analog)

อ�ปกรู้ณ์�เอ�ต�พื่�ต

Servo Motor

DC Motor

ล่��โพื่งเป8ยโซ

จัอ GLCD128x160

ZX-LED

ต�ดต �งซอฟต�แวรู้�

ปรู้ะกอบดวย• ซอฟต�แวรู้� Arduino 1.0

• ต วอย��ง POP-BOT XT• ไดรู้เวอรู้� USB

• ไล่บรู้�รู้$) POP-BOT XT

Arduino1.0 POP-BOT XT Setup.exe

1 2

3 4

ต�ดต �งซอฟต�แวรู้� POP-BOT ล่งในเครู้()องคอมพื่�วเตอรู้� พื่รู้อมทำ �งต วต�ดต �งไดรู้เวอรู้� USB

5

6

7

8

เป6ดโปรู้แกรู้มจั�ก Start Menu

เรู้�)มตนเชุ()อมต�อก บคอมพื่�วเตอรู้�

1. ใส่�ถ่�านชาร์จหร์�อถ่�านอ�ลคาไลน AA 4 ก้�อน

2.เส่�ยบส่าย Mini USB

3.เปิ�ดส่วิ�ตชจ�ายไฟให� POP-XT ก้�อน 4.เส่�ยบส่าย USB เข้�าก้�บคอมพิ�วิเตอร์

027477001-4

ก�รู้แกป2ญห้�ในกรู้ณ์$เก�ดป2ญห้�ก�รู้ต�ดต �ง windows 7

ให้เขั้�ไปทำ$) Device Manager

ก�รู้แกป2ญห้�ในกรู้ณ์$เก�ดป2ญห้�ก�รู้ต�ดต �ง windows 7

จัะเจัออ�ปกรู้ณ์�ทำ$)ม$เครู้()องห้ม�ย !

คล่�กเม�ส�ขั้ว�เล่(อก Update Driver

ก�รู้แกป2ญห้�ในกรู้ณ์$เก�ดป2ญห้�ก�รู้ต�ดต �ง windows 7

เล่(อกห้ วขั้อต�มรู้�ปชุ$�ไปต��แห้น�งทำ$)เก5บไดรู้เวอรู้�

เม()อแจังเต(อน เล่(อกต�มรู้�ป ก�รู้ต�ดต �งเสรู้5จัสมบ�รู้ณ์�

ก�รู้ต�ดต �งไดรู้เวอรู้�ก บ Windows XP

ก�รู้ต�ดต �งไดรู้เวอรู้�ก บ Windows XP

คอมพื่�วเตอรู้�พื่บฮ�รู้�ดแวรู้�ให้ม�

เล่(อกต��แห้น�งทำ$)เก5บไดรู้เวอรู้�C:\Arduino\drivers

ก�รู้ต�ดต �งเสรู้5จัสมบ�รู้ณ์�

ก�รู้ต�ดต �ง Arduino บนเครู้()อง Mac OSX

แตกไฟล่� ZIP จัะได ICON ด งรู้�ป

ล่�ก ICON Arcuino รู้วมเขั้�ไวทำ$) Aplication

เป6ดโปรู้แกรู้ม Arduino เล่(อกบอรู้�ดเป9น POP-XT

เม()อเชุ()อมต�อส�ย USB เครู้()อง Mac จัะเห้5นพื่อรู้�ตส()อส�รู้ชุ()อ tty.usbmodem...

ห้น�ต�ขั้องโปรู้แกรู้ม Arduino

void setup() {

}

void loop() {

}

ส��ห้รู้ บก��ห้นดค�� เก�ดขั้:�นครู้ �งเด$ยว

โปรู้แกรู้มห้ล่ กทำ��ง�นต�อเน()อง

เล่(อกชุ()อบอรู้�ดเป9น POP-XT

เล่(อกต��แห้น�งพื่อรู้�ตอน�กรู้ม

เป6ดโปรู้แกรู้มต วอย��ง

เป9นโปรู้แกรู้มแสดงขั้อคว�มทำ$)ห้น�จัอ GLCD

คอมไพื่ล่� (แปล่โปรู้แกรู้มทำ$)เขั้$ยนว��ถ�กไวยกรู้ณ์�ห้รู้(อไม�) กดป�7มน$�

ก5ได

แถบสถ�นะด�นล่��งแสดงผล่ล่ พื่ธ์�

ขั้น�ดห้น�วยคว�มจั��ทำ$)ใชุ

ขั้น�ดห้น�วยคว�มจั��ทำ �งห้มด

แจังว��คอมไพื่ล่�ผ��น

ต�อส�ย USB ก บคอมพื่�วเตอรู้�

upload โปรู้แกรู้มไปย งห้��นยนต�

ห้รู้(อกดป�7มน$�ก5ได

ผล่ล่ พื่ธ์�

ค��ส )ง glcd

แสดงขั้อคว�ม

ค�ณ์สมบ ต�ขั้องจัอภ�พื่

glcd แสดงขั้อคว�มทำ$)จัอ GLCD ได 21 ต ว 16 บรู้รู้ทำ ด (size 1) รู้�ปแบบ

void glcd(unsigned char x, unsigned char y ,char *p,...)

พื่�รู้�ม�เตอรู้�x ค(อต��แห้น�งบรู้รู้ทำ ดม$ค��ต �งแต� 0-15y ค(อต��แห้น�งต วอ กษรู้ม$ค��ต �งแต� 0-24*p ค(อขั้อคว�มทำ$)ตองก�รู้น��ม�แสดง

ค��พื่�เศษ%d แสดงต วเล่ขั้จั��นวนเต5มในชุ�วง -32,768 ถ:ง

32,767%l แสดงต วเล่ขั้จั��นวนเต5มในชุ�วง -

2,147,483,648 ถ:ง 2,147,483,647%f แสดงผล่ต วเล่ขั้จั��นวนจัรู้�ง (แสดงทำศน�ยม 3

ห้ล่ ก)

ค�ณ์สมบ ต�ขั้องจัอภ�พื่

ไล่บรู้�รู้$)ขั้อง glcdglcdsetTextColorsetTextBackgroundColorglcdClearglcdFillScreen glcdModesetTextSizegetTextColorgetTextBackgroundColorglcdTextSizeglcdGetModeglcdPixelglcdRectglcdFillRectglcdLineglcdCircleglcdFillCircleglcdArc

unsigned int color[]= { GLCD_RED,

GLCD_GREEN,

GLCD_BLUE,

GLCD_YELLOW,

GLCD_BLACK,

GLCD_WHITE,

GLCD_SKY,

GLCD_MAGENTA};

ต วแปรู้ทำ$)ใชุส��ห้รู้ บก��ห้นดส$พื่(�นฐ�น

setTextColor(COLOR)unsigned color[]={ GLCD_RED, GLCD_GREEN, GLCD_BLUE, GLCD_YELLOW, GLCD_BLACK, GLCD_WHITE, GLCD_SKY, GLCD_MAGENTA};

ต วอย��ง#include <popxt.h>void setup(){ setTextColor(GLCD_WHITE); glcd(0,0,"Hello"); setTextColor(GLCD_GREEN); glcd(1,0,"World");}void loop(){}

ค��ส$ต วอ กษรู้

setTextBackgroundColor(COLOR)

unsigned color[]={ GLCD_RED, GLCD_GREEN, GLCD_BLUE, GLCD_YELLOW, GLCD_BLACK, GLCD_WHITE, GLCD_SKY, GLCD_MAGENTA};

ต วอย��ง#include <popxt.h>void setup(){setTextBackgroundColor(GLCD_RED);setTextColor(GLCD_YELLOW);glcd(0,0,"Hello World");}void loop(){}

ค��ส$พื่(�นห้ล่ งต วอ กษรู้

glcdClear()

ต วอย��ง#include <popxt.h>void setup(){}void loop(){ glcdClear(); sleep(500); glcdFillScreen(color[0]); sleep(500); glcdFillScreen(color[1]); sleep(500); glcdFillScreen(color[2]); sleep(500);}

เคล่$ยรู้�ห้น�จัอ

glcdFillScreen(COLOR)

เทำส$ล่งบนห้น�จัอทำ �งห้น�

setTextSize ปรู้ บขั้น�ดต วอ กษรู้ เป9นเทำ��ต วถ�ไม�ก��ห้นดขั้น�ดเป9น 1 เทำ��ต วอย��ง

#include <popxt.h>void setup(){}void loop(){ setTextSize(1); glcd(0,0,"1x"); setTextSize(2); glcd(0,2,"2x"); setTextSize(3); glcd(0,3,"3x"); setTextSize(4); glcd(1,0,"4x"); setTextSize(5); glcd(1,2,"5x");}

ห้ม�นจัอ ขั้ย�ยขั้น�ด

#include <popxt.h> // ผนวิก้ไฟลไลบร์าร์�$หล�ก้int i,j;void setup(){ glcdFillScreen(GLCD_WHITE); // ก้%าหนดให�ส่�ข้องพิ�'นหล�งเปิ(นส่�ข้าวิ setTextColor(GLCD_BLACK); // ก้%าหนดส่�ต�วิอ�ก้ษร์เปิ(นส่�ด%า setTextBackgroundColor(GLCD_WHITE); // ก้%าหนดส่�พิ�'นหล�งข้องต�วิอ�ก้ษร์เปิ(นส่� ข้าวิ for (i=0;i<16;i++){ // วินล* ปิ 16 ร์อบเพิ�$ อแส่ดงข้� อควิาม glcd(i,i,"Row %d ",i); // แส่ดงข้� อควิามที่�$ จอแส่ดงผล }}void loop(){}

ต วอย��งก�รู้แสดงขั้อคว�มห้ล่�ยบรู้รู้ทำ ด

MultipleTextline.ino

โจัทำย�

ส่ร์�างวิงก้ลมส่�แดงอย*�ก้-$งก้ลางจอภาพิ ร์�ศม�เต0มจอพิอด�

โจัทำย�

ลาก้เส่�น 4 เส่�นโดยม�จ2ดต�ดอย*�ก้ลางจอภาพิพิอด�

โจัทำย�

ส่ร์�างส่�$เหล�$ยมซ้�อนก้�นด�งร์*ปิ

glcd แสดงขั้อคว�มทำ$)จัอ GLCD ได 21 ต ว 16 บรู้รู้ทำ ด (size 1) รู้�ปแบบ

void glcd(x,y,*p,...)พื่�รู้�ม�เตอรู้�

x ค(อต��แห้น�งบรู้รู้ทำ ดม$ค��ต �งแต� 0-15y ค(อต��แห้น�งต วอ กษรู้ม$ค��ต �งแต� 0-24*p ค(อขั้อคว�มทำ$)ตองก�รู้น��ม�แสดง

ค��พื่�เศษ%d แสดงต วเล่ขั้จั��นวนเต5มในชุ�วง -32,768 ถ:ง

32,767%l แสดงต วเล่ขั้จั��นวนเต5มในชุ�วง -

2,147,483,648 ถ:ง 2,147,483,647%f แสดงผล่ต วเล่ขั้จั��นวนจัรู้�ง (แสดงทำศน�ยม 3

ห้ล่ ก)

ค��ส )ง GLCD

ก�รู้แสดงผล่ต วเล่ขั้

glcd(0,0,"%d",100);

ต วแปรู้ใน Arduino

byte

0-65535 (unsigned int)word

0-255 (unsigned char)

0-1boolean True False

-32768 ถ่-ง 32767int

-128 ถ่-ง 127char-3.4 x 1038 ถ่-ง 3.4 x 1038 float

ห้�ขั้อม�ล่เพื่�)มเต�มจั�ก reference

เอ�ต�พื่�ตด�จั�ตอล่อย��งง��ย

เป9นฟ2งก�ชุ นส�งขั้อม�ล่ออกเอ�ต�พื่�ต ต��แห้น�งขั้� num ดวยสถ�นะล่อจั�ก dat "0" ห้รู้(อ "1"ต วอย��ง

......out(6,1) // ให้ LED ทำ$)ต�อขั้� 6 ต�ดสว��งout(4,0) // ให้ LED ทำ$)ต�อขั้� 6 ด บ......

out(int num,int dat)

สรู้�งเส$ยงออกล่��โพื่ง

ล่��โพื่งเป8ยโซ

beep()

sound(freq,time)

ค��ส )งสรู้�งเส$ยงฟ2งก�ชุ )นก��เน�ดเส$ยงอย��งง��ย beep : ที่%าหน�าที่�$ก้%าเน�ดเส่�ยงควิามถ่�$ 500 Hz นาน 100 ม�ลล�วิ�นาที่�

void beep(void);

ฟ2งก�ชุ )นก��เน�ดเส$ยงคว�มถ$)ใดๆ sound : ที่%าหน�าที่�$ก้%าเน�ดเส่�ยงควิามถ่�$ ตามช�วิงเวิลาที่�$ก้%าหนด

void sound(int freq,int time);

พิาร์าม�เตอร์ freq ใช�ก้%าหนดค�าควิามถ่�$ค�าส่�ญญาณเส่�ยง

time ใช�ก้%าหนดช�วิงเวิลาในก้าร์ก้%าเน�ดส่�ญญาณเส่�ยงในหน�วิยม�ลล�วิ�นาที่�

สรู้�งส ญญ�ณ์เส$ยงต�?ดทำ�กๆ 1 ว�น�ทำ$(คว�มถ$)เส$ยง 500 Hz ด งน�น 0.1 ว�น�ทำ$)

#include <popxt.h>void setup(){

}void loop(){ beep(); sleep(1000);}

สรู้�งส ญญ�ณ์เส$ยงคว�มถ$) 1200 Hz ด งน�น 0.5 ว�น�ทำ$ โดยเวนห้วงทำ�กๆ 1 ว�น�ทำ$#include <popxt.h>void setup(){

}void loop(){ sound(1200,500); sleep(1000);}

knob เป9นฟ2งก�ชุ )นอ��นค�� knob บน POP-XT เห้ม(อนค��ส )ง analog(8) ค��อย��ในชุ�วง 80-1023 รู้�ปแบบ

unsigned int knob()ก�รู้ค(นค��

ค��ทำ$)อ��นไดจั�ก knob ม$ค��รู้ะห้ว��ง 80-1023ต วอย��ง

int val=0; // ก��ห้นดค��ต วแปรู้ส��ห้รู้ บเก5บค��อะน�ล่อกval=knob(); // อ��นค��จั�ก knob เก5บค��ในต วแปรู้ valglcd("%d",val); // น��ค��แสดงทำ$) GLCD

knob()

sw_ok() เป9นฟ2งก�ชุ )นตรู้วจัสอบสว�ตชุ� OK บน POP-XT ให้สถ�นะจัรู้�งเม()อกดสว�ตชุ�แล่ะเป9นเทำ5จัเม()อไม�กดสว�ตชุ�รู้�ปแบบ

unsigned char sw_ok()ก�รู้ค(นค��

1 (เป9นจัรู้�ง) เม()อกดสว�ตชุ�0 (เป9นเทำ5จั) เม()อไม�กดสว�ตชุ�

ห้ม�ยเห้ต� ก�รู้กดสว�ตชุ�ทำ��ให้ค��ทำ$)อ��นไดจั�ก Knob ม$ค��เป9น 0ต วอย��ง

if(sw_ok()){

beep();}

sw_ok()

เป9นฟ2งก�ชุ )นวนตรู้วจัสอบก�รู้กดสว�ตชุ� OK บนบอรู้�ด POP-XT ตองรู้อจันกรู้ะทำ )ง SW1 ถ�กปล่�อยห้ล่ งจั�กม$ก�รู้กดสว�ตชุ� จั:งจัะผ��นฟ2งก�ชุ )นน$�ไปทำ��ง�นค��ส )งอ()นๆต วอย��ง

......sw_ok_press(); // รู้อจันกรู้ะทำ )งกดสว�ตชุ�

OK ......

sw_ok_press()

ก�รู้ขั้ บเคล่()อน POP-BOT XT

ชุ�ดเฟ@องขั้ บมอเตอรู้�อ ตรู้�ทำด 48:1

ภ�ยในชุ�ดเฟ@องขั้ บมอเตอรู้�

BATTERY

+-

M

BATTERY

-+

M

ควบค�มทำ�ศทำ�งขั้องมอเตอรู้�ดวยทำ�ศทำ�งขั้องกรู้ะแสไฟฟA�

ก�รู้ก��ห้นดทำ�ศทำ�งขั้องมอเตอรู้�

ฟ2งก�ชุ )น motor ส��ห้รู้ บขั้ บมอเตอรู้�ไฟตรู้งรู้�ปแบบ

void motor(char ch,int pow)

พื่�รู้�ม�เตอรู้� ch ใชุก��ห้นดชุ�องขั้ บต �งแต� 1 ถ:ง 2

pow ใชุก��ห้นดขั้น�ดก��ล่ งขั้ บ -100 ถ:ง 100• กรู้ณ์$ขั้ บดวยก��ล่ ง 1 ถ:ง 100 ไฟสถ�นะปรู้ะจั��ชุ�องต�ด

เป9นส$เขั้$ยว• กรู้ณ์$ขั้ บดวยก��ล่ ง -1 ถ:ง -100 ไฟสถ�นะปรู้ะจั��ชุ�องต�ด

เป9นส$แดง(ทำ�ศก�รู้ห้ม�นตรู้งขั้�มก บขั้ บดวยก��ล่ งเป9นบวก)

motor(1,100); มอเตอรู้� 1 เด�นห้น�คว�มเรู้5ว 100 เปอรู้�เซ5นต�motor(2,-50); มอเตอรู้� 2 ถอยห้ล่ ง คว�มเรู้5ว 50 เปอรู้�เซ5นต�

ฟ2งก�ชุ )น motor_stop ส��ห้รู้ บห้ย�ดขั้ บมอเตอรู้�ไฟตรู้งต�มชุ�องทำ$)ก��ห้นดรู้�ปแบบ

void motor_stop(char ch)

พื่�รู้�ม�เตอรู้� ch ใชุก��ห้นดชุ�องขั้ บต �งแต� 1 ถ:ง 2 ในกรู้ณ์$ทำ$)ตองก�รู้ห้ย�ดขั้ บทำ�กชุ�องพื่รู้อมก นส�ม�รู้ถก��ห้นดเป9น ALLกรู้ณ์$ห้ย�ดมอเตอรู้� 2 ต วพื่รู้อมก น ส�ม�รู้ถใชุค��ส )ง ao() แทำนไดmotor_stop(1); มอเตอรู้� 1 ห้ย�ดmotor_stop(2); มอเตอรู้� 2 ห้ย�ด

ao(); มอเตอรู้� 2 ต วห้ย�ดพื่รู้อมก น

void fd(int8_t speed) { motor(ALL,speed); }

void bk(int8_t speed) { motor(ALL,-speed);}

void sl(int8_t speed){ motor(1,-speed); motor(2,speed);}

void sr(int8_t speed){ motor(1,speed); motor(2,-speed);}

มอเตอรู้� 2 ต วพื่รู้อมก น

fd(Speed); เด�นหน�าbk(Speed); ถ่อยหล�งsl(Speed); เล�'ยวิซ้�ายsr(Speed); เล�'ยวิข้วิา

Speed ค�อควิามเร์0วิห2�นยนต 0-100

ao() ;หย2ด

#include <popxt.h>void setup(){

fd(100);}void loop() {}

ก�รู้ปรู้ บแต�งเพื่()อให้ห้��นยนต�เคล่()อนทำ$)ตรู้ง

ทำ��ก�รู้ปรู้ บขั้ �วมอเตอรู้�ชุ�อง 1 แล่ะ 2 ทำ$)ทำ��ให้ล่อทำ �งสองด�นห้ม�นไปขั้�งห้น�ต�มรู้�ปให้ได

ทำดสอบขั้ บเคล่()อนห้��นยนต�เด�นห้น�แล่ะถอยห้ล่ งพื่(�นฐ�น

#include <popxt.h>

void setup(){}void loop(){ fd(80); sleep(1000); bk(80); sleep(1000);}

ForwardBackward.ino

ห้��นยนต�เด�นวนเป9นรู้�ปส$)เห้ล่$)ยม

#include <popxt.h> void setup(){ sw_ok_press(); } void loop(){ fd(80); sleep(900); tr(80); sleep(400); }

Rectangle_running.ino

fd2(Speed1,speed2); เด�นหน�าbk2(Speed1,speed2); ถ่อยหล�ง

Speed1 ค(อมอเตอรู้�ด�นซ�ยSpeed2 ค(อมอเตอรู้�ด�นขั้ว�

ห้��นยนต�เคล่()อนทำ$)เป9นวงกล่ม

CircleMove.ino

#include <popxt.h> void setup(){ fd2(30,90); // Robot moves circle shape sw_ok_press(); // Wait for OK switch pressing ao(); // Robot stop}void loop(){}

ต วอย��งโคด ห้��นยนต�เคล่()อนทำ$)เป9นวงกล่ม

CircleMove.ino

ก�รู้เคล่()อนทำ$)ห้ล่�ยทำ�ศทำ�ง

MultipleDirectionMove.ino

แผงวงจัรู้สว�ตชุ�: ZX-SWITCH (Digital)

ค�ณ์สมบ ต�ทำ�งเทำคน�ค• ถ�สว�ตชุ�ถ�กกดจัะอ��นค��ขั้อม�ล่ไดเป9นล่อจั�ก “0” พื่รู้อมก บ

ไฟแสดงสถ�นะต�ดสว��ง • ถ�สว�ตชุ�ไม�ถ�กกดจัะอ��นค��ขั้อม�ล่ไดเป9นล่อจั�ก “1”

ฟ2งก�ชุ )น in ส��ห้รู้ บอ��นค��ส ญญ�ณ์แบบด�จั�ตอล่จั�กขั้�พื่อรู้�ตใดๆขั้องบอรู้�ดควบค�มห้ล่ กรู้�ปแบบ

char in(char _bit);

พื่�รู้�ม�เตอรู้� _bit ใชุก��ห้นดต��แห้น�งห้ม�ยเล่ขั้พื่อรู้�ตทำ$)ตองก�รู้ต�ดต�อก�รู้ค(นค��ฟ2งก�ชุ )นจัะทำ��ก�รู้ค(นค��ส ญญ�ณ์ด�จั�ตอล่ขั้องต��แห้น�งขั้�พื่อรู้�ตทำ$)อ��นซ:)งอ�จัม$ค��เป9น 0 ห้รู้(อ 1 เทำ��น �น

ต�อ ZX-SWITCH เขั้�ก บพื่อรู้�ต 22 แล่ะ 23

กดสว�ตชุ�ม$เส$ยงออกล่��โพื่ง

#include <popxt.h> void setup(){} void loop(){ if(in(22)==0){ sound(1000,300); glcdFillScreen(GLCD_RED); } if(in(23)==0){ sound(2000,300); glcdFillScreen(GLCD_YELLOW); }}

ต วอย��งโคด กดสว�ตชุ�ม$เส$ยงออกล่��โพื่ง

TouchSwitchTest.ino

ห้��นยนต�รู้ถบ งค บ

#include <popxt.h> void setup(){ setTextSize(2); glcd(1,1,"Press OK"); glcd(2,1,"to Start"); sw_ok_press(); glcdClear(); glcd(1,1,"Let's go!");}

void loop(){ if(in(22)==0&&in(23)==0){ fd(60); } else if(in(22)==0){ sl(60); } else if(in(23)==0){ sr(60); } else {ao();}}

RemoteSwitch.ino

เม()อม$ก�รู้ต�ดต �งเซนเซอรู้�ตรู้วจัจั บก�รู้ชุน

ต�อ ZX-SWITCH เขั้�ก บพื่อรู้�ต 22 แล่ะ 23

#include <popxt.h> void setup(){ setTextSize(2); glcd(1,1,"Press OK"); glcd(2,1,"to Start"); sw_ok_press(); glcdClear(); glcd(1,1,"Let's go!"); } void loop(){ fd(70); if(in(22)==0){ bk(80); sleep(300); sr(80); sleep(200); } if(in(23)==0) { bk(80); sleep(400); sl(80); sleep(400); }}

ObjectAvoider.ino

โมด�ล่ว ดรู้ะยะทำ�งแบบอ�นฟรู้�เรู้ด: GP2D120

ค�ณ์สมบ ต�ห้ล่ ก•ทำ��ง�นทำ$)ไฟเล่$�ยง 5 โวล่ต�•ว ดรู้ะยะทำ�งใชุ�วงต �งแต� 4 ถ:ง 32 เซนต�เมตรู้

ห้ล่ กก�รู้ทำ��ง�นขั้อง GP2D120

ไล่บรู้�รู้$แล่ะชุ�ดค��ส )งทำ$)แนะน��ไล่บรู้�รู้$ gp2d120_lib.h

เป9นไล่บรู้�รู้$ทำ$)บรู้รู้จั�ชุ�ดค��ส )งเรู้$ยกอ��นค��รู้ะยะทำ�งจั�กโมด�ล่ GP2D120 ก�อนเรู้$ยกใชุง�นฟ2งก�ชุ )นทำ$)บรู้รู้จั�อย��ภ�ยในผ�พื่ ฒน�จัะตองทำ��ก�รู้ผนวกไฟล่�ไล่บรู้�รู้$ไวทำ$)ตอนตนขั้องโปรู้แกรู้มภ�ษ� C ดวยค��ส )ง

#include <gp2d120_lib.h>

ฟ2งก�ชุ )น getdist : อ��นค��รู้ะยะทำ�งในห้น�วยเซนต�เมตรู้จั�กโมด�ล่ GP2D120 ซ:)งค��ทำ$)ม$คว�มเชุ()อถ(อไดจัะม$ค��ต �งแต� 4 ถ:ง 32 เซนต�เมตรู้รู้�ปแบบ

unsigned int getdist(char

adc_ch)พื่�รู้�ม�เตอรู้� adc_ch ใชุก��ห้นดขั้�พื่อรู้�ตทำ$)ตองก�รู้ในชุ�วง 1 ถ:ง 7 จั�กพื่อรู้�ต A1 ถ:ง A7 ต�มล่��ด บ ก�รู้ค(นค��ฟ2งก�ชุ )นจัะทำ��ก�รู้ค(นค��ขั้อม�ล่รู้ะยะทำ�งในห้น�วยเซนต�เมตรู้

ต�อ GP2D120 เขั้�ก บพื่อรู้�ต 20/A2

#include <popxt.h> int raw,dist;void setup(){ setTextSize(2); glcdMode(1); glcd(1,1,"Press OK"); sw_ok_press(); glcdClear();} void loop(){ raw=analog(2); dist=getdist(2); glcd(2,1,"RAW = %d ",raw); glcd(3,1,"Dist = %d cm",dist); sleep(100);}

GP2D120_Reading.ino

แผงวงจัรู้ตรู้วจัจั บแสงสะทำอน: ZX-03

#include <popxt.h> void setup(){ setTextSize(3); glcdMode(3); glcd(1,1,"Press OK"); sw_ok_press(); } void loop(){ glcd(1,1,"L=%d ",analog(0)); glcd(3,1,"R=%d ",analog(1)); sleep(100);}

SurfaceRead.ino

โปรู้แกรู้มอ��นค��จั�ก ZX-03 แสดงทำ$) GLCD

อ��นค��พื่(�นผ�วส$ด��

อ��นค��พื่(�นผ�วส$ขั้�ว

อ��นค��ผล่ล่ พื่ธ์�จั�กก�รู้สะทำอนแสง

ยกห้��นยนต�ขั้:�นจั�กพื่(�นแล่วม$เส$ยงเต(อน#include <popxt.h> void setup(){} void loop(){ if(analog(0)<20){ sound(2500,500); glcdFillScreen(GLCD_RED); } else{ glcdClear(); }}

AlarmBOT.ino

ห้��นยนต�เด�นม�ห้ย�ดทำ$)เสนส$ด�� (แบบทำ$) 1)

BlackLineDetect.ino

#include <popxt.h> void setup(){ setTextSize(2); glcd(1,1,"Press OK"); sw_ok_press(); glcdClear(); glcd(1,1,"Moving..."); fd(60); while(analog(0)>500); ao(); } void loop(){}

ห้��นยนต�เด�นม�ห้ย�ดทำ$)เสนส$ด��ดวยก�รู้เบรู้ก

BlackLineDetect02.ino

#include <popxt.h> void setup(){ setTextSize(2); glcd(1,1,"Press OK"); sw_ok_press(); glcdClear(); glcd(1,1,"Moving..."); fd(60); while(analog(0)>500); bk(100); sleep(100); ao();} void loop(){}

ส )งให้ห้��นยนต�เด�นห้น�ตรู้งต�อไป

1

if(L>500&&R>500){ fd(60); }

ส )งให้ห้��นยนต�เล่$�ยวซ�ยเพื่()อกล่ บไปครู้�อมเสน

2

if(L<500&&R>500){ sl(60);sleep(20);}

ส )งให้ห้��นยนต�เล่$�ยวขั้ว�เพื่()อกล่ บไปครู้�อมเสน3

if(L>500&&R<500){ sr(60);sleep(20);}

ก��ห้นดก�รู้ทำ��ง�นต�มอ�สรู้ะ4

if(L<500&&R<500){ fd(60);sleep(200); }

เขั้$ยนโปรู้แกรู้มทำดสอบก บสน�มขั้ �นพื่(�นฐ�น

โปรู้แกรู้มเด�นต�มเสนสน�มแบบพื่(�นฐ�น

....ino

#include <popxt.h> int L,Rvoid setup(){ setTextSize(2); glcd(1,1,"Press OK"); sw_ok_press();glcd(1,1,"Moving..."); } void loop(){ L=analog(0); R=analog(1); if(L>500&&R>500){ fd(60); } else if(L<500&&R>500){sl(60);sleep(20); } else if(L>500&&R<500){sr(60);sleep(20); } }

เม()อเจัอเสนต ดส�งเส$ยงบ$?ป

โปรู้แกรู้มเด�นต�มเสนเม()อเจัอเสนต ดส�งเส$ยงบ$?ป

SimpleLineTracking.ino

#include <popxt.h> int L,Rvoid setup(){ setTextSize(2); glcd(1,1,"Press OK"); sw_ok_press();glcd(1,1,"Moving..."); } void loop(){ L=analog(0); R=analog(1); if(L<500&&R<500){fd(60);sound(2000,200);} else if(L>500&&R>500){ fd(60); } else if(L<500&&R>500){sl(60);sleep(20); } else if(L>500&&R<500){sr(60);sleep(20); } }

เม()อเจัอเสนต ดเล่$�ยวขั้ว�

โปรู้แกรู้มเด�นต�มเสนเม()อเจัอเสนต ดเล่$�ยวขั้ว�

xxxxxx.ino

#include <popxt.h> int L,Rvoid setup(){ setTextSize(2); glcd(1,1,"Press OK"); sw_ok_press();glcd(1,1,"Moving..."); } void loop(){ L=analog(0); R=analog(1); if(L<500&&R<500){ fd(60);sound(2000,200); sr(60);sleep(400); } else if(L>500&&R>500){ fd(60); } else if(L<500&&R>500){sl(60);sleep(20); } else if(L>500&&R<500){sr(60);sleep(20); } }

ก�รู้เล่$�ยว 90 องศ�พื่อด$เม()อเจัอเสนต ด

โปรู้แกรู้มเด�นต�มเสนเม()อเจัอเสนต ดเล่$�ยวขั้ว�/ซ�ย

xxxxxx.ino

void R90(){ fd(60); sound(1500,100); while(analog(1)>500){sr(60);} while(analog(1)<500){sr(60);}}

void L90(){ fd(60); sound(1500,100); while(analog(0)>500){sl(60);} while(analog(0)<500){sl(60);}}

เม()อเจัอเสนต ดเล่$�ยวขั้ว� (แบบให้ม�)

SimpleMaze.ino

#include <popxt.h> int L,R;void R90(){ fd(60); sound(1500,100); while(analog(1)>500) { sr(60); } while(analog(1)<500) { sr(60); }}void setup(){ setTextSize(2); glcd(1,1,"Press OK"); sw_ok_press(); glcd(1,1,"Moving..."); } void loop(){ L=analog(0); R=analog(1); if (L<500&&R<500){R90();} else if(L>500&&R>500){fd(60);} else if(L<500&&R>500){sl(60); sleep(20);} else if(L>500&&R<500){sr(60); sleep(20);}}

เด�นต�มเสนทำ�งแยกทำ$)ซ บซอน

MultipleCrossingLineTrack.ino

#include <popxt.h>int L,R,x=0;void setup(){ setTextSize(2);glcd(1,1,"Press OK"); sw_ok_press(); glcd(1,1,"Moving...");} void loop(){ L=analog(0);R=analog(1); if (L<500&&R<500){ if(x==6){x=0;} x++; else if (x==3){R90();} else{L90();} } else if(L>500&&R>500){fd(60);} else if(L<500&&R>500){sl(60);sleep(20);} else if(L>500&&R<500){sr(60);sleep(20);}}

ก�รู้ใชุง�นเซอรู้�โวมอเตอรู้�

ฟ2งก�ชุ )น servo : ก��ห้นดต��แห้น�งเซอรู้�โวมอเตอรู้� โดยเม()อใชุง�นก บรู้��นม�ตรู้ฐ�นจัะทำ��ให้ห้ม�นไปย งต��แห้น�ง 0 ถ:ง 180 องศ�ไดแล่ะถ�ใชุง�นก บรู้��นปรู้ บแต�งจัะทำ��ให้ห้ม�นในทำ�ศทำ�งใดทำ�ศทำ�งห้น:)งแล่ะม$ผล่ต�ออ ตรู้�เรู้5วในก�รู้ห้ม�น ห้รู้(ออ�จัห้ย�ดน�)งรู้�ปแบบ void servo(unsigned char _ch

,unsigned int _pos);

พื่�รู้�ม�เตอรู้� _ch ใชุก��ห้นดชุ�องขั้ บทำ$)ต�อใชุง�นม$ค��ต �งแต� 7 ถ:ง 8

_pos ใชุก��ห้นดต��แห้น�งก�รู้ขั้ บขั้องเซอรู้�โวมอเตอรู้� ม$ค�� 0 ถ:ง 180 ถ�เป9นค�� -1 จัะเป9นก�รู้ยกเล่�กก�รู้ใชุง�น (ฟรู้$)

ปรู้ บค��ต วต�นทำ�นเพื่()อปรู้ บต��แห้น�งขั้องเซอรู้�โวมอเตอรู้�

กฤษด� ใจัเย5น KRITSADA JAIYENบรู้�ษ ทำ อ�นโนเวต$ฟ เอ5กเพื่อรู้�เมนต� จั��ก ด108 ซอยส�ขั้�มว�ทำ 101/2 ถ.ส�ขั้�มว�ทำแขั้วงบ�งน� เขั้ตบ�งน� กรู้�งเทำพื่ฯ 10260โที่ร์ศ�พิที่ 02-7477001-4 โที่ร์ส่าร์ 02-7477005

Email : kritsada@inex.co.thkritsadaj@msn.com

www.inex.co.th