กล่าวคือ เซนเซอร์ A1 และ A2 คร่อมเส้น และเซนเซอร์ทุกตัว
วิ่งด้วยความเร็วปกติ
บอร์ด Kruro Nano
มอเตอร์ หรือ เซตหุ่นยนต์เพื่อการศึกษา
ตรวจสอบการเชื่อมต่อมอเตอร์ให้ถูกต้อง โดยมีวิธีเช็คดังนี้
1. เสียบสายไปที่ช่องต่อมอเตอร์ ให้ มอเตอร์ซ้ายอยู่ที่ Motor1
2. ตรวจสอบทิศทางเบื้องต้นโดยการหมุนล้อไปข้างหน้า ถ้าไฟสถานะมอเตอร์ขึ้นเป็นสีเขียนแสดงว่าถูกต้อง หากขึ้นสีแดงให้สลับขั้วมอเตอร์แล้วทดสอบอีกครั้ง
#include <SPI.h>
#include <Wire.h>
////////////ตั้งค่าพอร์ตมอเตอร์////////////////////
#define DR1 7 /// กำหนดสัญญาณดิจิตอลขวาที่ 1 พอร์ต 7
#define DR2 8 /// กำหนดสัญญาณดิจิตอลขวาที่ 2 พอร์ต 8
#define PWMR 6 /// กำหนดสัญญาณ PWM ขวาพอร์ต 6
/////////////////////////////////
#define DL1 9 // กำหนดสัญญาณดิจิตอลซ้ายที่ 1 พอร์ต 9
#define DL2 4 // กำหนดสัญญาณดิจิตอลซ้ายที่ 2 พอร์ต 4
#define PWML 5 /// กำหนดสัญญาณ PWM ซ้ายพอร์ต 5
const int buttonPin = 2;
////////ตัวแปรเก็บค่าแสงจากเซนเซอร์
int S1 = 0;
int S2 = 0;
int S3 = 0;
int S4 = 0;
//////////ค่ากลางเซนเซอร์ เอาไว้เปรียบเทียบค่าแสง//////////
int cen1 = 550;
int cen2 = 350;
int cen3 = 550;
int cen4 = 550;
void setup()
{
pinMode(DL1, OUTPUT);
pinMode(DL2, OUTPUT);
pinMode(PWML, OUTPUT);
pinMode(DR1, OUTPUT);
pinMode(DR2, OUTPUT);
pinMode(PWMR, OUTPUT);
pinMode(buttonPin, INPUT);
}
void loop()
{
int sw = digitalRead(buttonPin); // ให้ sw อ่านค่า digital จากพอร์ต 2(button)
if (sw==1){
while (1) { // ให้วนลูบ
S1 = analogRead(0); // อ่านค่า Analog จาก Pin A0
S2 = analogRead(1); // อ่านค่า Analog จาก Pin A0
S3 = analogRead(2); // อ่านค่า Analog จาก Pin A0
S4 = analogRead(3); // อ่านค่า Analog จาก Pin A0
if ((S2>cen2) and (S3>cen3)){ Motor(100,100);} //เซนเซอร์ 2 และ 3 เจอขาว ให้มอเตอร์ซ้ายและขวาเดินหน้าด้วยความเร็ว 100
if(S2<cen2) {Motor(0,100); } // เซนเซอซ้ายเจอดำ
if(S3<cen3) {Motor(100,0); } // เซนเซอขวาเจอดำ
if(S1<cen1) {Motor(-100,100); } // เซนเซอซ้ายเจอดำ
if(S4<cen4) {Motor(100,-100); } // เซนเซอขวาเจอดำ
}}}
///////////////////////////////////////////////////////////////////////
// ฟังก์ชั่นสั่งงานมอเตอร์ Motor(ความเร็วซ้าย,ความเร็วขวา);
//
// Motor(100,100); // เดินหน้าทั้งสองล้อ
// Motor(-100,-100); // ถอยหลังทั้งสองล้อ
// Motor(-100,100); // ล้อซ้ายถอย ล้อขวาเดินหน้า
// Motor(100,-100); // ล้อซ้ายเดินหน้า ล้อขวาถอย
// Motor(0,0); // หยุดทั้ง สองล้อ
//
// สามารถกำหนดความเร็วได้ -255 ถึง 255
//
///////////////////////////////////////////////////////////////////////
void Motor(int spl, int spr) // ประกาศฟังก์ชัน run(กำลังมอเตอร์ซ้าาย,กำลังมอเตอร์ขวา);
{
if (spl > 0)
{
digitalWrite(DL1, LOW);
digitalWrite(DL2, HIGH);
analogWrite(PWML, spl);
}
else if (spl < 0)
{
digitalWrite(DL1, HIGH);
digitalWrite(DL2, LOW);
analogWrite(PWML, -spl);
}
else
{
digitalWrite(DL1, LOW);
digitalWrite(DL2, LOW);
}
//////////////////////////////////////
if (spr > 0)
{
digitalWrite(DR1, HIGH);
digitalWrite(DR2, LOW);
analogWrite(PWMR, spr);
}
else if (spr < 0)
{
digitalWrite(DR1, LOW);
digitalWrite(DR2,HIGH);
analogWrite(PWMR, -spr);
}
else
{
digitalWrite(DR1, LOW);
digitalWrite(DR2, LOW);
}
}
ให้ผู้เรียนทดลองเพิ่มความเร็วหรือลดความเพื่อให้การวิ่งตามเส้นไปได้เร็วขึ้น
หุ่นยนต์แต่ละตัวประกอบขึ้นจากมือ อาจมีความผิดพลาดของโครงสร้างทำให้มีปัญหาในการเดินไม่ตรง
ดังนั้นก่อนที่ผู้เรียนจะเขียนโปรแกรมควรทำการจูนหุ่นหยนต์เสียก่อน ด้วยการใช้ เพิ่มกำลังไฟให้มอเตอร์ที่วิ่งช้ากว่า เพื่อให้หุ่นยนต์เดินได้ตรงที่สุด