Официальный сайт компании Arduino по адресу arduino.cc
опять робот ик датчик + HC-SR04 и сервомотор
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Сб, 09/03/2019 - 00:19
Робот на ардуино это уже не новость собирал робот с помощью HC-SR04 объезжает препятсвия а так же другого робота с ик датчиками оба работают хорошо . НО всегда хочется чего то боьше собрал робота по примеру R2D2 звёздные войны и проблема в том что HC-SR04 датчик стоит в голове робота тоесть высоко и препятсвия которые вниу не видит . Поэтому возникла идея объединить 2 робота в один и добавить вниз ик датчики . но попытки объединить коды реультата не дали(слабый в програмировании) поэтому дам 2 кода с разнх роботов есть идеи как объединить скетчи чтоб работал и с HC-SR04 датчиком и с двумя ик датчиками
#include <Servo.h> //Библиотека сервомотора. Есть по стандарту #include <NewPing.h> //Библиотека Ультразвукового датчика (нужно установить) //Пины контроллера L298N const int LeftMotorForward = 7; const int LeftMotorBackward = 6; const int RightMotorForward = 5; const int RightMotorBackward = 4; //Пины ультразвукового датчика #define trig_pin A0 //Аналоговый вход 1 #define echo_pin A1 //Аналоговый вход 2 #define maximum_distance 200 boolean goesForward = false; int distance = 100; NewPing sonar(trig_pin, echo_pin, maximum_distance); //sensor function Servo servo_motor; //our servo name void setup(){ pinMode(RightMotorForward, OUTPUT); pinMode(LeftMotorForward, OUTPUT); pinMode(LeftMotorBackward, OUTPUT); pinMode(RightMotorBackward, OUTPUT); servo_motor.attach(8); //Пин подключения сервомотора servo_motor.write(115); delay(2000); distance = readPing(); delay(100); distance = readPing(); delay(100); distance = readPing(); delay(100); distance = readPing(); delay(100); } void loop(){ int distanceRight = 0; int distanceLeft = 0; delay(50); if (distance <= 40){ moveStop(); delay(400); moveBackward(); delay(500); moveStop(); delay(400); distanceRight = lookRight(); delay(300); distanceLeft = lookLeft(); delay(300); if (distance >= distanceLeft){ turnRight(); moveStop(); } else{ turnLeft(); moveStop(); } } else{ moveForward(); } distance = readPing(); } int lookRight(){ servo_motor.write(50); delay(500); int distance = readPing(); delay(100); servo_motor.write(115); return distance; } int lookLeft(){ servo_motor.write(170); delay(500); int distance = readPing(); delay(100); servo_motor.write(115); return distance; delay(100); } int readPing(){ delay(70); int cm = sonar.ping_cm(); if (cm==0){ cm=250; } return cm; } void moveStop(){ digitalWrite(RightMotorForward, LOW); digitalWrite(LeftMotorForward, LOW); digitalWrite(RightMotorBackward, LOW); digitalWrite(LeftMotorBackward, LOW); } void moveForward(){ if(!goesForward){ goesForward=true; digitalWrite(LeftMotorForward, HIGH); digitalWrite(RightMotorForward, HIGH); digitalWrite(LeftMotorBackward, LOW); digitalWrite(RightMotorBackward, LOW); } } void moveBackward(){ goesForward=false; digitalWrite(LeftMotorBackward, HIGH); digitalWrite(RightMotorBackward, HIGH); digitalWrite(LeftMotorForward, LOW); digitalWrite(RightMotorForward, LOW); } void turnRight(){ digitalWrite(LeftMotorForward, HIGH); digitalWrite(RightMotorBackward, HIGH); digitalWrite(LeftMotorBackward, LOW); digitalWrite(RightMotorForward, LOW); delay(500); digitalWrite(LeftMotorForward, HIGH); digitalWrite(RightMotorForward, HIGH); digitalWrite(LeftMotorBackward, LOW); digitalWrite(RightMotorBackward, LOW); } void turnLeft(){ digitalWrite(LeftMotorBackward, HIGH); digitalWrite(RightMotorForward, HIGH); digitalWrite(LeftMotorForward, LOW); digitalWrite(RightMotorBackward, LOW); delay(500); digitalWrite(LeftMotorForward, HIGH); digitalWrite(RightMotorForward, HIGH); digitalWrite(LeftMotorBackward, LOW); digitalWrite(RightMotorBackward, LOW); }
и воторой скетч с ик датчиками
int d_S; // поправка на компенсацию вращения правого двигателя int S_auto; // задается скорость движения вперед int del; // переменная задержки перед движением вперед const int IN1 = 2; // определяем пины управления двигателями правый const int IN2 = 4; // правый const int IN3 = 7; // левый const int IN4 = 8; // левый const int EN1 = 5; // шим левого двигателя const int EN2 = 6; // шим правого двигателя const int ik_center = 11; // пин центрального ик-датчика const int ik_left = 10; // пин левого ик-датчика const int ik_right = 12; // пин правого датчика int v_left; // переменные сработки датчиков int v_center; int v_right; void setup() { pinMode(IN1, OUTPUT); pinMode(IN2, OUTPUT); pinMode(IN3, OUTPUT); pinMode(IN4, OUTPUT); pinMode(EN1, OUTPUT); pinMode(EN2, OUTPUT); pinMode(ik_left, INPUT); pinMode(ik_center, INPUT); pinMode(ik_right, INPUT); S_auto = 95; // скорость движения вперед d_S = 5; // поправка для компенсации правого двигателя del = 300; // значение функции делей } void loop(){ v_left = digitalRead( ik_left ); if( v_left == LOW ) { // если сработал левый датчик Back_Right(); // отъезжаем назад вправо delay(del); } else { // если нет, едем вперед Forward(); } v_center = digitalRead( ik_center ); if( v_center == LOW ) { // если сработал центральный датчик Back_Left(); // едем назад влево delay(del); } else { // если нет - вперед Forward(); } v_right = digitalRead( ik_right ); if( v_right == LOW ) { // если сработал правый датчик Back_Left(); // едем назад влево delay(del); } else { // если нет - вперед Forward(); } } void Forward(){ // функция движения вперед digitalWrite (IN1, LOW); digitalWrite (IN2, HIGH); digitalWrite (IN3, LOW); digitalWrite (IN4, HIGH); analogWrite(EN1, S_auto); analogWrite(EN2, S_auto + d_S); } void Back_Left(){ // функция движения назад влево digitalWrite (IN1, HIGH); digitalWrite (IN2, LOW); digitalWrite (IN3, HIGH); digitalWrite (IN4, LOW); analogWrite(EN1, 160); analogWrite(EN2, 90); } void Back_Right(){ // функция движения назад вправо digitalWrite (IN1, HIGH); digitalWrite (IN2, LOW); digitalWrite (IN3, HIGH); digitalWrite (IN4, LOW); analogWrite(EN1, 90); analogWrite(EN2, 160); }
в первом не задействованы шим двигателей впринципе это не так важно можно и без шим .
Буду рад любой помощи и подсказкам.
Заранее всем спасибо
Удалось победить?
скетч кое как сам написал но провериить пока не могу ик датчики не пришли с Китая
Уважаемый ТС, вы ни этот скетч пишите, а алгоритм. Поскольку в скетче Вы нихрена не понимаете, так может в алгоритме чего-нить поймете...
Согласен я и не говорю что скетч я сам с нуля написал и да действительно скетчи написать с нуля не смогу. попробовал совместить два скетча получилось вот так
но не знаю правильно или нет так как нет ик датчиков может кто то проверит и иподскажет что нет ак