1401 distant ezda: различия между версиями
Перейти к навигации
Перейти к поиску
(Новая страница: «<code> ////////////////////////////////////////////// // 2019.07.16 woronin, umkiedu@gmail.com // Проезд по датчику ультразву…») |
Evgen (обсуждение | вклад) Нет описания правки |
||
Строка 1: | Строка 1: | ||
< | <syntaxhighlight lang="C++"> | ||
////////////////////////////////////////////// | ////////////////////////////////////////////// | ||
// 2019.07.16 woronin, umkiedu@gmail.com | // 2019.07.16 woronin, umkiedu@gmail.com | ||
// Проезд по датчику | // Проезд по датчику ультразвука вдоль стены | ||
// Robot UMKI controller K6_3 | // Robot UMKI controller K6_3 | ||
// самостоятельно сделать реакцию на препятствие | // самостоятельно сделать реакцию на препятствие | ||
Строка 11: | Строка 11: | ||
int motorL1=4; //контакт 4 определяет напр вращ левого мотора | int motorL1=4; //контакт 4 определяет напр вращ левого мотора | ||
int mL_PWM=3; // контакт 3 определяет скорость вращения лев мотора от 0 до 255 | int mL_PWM=3; // контакт 3 определяет скорость вращения лев мотора от 0 до 255 | ||
int mR_PWM=5; // | int mR_PWM=5; // контакт 5 - прав мотор | ||
void setup() { | |||
pinMode(Trig, OUTPUT); //инициируем как выход | pinMode(Trig, OUTPUT); //инициируем как выход | ||
pinMode(Echo, INPUT); //инициируем как вход | pinMode(Echo, INPUT); //инициируем как вход | ||
Строка 22: | Строка 23: | ||
pinMode(motorL1, OUTPUT); | pinMode(motorL1, OUTPUT); | ||
delay(2000); | delay(2000); | ||
} | |||
unsigned int impulseTime=0; | unsigned int impulseTime=0; | ||
unsigned int distance_sm=0; | unsigned int distance_sm=0; | ||
void loop() { | |||
digitalWrite(motorR1, HIGH); | digitalWrite(motorR1, HIGH); | ||
analogWrite(mR_PWM,200); //ШИМ =0 мотор стоит | analogWrite(mR_PWM,200); //ШИМ =0 мотор стоит | ||
Строка 40: | Строка 43: | ||
if (distance_sm<30) // Если расстояние менее 20 сантиметром | if (distance_sm<30) // Если расстояние менее 20 сантиметром | ||
{ | { | ||
digitalWrite(motorR1,HIGH); //правый газ левый стоп, поворот налево | |||
analogWrite(mR_PWM, 70); | |||
digitalWrite(motorL1, HIGH); | |||
analogWrite(mL_PWM,200); | |||
delay(500); | |||
} | } | ||
else if (distance_sm>40) | else if (distance_sm>40) | ||
{ | { | ||
digitalWrite(motorR1,HIGH); // правый стоп, левый газ, поворот направо | |||
analogWrite(mR_PWM, 200); | |||
digitalWrite(motorL1, HIGH); | |||
analogWrite(mL_PWM,70); | |||
delay(500); | |||
} | } | ||
else | else | ||
{ | { | ||
digitalWrite(motorR1,HIGH); //прямо | |||
analogWrite(mR_PWM, 250); | |||
digitalWrite(motorL1, HIGH); | |||
analogWrite(mL_PWM,250); | |||
delay(500); | |||
} | } | ||
delay(100); | delay(100); | ||
} | |||
</ | |||
</syntaxhighlight> | |||
[[Категория:Видео эпизоды УМКИ]] | [[Категория:Видео эпизоды УМКИ]] | ||
[[Категория:Примеры программирования Arduino]] |
Текущая версия от 14:03, 15 ноября 2019
//////////////////////////////////////////////
// 2019.07.16 woronin, umkiedu@gmail.com
// Проезд по датчику ультразвука вдоль стены
// Robot UMKI controller K6_3
// самостоятельно сделать реакцию на препятствие
//////////////////////////////////////////////
#define Trig A3 // трегер-излучатель на контакте А3
#define Echo A4 // приемниик на А4
int motorR1=2; //контакт 2 определяет напр вращения правого мотора
int motorL1=4; //контакт 4 определяет напр вращ левого мотора
int mL_PWM=3; // контакт 3 определяет скорость вращения лев мотора от 0 до 255
int mR_PWM=5; // контакт 5 - прав мотор
void setup() {
pinMode(Trig, OUTPUT); //инициируем как выход
pinMode(Echo, INPUT); //инициируем как вход
Serial.begin(9600); // задаем скорость общения.
// задаем параметры работы моторов L & R
pinMode(mL_PWM, OUTPUT);
pinMode(mL_PWM, OUTPUT);
pinMode(motorR1, OUTPUT);
pinMode(motorL1, OUTPUT);
delay(2000);
}
unsigned int impulseTime=0;
unsigned int distance_sm=0;
void loop() {
digitalWrite(motorR1, HIGH);
analogWrite(mR_PWM,200); //ШИМ =0 мотор стоит
digitalWrite(motorL1, HIGH);
analogWrite(mL_PWM, 200);
delay(500);
digitalWrite(Trig, HIGH);
/* Подаем импульс на вход trig дальномера */
delayMicroseconds(10); // равный 10 микросекундам
digitalWrite(Trig, LOW); // Отключаем
impulseTime=pulseIn(Echo, HIGH); // Замеряем длину импульса
distance_sm=impulseTime/58; // Пересчитываем в сантиметры
Serial.println(distance_sm); // Выводим на порт
if (distance_sm<30) // Если расстояние менее 20 сантиметром
{
digitalWrite(motorR1,HIGH); //правый газ левый стоп, поворот налево
analogWrite(mR_PWM, 70);
digitalWrite(motorL1, HIGH);
analogWrite(mL_PWM,200);
delay(500);
}
else if (distance_sm>40)
{
digitalWrite(motorR1,HIGH); // правый стоп, левый газ, поворот направо
analogWrite(mR_PWM, 200);
digitalWrite(motorL1, HIGH);
analogWrite(mL_PWM,70);
delay(500);
}
else
{
digitalWrite(motorR1,HIGH); //прямо
analogWrite(mR_PWM, 250);
digitalWrite(motorL1, HIGH);
analogWrite(mL_PWM,250);
delay(500);
}
delay(100);
}