Prezentace 21, arduino auto.

This commit is contained in:
vojta@alfred
2026-03-24 22:30:08 +01:00
parent 31376ba2d0
commit ab8f486f43
18 changed files with 638 additions and 0 deletions
@@ -0,0 +1,169 @@
#include <Servo.h>
#include <Servo.h>
Servo myservo;
int Echo_Pin=A0; // ultrasonic module ECHO to A0
int Trig_Pin=A1; // ultrasonic module TRIG to A1
#define Lpwm_pin 5 //pin of controlling speed---- ENA of motor driver board
#define Rpwm_pin 6 //pin of controlling speed---- ENB of motor driver board
int pinLB=2; //pin of controlling turning---- IN1 of motor driver board
int pinLF=4; //pin of controlling turning---- IN2 of motor driver board
int pinRB=7; //pin of controlling turning---- IN3 of motor driver board
int pinRF=8; //pin of controlling turning---- IN4 of motor driver board
volatile int D_mix;
volatile int D_mid;
volatile int D_max;
volatile int Front_Distance;
volatile int Left_Distance;
volatile int Right_Distance;
volatile int Right_IR_Value;
volatile int Left_IR_Value;
float checkdistance() {
digitalWrite(Trig_Pin, LOW);
delayMicroseconds(2);
digitalWrite(Trig_Pin, HIGH);
delayMicroseconds(10);
digitalWrite(Trig_Pin, LOW);
float distance = pulseIn(Echo_Pin, HIGH) / 58.00;
delay(10);
return distance;
}
void Detect_Left_and_Right__distance() {
myservo.write(180);
delay(400);
Left_Distance = checkdistance();
delay(600);
Serial.print("Left_Distance:");
Serial.println(Left_Distance);
myservo.write(0);
delay(400);
Right_Distance = checkdistance();
delay(600);
Serial.print("Right_Distance:");
Serial.println(Right_Distance);
myservo.write(90);
}
void Ultrasonic_obstacle_avoidance()
{
Front_Distance=checkdistance(); //obtain the value detected by ultrasonic sensor
if((Front_Distance < 20)&&(Front_Distance > 0))//if the distance is greater than 0 and less than 20
{
stopp();//stop
delay(100);
myservo.write(180);
delay(500);
Left_Distance=checkdistance();//measure the distance
delay(100);
myservo.write(0);
delay(500);
Right_Distance=checkdistance();//measure the distance
delay(100);
if(Left_Distance > Right_Distance)//if distance a1 is greater than a2
{
rotate_left(150);//turn left
myservo.write(90);
delay(300);
}
else //if the right distance is greater than the left
{
rotate_right(150);// turn right
myservo.write(90);
delay(300);
}
}
else//otherwise
{
go_forward(100);//go forward
}
}
void Obstacle_Avoidance_Main()
{
Ultrasonic_obstacle_avoidance();
}
void setup(){
myservo.attach(A2);
Serial.begin(9600);
D_mix = 10;
D_mid = 20;
D_max = 100;
Front_Distance = 0;
Left_Distance = 0;
Right_Distance = 0;
myservo.write(90);
pinMode(Echo_Pin, INPUT);
pinMode(Trig_Pin, OUTPUT);
pinMode(pinLB,OUTPUT); // /pin 2
pinMode(pinLF,OUTPUT); // pin 4
pinMode(pinRB,OUTPUT); // pin 7
pinMode(pinRF,OUTPUT); // pin 8
pinMode(Lpwm_pin,OUTPUT); // pin 5 (PWM)
pinMode(Rpwm_pin,OUTPUT); // pin 6(PWM)
}
void loop(){
Obstacle_Avoidance_Main();
}
void go_forward(unsigned char speed_val) // speed_val0~255
{digitalWrite(pinRB,HIGH);
digitalWrite(pinRF,LOW);
digitalWrite(pinLB,HIGH);
digitalWrite(pinLF,LOW);
analogWrite(Lpwm_pin,speed_val);
analogWrite(Rpwm_pin,speed_val);
}
void go_backward(unsigned char speed_val) // speed_val0~255
{
digitalWrite(pinRB,LOW);
digitalWrite(pinRF,HIGH);
digitalWrite(pinLB,LOW);
digitalWrite(pinLF,HIGH);
analogWrite(Lpwm_pin,speed_val);
analogWrite(Rpwm_pin,speed_val);
}
void rotate_left(unsigned char speed_val) // speed_val0~255
{digitalWrite(pinRB,HIGH);
digitalWrite(pinRF,LOW );
digitalWrite(pinLB,LOW);
digitalWrite(pinLF,HIGH);
analogWrite(Lpwm_pin,speed_val);
analogWrite(Rpwm_pin,speed_val);
}
void rotate_right(unsigned char speed_val) // speed_val0~255
{
digitalWrite(pinRB,LOW);
digitalWrite(pinRF,HIGH);
digitalWrite(pinLB,HIGH);
digitalWrite(pinLF,LOW);
analogWrite(Lpwm_pin,speed_val);
analogWrite(Rpwm_pin,speed_val);
}
void stopp() //stop
{
digitalWrite(pinRB,HIGH);
digitalWrite(pinRF,HIGH);
digitalWrite(pinLB,HIGH);
digitalWrite(pinLF,HIGH);
}
@@ -0,0 +1,23 @@
#include <Servo.h>
Servo myservo; // create servo object to control a servo
// twelve servo objects can be created on most boards
int pos = 0; // variable to store the servo position
void setup() {
myservo.attach(A2); // attaches the servo on pin 9 to the servo object
}
void loop() {
for (pos = 0; pos <= 180; pos += 1) { // goes from 0 degrees to 180 degrees
// in steps of 1 degree
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(15); // waits 15ms for the servo to reach the position
}
for (pos = 180; pos >= 0; pos -= 1) { // goes from 180 degrees to 0 degrees
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(15); // waits 15ms for the servo to reach the position
}
}
@@ -0,0 +1,28 @@
#define TRIG_PIN A1
#define ECHO_PIN A0
int Ult_distance=0;
float checkdistance() {
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
float distance = pulseIn(ECHO_PIN, HIGH) / 58.00;
delay(10);
return distance;
}
void setup(){
Serial.begin(9600);
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
}
void loop(){
Ult_distance = checkdistance();
Serial.print("Distance:");
Serial.print(Ult_distance);
Serial.println("CM");
delay(100);
}
@@ -0,0 +1,15 @@
#include <IRremote.h>
int RECV_PIN = 12;
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup()
{
Serial.begin(9600);
irrecv.enableIRIn(); // Start the receiver
}
void loop() {
if (irrecv.decode(&results)) {
Serial.println(results.value, HEX);
irrecv.resume(); // Receive the next value
}
}
@@ -0,0 +1,81 @@
#define Lpwm_pin 5 //pin of controlling speed---- ENA of motor driver board
#define Rpwm_pin 6 //pin of controlling speed---- ENB of motor driver board
int pinLB=2; //pin of controlling turning---- IN1 of motor driver board
int pinLF=4; //pin of controlling turning---- IN2 of motor driver board
int pinRB=7; //pin of controlling turning---- IN3 of motor driver board
int pinRF=8; //pin of controlling turning---- IN4 of motor driver board
void setup()
{
pinMode(pinLB,OUTPUT); // /pin 2
pinMode(pinLF,OUTPUT); // pin 4
pinMode(pinRB,OUTPUT); // pin 7
pinMode(pinRF,OUTPUT); // pin 8
pinMode(Lpwm_pin,OUTPUT); // pin 5 (PWM)
pinMode(Rpwm_pin,OUTPUT); // pin 6(PWM)
}
void loop()
{go_forward(100);
delay(2000);
go_backward(100);
delay(2000);
rotate_left(150);
delay(2000);
rotate_right(150);
delay(2000);
stopp();
delay(2000);
}
void go_forward(unsigned char speed_val) // speed_val0~255
{digitalWrite(pinRB,HIGH);
digitalWrite(pinRF,LOW);
digitalWrite(pinLB,HIGH);
digitalWrite(pinLF,LOW);
analogWrite(Lpwm_pin,speed_val);
analogWrite(Rpwm_pin,speed_val);
}
void go_backward(unsigned char speed_val) // speed_val0~255
{
digitalWrite(pinRB,LOW);
digitalWrite(pinRF,HIGH);
digitalWrite(pinLB,LOW);
digitalWrite(pinLF,HIGH);
analogWrite(Lpwm_pin,speed_val);
analogWrite(Rpwm_pin,speed_val);
}
void rotate_left(unsigned char speed_val) // speed_val0~255
{digitalWrite(pinRB,HIGH);
digitalWrite(pinRF,LOW );
digitalWrite(pinLB,LOW);
digitalWrite(pinLF,HIGH);
analogWrite(Lpwm_pin,speed_val);
analogWrite(Rpwm_pin,speed_val);
}
void rotate_right(unsigned char speed_val) // speed_val0~255
{
digitalWrite(pinRB,LOW);
digitalWrite(pinRF,HIGH);
digitalWrite(pinLB,HIGH);
digitalWrite(pinLF,LOW);
analogWrite(Lpwm_pin,speed_val);
analogWrite(Rpwm_pin,speed_val);
}
void stopp() //stop
{
digitalWrite(pinRB,HIGH);
digitalWrite(pinRF,HIGH);
digitalWrite(pinLB,HIGH);
digitalWrite(pinLF,HIGH);
}
@@ -0,0 +1,109 @@
#include <IRremote.h>
int RECV_PIN = 12;
IRrecv irrecv(RECV_PIN);
decode_results results;
#define IR_Go 0x00ff629d
#define IR_Back 0x00ffa857
#define IR_Left 0x00ff22dd
#define IR_Right 0x00ffc23d
#define IR_Stop 0x00ff02fd
#define IR_ESC 0x00ff52ad
#define Lpwm_pin 5 //adjusting speed
#define Rpwm_pin 6 //adjusting speed //
int pinLB=2; // defining pin2 left rear
int pinLF=4; // defining pin4 left front
int pinRB=7; // defining pin7 right rear
int pinRF=8; // defining pin8 right front
void go_forward(unsigned char speed_val) // speed_val0~255
{digitalWrite(pinRB,HIGH);
digitalWrite(pinRF,LOW);
digitalWrite(pinLB,HIGH);
digitalWrite(pinLF,LOW);
analogWrite(Lpwm_pin,speed_val);
analogWrite(Rpwm_pin,speed_val);
}
void go_backward(unsigned char speed_val) // speed_val0~255
{
digitalWrite(pinRB,LOW);
digitalWrite(pinRF,HIGH);
digitalWrite(pinLB,LOW);
digitalWrite(pinLF,HIGH);
analogWrite(Lpwm_pin,speed_val);
analogWrite(Rpwm_pin,speed_val);
}
void rotate_left(unsigned char speed_val) // speed_val0~255
{digitalWrite(pinRB,HIGH);
digitalWrite(pinRF,LOW );
digitalWrite(pinLB,LOW);
digitalWrite(pinLF,HIGH);
analogWrite(Lpwm_pin,speed_val);
analogWrite(Rpwm_pin,speed_val);
}
void rotate_right(unsigned char speed_val) // speed_val0~255
{
digitalWrite(pinRB,LOW);
digitalWrite(pinRF,HIGH);
digitalWrite(pinLB,HIGH);
digitalWrite(pinLF,LOW);
analogWrite(Lpwm_pin,speed_val);
analogWrite(Rpwm_pin,speed_val);
}
void stopp() //stop
{
digitalWrite(pinRB,HIGH);
digitalWrite(pinRF,HIGH);
digitalWrite(pinLB,HIGH);
digitalWrite(pinLF,HIGH);
}
void IR_Control(void)
{
unsigned long Key;
if(irrecv.decode(&results)) //judging if serial port receives data
{
Key = results.value;
switch(Key)
{
case IR_Go:go_forward(150); //UP
break;
case IR_Back:go_backward(150); //back
break;
case IR_Left:rotate_left(100); //Left
break;
case IR_Right:rotate_right(100); //Righ
break;
case IR_Stop:stopp(); //stop
break;
default:
break;
}
irrecv.resume(); // Receive the next value
}
}
void setup()
{
pinMode(pinLB,OUTPUT); // pin2
pinMode(pinLF,OUTPUT); // pin4
pinMode(pinRB,OUTPUT); // pin7
pinMode(pinRF,OUTPUT); // pin8
pinMode(Lpwm_pin,OUTPUT); // pin5 (PWM)
pinMode(Rpwm_pin,OUTPUT); // pin6 (PWM)
irrecv.enableIRIn(); // Start the receiver
Serial.begin(9600); //initializing serial port, Bluetooth used as serial port, setting baud ratio at 9600
stopp();
}
void loop()
{
IR_Control();
}