Прошивка для робота который едет и объезжает препятствия
|
|
Участник
560 сообщений
Мужчина
|
сообщение 41 сделал все как тут говориться http://robocraft.ru/blog/arduino/529.html Вот код /* * IR-led & phototransistor * тестовый скетч для работы с фототранзистором * * http://robocraft.ru */
int photoPin = 0; // фоторезистор подключен 0-му аналоговому входу int ledPin = 13; // светодиод подключается к digital pin 9 int val = 0; // переменная для хранения значения входного напряжения
void setup() { Serial.begin(9600); }
void loop() { digitalWrite(ledPin, HIGH); // зажигаем val = analogRead(photoPin); // считываем значение с фототранзистора Serial.println(val);
// здесь можно проверить значение на превышение заданного порога
delay(200); } но ничего не работает Добавлено (22.12.2011, 11:35) --------------------------------------------- к каким контактам подключить фототранзистор и светодиод?,чтобы работало как дальномер(хотябы на 5 сантиметорв))) Добавлено (22.12.2011, 13:07) --------------------------------------------- в какие контакты вставлять фототранзистор??? Добавлено (22.12.2011, 13:15)
|
|
|
|
|
Начальная группа
1798 сообщений
Мужчина
|
игорь, нарисовано же, не? И в коде написано даже.
|
|
|
|
|
Участник
560 сообщений
Мужчина
|
nightmare, схему собрал,все сделал как там и говориться,но ничего не работает
|
|
|
|
|
Начальная группа
1798 сообщений
Мужчина
|
игорь, какие данные в терминале получаешь? Горит ли светодиод? Попробуй перевернуть фототранзистор.
|
|
|
|
|
Участник
560 сообщений
Мужчина
|
nightmare, пишет скомпилировалось все нормально,заливаю тоже нормально,светодиод не горит(((Добавлено (22.12.2011, 15:34) --------------------------------------------- nightmare, я сейчас хочу сделать так чтобы он работал как охотник за светом,в какие контакты вставить фототранзистор? и что надо добавить в коде?
|
|
|
|
|
Начальная группа
1798 сообщений
Мужчина
|
Quote пишет скомпилировалось все нормально,заливаю тоже нормально,светодиод не горит((( Проверь исправность светодиода и правильно ли ты транзистор подключил. Насчёт дальномера я вижу ты не особо хочешь чтобы он заработал, ну ладно. Quote я сейчас хочу сделать так чтобы он работал как охотник за светом,в какие контакты вставить фототранзистор? и что надо добавить в коде? Фототранзистор оставить как на схеме. При помощи функции analogRead() измеряешь напряжение на пине с фототранзистором и если результат измерения больше чем N, то делаешь то-то, иначе то-то. N - подбирается. Возвращаемое значение функции analogRead() не в вольтах! (см. глава 5.4) Code #define photoPin 0 // фоторезистор подключен 0-му аналоговому входу int val = 0; // переменная для хранения значения входного напряжения
void setup() { .... }
void go_forward() { ... }
void stop() { ... }
void loop() { val = analogRead(photoPin); // считываем значение с фототранзистора if(val > 40) //40 это примерно 200 мВ go_forward(); else stop(); }
|
|
|
|
|
Участник
560 сообщений
Мужчина
|
nightmare, для меня это не понятно,мне надо просто воткнуть фототранзистор и написать код БЕЗ ВСЯКИХ СХЕМ,ПРОСТО ФОТОТРАНЗИСТОР
|
|
|
|
|
Начальная группа
1798 сообщений
Мужчина
|
игорь, не люблю лентяев, которые не думают своей головой, клянчат код, врут постоянно, так что сам давай дальше разбирайся.
|
|
|
|
|
Участник
560 сообщений
Мужчина
|
|
|
|
|
|
БЛОГГЕР
90 сообщений
Мужчина
|
nightmare, совершенно верно. Давно я тут не был. Игорь, если хочешь чему то научиться, то уж не затруднить делать все по шагово. Не люблю когда кто то скачит с одного вопроса на другой. Ты с начала с первым определись, а потом иди дальше. А то ты не чему не научишься, и других бесишь. Для начала узнай основы программирования ардуины (знаки, комменты и т.п.) не знаю почему ты не хочешь читать статью на сайте , замечательная, статья. Если не выучишь основы, можешь не обращаться ко мне с вопросами про ардуину.Добавлено (22.12.2011, 22:54) --------------------------------------------- nightmare, практикуешься с дуиной?
моя группа Вконтакте посвещённая робототехнике http://vkontakte.ru/BeamRobots
|
|
|
|
|
Начальная группа
1798 сообщений
Мужчина
|
izobretatel-1, чисто теоретически
|
|
|
|
|
БЛОГГЕР
90 сообщений
Мужчина
|
nightmare, это хорошо что есть доп. знания
моя группа Вконтакте посвещённая робототехнике http://vkontakte.ru/BeamRobots
|
|
|
|
|
Начальная группа
2 сообщений
Женщина
|
всем добрый день. Нужна помощь по коду. Написала код для робота объезжающего препятствия, запускаю робота, а он у меня странные вещи творит) Подскажите,пожалуйста, что поправить. Сначала как и по программе серва устанавливается на 90 градусов, потом робот едет вперед и независимо от расстояния (даже больше 15, робот останавливается и вертится серва, потом все заново повторяется, такое ощущение что замеры не осуществляются. вот собственно код: #include <AFMotor.h>//подключаем бибилиотеку для моста #include <Servo.h>//подключаем бибилотеку для сервопривода const int Trig=14; const int Echo=15; //моторы к клеммам М1, М2, М3, М4 AF_DCMotor motor1(1); AF_DCMotor motor2(3); //Объект для сервопривода Servo myservo; //переменные для хранения данных с дальномера unsigned int time_us=0; unsigned int distance_sm=0; unsigned int dist_r=0;//расстояние до ближайшего объекта справа unsigned int dist_f=0;//расстояние до ближайшего объекта прямо unsigned int dist_l=0;//расстояние до ближайшего объекта слева
void setup() { pinMode(Trig,OUTPUT); pinMode(Echo,INPUT); Serial.begin(9600); myservo.attach(10); myservo.write(90);//поворачиваем серву в положение 90 градусов при каждом включении(надо чтоб был прямо) }
void loop() { motor1.run(FORWARD); motor1.setSpeed(255); dist_f=sonar(); if (dist_f<15) { motor1.run(RELEASE);//остановка myservo.write(0); delay(1000); dist_r=sonar(); myservo.write(90); delay(1000); dist_f=sonar(); myservo.write(180); dist_l=sonar(); delay(1000); if(dist_r>dist_f&&dist_r>dist_l) { motor1.run(FORWARD); motor1.setSpeed(255); motor2.run(FORWARD);//поворот направо motor2.setSpeed(255); } if(dist_l>dist_r&&dist_l>dist_f) { motor1.run(FORWARD); motor1.setSpeed(255); motor2.run(BACKWARD);//поворот налево motor2.setSpeed(255); } if (dist_f>dist_r&&dist_f>dist_l) { motor1.run(FORWARD);//прямо motor1.setSpeed(255); motor2.run(RELEASE); } if (dist_l<5&&dist_f<5&&dist_r<5) { motor1.run(BACKWARD);//назад motor1.setSpeed(255); motor2.run(RELEASE);//выключен } } else { motor1.run(FORWARD);//движение вперед motor1.setSpeed(255); } } int sonar()//алгоритм работы сонара { digitalWrite (Trig,HIGH);//подаем сигнал на выход микроконтроллера delay(10); digitalWrite(Trig,LOW);//Затем убираем time_us=pulseIn(Echo,HIGH);//замеряем длину импульса distance_sm=time_us/58;//пересчитываем в см Serial.println(distance_sm);//выводим на порт }
|
|
|
|
|
Администраторы
3417 сообщений
Мужчина
|
Особо не вчитывался но вроде в переменной сонар у вас могут быть левые символы привключении робота и условие может срабатывать неправильно. Либо оно вообще тут не сработывает. Желательно обнульть переменную перед ее считыванием.
|
|
|
|
|
Начальная группа
2 сообщений
Женщина
|
спасибо, вроде разобралась, первые шаги мой робот уже сделал, проблема осталась в том, что поздно видит препятствие, бывает уже врежется, а потом резко рванет назад) расстояние при котором должен осуществлять маневры сделала уже итак 30 см...может подскажите чего?))
|
|
|
|
|