วันศุกร์ที่ 8 กุมภาพันธ์ พ.ศ. 2562

ส่วนประกอบงานวิชา เขียนโปรแกรม ตัวอย่างงานที่ 12

ส่วนประกอบงานวิชา  เขียนโปรแกรม ตัวอย่างงานที่ 12

ใบรายงานผลการปฏิบัติงาน

โปรเจคหุ่นยนต์ Arduino UNO + L298P บังคับด้วย Bluetooth




โปรเจค นี้จะเป็นการนำ Arduino UNO R3 และ L298P Motor Shield Board มาทำเป็น หุ่นยนต์ บังคับด้วย สมาร์ทโฟน แอนดรอยด์ ผ่านทาง Bluetooth HC-06 ซึ่งการใช้ 
L298P Motor Shield จะทำให้การประกอบหุ่นยนต์ สะดวกและง่ายขึ้น เมื่อเทียบกับการใช้ Motor Driver Module L298N


อุปกรณ์ที่ใช้


1. ประกอบหุ่นยนต์



เริ่มต้นด้วยการ ประกอบ หุ่นยนต์ UNO + L298P และ ทดสอบการเคลื่อนที่ของหุ่นยนต์ ตามลิงค์ บทความด้านล่าง

https://robotsiam.blogspot.com/2017/12/uno-l298p.html

 

 

2. ประกอบ Bluetooth HC-06



ใช้ จั้มเปอร์ ผู้-เมีย เชื่อมต่อ Bluetooth HC-06 เข้ากับ L298P ตามรูปด้านล่าง

HC-06 <-> L298P

VCC 
<-> 5V
GND 
<-> Gnd
TXD 
<-> RX(0)
RXD 
<-> TX(1)





3. การอัพโหลดโปรแกรม
/*

    Bluetooth Robot with Arduino UNO + L298P
    For more details visit:
    https://robotsiam.blogspot.com/2017/12/uno-l298p-bluetooth.html

*/

#include <SoftwareSerial.h>

int incomingByte = 0;

/*-------definning Outputs------*/

int MA1 = 12;     // Motor A1
int MA2 =  3;     // Motor A2
int PWM_A =  10;   // Speed Motor A

int MB1 =  13;     // Motor B1
int MB2 =  8;     // Motor B2
int PWM_B =  11;  // Speed Motor B

int SPEED = 200;  // Speed PWM สามารถปรับความเร็วได้ถึง 0 - 255

void setup() {

  //Setup Channel A
  pinMode(12, OUTPUT); //Motor A1
  pinMode(3, OUTPUT); //Motor A2
  pinMode(10, OUTPUT); //Speed PWM Motor A

  //Setup Channel B
  pinMode(13, OUTPUT);  //Motor B1
  pinMode(8, OUTPUT);  //Motor B2
  pinMode(11, OUTPUT); //Speed PWM Motor B

  Serial.begin(9600);
  Serial.println("Motor Ready");

}

void loop() {



  if (Serial.available() > 0) {
    incomingByte = Serial.read();
  }

  switch (incomingByte)
  {
    case 'S':
      // stop all motors
      {
        Stop(1);
        Serial.println("Stop\n");
        incomingByte = '*';
      }

      break;

    case 'F':
      // turn it on going forward
      {
        Forward(1);
        Serial.println("Forward\n");
        incomingByte = '*';
      }
      break;

    case 'B':
      // turn it on going backward
      {
        Backward(1);
        Serial.println("Backward\n");
        incomingByte = '*';
      }
      break;

    case 'R':
      // turn right
      {
        turnRight(1);
        Serial.println("Rotate Right\n");
        incomingByte = '*';
      }
      break;


    case 'L':
      // turn left
      {
        turnLeft(1);
        Serial.println("Rotate Left\n");
        incomingByte = '*';
      }
      break;

  }
}
void Forward(int time)
{
  digitalWrite(MA1, LOW);
  digitalWrite(MA2, HIGH);
  analogWrite(PWM_A, SPEED);

  digitalWrite(MB1, HIGH);
  digitalWrite(MB2, LOW);
  analogWrite(PWM_B, SPEED);

  delay(time);
}

void Backward(int time)
{
  digitalWrite(MA1, HIGH);
  digitalWrite(MA2, LOW);
  analogWrite(PWM_A, SPEED);

  digitalWrite(MB1, LOW);
  digitalWrite(MB2, HIGH);
  analogWrite(PWM_B, SPEED);

  delay(time);
}

void turnLeft(int time)
{
  digitalWrite(MA1, HIGH);
  digitalWrite(MA2, LOW);
  analogWrite(PWM_A, SPEED);

  digitalWrite(MB1, LOW);
  digitalWrite(MB2, LOW);
  analogWrite(PWM_B, 0);

  delay(time);
}

void turnRight(int time)
{
  digitalWrite(MA1, LOW);
  digitalWrite(MA2, LOW);
  analogWrite(PWM_A, 0);

  digitalWrite(MB1, LOW);
  digitalWrite(MB2, HIGH);
  analogWrite(PWM_B, SPEED);

  delay(time);
}

void Stop(int time)
{
  digitalWrite(MA1, LOW);
  digitalWrite(MA2, LOW);
  analogWrite(PWM_A, 0);

  digitalWrite(MB1, LOW);
  digitalWrite(MB2, LOW);
  analogWrite(PWM_B, 0);

  delay(time);

ไม่มีความคิดเห็น:

แสดงความคิดเห็น