Срочно ищу исполнителя.
Робот идет по заданному траекторию. Машинка на базе DFRduino Romeo V1.1 с тремя датчиками спереди и один под колесами если надо. Скетч нашли только идущий по линии. Робот не сворачивает на перекресках. Помогите!!!!!
Вот траектория им робот.



Срочно ищу исполнителя.
Робот идет по заданному траекторию. Машинка на базе DFRduino Romeo V1.1 с тремя датчиками спереди и один под колесами если надо. Скетч нашли только идущий по линии. Робот не сворачивает на перекресках. Помогите!!!!!
Вот траектория им робот.
Мы в начали только две недели назад закупили специально для соревнований школьников.
траектория - она
да траектория, 4 день голову ломаем. Все равно не пропускает перекрески
Люди помогите
Три датчика достаточно, если два из них на белом.
Чтобы пройти такой перекресток, нужно : как три датчика видят черное -> выполнять действие - отключить датчики - поворот (если надо) - проехать 1-2 сек (чтобы проехать перекресток), а потом опять включать датчики.
В общем виде так:
Ехать прямо, если перекресток (3 датчика на черном) поворот на право
Ехать прямо, если перекресток (3 датчика на черном) поворот на право
Ехать прямо, если перекресток (3 датчика на черном) поворот на лево
Ехать прямо, если перекресток (3 датчика на черном) едем прямо
Ехать прямо, если перекресток (3 датчика на черном) едем прямо
Спасибо. Алгоритм поняли но вот как писать скетч. Мы в этом деле новички. Короче нашли в инете, только идущий по линии прямо. А как сворачивать на перекресках не нашли. За сколько сделаете скетч?
какие нынче школьники предприимчивые.... зачем скетч, сразу грамоту купите и не парьтесь
а мы не школьники. Недавно для школы закупили Ардуино. Вот и ломаем голову. Ранще на бейсике сидели. Еще требуют подготовить школьников для соревнований
Интересно, как чужой код подготовит школьников? Как вы их собираетесь чему то учить, если сами не можете справится с такой несложной задачей...
а мы не школьники. Недавно для школы закупили Ардуино. Вот и ломаем голову. Ранще на бейсике сидели. Еще требуют подготовить школьников для соревнований
купите преподавателя или продайте дуино, директора и купите преподавателя или продайте секретаршу директора и купите преподавателя - в общем, если нет денег, закрывайте школу.
а мы не школьники...
и вас таких много?
было бы смешно, если бы не было очень грустно.....
Было бы время, сами бы справились, бумажная волокита. Бюрократия совсем замучило. Мужиков в школе совсем не осталось, нескем нормально посоветоваться.... Хотел от вас помощи, а вы демагогией занимаетесь.
Нужны специалисты, а хрен их найдешь в селе.
Мужиков в школе совсем не осталось, нескем нормально посоветоваться.... Хотел от вас помощи, а вы демагогией занимаетесь.
извините, но если бы хотели посоветоваться, то вам бы тут с удовольствием, быстро и бесплатно ответили бы на любой вопрос по делу. а пока только вопросы типа
За сколько сделаете скетч?
вот с кого надо брать пример http://koposov.info/
А он молодец.
Только я с глубинки и работа другого профиля.
Есть некоторые результаты за 2 года http://fickt.mgup.ru/2012/05/23/%D1%8F%D0%BA%D1%83%D1%82%D1%81%D0%BA%D0%B8%D0%B5-%D1%88%D0%BA%D0%BE%D0%BB%D1%8C%D0%BD%D0%B8%D0%BA%D0%B8-%D0%B7%D0%B0%D0%BD%D1%8F%D0%BB%D0%B8-%D1%82%D1%80%D0%B5%D1%82%D1%8C%D0%B5-%D0%BC%D0%B5%D1%81/
http://www.detiseti.ru/modules/news/article.php?storyid=9427 :)
Тут пол форума потянет ваш проэкт. Знаете почему никто не хочет браться? Потому что особо денег за это не возьмешь, а времени потрачено бутет много.
Покажите свой скетч, попробую изменить.
Я тоже из глубинки.
Мы в начали только две недели назад закупили специально для соревнований школьников.
Вам везет, вы уже купили роботов, а нам сказали "покажите результаты, потом дадим деньги, может быть"
Вот и приходится клепать роботов "из того что было", а для самоделок соревнований почти нет.
Ардуино купил неделю назад, теперь хочу посмотреть что из него выйдет. Посмотрим получится научить своих школьников Си или все таки вернемся к Алгоритм бюлдеру.
Сколько осталось дней до соревнования?
5 дней осталость.
1 версия взята отсюда. http://wiki.amperka.ru/%D1%80%D0%BE%D0%B1%D0%BE%D1%82%D0%BE%D1%82%D0%B5%D1%85%D0%BD%D0%B8%D0%BA%D0%B0:%D1%80%D0%BE%D0%B1%D0%BE%D1%82-%D1%81-%D0%B4%D0%B0%D1%82%D1%87%D0%B8%D0%BA%D0%B0%D0%BC%D0%B8-%D0%BB%D0%B8%D0%BD%D0%B8%D0%B8-%D0%BD%D0%B0-arduino
файл LineRobot_v1.ino
Только идет не обращая на перекрестки прямо, зато хорошо идет по черному квадрату, только надо широко развинуть датчики.
2 версия с отключаем правый датчик. Если замедлит скорось и увеличит виляние то хорошо сворачивает налево в перекрестке.
Надо соеденить обе программы, так чтобы через какое то время отключался то левый то правый датчик в зависмости поворота на перекрестке.
001
#define SPEED_LEFT 6
002
#define SPEED_RIGHT 5
003
#define DIR_LEFT 7
004
#define DIR_RIGHT 4
005
#define LEFT_SENSOR_PIN 1
006
#define RIGHT_SENSOR_PIN 2
007
008
// Скорость, с которой мы движемся вперёд (0-255)
009
#define SPEED 80
010
011
// Коэффициент, задающий во сколько раз нужно затормозить
012
// одно из колёс для поворота
013
#define BRAKE_K 4
014
015
#define STATE_FORWARD 0
016
#define STATE_RIGHT 1
017
#define STATE_LEFT 2
018
019
int
state = STATE_FORWARD;
020
021
void
runForward()
022
{
023
state = STATE_FORWARD;
024
025
// Для регулировки скорости `SPEED` может принимать значения от 0 до 255,
026
// чем болше, тем быстрее.
027
analogWrite(SPEED_LEFT, SPEED);
028
analogWrite(SPEED_RIGHT, SPEED);
029
030
// Если в DIR_LEFT или DIR_RIGHT пишем HIGH, мотор будет двигать соответствующее колесо
031
// вперёд, если LOW - назад.
032
digitalWrite(DIR_LEFT, HIGH);
033
digitalWrite(DIR_RIGHT, HIGH);
034
}
035
036
void
steerRight()
037
{
038
state = STATE_RIGHT;
039
040
// Замедляем правое колесо относительно левого,
041
// чтобы начать поворот
042
analogWrite(SPEED_RIGHT, SPEED / BRAKE_K);
043
analogWrite(SPEED_LEFT, SPEED);
044
045
digitalWrite(DIR_LEFT, HIGH);
046
digitalWrite(DIR_RIGHT, HIGH);
047
}
048
049
void
steerLeft()
050
{
051
state = STATE_LEFT;
052
053
analogWrite(SPEED_LEFT, SPEED / BRAKE_K);
054
analogWrite(SPEED_RIGHT, SPEED);
055
056
digitalWrite(DIR_LEFT, HIGH);
057
digitalWrite(DIR_RIGHT, HIGH);
058
}
059
060
061
void
setup
()
062
{
063
// Настраивает выводы платы 4,5,6,7 на вывод сигналов
064
for
(
int
i = 4; i <= 7; i++)
065
pinMode(i, OUTPUT);
066
067
// Сразу едем вперёд
068
runForward();
069
}
070
071
void
loop
()
072
{
073
074
boolean left = !digitalRead(LEFT_SENSOR_PIN);
075
boolean right = !digitalRead(RIGHT_SENSOR_PIN);
076
077
078
int
targetState;
079
080
if
(left) {
081
targetState = STATE_LEFT;
082
}
else
{
083
targetState = STATE_RIGHT;
084
}
085
086
if
(state == targetState) {
087
088
return
;
089
}
090
091
switch
(targetState) {
092
case
STATE_FORWARD:
093
runForward();
094
break
;
095
096
case
STATE_RIGHT:
097
steerRight();
098
break
;
099
100
case
STATE_LEFT:
101
steerLeft();
102
break
;
103
}
104
// вот виляние
105
delay(20);
106
}
В этом скетче нет третьего датчика.
Вы на какой пин его подключили?
средний датчик пока не использовали, как то не видели неоходимости
Если б небыло черного квадрата, то можно было бы обойтись двумя.
На квадрате оба датчика видят черный цвет и на перекрестке тоже самое, две разные ситуации а показания одинаковые.
Если будет три то на квадрате центральный будет белый, а крайнии будут черные, на перекрестке три датчика черные - в этом случае можно разлечить перекресток от квадрата.
тут глянь - http://cxem.net/uprav/uprav40.php
датчика должно быть четыре для отработки тупиков, где короткая линия и начинается/оканчивается линия движения.
Вот еще одна версия двумя датчиками.
Попробуем сегодня если найдем время, для терх датчиков.
001
int
leftLinePin = 10;
002
int
rightLinePin = 11;
003
004
int
leftDirPin = 4;
005
int
leftSpeedPin = 5;
006
007
int
rightDirPin = 7;
008
int
rightSpeedPin = 6;
009
010
int
runSpeed = 150;
011
int
turnSpeed = 120;
012
013
int
logic[11] = {0,2,0,0.0,0,0,0,0,0,2};
014
int
index = -1;
015
//boolean invertLogic = false;
016
//boolean colorWhite = true;
017
boolean prevColorWhite =
true
;
018
019
void
setupMotorShield()
020
{
021
pinMode(leftDirPin, OUTPUT);
022
pinMode(leftSpeedPin, OUTPUT);
023
pinMode(rightDirPin, OUTPUT);
024
pinMode(rightSpeedPin, OUTPUT);
025
}
026
027
void
go(
int
currentSpeed)
028
{
029
analogWrite(leftSpeedPin, currentSpeed);
030
analogWrite(rightSpeedPin, currentSpeed*1.15);
031
}
032
033
void
stop()
034
{
035
analogWrite(leftSpeedPin, 0);
036
analogWrite(rightSpeedPin, 0);
037
}
038
039
void
goForward()
040
{
041
digitalWrite(leftDirPin, HIGH);
042
digitalWrite(rightDirPin, HIGH);
043
go(runSpeed);
044
}
045
046
void
turnLeft()
047
{
048
digitalWrite(leftDirPin, LOW);
049
digitalWrite(rightDirPin, HIGH);
050
go(turnSpeed);
051
}
052
053
void
turnRight()
054
{
055
digitalWrite(leftDirPin, HIGH);
056
digitalWrite(rightDirPin, LOW);
057
go(turnSpeed);
058
}
059
060
void
setup
()
061
{
062
setupMotorShield();
063
}
064
065
066
067
void
loop
()
068
{
069
// Считываем данные с сенсоров
070
boolean whiteLeft = digitalRead(leftLinePin);
071
boolean whiteRight = digitalRead(rightLinePin);
072
073
/*принятие мною решения*/
074
075
if
(whiteLeft && whiteRight) {
076
// Под обоими датчиками белый цвет. Видимо
077
// линия прямо под нами. Полный вперёд!
078
if
(prevColorWhite ==
false
){
079
//это начало дороги после перекрестка
080
prevColorWhite =
true
;
081
}
else
{
082
//дорога продолжается
083
}
084
085
}
else
if
(!whiteLeft && !whiteRight) {
086
// Что-то не то: под обоими датчиками чёрный
087
// цвет. Видимо мы выехали за пределы трассы.
088
// Лучше остановиться
089
if
(prevColorWhite ==
true
){
090
//это начало перекрестка
091
index = index +1;
092
prevColorWhite =
false
;
093
094
}
else
{
095
//перекресток продолжается
096
}
097
098
}
else
if
(whiteRight) {
099
// Под левым датчиком — чёрный, под правым —
100
// белый. Чтобы выровняться, нужно начать
101
// поворот налево
102
}
else
{
103
// Последний оставшийся вариант. Под левым
104
// датчиком — белый, под правым — чёрный.
105
// Чтобы выровняться, нужно начать поворот
106
// направо
107
}
108
109
if
(index>-1){
110
if
(!whiteLeft && !whiteRight){
111
if
(logic[index]==0){
//прямо
112
whiteLeft =
true
;
113
whiteRight =
true
;
114
}
else
if
(logic[index]==1){
//налево
115
whiteRight =
true
;
116
goForward();
117
delay(50);
118
turnLeft();
119
delay(200);
120
}
else
{
//направо
121
whiteLeft =
true
;
122
goForward();
123
delay(50);
124
turnRight();
125
delay(200);
126
prevColorWhite =
false
;
127
128
}
129
}
130
}
131
132
133
/*конец принятия мною решения*/
134
135
if
(whiteLeft && whiteRight) {
136
// Под обоими датчиками белый цвет. Видимо
137
// линия прямо под нами. Полный вперёд!
138
goForward();
139
}
else
if
(!whiteLeft && !whiteRight) {
140
// Что-то не то: под обоими датчиками чёрный
141
// цвет. Видимо мы выехали за пределы трассы.
142
// Лучше остановиться
143
//stop();
144
145
146
}
else
if
(whiteRight) {
147
// Под левым датчиком — чёрный, под правым —
148
// белый. Чтобы выровняться, нужно начать
149
// поворот налево
150
turnLeft();
151
}
else
{
152
// Последний оставшийся вариант. Под левым
153
// датчиком — белый, под правым — чёрный.
154
// Чтобы выровняться, нужно начать поворот
155
// направо
156
turnRight();
157
}
158
}
датчика должно быть четыре.
как установить и использовать.
Алгоритм какой
Если фото вашего робота, то у вас такие датчики - http://dvrobot.ru/shop/i12.infrakrasnyy_datchik_2_sm..htm
И их у вас четыре.
Посмотри по проводам к какому пину подходят твои датчики.
Да и кстати какая у вас ардуина?
DFRobot DFRdino Romeo V1.1 Вот ссылка http://www.dfrobot.com/index.php?route=product/product&filter_name=Romeo%20V1.1&product_id=656
Датчики подключили левые и правые на 10 и11 а средние передние 1 и задние 2
В вашем первом скетче вы используете 1 и 2 датчик
005
#define LEFT_SENSOR_PIN 1
006
#define RIGHT_SENSOR_PIN 2
А левый и правый не используете.
1 левый 2 правый, просто каждый раз меняли выводы для проверки выводов
Останется добавить счетчик перекрестков и указать действия для каждого их них.
Вставка программного кода в тему/комментарий
Огромное спасибо fortekom!!!! И всем кто был в этой ветке.