ข้อแนะนำเกี่ยวกับการสร้างหุ่นยนต์เบื้องต้น

และการใช้ฟังก์ชั่นใน robot.h

 

ภาคเซ็นเซอร์ (Sensor)

ตัวเซ็นเซอร์เป็นตัวเซ็นเซอร์แสง ใช้ LDR (light dependent resistor)

โดยต่อเป็นวงจรแบ่งแรงดัน และใช้ LED เป็นตัวส่งแสงต่อเข้าที่อินพุท A/D AN0(P1.0) - AN3( P1.3)

ค่าความต้านทานของ LDR นี้เปลี่ยนไปตามความสว่างของแสงที่ตกบนตัว LDR ดังนี้

- เมื่อไม่มีแสงตกกระทบเลย(มืดสนิท) มีค่าประมาณ 100 K ขึ้นไป
- ถ้ามีแสงมาก มีค่าประมาณ 1 K
- แสงไฟนีออนตกกระทบมีค่าประมาณ 10 K
ดังนั้นควรใช้ค่า R อนุกรมประมาณ 15 K - 20 K



A/D
แรงดันอ้างอิงของ A/D บนบอร์ดไมโครใช้ค่า 2.5 V ต้องได้ 2.5 V ถ้าไม่ได้ให้ปรับ VR 10 K

MOTOR

สัญญาณที่ใช้ควบคุมมอเตอร์

เพื่อให้ควบคุมความเร์วมอเตอร์ได ้ ให้ใช้ระบบ PWM(Pulse Width Modulation) โดยใช้สัญญาณจาก PWM Output ช่อง 3 (P1.6) ควบคุมมอเตอร์ล้อซ้ายและ PWM Output ช่อง 4(P1.7) ควบคุมมอเตอรล้อขวา

ชุดขับมอเตอร์

ทำทั้งหมด 2 ชุด สำหรับล้อซ้ายและล้อขวา สำหรับขาทรานซิสเตอร์ ควรตรวจสอบ อาจไม่ตรงตามรูป

การต่อมอเตอร์เพื่อให้หมุนไปข้างหน้า

สำหรับผู้ที่ต้องการใช้ IC สำเร็จรูปสามารถใช้เบอร์ L293 ได้ ซึ่งต่อกับมอเตอร์ได้ 2 ตัว

สามารถต่ออย่างง่ายๆและควบคุมได้ด้วย PWM

ตัวอย่างมอเตอร์ 1 ตัว

L293 Datasheet

บทความ Small DC Motor Control ของ Intel

ความหมายของโปรแกรมต่างๆใน Library robot.h

ฟังก์ชั่น void d1ms (unsigned int dt)
ความหมาย หน่วงเวลาเท่ากับค่า dt x 1 ms
การใช้งาน
d1ms(5); หน่วงเวลา 5 ms

ฟังก์ชั่น void d100ms (unsigned int dt)
ความหมาย หน่วงเวลาเท่ากับค่า dt x 100 ms
การใช้งาน
d100ms(3); หน่วงเวลา 300 ms

ฟังก์ชั่น void int_serial (void)
ความหมาย กำหนดการทำงานของพอร์ทอนุกรม

ฟังก์ชั่น unsigned int adc(unsigned char ch)
ความหมาย แปลงค่าอะนาลอกเป็นดิจิตอล หมายเลขช่องกำหนดด้วยค่า ch ค่าที่แปลงได้เป็น unsigned integer
การใช้งาน
unsigned int v1;
v1 = adc(0);

ฟังก์ชั่น void adc4(unsigned int value[4])
ความหมาย แปลงค่าอะนาลอกเป็นดิจิตอล ทั้ง 4 ช่อง ค่าที่แปลงได้เป็น unsigned integer ส่งคืนมาทาง value
การใช้งาน
unsigned int dat[4];
adc4(dat);

ฟังก์ชั่น void int_pwm34(void)
ความหมาย กำหนดการทำงานของ PWM ช่องที่ 3 (P1.6) และ 4 (P1.7)
การใช้งาน
int_pwm34();

ฟังก์ชั่น void motor_l(unsigned char speed)
ความหมาย ควบคุมความเร็วมอเตอร์ตัวซ้าย (PMM 3) ค่าความเร็วกำหนดได้ด้วยค่า speed ถ้ามีค่าเท่ากับ 1 จะหมุนเร็วที่สุด ถ้ามีค่ามากกว่า 160 ขึ้นไปจะหยุด (นศ.ควรทดสอบ)
การใช้งาน
unsigned char i;
i = 10;
motor_l (i);

ฟังก์ชั่น void motor_r(unsigned char speed)
ความหมาย ควบคุมความเร็วมอเตอร์ตัวขวา (PMM 4) ค่าความเร็วกำหนดได้ด้วยค่า speed ถ้ามีค่าเท่ากับ 1 จะหมุนเร็วที่สุด ถ้ามีค่ามากกว่า 160 ขึ้นไปจะหยุด (นศ.ควรทดสอบ)
การใช้งาน

motor_r (25);

โปรแกรมตัวอย่าง r1.c

เป็นการอ่านค่า A/D ครั้งละ 4 ช่อง แล้วส่งออกทางพอร์ทอนุกรม สามารถตรวจดูได้ โดยใช้ Hyper Terminal Baudrate 9600 b/s
กรณีที่ช่องใดไม่ใช้ควรต่ออินพุทช่องนั้นลงดิน โปรแกรมนี้ใช้ตรวจสอบว่าค่าที่อ่านได้จาก LDR เมื่อมีการสะทอ้นของวัสดุสีต่างๆมีค่าเท่าไรได้ เพื่อใช้หาจุดตัดสินใจ
ว่าเป็นสีอะไร

โปรแกรมตัวอย่าง r2.c

เหมือน r1.c และ ทดสอบการหมุนของมอเตอร์ซ้ายและขวา โดยมอเตอร์ขวาจะหมุนเร์ว ส่วนมอเตอร์ซ้ายจะหมุนช้า
ขณะที่หมุน จะส่งค่า speed ออกที่พอร์ทอนุกรม และความเร็วจะเปลี่ยนแปลงด้วย