POP-X2
ชุดเรียนรู้ไมโครคอนโทรลเลอร์
เพื่อพัฒนาโครงงาน
ไมโครคอนโทรลเลอร์ รอบๆ ตัว
อินพุต เอาต์พุตประมวลผล
หลักการระบบควบคุม
ตรวจสอบการเปิ ด
จากรีโมตหรือสวิตช์
ระบบควบคุมของเครื่องปรับอากาศ
สั ่งให้คอมเพรสเซอร์ทางาน
ตรวจสอบอุณหภูมิจาก
เซนเซอร์ กับค่าที่ตั้งไว้
สั ่งให้คอมเพรสเซอร์หยุดทางาน
มากกว่า
ค่าที่ตั้งไว้
น้อยกว่า
ค่าที่ตั้งไว้
เครื่องปรับอากาศ
ตัวอย่างการทางานระบบควบคุมอัตโนมัติ
สวิตช์
เมาส์
แสงสว่าง
อุณหภูมิ
ความชื้น
จอภาพ
มอเตอร์
หลอดไฟ
ปั๊มน้้า
ไมโคร
คอนโทรลเลอร์
ล้าโพง
ไมโครคอนโทรลเลอร์
Micro
Controller
MCU
mC
ต้นกาเนิด
Arduino
หน้าต่างช่วยเหลือ Reference
• ชุดค้าสั่ง
• ไลบรารี่
• ตัวแปร
• ค้าสงวน
ต้นกาเนิด POP-X2 : Hardware
Arduino UNO
POP-X2
POP-X2 : Software
POP-X2Edit + Compile + Download
C/C++
• ใช้ไมโครคอนโทรลเลอร์ ATMEGA644PA ของบริษัท ATMEL
• ท้างานที่ความถี่ 20MHz ท้างานที่ความเร็ว 20 ล้านค้าสั่งต่อวินาที
• หน่วยความจ้าโปรแกรม 64 กิโลไบต์
• หน่วยความจ้า RAM 4 kByte
• หน่วยความจ้า EEPROM 2 kByte
• จุดต่อเซนเซอร์อะนาลอกได้ 7 ช่อง ความละเอียด 10 บิต
• พอร์ตอินพุต/เอาต์พุตดิจิตอล 16 ช่อง
• I2C / UART / Interrupt /จุดต่อขยายมอเตอร์ 2 ช่อง
• มีจอ LCD กราฟิกสีความละเอียด 128x160 พิกเซล
• ขับมอเตอร์ไฟตรงได้ 2 ตัว เซอร์โวมอเตอร์ได้ 3 ตัว
• เชื่อมต่อกับคอมพิวเตอร์ผ่านพอร์ต USB โดยตรงผ่านสาย Mini-B
• มีไฟแสดง สถานะไฟเลี้ยง/แบตเตอรี่ต่้า/สถานะ USB /การรับส่งข้อมูลอนุกรม
• ล้าโพงเปียโซ/สวิตช์ OK / สวิตช์ SW1/ สวิตช์ Reset/ Knob /
• รองรับไฟเลี้ยง 3-12V ผ่านวงจรสวิตช์ชิ่ง
คุณสมบัติของ POP-X2
ส่วนฮาร์ดแวร์ จุดต่อ USB
เตือนแบตอ่อน
แสดงไฟเลี้ยง
แสดงการเชื่อม USB
แสดงการรับส่งข้อมูล
สวิตช์เปิด/ปิด
ขั้วต่อแบตเตอรี่
จุดต่อเซอร์โวมอเตอร์ 1-3
จุดต่อเซนเซอร์
สื่อสารอนุกรม
สื่อสาร I2C
สวิตช์รีเซต
จอสี GLCD
128x160
จุดต่อเซนเซอร์
สวิตช์ SW1
ตัวต้านทานปรับค่าได้
สวิตช์ OK
จุดต่อมอเตอร์ 1-2จุดต่อขยายมอเตอร์ 3-4
Switch (Digital)
Reflect (Analog)
ปุ่ม OK (Digital)
knob (Analog)
Potentiometer
(Analog)
อุปกรณ์อินพุต
อุปกรณ์เอาต์พุต
Servo Motor
DC Motor
ล้าโพงเปียโซ
ZX-LED
Arduino1.8.5_IoT_Microbit_Setup171107
ประกอบด้วย
ซอฟต์แวร์ Arduino 1.8.5
ตัวอย่าง สาหรับ POP-X2
ไดรเวอร์ USB
ไลบรารี่ POP-X2
http://inex.co.th/shop/index.php/software-download
ติดตั้งซอฟต์แวร์
1 2 3
4 5
หลังจากนี้จะมีหน้าต่างติดตั้ง
ไดรเวอร์
ห้าม Cancel
ขั้นตอนการติดตั้ง
เพื่อให้คอมพิวเตอร์รู้จักกับบอร์ด POP-X2
ไดรเวอร์ USB
สาหรับ POP-X2
ขั้นตอนการติดตั้งไดรเวอร์
เมื่อเปิดใช้งานครั้งแรก
เมื่อเปิดใช้งานครั้งแรก
ตรวจสอบว่าเลือกบอร์ดเป็น POP-X2
หรือดูที่มุมขวาล่างของจอภาพ
ต่อสาย USB เข้า
กับ POP-X2
ต่อสาย USB เข้ากับคอมพิวเตอร์1
2
เปิดสวิตช์จ่ายไฟ
POP-X23
4 ไฟสีน้าเงินติดสว่าง
ขั้นตอนเชื่อมต่อกับคอมพิวเตอร์
เลือกพอร์ตสาหรับ POP-X2
ถ้าไม่แน่ใจ ให้ลองปิดสวิตช์แล้วตรวจสอบว่าพอร์ตใดหายไป พอร์ตที่หายไปคือ POP-X2
ให้เปิดสวิตช์และเลือกพอร์ตนั้น
void setup(){
}
void loop() {
}
สาหรับกาหนดค่า เกิดขึ้นครั้งเดียว
โปรแกรมหลักทางานต่อเนื่อง
รูปแบบการทางานของโปรแกรม Arduino
#include <popx2.h>
ผนวกรวมชุดคาสั่งสาหรับ POP-X2
ทางานใน Setup
ทางานใน Loop
START
โฟลวชาร์ตแสดงการทางาน
#include <popx2.h> // POP-X2 Board
void setup() {
glcd(0,0,"Hello POP-X2");
}
void loop() {
}
เริ่มต้นด้วยโปรแกรมแรก
เขียนโปรแกรมผ่าน Arduino
โปรแกรมจะแจ้งให้บันทึกไฟล์ก่อน
คอมไพล์ คีย์ลัด Ctrl+R
แจ้งผลการคอมไพล์และขนาดหน่วยความจาที่ใช้
ถ้ามีข้อผิดพลาด
Arduino: 1.8.5 (Windows 10), Board: "POP-X2, ATMega644P @ 20 MHz"
sketch_feb17a:3: error: missing terminating " character
glcd(0,0,"Hello POP-X2);
^
E:CodeArduino2018sketch_feb04asketch_feb17asketch_feb17a.ino: In function 'void setup()':
sketch_feb17a:4: error: expected primary-expression before '}' token
}
^
exit status 1
missing terminating " character
This report would have more information with
"Show verbose output during compilation"
option enabled in File -> Preferences.
หน้าต่างนี้จะแจ้งทุกอย่างให้เราทราบ
อัพโหลดโค้ดไปยัง POP-X2
คีย์ลัด Ctrl+U
แจ้งผลการคอมไพล์และขนาดหน่วยความจาที่ใช้
Hello POP-X2
แจ้งผลว่าสมบูรณ์
คุณสมบัติของจอภาพ GLCD
glcd แสดงข้อความที่จอ GLCD ได้ 21 ตัว 16 บรรทัด (size 1)
รูปแบบ
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
glcd
setTextColor
setTextBackgroundColor
setTextBackgroundTransparent()
setTextSize
glcdClear
glcdFillScreen
glcdMode
glcdPixel
glcdRect
glcdFillRect
glcdLine
glcdCircle
glcdFillCircle
glcdArc
ชุดคาสั่งอื่นๆ สาหรับ glcd
แสดงตัวอักษร แสดงกราฟิก
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()
ค่าสีก้าหนดเอง
setTextSize()
ตัวอย่าง : setTextSize(4);
ขนาดตัวอักษรเป็น 4 เท่าขนาดปกติ
ปรับขนาดตัวอักษร
ปกติเป็น Mode 0
ตัวอย่าง : glcdMode(1);
การปรับทิศทางตัวอักษร glcdMode();
ค่าสีพื้นหลังตัวอักษร
#include <popx2.h>
void setup(){
setTextBackgroundColor(GLCD_RED);
setTextColor(GLCD_YELLOW);
glcd(0,0,"Hello World");
}
void loop(){}
setTextBackgroundColor(COLOR)
setTextBackgroundColor()
delay(DelayTime);
DelayTime ค่าเวลาหน่วงหน่วยเป็นมิลลิวินาที
ค้าสั่งหน่วงเวลาค้างที่บรรทัดนี้นานเท่าค่า DelayTime
delay(2000);
ตัวอย่าง
ค้างที่นี่นาน 2 วินาที
รูปแบบ คาสั่ง delay
glcdClear()
เคลียร์หน้าจอ
glcdFillScreen(COLOR)
เทสีลงบนหน้าจอทั้งหน้า
#include <popx2.h>
void setup(){}
void loop(){
glcdClear();
delay(500);
glcdFillScreen(color[0]);
delay(500);
glcdFillScreen(color[1]);
delay(500);
glcdFillScreen(color[2]);
delay(500);
}
INEX
1. ตัวอักษรมีสีคนละสี
2. วางตัวอักษรในแนวนอน
3. ขนาดตัวอักษร 4 เท่า
4. ตัวหนังสืออยู่กลางจอพอดี
แบบทดสอบ 1 สร้างตัวอักษรหลายสี บนหน้าจอ
แสดงรูปทรงเรขาคณิต : สี่เหลี่ยมผืนผ้า
glcdRect(x,y,width,height,color)
glcdFillRect(x,y,width,height,color)
x ต้าแหน่งแนวนอน
y ต้าแหน่งแนวตั้ง
width ความกว้าง
height ความสูง
color สี
x
y
height
width
Fill
แสดงรูปทรงเรขาคณิต : วงกลม
x ต้าแหน่งจุดศูนย์กลางวงกลมแนวนอน
y ต้าแหน่งจุดศูนย์กลางวงกลมแนวตั้ง
radius รัศมีของวงกลม
color สี
glcdCircle(x,y,radius,color)
glcdFillCircle(x,y,radius,color)
x,y
radius
Fill
แสดงรูปทรงเรขาคณิต : เส้นตรง
x1 จุดเริ่มต้นแนวนอน
y1 จุดเริ่มต้นแนวตั้ง
x2 จุดสิ้นสุดแนวตั้ง
y2 จุดสิ้นสุดแนวนอน
color สี
x1,y1
glcdLine(x1,y1,x2,y2,color)
x2,y2
แสดงรูปทรงเรขาคณิต : เส้นโค้ง
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);
แสดงรูปทรงเรขาคณิต : พล็อตจุด
x จุดเริ่มต้นแนวนอน
y จุดเริ่มต้นแนวตั้ง
color สีx,y
glcdPixel(x,y,color)
glcdPixel(64,80,GLCD_WHITE);
แบบทดสอบ 2 สร้างวงกลมสีแดงอยู่กึ่งกลางจอภาพ รัศมีเต็มจอพอดี
ลากเส้น 4 เส้นโดยมีจุดตัดอยู่กลางจอภาพพอดีแบบทดสอบ 3
สร้างสี่เหลี่ยมซ้อนกันดังรูปแบบทดสอบ 4
สร้างสี่เหลี่ยม 4 อัน ขนาดเท่ากันแบบทดสอบ 5
เอาต์พุตดิจิตอลอย่างง่าย : LED
out(ch,state);
ส่งค่าสถานะ(state) 0 หรือ 1
ออกไปยังตาแหน่งขา (ch)ที่ระบุ
out(24,1);
out(26,0);
#include <popx2.h>
void setup(){ }
void loop(){
out(24,1);
delay(100);
out(24,0);
delay(1);
}
ตัวอย่าง : ไฟกะพริบที่ขา 24
เขียนโปรแกรมให้ไฟกะพริบสลับกันแบบทดสอบ 6
ล้าโพงเปียโซ (อยู่ใต้จอ)
การสร้างเสียงออกล้าโพง
beep()
sound(freq,time)
freq คือ ความถี่เสียง
time คือ เวลา 1/100 วินาที • ใช้ล้าโพงเปียโซ มีอิมพีแดนซ์ 32W
• มีค่าความถี่ย่าน 300 Hz ถึง 3000 Hz
#include <popx2.h>
void setup(){}
void loop(){
beep();
delay(500);
}
#include <popx2.h>
void setup(){}
void loop(){
sound(1000,100);
delay(500);
}
ตัวอย่างการใช้งานค้าสั่ง beep ตัวอย่างการใช้งานค้าสั่ง sound
สร้างเสียง 1 kHz นาน 0.1 วินาที ต่อเนื่องสร้างเสียง 500 Hz นาน 0.1 วินาที ต่อเนื่อง
ตัวอย่างโปรแกรมสร้างเสียงออกล้าโพง https://pastebin.com/Ak5aLfi1
POP-X2 MARIO SOUND EXAMPLE
การรับค่าอินพุตจากสวิตช์ SW1
SW_OK
sw1_press() รอกด SW1 ค่อยไปท้าบรรทัดถัดไป
sw1() กดเป็นจริง / ไม่กดเป็นเท็จ
sw_OK_press() รอกด SW_OK ค่อยไปท้าบรรทัดถัดไป
sw_OK() กดเป็นจริง / ไม่กดเป็นเท็จ
OK() รอกด SW_OK ค่อยไปท้าบรรทัดถัดไป
พร้อมแสดงข้อความที่หน้าจอด้วย
ตัวอย่าง sw1_press()
#include <popx2.h>
void setup() {
sw1_press();
beep();
}
void loop() {}
#include <popx2.h>
void setup() {}
void loop() {
sw1_press();
beep();
}
ตัวอย่าง sw_OK_press()
#include <popx2.h>
void setup() {
sw_OK_press();
beep();
}
void loop() {}
#include <popx2.h>
void setup() {}
void loop() {
sw_OK_press();
beep();
}
if (เงื่อนไข){
ค้าสั่ง1 ท้าเมื่อเงื่อนไขเป็นจริง;
...
}
else {
ค้าสั่ง2 ท้าเมื่อเงื่อนไขเป็นเท็จ;
...
}
ค้าสั่งตรวจสอบเงื่อนไข if-else
ตัวแปร Boolean
จริง :True : 1
เท็จ :False : 0
ตัวอย่าง sw_OK() ด้วยค้าสั่ง if
#include <popx2.h>
void setup() {}
void loop() {
if (sw_OK()){
glcdFillScreen(GLCD_RED);
}
else{
glcdFillScreen(GLCD_BLACK);
}
}
if จะต้องอยู่ใน loop เพื่อการตรวจสอบต่อเนื่อง
ใช้เครื่องหมาย ! (not)
จะเปลี่ยนจากจริงเป็นเท็จ
เปลี่ยนจากเท็จเป็นจริง
ใช้เครื่องหมาย && (AND)
ใช้กับเงื่อนไขสองเงื่อนไข
ถ้าเป็นจริงทั้งคู่ถึงจะเป็นจริง
ใช้เครื่องหมาย || (OR)
ใช้กับเงื่อนไขสองเงื่อนไข
ถ้าอันใดอันหนึ่งจริงจะเป็นจริง
ตัวอย่างการใช้ && (AND)
#include <popx2.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
ไม่กดสวิตช์
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
for (ค่าเริ่มต้น; เงื่อนไข ;ส่วนเพิ่มค่า){
ท้าค้าสั่ง จนครบเงื่อนไข;
}
ค้าสั่งตรวจสอบเงื่อนไข for
#include <popx2.h>
int i;
void setup() {
for(i=0;i<10;i++){
glcdFillScreen(color[i]);
delay(200);
}
}
void loop() {}
เปลี่ยนสีหน้าจอ 10 รอบ
กดสวิตช์ = ลอจิก “0”
ไม่กด = ลอจิก “1”
แผงวงจรสวิตช์ : ZX-SWITCH01
อ่านค่าขาดิจิตอลจากพอร์ตใดๆ ของบอร์ด POP-X2
in(ch);
ch คือขาพอร์ตที่ต้องการอ่านค่าอินพุต
การคืนค่า คืนค่าขาพอร์ตที่อ่าน มีค่าเป็น 0 หรือ 1 เท่านั้น
ค้าสั่ง in() : ส้าหรับอ่านค่าอินพุตดิจิตอล boolean
ทดสอบเขียนโปรแกรมค้าสั่ง in() กับ ZX-Switch01
รูปแบบ
while(เงื่อนไข) {
ท้าค้าสั่งจนเงื่อนไขเป็นเท็จ;
}
ค้าสั่งตรวจสอบเงื่อนไข while
#include <popx2.h>
int i=0;
void setup() {}
void loop() {
if(in(30)==0){
while(in(30)==0){}
i++;
glcd(1,1,"%d ",i);
}
}
กดสวิตช์แล้วต้องรอปล่อย ถึงค่อยนับเลข
ปุ่มปรับเพื่ออ่านค่าอะนาลอก : knob()
หมุนเพื่อปรับค่า 0-1000
glcd(0,0,"%d",knob());
การแสดงผลค่า KNOB() ที่จอ GLCD
100
ใช้อ่านค่าตัวต้านทานปรับค่าได้บน pop-x2
glcd(0,0,"%d ",knob());
แก้ปัญหาเลขเดิมค้างด้วยการเคาะเว้นวรรคเพิ่ม
1000
9990
9990
ค้าสั่ง knob(x)
รูปแบบ
knob(x); โดย x คือค่า Scale
การคืนค่า
ค่าที่อ่านได้จาก knob มีค่าระหว่าง 0 ไปจนถึงค่า x
ตัวอย่าง
int val=0;
val=knob(180);
glcd("%d ",val);
หน้าจอ glcd แสดงค่าตัวเลข 0-180
รูปแบบ
knob(x,y);
x คือค่า Scale ช่วงเริ่มต้น
y คือค่า Scale ช่วงท้าย
ตัวอย่าง
glcd(1,1,"%d ",knob(10,90));
หน้าจอจะแสดงค่า 10-90 ตามการหมุน knob()
ค้าสั่ง knob(x,y)
#include <popx2.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
ตัวต้านทานปรับค่าได้แบบตัวนอน
ตัวต้านทานปรับค่าได้แบบเลื่อน
สัญลักษณ์
แผงวงจร ตัวต้านทานปรับค่าได้
ใช้ตรวจจับแสงสว่าง เลือกเอาต์พุตได้ 2 แบบคือ
แรงดันเอาต์พุตเพิ่ม เมื่อแสงตกกระทบมากขึ้น
แรงดันเอาต์พุตลดลง เมื่อแสงตกกระทบมากขึ้น
แผงวงจร ตัวต้านทานแปรค่าตามแสง
แรงดันเอาต์พุตเปลี่ยนแปลง 19.5mV/องศา
สามารถคานวณค่าจากค่าอะนาลอกที่อ่านได้จากสูตร
Temp = (val x 0.25) - 20.51
ไอซีวัดอุณหภูมิ MCP9701
#include <popx2.h>
int val,i;
float Temp;
void setup(){
glcdClear();setTextSize(2);
}
void loop(){
glcd(1,2,"Digital");
glcd(2,2,"THERMO");
glcd(3,3,"METER");
val=0;
for (i=0;i<20;i++) {val = val+analog(3); }
val = val/20;
Temp = (float(val)*0.25) - 20.51 ;
setTextSize(3); setTextColor(GLCD_YELLOW);
glcd(3,1,"%f",Temp);
setTextSize(2);setTextColor(GLCD_WHITE);
glcd(6,2,"Celsius");
delay(500);
}
ตัวอย่าง
แผงวงจรตรวจจับแสงสะท้อน: ZX-03
#include <popx2.h>
void setup(){
OK();
}
void loop(){
glcd(1,1,"L=%d ",analog(0));
delay(100);
}
โปรแกรมอ่านค่าจาก ZX-03 แสดงที่ GLCD
motor (CH,POW)
CH 1-2 คือมอเตอร์ 1 หรือ 2
ALL คือทั้งมอเตอร์ 1 และ 2
POW ความเร็ว -100 ถึง 100
ค่าบวก เดินหน้า
ค่าลบ ถอยหลัง
ค้าสั่ง motor() : ขับเคลื่อนมอเตอร์
motor (1,80)
motor (2,-50)
motor_stop หยุดขับมอเตอร์ตามช่องที่กาหนด
รูปแบบ
motor_stop(ch)
ch คือช่อง 1 หรือ 2 และ ALL กรณีหยุดพร้อมกัน
motor_stop(1); มอเตอร์ 1 หยุด
motor_stop(2); มอเตอร์ 2 หยุด
ao() ; มอเตอร์ 2 ตัวหยุดพร้อมกัน
ค้าสั่ง motor_stop() : หยุดมอเตอร์
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-100
ao() ;หยุด
ค้าสั่งควบคุมมอเตอร์กรณีเป็นหุ่นยนต์
แกนหมุน 180 องศา
ไฟเลี้ยง (+) GND (-)
สัญญาณ (S)
GND (-)
สัญญาณ (S)
การใช้งานเซอร์โวมอเตอร์
servo(CH,POS);
CH ช่องที่ใช้ขับ = 1 ถึง 4
POS ตาแหน่งองศาเซอร์โว = 0-180 ,-1
ค่า -1 หมายถึงหยุดจ่ายสัญญาณให้เซอร์โว
เซอร์โวจะไม่ล็อกแกน
ฟังก์ชั่นขับเซอร์โวมอเตอร์
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);
millis จะเพิ่มค่าขึ้นทีละ 1 ทุก ๆ 1 มิลลิวินาที
millis จะท้างานอยู่เบื้องหลังด้วย Interrupt Timer
millis ใช้ตัวแปร Long ในการเก็บค่า (4 ไบต์)
4,294,967,296 มิลลิวินาที ก่อนเคลียร์เป็น 0
ฟังก์ชั่น millis()
49.7 วัน
#include <popx2.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()
uart_ready() ถ้ามีข้อมูลถูกป้อนเข้ามาเงื่อนไขเป็นจริง
uart_getkey() รับค่าข้อมูล 1 ไบต์
uart ส่งข้อมูลหลายๆ ไบต์ออกไป
uart_putc ส่งข้อมูลออกไปตัวเดียว
uart_set_baud กาหนดค่าบอดเรตใหม่
uart1_available() ถ้ามีข้อมูลถูกป้อนเข้ามาเงื่อนไขเป็นจริง
uart1_getkey() รับค่าข้อมูล 1 ไบต์
uart1 ส่งข้อมูลหลายๆ ไบต์ออกไป
uart1_putc ส่งข้อมูลออกไปตัวเดียว
uart1_set_baud กาหนดค่าบอดเรตใหม่
ค้าสั่งส้าหรับสื่อสารอนุกรม
#include <popx2.h>
byte x;
void setup(){ setTextSize(4); }
void loop(){
if(uart_available()){
x=uart_getkey();
glcd(1,1,"%h ",x);
if(x=='a'){out(17,1);}
else if(x=='b'){out(17,0);}
}
}
ตัวอย่าง : รับค่าจากคอมพิวเตอร์ ส่งไปควบคุม LED
บอดเรตต้องเท่ากับ 9600
การเปิดหน้าต่าง Serial monitor
สื่อสารระหว่าง pop-x2 2 บอร์ด
#include <popx2.h>
int x;
void setup(){}
void loop(){
if(uart1_available()){
x=uart1_getkey();
glcd(1,1,"%d ",x);
}
}
ภาครับ
#include <popx2.h>
int x=0;
void setup(){}
void loop(){
uart1_putc(x);
x++;
delay(300);
}
ภาคส่ง
ตัวอย่างการรับส่งข้อมูล
uart Serial
uart1 Serial1
ค้าสั่งสื่อสารอนุกรม โดยตรงจาก Arduino
Serial.print(78, BIN) gives "1001110"
Serial.print(78, OCT) gives "116"
Serial.print(78, DEC) gives "78"
Serial.print(78, HEX) gives "4E"
Serial.begin(BAUD) เริ่มต้นใช้งานการสื่อสาร BAUD คือบอดเรตที่ใช้ในการสื่อสาร
Serial.write(1Byte) ส่งข้อมูล 1 ไบต์,หรือข้อความง่ายๆ
Serial.print() ส่งข้อความพร้อมพารามิเตอร์ต่างๆ
Serial.println() ส่งข้อความพร้อมพารามิเตอร์ต่างๆ และขึ้นบรรทัดใหม่
การรับส่งข้อมูล Serial กับคอมพิวเตอร์
Serial.println(1.23456, 0) gives "1"
Serial.println(1.23456, 2) gives "1.23"
Serial.println(1.23456, 4) gives "1.2346");
Serial.read()
อ่านค่าข้อมูล
Serial.available()
คืนค่าจานวนไบต์ของข้อมูลที่ได้รับ
ไม่มีข้อมูลเป็น 0
#include <popx2.h>
int x = 0;
void setup() {
Serial.begin(9600);
}
void loop() {
if (Serial.available() > 0) {
x = Serial.read();
Serial.print("I received: ");
Serial.println(x, DEC);
}
}
ตัวอย่างการรับข้อมูลจากคอมพิวเตอร์
#include <popx2.h>
void setup() {
Serial.begin(9600);
}
void loop() {
Serial.println(x);
delay(500);
x++;
}
ตัวอย่าง ทดสอบส่งค่าข้อมูล
เลือกบอดเรตเท่ากับ 9600
#include <popx2.h>
byte x;
void setup(){
setTextSize(3);
Serial.begin(9600);
}
void loop(){
if(Serial.available()){
x=Serial.read();
glcd(0,0,"%h ",x);
if(x==0x31){fd(50); }
if(x==0x32){bk(50); }
}
}
ตัวอย่างทดสอบรับข้อมูลจากคอมพิวเตอร์
attachInterrupt(pin, ISR, mode)
pin ต้าแหน่งขาที่รับอินเตอร์รัปต์
ISR ต้าแหน่งฟังก์ชั่นที่เรียกบริการ Interrupt
mode รูปแบบการกระตุ้น Interrupt
LOW กระตุ้นเมื่อขาเป็น 0
CHANGE กระตุ้นเมื่อมีการเปลี่ยนค่า
RISING กระตุ้นที่ขอบขาขึ้น
FALLING กระตุ้นที่ขอบขาลง
การใช้งานอินเตอร์รัปต์กับ pop-x2 ใช้ได้ที่ขา 2,3 และ 18
#include <popx2.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);}
ตัวอย่างการใช้งานอินเตอร์รัปต์
อุปกรณ์เสริม
Solid State Relay
บอร์ด ZX-SSR01
การขับโหลด 220V ด้วย ZX-SSR01
ระยะทาง (เซนติเมตร) = (ระยะเวลาในหน่วยไมโครวินาที / 29) / 2
วัดระยะทางด้วย HC-SR04
วัดความชื้นสัมพัทธ์
20 ถึง 80%RH
ความผิดพลาด 5%RH
ความละเอียด 1 %
ขนาดข้อมูล 8 บิต
วัดอุณหภูมิ
0 ถึง 50 องศาเซลเซียส
ความผิดพลาด 2 องศาเซลเซียส
ความละเอียด 1 องศาเซลเซียส
ขนาดของข้อมูล 8 บิต
ZX-DHT11 วัดความชื้นและอุณหภูมิ
ย่านวัดความเข้มแสง 1 ถึง 65,535 ลักซ์ มีค่าความผิดพลาด 20%
ทนต่อการรบกวนจากแสงอินฟราเรด
ต่อพร้อมกันได้ 2 ตัวก้าหนดผ่านขา ADDR
BH1750 บอร์ดวัดความเข้มแสงติดต่อผ่านบัส I2C
ข้อมูลความเข้มแสงในสภาวะแวดล้อมต่างๆ
คุณสมบัติหลัก
•ท้างานที่ไฟเลี้ยง 5 โวลต์
•วัดระยะทางใช่วงตั้งแต่ 4 ถึง 32 เซนติเมตร
โมดูลวัดระยะทางแบบอินฟราเรด: GP2D120/GP20A41
หลักการวัดระยะทาง
ใช้ไอซีเบอร์ ULN2003 ขับรีเลย์ 12V 4 ช่อง
ใช้ไฟเลี้ยง +12V ต่อแยก
รับลอจิก “1” ให้รีเลย์ทางาน
มี LED แสดงการทางาน
ขับ 220VAC 5A ขับโหลดได้ 600W
ขดลวด
NO (ปกติ เปิ ด)
COM (ขาร่ วม)
NC (ปกติ ปิ ด)
บอร์ดขับรีเลย์ 4 ช่อง Relay4i
2 เซล 7.4V
กระแส 1100mAh
จ่ายกระแส 30 เท่า
ชาร์จ 5 เท่า
1 เซล 3.7V อนุกรมกัน 2 เซล = 7.4V
จ่ายกระแสชั่วขณะได้ 1100 x 30 = 33000mA O_o!
ชาร์จได้ 5 เท่า 1100x5 = 5500mA ใช้เวลาประมาณ 20 นาที
จ่ายไฟ 1100 mA ต่อเนื่องได้ประมาณ 1 ชั่วโมง
คุณสมบัติของแบตเตอรี่ Li-Po
กฤษดา ใจเย็น
บริษัท อินโนเวตีฟ เอ็กเพอริเมนต์ จ้ากัด
108 ซอยสุขุมวิท 101/2 ถ.สุขุมวิท
แขวงบางนา เขตบางนา กรุงเทพฯ 10260
โทรศัพท์ 027477001-4 โทรสาร 02-7477005
Email : kritsada@inex.co.th
www.inex.co.th
facebook.com/innovativeexperiment
KRITSADA JAIYEN

POP-X2 Education Kit Presentation

Editor's Notes

  • #39 #include <popx2.h> // POP-X2 Board void setup() { setTextSize(5); glcdMode(3); setTextColor(color[0]);glcd(1,1,"I"); setTextColor(color[1]);glcd(1,2,"N"); setTextColor(color[2]);glcd(1,3,"E"); setTextColor(color[3]);glcd(1,4,"X"); } void loop() {}
  • #53 #include <popx2.h> void setup(){ } void loop(){ sound(660,100); delay(75);sound(660,100); delay(150);sound(660,100); delay(150);sound(510,100); delay(50);sound(660,100); delay(150);sound(770,100); delay(275);sound(380,100); delay(287);sound(510,100); delay(225);sound(380,100); delay(200);sound(320,100); delay(250);sound(440,100); delay(150);sound(480,80); delay(165);sound(450,100); delay(75);sound(430,100); delay(150);sound(380,100); delay(100);sound(660,80); delay(100);sound(760,50); delay(75);sound(860,100); delay(150);sound(700,80); delay(75);sound(760,50); delay(175);sound(660,80); delay(150);sound(520,80); delay(75);sound(580,80); delay(75);sound(480,80); delay(175);sound(510,100); delay(275);sound(380,100); delay(200);sound(320,100); delay(250);sound(440,100); delay(150);sound(480,80); delay(165);sound(450,100); delay(75);sound(430,100); delay(150);sound(380,100); delay(100);sound(660,80); delay(100);sound(760,50); delay(75);sound(860,100); delay(150);sound(700,80); delay(75);sound(760,50); delay(175);sound(660,80); delay(150);sound(520,80); delay(75);sound(580,80); delay(75);sound(480,80); delay(250);sound(500,100); delay(150);sound(760,100); delay(50);sound(720,100); delay(75);sound(680,100); delay(75);sound(620,150); delay(150);sound(650,150); delay(150);sound(380,100); delay(75);sound(430,100); delay(75);sound(500,100); delay(150);sound(430,100); delay(75);sound(500,100); delay(50);sound(570,100); delay(110);sound(500,100); delay(150);sound(760,100); delay(50);sound(720,100); delay(75);sound(680,100); delay(75);sound(620,150); delay(150);sound(650,200); delay(150);sound(1020,80); delay(150);sound(1020,80); delay(75);sound(1020,80); delay(150);sound(380,100); delay(150);sound(500,100); delay(150);sound(760,100); delay(50);sound(720,100); delay(75);sound(680,100); delay(75);sound(620,150); delay(150);sound(650,150); delay(150);sound(380,100); delay(75);sound(430,100); delay(75);sound(500,100); delay(150);sound(430,100); delay(75);sound(500,100); delay(50);sound(570,100); delay(110);sound(500,100); delay(150);sound(760,100); delay(50);sound(720,100); delay(75);sound(680,100); delay(75);sound(620,150); delay(150);sound(650,200); delay(150);sound(1020,80); delay(150);sound(1020,80); delay(75);sound(1020,80); delay(150);sound(380,100); delay(150);sound(500,100); delay(150);sound(760,100); delay(50);sound(720,100); delay(75);sound(680,100); delay(75);sound(620,150); delay(150);sound(650,150); delay(150);sound(380,100); delay(75);sound(430,100); delay(75);sound(500,100); delay(150);sound(430,100); delay(75);sound(500,100); delay(50);sound(570,100); delay(210);sound(585,100); delay(275);sound(550,100); delay(210);sound(500,100); delay(180);sound(380,100); delay(150);sound(500,100); delay(150);sound(500,100); delay(75);sound(500,100); delay(150);sound(500,60); delay(75);sound(500,80); delay(150);sound(500,60); delay(175);sound(500,80); delay(75);sound(580,80); delay(175);sound(660,80); delay(75);sound(500,80); delay(150);sound(430,80); delay(75);sound(380,80); delay(300);sound(500,60); delay(75);sound(500,80); delay(150);sound(500,60); delay(175);sound(500,80); delay(75);sound(580,80); delay(75);sound(660,80); delay(225);sound(870,80); delay(162);sound(760,80); delay(300);sound(500,60); delay(75);sound(500,80); delay(150);sound(500,60); delay(175);sound(500,80); delay(75);sound(580,80); delay(175);sound(660,80); delay(75);sound(500,80); delay(150);sound(430,80); delay(75);sound(380,80); delay(300);sound(660,100); delay(75);sound(660,100); delay(150);sound(660,100); delay(150);sound(510,100); delay(50);sound(660,100); delay(150);sound(770,100); delay(225);sound(380,100); }