Простой робот на ИК-датчиках препятс
- Войдите на сайт для отправки комментариев
Тема в общем то заезженная, но я повторюсь)).
В ардуино я достиг больших высот, т.е. какие мне были нужны на данном этапе. Работает три метеостанции в разных местах (правда они на esp8266))), на даче тарахтит радиолюбительский телеграфный QRPpp маячек на 20 метров. Маяк автономный, заряд акб 18650 от солнечных панелей. А так же работает дачная сигнализация. Хорошо работает. За дачный сезон даже лопату с участстка не спи... не сперли)). Поэтому даже забыл, как arduino правильно пишется. И тут вижу, что дочка прикручивает проволочками к 2WD робоплатформе куколи пытается их катать. На этой платформе далалась машинка управляемая по блютуз. Но это не интересно было. Радиоуправляемых автошек полно. У старшего такая, что младшую на санках за собой таскает без проблем. Поэтому не долго думаю решили собрать автобота, который сам бы объезжал препятствия и ездил по комнате автономно катая кукол)). Платформа с двумя двигателями есть, Nano есть, драйвер двигателей L298 есть, три ИК-датчика препятствий есть. В качестве питания два акб 18650. У меня из них констуктив с переключателем для получения 7,4 и 3,7 в.
Соединили все быстро. Дальше открываем интернет и ищем скетч. И тут пролетает мимо розовая птица обломинго. Неее, конечно скетчи были и даже назывались типа "простой робот ...... и т.д." Но там такооооооеееее! Без пузыря не разобраться. А поскольку новогодние праздники прошли и начался тверезый период жизни пришлось писАть скетч самому. Вспомнил, как пишется arduino и вот накатал:
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); }
При срабатываении центрального дачтика захотелось сделать выбор, чтобы он ехал назад или вправо или влево, но оказалось, что для этого надо погрызть гранит с++ или усиленно покурить интернет, но это уже лишний труд, поэтому отказался от этой мысли)).
Думаю, что получился именно простой без заморочек робот объезжающий препятствия и при наличии всех деталюшек собираемый за полчаса. За подсказки по оптимизации кода и т.д. заранее спасибо)).
Переписал скетч ТС. Не проверял. https://yadi.sk/d/4XbgIaTp3CyoMa Он здесь. Главный файл выкладываю.
Новыи скеч ругаеться на #include "Cl_Motor.h"
Ну да. Скачивать надо с яндекс диска, а здесь только первый файл.
ЗдОрово, спасибо, вроде понял все. Завтра испытаем на модели)).
Iguana, в таких ИК датчиках препятствия надо непрозрачную ширмочку между свето и фото диодами поставить. А учитывая что у вас их много рядом, то и трубочки. Или у вас и так работают?
Недавно сам такие осваивал и без загородки постоянное срабатывание - видимо в бок тоже знатно светит.
А развитие темы будет? Кукол возить мало, надо озвучить ещё, внучки подрастают )))
Всем привет. Может кто-то помочь в росписании схемы подключения?
По фото невидно как подключать.
Всем привет. Может ...
невидно как подключать.
неужели не понятно?
С Праздником!
Не разгледел. Спасибо.