More Related Content Similar to POP-7 Robot with RQ-7 Platform (PDF)
Similar to POP-7 Robot with RQ-7 Platform (PDF) (8) More from Innovative Experiment Co.,Ltd.
More from Innovative Experiment Co.,Ltd. (18) POP-7 Robot with RQ-7 Platform (PDF)7. • ใช้ไมโครคอนโทรลเลอร์ ATMEGA644PA ของบริษัท ATMEL
• ทางานที่ความถี่ 20MHz ทางานที่ความเร็ว 20 ล้านคาสั่งต่อวินาที
• หน่วยความจาโปรแกรม 64 กิโลไบต์
• หน่วยความจา RAM 4 kByte
• หน่วยความจา EEPROM 2 kByte
• จุดต่อเซนเซอร์อะนาลอกได้ 7 ช่อง ความละเอียด 10 บิต
• พอร์ตอินพุต/เอาต์พุตดิจิตอล 16 ช่อง
• I2C / UART / Interrupt /
• มีจอ LCD กราฟิกสีความละเอียด 128x160 พิกเซล
• ขับมอเตอร์ไฟตรงได้ 4 ตัว เซอร์โวมอเตอร์ได้ 3 ตัว
• เชื่อมต่อกับคอมพิวเตอร์ผ่านพอร์ต USB โดยตรงผ่านสาย Mini-B
• มีไฟแสดง สถานะไฟเลี้ยง/แบตเตอรี่ต่า/สถานะ USB /การรับส่งข้อมูลอนุกรม
• ลาโพงเปียโซ/สวิตช์ OK / สวิตช์ SW1/ สวิตช์ Reset/ Knob /
• รองรับไฟเลี้ยง 3-12V ผ่านวงจรสวิตช์ชิ่ง
คุณสมบัติของ POP-7
12. 1 2 3
4 5
หลังจากนี้จะมีหน้าต่างติดตั้ง
ไดรเวอร์
ห้าม Cancel
ขั้นตอนการติดตั้ง
17. • 2 เซล 7.4V
• กระแส 1100mA
• จ่ายกระแส 30 เท่า
• ชาร์จ 5 เท่า
แบตเตอรี่ Li-Po
แดง บวก
ดา ลบ
แดง บวก
ดา ลบ
18. รายละเอียดแบตเตอรี่ ลิเธียม-โพลิเมอร์
1 เซล 3.7V อนุกรมกัน 2 เซล = 7.4V
จ่ายไฟ 1100 mA ต่อเนื่องได้ประมาณ 1 ชั่วโมง
จ่ายกระแสชั่วขณะได้ 1100 x 30 = 33000mA O_o!
ชาร์จได้ 5 เท่า 1100x5 = 5500mA ใช้เวลาประมาณ 20 นาที
21. ต่อสาย USB เข้ากับ POP-7
ต่อสาย USB เข้ากับคอมพิวเตอร์1
2
เปิดสวิตช์จ่ายไฟ
POP-73
4 ไฟสีน้าเงินติดสว่าง
ขั้นตอนเชื่อมต่อกับคอมพิวเตอร์
23. void setup(){
}
void loop() {
}
สาหรับกาหนดค่า เกิดขึ้นครั้งเดี ว
โปรแกรมหลักทางานต่อเนื่อง
รูปแบบการทางานของโปรแกรม Arduino
#include <pop7.h>
ผนวกรวมชุดคาสั่งสาหรับ POP-7
31. glcd แสดงข้อความที่จอ GLCD ได้ 21 ตัว 16 บรรทัด (size 1)
รูปแบบ
glcd(x,y,*p,...)
พารามิเตอร์
x คือตาแหน่งบรรทัดมีค่าตั้งแต่ 0-15
y คือตาแหน่งตัวอักษรมีค่าตั้งแต่ 0-20
*p คือข้อความที่ต้องการนามาแสดง
ค่าพิเศษ
%d แสดงตัวเลขจานวนเต็มในช่วง -32,768 ถึง 32,767
%h แสดงตัวเลขฐานสิบหก
%b แสดงตัวเลขฐานสอง
%l แสดงตัวเลขจานวนเต็มในช่วง -2,147,483,648 ถึง 2,147,483,647
%f แสดงผลตัวเลขจานวนจริง (แสดงทศนิยม 3 หลัก)
ชุดคาสั่งสาหรับควบคุม GLCD
33. setTextColor(COLOR)
GLCD_RED, color[0]
GLCD_GREEN, color[1]
GLCD_BLUE, color[2]
GLCD_YELLOW, color[3]
GLCD_BLACK, color[4]
GLCD_WHITE, color[5]
GLCD_CYAN, color[6]
GLCD_MAGENTA color[7]
GLCD_ORANGE color[8]
GLCD_LIME color[9]
GLCD_VIOLET color[10]
GLCD_PINK color[11]
GLCD_DOLLAR color[12]
GLCD_SKY color[13]
GLCD_BROWN color[14]
GLCD_DARKGREEN color[15]
GLCD_NAVY color[16]
GLCD_GRAY color[17]
GLCD_DARKGRAY color[18]
#include <popx2.h>
void setup(){
setTextColor(GLCD_RED);
glcd(0,0,"Hello");
setTextColor(GLCD_GREEN);
glcd(1,0,"World");
}
void loop(){}
colorRGB(R5,G6,B5)
colorRGB(31,63,31)
ค่าสีตัวอักษร setTextColor()
ค่าสีกาหนดเอง
41. แสดงรูปทรงเรขาคณิต : วงกลม
x ตาแหน่งจุดศูนย์กลางวงกลมแนวนอน
y ตาแหน่งจุดศูนย์กลางวงกลมแนวตั้ง
radius รัศมีของวงกลม
color สี
glcdCircle(x,y,radius,color)
glcdFillCircle(x,y,radius,color)
x,y
radius
Fill
42. แสดงรูปทรงเรขาคณิต : เส้นตรง
x1 จุดเริ่มต้นแนวนอน
y1 จุดเริ่มต้นแนวตั้ง
x2 จุดสิ้นสุดแนวตั้ง
y2 จุดสิ้นสุดแนวนอน
color สี
x1,y1
glcdLine(x1,y1,x2,y2,color)
x2,y2
43. แสดงรูปทรงเรขาคณิต : เส้นโค้ง
x จุดเริ่มต้นแนวนอน
y จุดเริ่มต้นแนวตั้ง
r รัศมีเส้นโค้ง
startAngle มุมเริ่ม
endAngle มุมสิ้นสุด
color สี
x,y
glcdArc(x,y,r,startAngle,endAngle,color)
startAngle(0)
r
endAngle(90)
glcdArc(64,80,64,0,90,GLCD_RED);
53. #include <pop7.h>
void setup(){}
void loop(){
beep();
delay(500);
}
#include <pop7.h>
void setup(){}
void loop(){
sound(1000,100);
delay(500);
}
ตัวอย่างการใช้งานคาสั่ง beep ตัวอย่างการใช้งานคาสั่ง sound
สร้างเสียง 1 kHz นาน 0.1 วินาที ต่อเนื่องสร้างเสียง 500 Hz นาน 0.1 วินาที ต่อเนื่อง
ตัวอย่างโปรแกรมสร้างเสียงออกลาโพง https://pastebin.com/NnZje3Uw
POP-7 MARIO SOUND EXAMPLE
54. การรับค่าอินพุตจากสวิตช์ SW1
SW_OK
sw1_press() รอกด SW1 ค่อยไปทาบรรทัดถัดไป
sw1() กดเป็นจริง / ไม่กดเป็นเท็จ
sw_OK_press() รอกด SW_OK ค่อยไปทาบรรทัดถัดไป
sw_OK() กดเป็นจริง / ไม่กดเป็นเท็จ
OK() รอกด SW_OK ค่อยไปทาบรรทัดถัดไป
พร้อมแสดงข้อความที่หน้าจอด้วย
58. ตัวอย่าง sw_OK() ด้วยคาสั่ง if
#include <pop7.h>
void setup() {}
void loop() {
if (sw_OK()){
glcdFillScreen(GLCD_RED);
}
else{
glcdFillScreen(GLCD_BLACK);
}
}
if จะต้องอยู่ใน loop เพื่อการตรวจสอบต่อเนื่อง
ใช้เครื่องหมาย ! (not)
จะเปลี่ยนจากจริงเป็นเท็จ
เปลี่ยนจากเท็จเป็นจริง
ใช้เครื่องหมาย && (AND)
ใช้กับเงื่อนไขสองเงื่อนไข
ถ้าเป็นจริงทั้งคู่ถึงจะเป็นจริง
ใช้เครื่องหมาย || (OR)
ใช้กับเงื่อนไขสองเงื่อนไข
ถ้าอันใดอันหนึ่งจริงจะเป็นจริง
59. ตัวอย่างการใช้ && (AND)
#include <pop7.h>
void setup() {}
void loop() {
if (sw_OK()&& sw1()){
glcdFillScreen(GLCD_RED);
}
else if (sw_OK()){
glcdFillScreen(GLCD_GREEN);
}
else if (sw1()){
glcdFillScreen(GLCD_BLUE);
}
else{
glcdFillScreen(GLCD_BLACK);
}
}
กดสองปุ่มพร้อมกัน
กดสวิตช์ OK
กดสวิตช์ 1
ไม่กดสวิตช์
63. #include <pop7.h>
int i=0;
void setup() {}
void loop() {
if(in(8)==0){ beep(); }
if(in(9)==0){ sound(1000,100); }
}
ทดสอบเขียนโปรแกรมคาสั่ง in() กับ ZX-Switch01
69. คาสั่ง knob(x)
รูปแบบ
knob(x); โดย x คือค่า Scale
การคืนค่า
ค่าที่อ่านได้จาก knob มีค่าระหว่าง 0 ไปจนถึงค่า x
ตัวอย่าง
int val=0;
val=knob(180);
glcd("%d ",val);
หน้าจอ glcd แสดงค่าตัวเลข 0-180
70. รูปแบบ
knob(x,y);
x คือค่า Scale ช่วงเริ่มต้น
y คือค่า Scale ช่วงท้าย
ตัวอย่าง
glcd(1,1,"%d ",knob(10,90));
หน้าจอจะแสดงค่า 10-90 ตามการหมุน knob()
คาสั่ง knob(x,y)
71. #include <pop7.h>
int x;
void setup(){
setTextSize(3);
}
void loop(){
glcd(1,0,"%d ",knob(128));
glcdFillRect(0,80,knob(128),10,GLCD_RED);
glcdFillRect(knob(128),80,128-knob(128),10,GLCD_BLACK);
}
ตัวอย่าง bar graph เมื่อปรับ knob
72. motor (CH,POW)
CH 1-4 คือมอเตอร์ 1 ถึงมอเตอร์ 4
ALL,100,ALL2,102,12 มอเตอร์ 1,2 ทางานพร้อมกัน
ALL4,104 คือมอเตอร์ 1 ถึง 4 พร้อมกัน
MR21,121 คือมอเตอร์ มอเตอร์ 1 ถอย มอเตอร์ 2 ไปหน้า
MR12,112 คือมอเตอร์ มอเตอร์ 2 ถอย มอเตอร์ 1 ไปหน้า
34 มอเตอร์ 3,4 ทางานพร้อมกัน POW ความเร็ว -100 ถึง 100
ค่าบวก เดินหน้า
ค่าลบ ถอยหลัง
คาสั่ง motor() : ขับเคลื่อนมอเตอร์
76. ทดสอบ เดินหน้า 1 วินาที ถอยหลัง
#include <pop7.h>
void setup(){OK();}
void loop(){
fd(50); delay(1000);
bk(50); delay(1000);
}
80. ทดสอบ เดินด้วยระยะทาง 17.4 CM
#include <pop7.h>
void setup(){}
void loop(){
OK(); encoder(2,0);
fd(50);
while(encoder(2)<40);ao();
}
เส้นรอบวง
= D
= 3.14 x 5.4
= 17 CM
86. #include <pop7.h>
void setup(){OK();}
void loop(){
fdEnc(30,40);
slEnc(30,20);
}
void fdEnc(int speed,int ENC){
encoder(3,0);fd(speed);
while(encoder(3)<ENC);
}
void slEnc(int speed,int ENC){
encoder(3,0);sl(30);
while(encoder(3)<20);
}
นามาสร้างเป็นฟังก์ชั่น เดินวนเป็นรูปสี่เหลี่ยม
87. void fdEnc(int Speed,int ENC){
encoder(3,0);fd(Speed);
while(encoder(3)<ENC);
}
void slEnc(int Speed,int ENC){
encoder(3,0);sl(Speed);
while(encoder(3)<ENC);
}
void srEnc(int Speed,int ENC){
encoder(2,0);sl(Speed);
while(encoder(2)<ENC);
}
สรุปฟังก์ชั่นที่ใช้
89. servo(CH,POS);
CH ช่องที่ใช้ขับ = 1 ถึง 3
POS ตาแหน่งองศาเซอร์โว = 0-180 ,-1
ค่า -1 หมา ถึงห ุดจ่า สัญญาณให้เซอร์โว
เซอร์โวจะไม่ล็อกแกน
ฟังก์ชั่นขับเซอร์โวมอเตอร์
Servo1 Servo2
94. รูปแบบ
analog(CH)
CH คือช่องอะนาลอก (สีแดง) A0-A6 ที่ต้องการอ่านค่า
การคืนค่า ค่าอะนาลอกที่มีค่าอยู่ระหว่าง 0-1023
ตัวอย่าง
glcd(1,1,"%d ",analog(0));
ฟังก์ชั่น analog
เป็นการนาค่าที่อ่านได้จากช่อง A0 แสดงที่หน้าจอ GLCD
110. #include <pop7.h>
void setup() {glcdMode(3);
setTextSize(3);}
void loop() {
glcd(0,0,"I=%d ",analog(0));
glcd(1,0,"R=%d ",analog(1));
glcd(2,0,"G=%d ",analog(2));
glcd(3,0,"B=%d ",analog(3));
}
แผงวงจรตรวจจับแสงสะท้อน: ZX-03
A0 A1 A2 A3
111. #include <pop7.h>
unsigned int R=0,G=0,B=0,I=0,a;
void setup() {glcdMode(3); setTextSize(3);}
void loop() {
I=0;for(a=0;a<40;a++){I=analog(0)+I;}I=I/40;
R=0;for(a=0;a<40;a++){R=analog(1)+R;}R=R/40;
G=0;for(a=0;a<40;a++){G=analog(2)+G;}G=G/40;
B=0;for(a=0;a<40;a++){B=analog(3)+B;}B=B/40;
glcd(0,0,"I=%d ",I);
glcd(1,0,"R=%d ",R);
glcd(2,0,"G=%d ",G);
glcd(3,0,"B=%d ",B);
อ่านค่าทั้ง 4 แบบ โชว์ GLCD แบบค่าเฉลี่ย
113. #include <pop7.h>
int R,G,B;
void setup() {glcdMode(3); setTextSize(3);}
void loop() {
R=analog(1);G=analog(2);B=analog(3);
if(R>900){
if(G>900){glcd(0,0,"White ");}
else if(G>400){glcd(0,0,"Yellow ");}
else {glcd(0,0,"Red ");}
}
else if(R>500){
if(G>500){glcd(0,0,"Grey ");}
else {glcd(0,0,"Magenta");}
}
else { glcd(0,0,"Green "); }
}
ทดสอบอ่านค่าสีด้วย if
114. #include <pop7.h>
int R,G,B,C;
void setup() {glcdMode(3); setTextSize(3);}
void loop() {
R=analog(1);G=analog(2);B=analog(3);
if(R>900){
if(G>900){C=1;}
else if(G>400){C=2;}
else {C=3;}
}
else if(R>500){
if(G>500){C=4;}
else {C=5;}
}
else {C=6;}
glcd(0,0,"%d ",C);
}
ทดสอบอ่านค่าสีด้วย if เก็บค่าในตัวแปร
1 =White
2=Yellow
3 Red
4=Magenta
5=Grey
6=Green
115. เปลี่ยนเป็น Function
int readColor() {
R=analog(1);G=analog(2);B=analog(3);
if(R>900){
if(G>900){C=1;}
else if(G>400){C=2;}
else {C=3;}
}
else if(R>500){
if(G>500){C=4;}
else {C=5;}
}
else {C=6;}
return C;
}
glcd(0,0,"%d ",readColor());
1 =White
2=Yellow
3 Red
4=Magenta
5=Grey
6=Green
121. ฟังก์ชั่น เก็บค่าเฉลี่ย จาก GP2Y0A41
int GP2AV(){
int R=0;
for(i=0;i<20;i++){
R=analog(4)+R;
}
return (R/20);
}
GP2Y0A41 ต่อช่อง A4
123. เจอกาแพงหมุนตัว 180 องศา พร้อมเช็คตั้งตัว
#include <pop7.h>
int i,R;
void setup() {OK();}
void loop() {
fd(50);
while(GP2AV()<250);
srEnc(30,30);
bkWall(60);
bk(40);delay(300);
}
124. millis จะเพิ่มค่าขึ้นทีละ 1 ทุก ๆ 1 มิลลิวินาที
millis จะทางานอยู่เบื้องหลังด้วย Interrupt Timer
millis ใช้ตัวแปร Long ในการเก็บค่า (4 ไบต์)
4,294,967,296 มิลลิวินาที ก่อนเคลียร์เป็น 0
ฟังก์ชั่น millis()
49.7 วัน
125. #include <pop7.h>
int T1,T2;
bool S1=0,S2=0,S3=0;
void setup() {
T1=millis(); // โหลดค่าเวลา
T2=millis(); // โหลดค่าเวลา
}
void loop() {
if (millis()>T1+350){ // เทียบเวลาปัจจุบัน + 0.35 วินาที
T1=millis(); // Reload
if(S1){out(24,1);S1=0;}
else{out(24,0);S1=1;}
}
if (millis()>T1+400){ // เทียบเวลาปัจจุบัน + 0.4 วินาที
T1=millis(); // Reload
if(S1){out(26,1);S1=0;}
else{out(26,0);S1=1;}
}
}
ตัวอย่างการใช้งาน millis()
126. attachInterrupt(pin, ISR, mode)
pin ตาแหน่งขาที่รับอินเตอร์รัปต์
ISR ตาแหน่งฟังก์ชั่นที่เรียกบริการ Interrupt
mode รูปแบบการกระตุ้น Interrupt
LOW กระตุ้นเมื่อขาเป็น 0
CHANGE กระตุ้นเมื่อมีการเปลี่ยนค่า
RISING กระตุ้นที่ขอบขาขึ้น
FALLING กระตุ้นที่ขอบขาลง
การใช้งานอินเตอร์รัปต์กับ pop-7 ใช้ได้ที่ขา 2,3 และ 18
127. #include <pop7.h>
void setup() {
attachInterrupt(18,Prog1,CHANGE);
attachInterrupt(2,Prog2,CHANGE);
}
void loop() {
out(24,1);delay(100);
out(24,0);delay(100);
}
void prog1() { out(26,1);}
void prog2() { out(26,0);}
ตัวอย่างการใช้งานอินเตอร์รัปต์
129. 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 1038float
หาข้อมูลเพิ่มเติมจาก reference
ตัวแปรชนิดต่างๆ
1 Byte
2 Byte
1 bit
2 Byte
1 Byte
4 Byte
132. for (ค่าเริ่มต้น; เงื่อนไข ;ส่วนเพิ่มค่า){
ทาคาสั่ง จนครบเงื่อนไข;
}
คาสั่งตรวจสอบเงื่อนไข for
#include <pop7.h>
int i;
void setup() {
for(i=0;i<10;i++){
glcdFillScreen(color[i]);
delay(200);
}
}
void loop() {}
เปลี่ยนสีหน้าจอ 10 รอบ
134. int R90(int x){
ชุดคาสั่ง
y=x+2;
return y;
}
ชื่อฟังก์ชั่น ตัวแปรที่ส่งไป ังฟังก์ชั่น
ชุดคาสั่งในฟังก์ชั่น
Val = R90(200);
รูปแบบการสร้างฟังก์ชั่น คืนค่า
ชนิดตัวแปร
ของการคืนค่า
คืนค่าผลลัพธ์
135. map(value, fromLow, fromHigh, toLow, toHigh)
y = map(x, 1, 50, 50, 1);
ตัวอย่าง
y = map(x, 1, 50, 50, -100);
ตัวอย่าง
การใช้งานคาสั่ง map
เพื่อเปลี่ยนช่วงของค่าตัวเลขจากช่วง x ไปเป็นช่วง y
y = map(analog(4), 0, 1023, 0, 180);
136. กฤษดา ใจเย็น
บริษัท อินโนเวตีฟ เอ็กเพอริเมนต์ จากัด
108 ซอยสุขุมวิท 101/2 ถ.สุขุมวิท
แขวงบางนา เขตบางนา กรุงเทพฯ 10260
โทรศัพท์ 027477001-4 โทรสาร 02-7477005
www.inex.co.th
facebook.com/innovativeexperiment
KRITSADA JAIYEN
kritsada@inex.co.th