Тема в общем то заезженная, но я повторюсь)).
В ардуино я достиг больших высот, т.е. какие мне были нужны на данном этапе. Работает три метеостанции в разных местах (правда они на esp8266))), на даче тарахтит радиолюбительский телеграфный QRPpp маячек на 20 метров. Маяк автономный, заряд акб 18650 от солнечных панелей. А так же работает дачная сигнализация. Хорошо работает. За дачный сезон даже лопату с участстка не спи... не сперли)). Поэтому даже забыл, как arduino правильно пишется. И тут вижу, что дочка прикручивает проволочками к 2WD робоплатформе куколи пытается их катать. На этой платформе далалась машинка управляемая по блютуз. Но это не интересно было. Радиоуправляемых автошек полно. У старшего такая, что младшую на санках за собой таскает без проблем. Поэтому не долго думаю решили собрать автобота, который сам бы объезжал препятствия и ездил по комнате автономно катая кукол)). Платформа с двумя двигателями есть, Nano есть, драйвер двигателей L298 есть, три ИК-датчика препятствий есть. В качестве питания два акб 18650. У меня из них констуктив с переключателем для получения 7,4 и 3,7 в.
Соединили все быстро.
Дальше открываем интернет и ищем скетч. И тут пролетает мимо розовая птица обломинго. Неее, конечно скетчи были и даже назывались типа "простой робот ...... и т.д." Но там такооооооеееее! Без пузыря не разобраться. А поскольку новогодние праздники прошли и начался тверезый период жизни пришлось писАть скетч самому. Вспомнил, как пишется arduino и вот накатал:
10 | const int ik_center = 11; |
11 | const int ik_left = 10; |
12 | const int ik_right = 12; |
25 | pinMode(ik_left, INPUT); |
26 | pinMode(ik_center, INPUT); |
27 | pinMode(ik_right, INPUT); |
36 | v_left = digitalRead( ik_left ); |
45 | v_center = digitalRead( ik_center ); |
46 | if ( v_center == LOW ) { |
53 | v_right = digitalRead( ik_right ); |
54 | if ( v_right == LOW ) { |
65 | digitalWrite (IN1, LOW); |
66 | digitalWrite (IN2, HIGH); |
67 | digitalWrite (IN3, LOW); |
68 | digitalWrite (IN4, HIGH); |
69 | analogWrite(EN1, S_auto); |
70 | analogWrite(EN2, S_auto + d_S); |
73 | digitalWrite (IN1, HIGH); |
74 | digitalWrite (IN2, LOW); |
75 | digitalWrite (IN3, HIGH); |
76 | digitalWrite (IN4, LOW); |
77 | analogWrite(EN1, 160); |
81 | digitalWrite (IN1, HIGH); |
82 | digitalWrite (IN2, LOW); |
83 | digitalWrite (IN3, HIGH); |
84 | digitalWrite (IN4, LOW); |
86 | analogWrite(EN2, 160); |
При срабатываении центрального дачтика захотелось сделать выбор, чтобы он ехал назад или вправо или влево, но оказалось, что для этого надо погрызть гранит с++ или усиленно покурить интернет, но это уже лишний труд, поэтому отказался от этой мысли)).
Думаю, что получился именно простой без заморочек робот объезжающий препятствия и при наличии всех деталюшек собираемый за полчаса. За подсказки по оптимизации кода и т.д. заранее спасибо)).
Переписал скетч ТС. Не проверял. https://yadi.sk/d/4XbgIaTp3CyoMa Он здесь. Главный файл выкладываю.
01
/*robot_IK.ino <a href="https://yadi.sk/d/4XbgIaTp3CyoMa" rel="nofollow">https://yadi.sk/d/4XbgIaTp3CyoMa</a>
02
#1 мотор
03
#2 датчики
04
*/
05
//#1 мотор
06
#include "Cl_Motor.h"
07
Cl_Motor Motor;
// создать мотор
08
const
byte
IN1_pin = 2;
// определяем пины управления двигателями правый
09
const
byte
IN2_pin = 4;
// правый
10
const
byte
EN1_pin = 5;
// шим левого двигателя
11
const
byte
IN3_pin = 7;
// левый
12
const
byte
IN4_pin = 8;
// левый
13
const
byte
EN2_pin = 6;
// шим правого двигателя
14
15
//#2 датчики
16
#include "Cl_IK.h"
17
Cl_IK IK_L, IK_C, IK_R;
18
const
byte
IK_L_pin = 10;
// пин левого ик-датчика
19
const
byte
IK_C_pin = 11;
// пин центрального ик-датчика
20
const
byte
IK_R_pin = 12;
// пин правого датчика
21
22
void
setup
() {
23
//#1 мотор
24
Motor.
setup
(IN1_pin, IN2_pin, EN1_pin, IN3_pin, IN4_pin, EN2_pin);
25
//#2 датчики
26
IK_L.
setup
(IK_L_pin);
27
IK_C.
setup
(IK_C_pin);
28
IK_R.
setup
(IK_R_pin);
29
}
30
31
void
loop
() {
32
//#1 мотор
33
Motor.
loop
();
34
//#2 датчики
35
IK_L.
loop
();
36
IK_C.
loop
();
37
IK_R.
loop
();
38
if
(! IK_L.IK || ! IK_C.IK ) Motor.Back_Right();
39
else
if
(! IK_R.IK) Motor. Back_Left();
40
else
Motor.FORWARD();
41
}
Новыи скеч ругаеться на #include "Cl_Motor.h"
Ну да. Скачивать надо с яндекс диска, а здесь только первый файл.
ЗдОрово, спасибо, вроде понял все. Завтра испытаем на модели)).
Iguana, в таких ИК датчиках препятствия надо непрозрачную ширмочку между свето и фото диодами поставить. А учитывая что у вас их много рядом, то и трубочки. Или у вас и так работают?
Недавно сам такие осваивал и без загородки постоянное срабатывание - видимо в бок тоже знатно светит.
А развитие темы будет? Кукол возить мало, надо озвучить ещё, внучки подрастают )))
Всем привет. Может кто-то помочь в росписании схемы подключения?
По фото невидно как подключать.
Всем привет. Может ...
невидно как подключать.
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;
// пин правого датчика
неужели не понятно?
С Праздником!
Не разгледел. Спасибо.