lnwshop logo
เจ้าของร้านค้านี้ ไม่ได้เข้าสู่ระบบเป็นระยะเวลา 16 วัน แล้ว
  • ตอบกระทู้
  • ตั้งกระทู้ใหม่
QUOTE 

Full_Auto_Bot เทสระบบขับเคลื่อนทั้งหมด FOR ARDUINO UNO

เจ้าของร้าน

//********Include libraries*********************************************

#include

#include  

#include

#include

#include

 

//Pin assignments and global variables per function. Customize if needed

//*******Pin assignments Motor board and IR receiver********************

const int MotorLeft1= 7;

const int MotorLeft2 = 3;

const int MotorRight1 = 4;

const int MotorRight2 = 2;

const int MotorLeftPWM = 6;

const int MotorRightPWM = 5;

const int irReceiverPin = A3;

const int servoPin = 9; //orange wire

int iSpeed = 200; //speed, range 0 to 255

const int LedPin=13; 

#define LINETHRESHOLD 400

 

//******Infrared key bindings********************************************

const long IRfront = 0xFF629D;      //go straight: button ^

const long IRback = 0xFFA857;       //go back    : button v

const long IRturnright = 0xFFC23D;  //turn right : button >

const long IRturnleft = 0xFF22DD;   //turn left  : button <

const long IRstop = 0xFF02FD;       //stop       : button ok

const long IRcny70 = 0xFF6897;      //CNY70 automatic mode: button 1

const long IRAutorun = 0xFF9867;    //Ultrasonic mode : button 2

const long IRLCD = 0xFFB04F;    //Ultrasonic mode : button 3

//******Track following pin assignments and signals**********************

const int SensorLeft = A0;      //

const int SensorMiddle = A1 ;   //

const int SensorRight = A2;     //

IRrecv irrecv(irReceiverPin);  // IRrecv signal

decode_results infrared;       // decode result

//*******Ultrasonic pin assignments and signals**************************

const int echoPin = 12; // ultrasonic receive=echo pin

const int triggerPin = 13; // ultrasonic send=trigger pin

Servo myservo; // define myservo

const int degreesForward = 90; //nr degrees to look forward

const int degreesLeft = 180; //nr degrees to look left

const int degreesRight = 0; //nr degrees to look right

const int delay_time = 250; // servo motor delay

const int Fgo = 8; // go straight

const int Rgo = 6; // turn right

const int Lgo = 4; // turn left

const int Bgo = 2; // go back

//*****Bluetooth signals**************************************************

#define BT_SERIAL_RX    11 //Rx pin

#define BT_SERIAL_TX    10 //Tx pin

SoftwareSerial btSerial(BT_SERIAL_RX, BT_SERIAL_TX);// RX, TX

char val; //stores received character. Needs to be global to perform continuous movement

 

//****************** lcd show *******************************************

LiquidCrystal_PCF8574 lcd(0x27);

char str[17] = {"Let 's Get it on"}; // 16 charecter

int i, j;

//*********General SETUP: activate pins***********************************

void setup() 

{

  //start receiving serial infor

  btSerial.begin(38400);

  //motor connections

  pinMode(MotorRight1, OUTPUT);  //

  pinMode(MotorRight2, OUTPUT);  //

  pinMode(MotorLeft1,  OUTPUT);  //

  pinMode(MotorLeft2,  OUTPUT);  //

  pinMode(MotorRightPWM, OUTPUT); //enable for right side motor

  pinMode(MotorLeftPWM, OUTPUT); //enable for right side motor

  irrecv.enableIRIn();      // start infrared decode

  myservo.write(degreesForward);       // will make head look in front

 

  //black track following

  pinMode(SensorLeft, INPUT);

  pinMode(SensorMiddle, INPUT);

  pinMode(SensorRight, INPUT);

 

  //Ultra sonic

  //digitalWrite(2,HIGH); //what is this pin for?

  pinMode(echoPin, INPUT);

  pinMode(triggerPin, OUTPUT);

  myservo.attach(servoPin);

 

  // lcd i2c

  lcd.begin(16,2);

  lcd.setBacklight(0);

  display_Lcd();

}

 

//**************Movement functions******************************

void advance(int d) { //go straight

  digitalWrite(MotorRight1, HIGH);

  digitalWrite(MotorRight2, LOW);

  digitalWrite(MotorLeft1, HIGH);

  digitalWrite(MotorLeft2, LOW);

  analogWrite(MotorRightPWM, iSpeed);

  analogWrite(MotorLeftPWM, iSpeed);

  delay(d * 10);

}

void right(int d) { //turn right (single wheel)

  digitalWrite(MotorLeft1, LOW);

  digitalWrite(MotorLeft2, HIGH);

  digitalWrite(MotorRight1, LOW);

  digitalWrite(MotorRight2, LOW);

  analogWrite(MotorRightPWM, iSpeed);

  analogWrite(MotorLeftPWM, iSpeed);

  delay(d * 10);

}

void left(int d) {//turn left(single wheel)

  digitalWrite(MotorRight1, LOW);

  digitalWrite(MotorRight2, HIGH);

  digitalWrite(MotorLeft1, LOW);

  digitalWrite(MotorLeft2, LOW);

  analogWrite(MotorRightPWM, iSpeed);

  analogWrite(MotorLeftPWM, iSpeed);

  delay(d * 10);

}

void turnR(int d) {//turn right (two wheels)

  digitalWrite(MotorRight1, HIGH);

  digitalWrite(MotorRight2, LOW);

  digitalWrite(MotorLeft1, LOW);

  digitalWrite(MotorLeft2, HIGH);

  analogWrite(MotorRightPWM, iSpeed);

  analogWrite(MotorLeftPWM, iSpeed);  

  delay(d * 10);

}

void turnL(int d) {//turn left (two wheels)

  digitalWrite(MotorRight1, LOW);

  digitalWrite(MotorRight2, HIGH);

  digitalWrite(MotorLeft1, HIGH);

  digitalWrite(MotorLeft2, LOW);

  analogWrite(MotorRightPWM, iSpeed);

  analogWrite(MotorLeftPWM, iSpeed);

  delay(d * 10);

}

void stopp(int d) { //stop

  digitalWrite(MotorRight1, LOW);

  digitalWrite(MotorRight2, LOW);

  digitalWrite(MotorLeft1, LOW);

  digitalWrite(MotorLeft2, LOW);

  analogWrite(MotorRightPWM, iSpeed);

  analogWrite(MotorLeftPWM, iSpeed);  

  delay(d * 10);

}

void back(int d) { //go back

  digitalWrite(MotorRight1, LOW);

  digitalWrite(MotorRight2, HIGH);

  digitalWrite(MotorLeft1, LOW);

  digitalWrite(MotorLeft2, HIGH);

  analogWrite(MotorRightPWM, iSpeed);

  analogWrite(MotorLeftPWM, iSpeed);  

  delay(d * 10);

}

 

//************************* for line follower **********************************

void Advance() 

{ //go straight

  digitalWrite(MotorRight1, HIGH);

  digitalWrite(MotorRight2, LOW);

  digitalWrite(MotorLeft1, HIGH);

  digitalWrite(MotorLeft2, LOW);

  analogWrite(MotorRightPWM, iSpeed-65); // mas

  analogWrite(MotorLeftPWM, iSpeed-65);

}

 

void TurnR() 

{//turn right (two wheels)

  digitalWrite(MotorRight1, HIGH);

  digitalWrite(MotorRight2, LOW);

  digitalWrite(MotorLeft1, LOW);

  digitalWrite(MotorLeft2, HIGH);

  analogWrite(MotorRightPWM, iSpeed+40);

  analogWrite(MotorLeftPWM, iSpeed+40);

}

 

void TurnL() 

{//turn left (two wheels)

  digitalWrite(MotorRight1, LOW);

  digitalWrite(MotorRight2, HIGH);

  digitalWrite(MotorLeft1, HIGH);

  digitalWrite(MotorLeft2, LOW);

  analogWrite(MotorRightPWM, iSpeed+40);

  analogWrite(MotorLeftPWM, iSpeed+40);

}

 

//************Ultrasonic distance calculator*************************************

//detect distance for given angles and print char + direction

float getDistance(int degrees, char dir) 

{

  myservo.write(degrees);

  digitalWrite(triggerPin, LOW); // ultrasonic echo low level in 2us

  delayMicroseconds(2);

  digitalWrite(triggerPin, HIGH); // ultrasonic echo high level in 10us, at least 10us

  delayMicroseconds(10);

  digitalWrite(triggerPin, LOW); // ultgrasonic echo low level

  float distance = pulseIn(echoPin, HIGH); // read time

  distance = distance / 58 ; // turn time to distance

  Serial.print(dir); // 

  Serial.print(" distance: "); // 

  Serial.print(int(distance)); //  output distance (mm)

  Serial.print("\n");

  return distance;

}

//*************Ultrasonic direction decision making******************************

//measurements three angles (front, left, right

int getDirectionFromdetection() 

{

  int Fspeedd = 0; // front distance

  int Rspeedd = 0; // right distance

  int Lspeedd = 0; // left distance

  int delay_time = 250; //

  int directionn =0;

  

  //get front distance

  Fspeedd = getDistance(degreesForward, 'F');

 

  // if distance is less than 10mm 4

  if (Fspeedd < 10) 

  { 

    stopp(1); //  clear output

    directionn = Bgo;

  }

  // if distance less than 25 mm 5

  else if (Fspeedd < 25) 

  {

    stopp(1); // clear output

    Lspeedd = getDistance(degreesLeft, 'L'); // detection distance on left side

    delay(delay_time); // waiting for the servo motor to become stable

    

    Rspeedd = getDistance(degreesRight, 'R'); // detection distance on right side

    delay(delay_time); // waiting for servo motor to be stable

 

    // if left distance greater than right

    if (Lspeedd > Rspeedd) 

    {

      directionn = Lgo; // go left

    }

 

    if (Lspeedd < Rspeedd) 

    {//if left distance less than right

      directionn = Rgo; //go right

    }

 

    if (Lspeedd < 10 && Rspeedd < 10)

     { //if distance less 10mm both right and left 4

      directionn = Bgo; //go back

    }

  }

  else 

  {

    directionn = Fgo; //go straight

  }

  return directionn;

}

 

void autoRunUsingUltraSonic() 

{

  bool stopPressed;

  int directionn = 0; // front=8, back=2, left=4, right=6

  while (IRAutorun) 

  {

    myservo.write(90); // make the servo motor reset

    directionn = getDirectionFromdetection();

    stopPressed = stopCommandPressed();

    if (stopPressed) 

    {

      break;

    }

    else if (directionn == Fgo) 

    { //go straight

      infrared.value = 0;

      advance(1); //

      Serial.print(" Advance "); //

      Serial.print(" ");

    }

    else if (directionn == Bgo) 

    { //go back

      infrared.value = 0;

      //back(50); //

      delay(300);

      turnR(70); //

      Serial.print(" Reverse "); //

    }

    else if (directionn == Rgo) 

    { //turn right

      infrared.value = 0;

      delay(300);

      back(50);

      delay(300);

      turnR(50); //

      Serial.print(" Right "); //

    }

    else if (directionn == Lgo) 

    { //turn left

      infrared.value = 0;

      delay(300);

      back(50);

      delay(300);

      turnL(50);

      Serial.print(" Left ");

    }

  }

  infrared.value = 0;

}

 

//*************************Bluetooth functionality***********************

//Bluetooth commands

void bluetoothCommand() 

{

  if (btSerial.available()) 

  {

    val = btSerial.read();

    btSerial.write(val);

  }

  if (val == '2') 

  { // Forward

    advance(10);

  }

  else if (val == '5') 

  { // Stop Forward

    stopp(10) ;

    val = btSerial.read(); //read value again, otherwise can't continu with infrared

  }

  else if (val == '8') 

  { // Backwards

    back(10);

  }

  else if (val == '6') 

  { // Right

    turnL(10);

  }

  else if (val == '4') 

  { // Left

    turnR(10);

  }

  else if (val == 's') 

  { // Stop, not used though

    stopp(10 ) ;

  }

}

 

//Check if stop command on remote is pressed (button 5)

bool stopCommandPressed(){

  bool stopPressed = false;

  if (irrecv.decode(&infrared)) 

  {

    irrecv.resume();

    Serial.println(infrared.value, HEX);

    if (infrared.value == IRstop) 

    {

      stopp(10);

      stopPressed = true;

    }

  }

  return stopPressed;

}

 

void followBlackLine() 

{

  bool stopPressed;

  int SL;  //sensor left

  int SM;  //sensor middle

  int SR;  //sensor right

  while (IRcny70) 

  {

    SL = analogRead(SensorLeft);

    SM = analogRead(SensorMiddle);

    SR = analogRead(SensorRight);

 

    if((SL > LINETHRESHOLD) && (SM < LINETHRESHOLD) && (SR < LINETHRESHOLD) )

  {

    TurnL();

    

  }

  else if((SL < LINETHRESHOLD) && (SM <LINETHRESHOLD) && (SR > LINETHRESHOLD) )

  {

    TurnR();

    

  }

  else if((SL > LINETHRESHOLD) && (SM > LINETHRESHOLD) && (SR < LINETHRESHOLD) )

  {

    TurnL();

    

  }

  else if((SL < LINETHRESHOLD) && (SM > LINETHRESHOLD) && (SR >LINETHRESHOLD) )

  {

    TurnR();

    

  }

  else

  {

    Advance();

    

  }

    stopPressed = stopCommandPressed();

    if (stopPressed) 

    {

      break;

    }

  }

  infrared.value = 0;  

}

 

//*************************** lcd Function *****************************

 

void display_Lcd()

{

   lcd.setBacklight(255);

      lcd.setCursor(0, 0);

      lcd.print("  ARE U READY?  "); // 16 charecter

      

      for(j = 0; j <= 1; j++)

      for(i = 17; i >=0; i--)

      {

        switch(j)

        {

          case 0: lcd.noDisplay();  delay(150);

                  lcd.display();    delay(150);

 

          case 1: lcd.setCursor(i, 1); 

                  lcd.print(str[i]);

                  delay(100);    

          break;     

        }

      }

      delay(500);

      lcd.clear();

      lcd.setBacklight(0);   

}   

//**************************************MAIN LOOP***************************************

void loop() 

{

  //bluetooth commands

  bluetoothCommand();

 

  //************************************normal remote control mode ********

  // decoding success 'receive infrared signal

  if (irrecv.decode(&infrared))  

   {         

    if (infrared.value == IRfront) 

    {

      advance(10); //go straigt

    } 

    else if (infrared.value ==  IRback)

    {

      back(10); //go back

    }

    else if (infrared.value == IRturnright) 

    {

      turnR(10); // go right

    }

    else if (infrared.value == IRturnleft) 

    {

      turnL(10); // go left

    }

    else if (infrared.value == IRstop) 

    {//stop

      stopp(10);

    }

    //********************follow black line********cny70 automatic mode********

    else if (infrared.value == IRcny70) 

    {

      followBlackLine();

    }

    //***********************ultrasonic automatic mode***************************

    else if (infrared.value == IRAutorun ) 

    {

      autoRunUsingUltraSonic();

      myservo.write(degreesForward);       // will make head look in front

    }

    //********************wait a little before continuing**************************

    irrecv.resume();

    delay(300);

  }

  else 

  {

    stopp(0);

  } 

}

1
แสดงความคิดเห็นที่ 0-0 จากทั้งหมด 0 ความคิดเห็น
ข้อความ
ชื่อผู้โพส
ข้อมูลสำหรับการติดต่อกลับ (ไม่เปิดเผย เห็นเฉพาะเจ้าของร้าน)
อีเมล
เบอร์มือถือ
  • ตอบกระทู้

<



    ติดต่อเรา สะดวก    รวดเร็ว ไว้ใจได้

 091-109-7711


  ติดต่อเราผ่านช่องทาง LINE

  ID : king5k

MEMBER

เข้าสู่ระบบด้วย
เข้าสู่ระบบ
สมัครสมาชิก

ยังไม่มีบัญชีเทพ สร้างบัญชีใหม่ ไม่เกิน 5 นาที
สมัครสมาชิก (ฟรี)

STATISTICS

หน้าที่เข้าชม6,457 ครั้ง
ผู้ชมทั้งหมด3,243 ครั้ง
เปิดร้าน21 ก.ย. 2559
ร้านค้าอัพเดท5 ก.ค. 2561
ตะกร้าของฉัน (0)
มีสินค้าทั้งหมด 0 ชนิด 0 ชิ้น
0 บาทราคาสินค้าทั้งหมด
(ยังไม่รวมค่าจัดส่ง)
สั่งซื้อสินค้า
ตะกร้า
( 0 )
รายการสั่งซื้อของฉัน
เข้าสู่ระบบด้วย
เข้าสู่ระบบ
สมัครสมาชิก

ยังไม่มีบัญชีเทพ สร้างบัญชีใหม่ ไม่เกิน 5 นาที
สมัครสมาชิก (ฟรี)
รายการสั่งซื้อของฉัน
ข้อมูลร้านค้านี้
ร้านPiapples
Piapples
วิสัยทัศน์ของเราคือ สร้างชุดฝึกสำหรับการโปรแกรมคอมพิวเตอร์ มอบให้ระบบการศึกษาทั่วประเทศ ยินดีให้คำปรึกษา R&D งานระบบไมโครคอนโทรลเลอร์ งานโปรเจค งานออกแบบดีไซด์
เบอร์โทร : 0911097711
อีเมล : kittisak.krua@gmail.com
ส่งข้อความติดต่อร้าน
เกี่ยวกับร้านค้านี้
สินค้าที่ดูล่าสุด
ดูสินค้าทั้งหมดในร้าน
สินค้าที่ดูล่าสุด
บันทึกเป็นร้านโปรด
Join (สมัครสมาชิกร้าน)
แชร์หน้านี้
แชร์หน้านี้

TOP เลื่อนขึ้นบนสุด
Go to Top
พูดคุย-สอบถาม คลิก