ชุดที่ 2
POP-BOT
Arduino compatible robot kit
การขับเคลื่อน POP-BOT
มอเตอร์กระแสตรง (DC MOTOR)
M
-
M
+
BATTERY
+
-
BATTERY
ชุดเฟื องขับมอเตอร์อตั ราทด 48:1
ภายในชุดเฟื องขับมอเตอร์
การคํานวณอัตราทด
1
2
3
4
5
5 28 ฟนั 4 28 ฟนั 3 36 ฟนั 2 36 ฟนั × × × = 48.83 ∶ 1 ั ั ั ั 4 17 ฟน 3 17 ฟน 2 9 ฟน 1 8 ฟน
การกําหนดทิศทางของมอเตอร์
M
-
M
+
BATTERY
+
-
BATTERY
ไอซีขบั มอเตอร์ควบคุมด้วย POP-168
Di3 Di5 Di6 Di9
ทดสอบหุ่นยนต์เดินหน้ า void setup(){ Forward(255); } void Forward(int speed){ analogWrite(3,speed); digitalWrite(5,LOW); analogWrite(6,speed); digitalWrite(9,LOW); }
ปรับความเร็วมอเตอร์ซา้ ย ให้มอเตอร์ลอจิก “0” ปรับความเร็วมอเตอร์ขวา ให้มอเตอร์ลอจิก “0”
ตัวอย่างโปรแกรมในภาษา C/C++สําหรับ POP-BOT #include <popbot.h> void setup() { } void loop() { } popbot.h คือไลบรารีหลักในการพัฒนาหุ่นยนต์ POP-BOT
setup คือฟั งก์ ชั่นทีจ่ ะทํางานเพียงครั้งเดียวหลังจากโปรแกรมเริ่มทํางาน
loop คือฟั งก์ ชั่นทีจ่ ะทํางานวนซํ้าหลายครั้ง โดยจะเริ่มทํางานหลังจากทํางานใน ฟังก์ ชั่น setup เสร็จ
ทดสอบเคลื่อนที่ไปและกลับ
ทดสอบเคลื่อนที่ไปและกลับ
กลุ่มฟังก์ชนขั ั ่ บมอเตอร์ไฟตรง ฟั งก์ ช่ัน motor : สําหรั บขับมอเตอร์ ไฟตรง รู ปแบบ void motor(char ch,int pow)
พารามิเตอร์
ใช้ กาํ หนดช่ องขับตัง้ แต่ 1 ถึง 2 pow ใช้ กา ํ หนดขนาดกําลังขับ -100 ถึง 100 ch
•กรณีขับด้ วยกําลัง 1 ถึง 100 ไฟสถานะประจําช่ องติดเป็ นสีเขียว •กรณีขับด้ วยกําลัง -1 ถึง -100 ไฟสถานะประจําช่ องติดเป็ นสีแดง(ทิศการหมุน ตรงข้ ามกับขับด้ วยกําลังเป็ นบวก)
การคืนค่ า
ไม่ มี
กลุ่มฟั งก์ชนขั ั ่ บมอเตอร์ไฟตรง(ต่อ) ฟั งก์ ชั่น motor_stop : สําหรั บหยุดขับมอเตอร์ ไฟตรงตาม ช่ องที่กาํ หนด รู ปแบบ void motor_stop(char ch)
พารามิเตอร์ ch ใช้ กาํ หนดช่ องขับตัง้ แต่ 1 ถึง 2 ในกรณีท่ ตี ้ อง การหยุดขับทุกช่ องพร้ อมกันสามารถกําหนดเป็ น ALL การคืนค่ า ไม่ มี
คําสังขั ่ บเคลื่อนมอเตอร์ motor(1,100); มอเตอร์ 1 เดินหน้าความเร็ว 100 เปอร์เซ็นต์ motor(2,-50); มอเตอร์ 2 ถอยหลัง ความเร็ว 50 เปอร์เซ็นต์ Speed คือค่าความเร็วมีค่าตัง้ แต่ -100 ถึง 100 motor_stop(ALL)
หยุดมอเตอร์ทงั ้ สองตัว
motor_stop(1)
หยุดมอเตอร์ 1
motor_stop(2)
หยุดมอเตอร์ 2
ไลบรารี่สาํ หรับ POP-BOT
คําสังสร้ ่ างเสียง
ฟั งก์ ช่ ันกําเนิดเสียงอย่ างง่ าย 500 Hz นาน 10 มิลลิวินาที
beep : ทําหน้ าที่กําเนิดเสียงความถี่
void beep(void);
ฟั งก์ ช่ันกําเนิดเสียงความถี่ใดๆ sound : ทําหน้ าที่กําเนิดเสียง ความถี่ ตามช่วงเวลาที่กําหนด void sound(int freq,int time); พารามิ เตอร์ freq ใช้ กําหนดค่าความถี่คา่ สัญญาณเสียง หน่วยมิลลิวินาที
time ใช้ กําหนดช่วงเวลาในการกําเนิดสัญญาณเสียงใน
#include <popbot.h> void setup(){ } void loop(){ beep(); sleep(1000); }
#include <popbot.h> void setup(){ } void loop(){ sound(1200,500); sleep(1000); }
การใช้งานโมดูล LCD
ต่อเข้ากับขา 16/A2
ฟั งก์ชนควบคุ ั่ มการแสดงผลที่โมดูล LCD หรื อ LCD : แสดงข้ อความที่โมดูล LCD แบบ 16 ตัว อักขระ 2 บรรทัด รู ปแบบ void lcd(char *p,…); พารามิเตอร์ p ใช้ กาํ หนดรู ปแบบการแสดงผลที่โมดูล LCD โดยสามารถกําหนดรู ปแบบการแทรกสัญลักษณ์ พเิ ศษเพื่อ ร่ วมแสดงผลค่ าข้ อมูลตัวเลขชนิดต่ างๆได้ lcd
รหัสบังคับ %c หรือ %C %d หรือ %D %l หรือ %L %f หรือ %F #c #n
การทํางาน แสดงผลอักขระ 1 ตัว แสดงผลตัวเลขฐานสิบช่ วง -32,768 ถึง +32,767 แสดงผลตัวเลขฐานสิบช่ วง -2,147,483,648 ถึง +2,147,483,647 แสดงผลตัวเลขจํานวนจริงทศนิยม 3 หลัก คีย์คาํ สั่งพิเศษเพื่อสั่งเคลียร์ ข้อความก่ อน แสดงผลในครัง้ ถัดไป คีย์คาํ สั่งพิเศษเพื่อนําข้ อความไปแสดงผลใน บรรทัดที่ 2(บรรทัดล่ าง)
แสดงข้อความ “Hello World!” #include <popbot.h> void setup(){ lcd("Hello World!"); } void loop(){ }
แสดงผลลัพธ์เมื่อตัวอักขระติดกันเกิน 16 ตัวอักษร #include <popbot.h> void setup(){ lcd("abcdefghijklmnopqrstuvwxyz"); } void loop(){ }
แสดงผลลัพธ์ค่าข้อมูลตัวเลขจํานวนเต็ม(int) #include <popbot.h> int x=158; void setup(){ } void loop(){ lcd("Value: %d ",x); }
แสดงตัวอย่างโปรแกรมนับค่าทุกๆ 1 วินาที #include <popbot.h> int i=0; void setup() { } void loop() { lcd("Count: %d ",i); sleep(1000); i++; }
#include <popbot.h> void setup(){ } void loop(){ lcd("Sawaddee#nThailand"); }
แผงวงจรสวิตช์: ZX-SWITCH
คุณสมบัตทิ างเทคนิค
•ถ้ าสวิตช์ ถูกกดจะอ่ านค่ าข้ อมูลได้ เป็ นลอจิก “0” พร้ อมกับไฟแสดงสถานะติดสว่ าง •ถ้ าสวิตช์ ไม่ ถูกกดจะอ่ านค่ าข้ อมูลได้ เป็ นลอจิก “1”
ฟั งก์ ช่ัน in : สําหรั บอ่ านค่ าสัญญาณแบบดิจต ิ อลจากขาพอร์ ตใดๆของ บอร์ ดควบคุมหลัก รู ปแบบ char in(char _bit);
พารามิเตอร์ _bit ใช้ กาํ หนดตําแหน่ งหมายเลขพอร์ ตที่ ต้ องการติดต่ อ การคืนค่ า ฟั งก์ ช่ ันจะทําการคืนค่ าสัญญาณดิจติ อลของ ตําแหน่ งขาพอร์ ตที่อ่านซึ่งอาจมีค่าเป็ น 0 หรื อ 1 เท่ านัน้
ต่อ ZX-SWITCH เข้ากับพอร์ต 17/A3
แสดงค่าสถานะการกดสวิตช์ที่โมดูล LCD #include <popbot.h> void setup(){ } void loop(){ lcd("Switch1: %d ",in(17)); }
โมดูลวัดระยะทางแบบอินฟราเรด: GP2D120
คุณสมบัตหิ ลัก
•ทํางานที่ไฟเลีย้ ง 5 โวลต์ •วัดระยะทางใช่ วงตัง้ แต่ 4 ถึง 32 เซนติเมตร
หลักการทํางานของ GP2D120
ไลบรารีและชุดคําสั่งทีแ่ นะนํา ไลบรารี gp2d120_lib.h เป็ นไลบรารี ท่ บี รรจุชุดคําสั่งเรี ยกอ่ านค่ าระยะทางจาก โมดูล GP2D120 ก่ อนเรี ยกใช้ งานฟั งก์ ช่ ันที่บรรจุอยู่ภายใน ผู้พัฒนาจะต้ องทําการผนวกไฟล์ ไลบรารี ไว้ ท่ ตี อนต้ นของ โปรแกรมภาษา C ด้ วยคําสั่ง #include <gp2d120_lib.h>
ฟั งก์ ช่ัน getdist : อ่ านค่ าระยะทางในหน่ วยเซนติเมตรจากโมดูล
GP2D120 ซึ่งค่ าที่มีความเชื่อถือได้ จะมีค่าตัง้ แต่ 4 ถึง 32 เซนติเมตร รู ปแบบ
unsigned int getdist(char adc_ch)
พารามิเตอร์ adc_ch ใช้ กาํ หนดขาพอร์ ตที่ต้องการในช่ วง 0 ถึง 6 จากพอร์ ต ADC0 ถึง ADC6 ตามลําดับ การคืนค่ า ฟั งก์ ช่ ันจะทําการคืนค่ าข้ อมูลระยะทางในหน่ วย เซนติเมตร
ต่อ GP2D120 เข้ากับพอร์ต 19/SCL/A5
#include <popbot.h> #include <gp2d120_lib.h> unsigned int dist; void setup(){ } void loop(){ dist = getdist(3); if(dist>=4 && dist<=32){ lcd("Distance: %d cm ",dist); } else{ lcd("Out of Range!"); } sleep(100); }
ติดตัง้ ด้านหน้ า หุ่นยนต์เพื่อ ตรวจจับการชน
แผงวงจรตรวจจับแสงสะท้อน: ZX-03
การตรวจสอบเพื่อเคลื่อนที่ตามเส้น
การใช้งานเซอร์โวมอเตอร์
ฟั งก์ ช่ัน servo : กําหนดตําแหน่ งเซอร์ โวมอเตอร์ โดยเมื่อใช้ งานกับรุ่ น
มาตรฐานจะทําให้ หมุนไปยังตําแหน่ ง 0 ถึง 180 องศาได้ และถ้ าใช้ งาน กับรุ่ นปรับแต่ งจะทําให้ หมุนในทิศทางใดทิศทางหนึ่งและมีผลต่ อ อัตราเร็วในการหมุน หรืออาจหยุดนิ่ง
รู ปแบบ void servo(unsigned char _ch ,unsigned int _pos);
พารามิเตอร์
_ch ใช้ กาํ หนดช่ องขับที่ต่อใช้ งานมีค่าตัง้ แต่ 7 ถึง 8 _pos ใช้ กาํ หนดตําแหน่ งการขับของเซอร์ โวมอเตอร์
ฟั งก์ ชั่น servo_stop : ปิ ดการขับเซอร์ โวมอเตอร์ ทก ุ ช่ องพร้ อมกัน
รู ปแบบ void servo_stop(void);
ทดสอบขับเซอร์โวมอเตอร์ช่อง 0 หมุนไปมาระหว่าง ตําแหน่ ง 20 และ 60 ทิศทางทุกๆ 2 วินาที #include <popbot.h> void setup(){ } void loop(){ servo(0,20); sleep(2000); servo(0,60); sleep(2000); }
กฤษดา ใจเย็น บริษทั อินโนเวตีฟ เอ็กเพอริเมนต์ จํากัด 3133/53 ซอยสุขมุ วิท 101/2 ถ.สุขมุ วิท แขวงบางนา เขตบางนา กรุงเทพฯ 10260 โทรศัพท์ 02-7477001-4 โทรสาร 02-7477005
www.inex.co.th Email :
kritsada@inex.co.th kritsadaj@msn.com