Теперь в нашем онлайн-магазине доступна уникальная книга «BEAM-робототехника. От азов до создания практических устройств», идеально подходящая как для кружков робототехники, так и для самообучения дома. Вы можете приобрести её по привлекательной цене в 699 рублей. Дополнительная информация о книге доступна на нашем сайте. Также в ассортименте нашего онлайн-магазина представлены готовые наборы для сборки роботов, с помощью которых ваш ребенок сможет легко собрать своего первого робота, следуя нашим подробным инструкциям. Перейти в магазин


[ Раскрыть online-чат / Закрыть ] · [ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 4 из 5
  • «
  • 1
  • 2
  • 3
  • 4
  • 5
  • »
Модератор форума: nightmare, Huntswarrior, Aleks_Crow, {{TNT}}  
Форум » Мастерская » Начинающим робототехникам » Прошивка для робота который едет и объезжает препятствия (*icon-0*)
Прошивка для робота который едет и объезжает препятствия
Отправлено 22.12.2011 - 15:2746
Участник
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)


Ростов-на-дону
Профиль Личное сообщение Дом. страница icq Skype
8
Отправлено 22.12.2011 - 15:2947
Начальная группа
1798 сообщений
Мужчина
игорь, нарисовано же, не?
И в коде написано даже.


Профиль Личное сообщение Дом. страница icq Skype
38
Отправлено 22.12.2011 - 15:3048
Участник
560 сообщений
Мужчина
nightmare, схему собрал,все сделал как там и говориться,но ничего не работает


Ростов-на-дону
Профиль Личное сообщение Дом. страница icq Skype
8
Отправлено 22.12.2011 - 15:3049
Начальная группа
1798 сообщений
Мужчина
игорь, какие данные в терминале получаешь? Горит ли светодиод? Попробуй перевернуть фототранзистор.


Профиль Личное сообщение Дом. страница icq Skype
38
Отправлено 22.12.2011 - 15:3450
Участник
560 сообщений
Мужчина
nightmare, пишет скомпилировалось все нормально,заливаю тоже нормально,светодиод не горит(((

Добавлено (22.12.2011, 15:34)
---------------------------------------------
nightmare, я сейчас хочу сделать так чтобы он работал как охотник за светом,в какие контакты вставить фототранзистор?
и что надо добавить в коде?



Ростов-на-дону
Профиль Личное сообщение Дом. страница icq Skype
8
Отправлено 22.12.2011 - 15:4851
Начальная группа
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();   
}   


Профиль Личное сообщение Дом. страница icq Skype
38
Отправлено 22.12.2011 - 15:5652
Участник
560 сообщений
Мужчина
nightmare, для меня это не понятно,мне надо просто воткнуть фототранзистор и написать код
БЕЗ ВСЯКИХ СХЕМ,ПРОСТО ФОТОТРАНЗИСТОР


Ростов-на-дону
Профиль Личное сообщение Дом. страница icq Skype
8
Отправлено 22.12.2011 - 16:0153
Начальная группа
1798 сообщений
Мужчина
игорь, не люблю лентяев, которые не думают своей головой, клянчат код, врут постоянно, так что сам давай дальше разбирайся.


Профиль Личное сообщение Дом. страница icq Skype
38
Отправлено 22.12.2011 - 20:0354
Участник
560 сообщений
Мужчина
nightmare, ладно

Добавлено (22.12.2011, 17:21)
---------------------------------------------
nightmare, в чем я наврал???????????

Добавлено (22.12.2011, 20:03)
---------------------------------------------
http://www.youtube.com/watch?v=gsB07P44zEo&feature=youtu.be



Ростов-на-дону
Профиль Личное сообщение Дом. страница icq Skype
8
Отправлено 22.12.2011 - 22:5455
БЛОГГЕР
90 сообщений
Мужчина
nightmare, совершенно верно.
Давно я тут не был. Игорь, если хочешь чему то научиться, то уж не затруднить делать все по шагово. Не люблю когда кто то скачит с одного вопроса на другой. Ты с начала с первым определись, а потом иди дальше. А то ты не чему не научишься, и других бесишь.
Для начала узнай основы программирования ардуины (знаки, комменты и т.п.) не знаю почему ты не хочешь читать статью на сайте , замечательная, статья. Если не выучишь основы, можешь не обращаться ко мне с вопросами про ардуину.

Добавлено (22.12.2011, 22:54)
---------------------------------------------
nightmare, практикуешься с дуиной?



моя группа Вконтакте посвещённая робототехнике http://vkontakte.ru/BeamRobots
Профиль Личное сообщение Дом. страница icq Skype
0
Отправлено 22.12.2011 - 22:5556
Начальная группа
1798 сообщений
Мужчина
izobretatel-1, чисто теоретически smile


Профиль Личное сообщение Дом. страница icq Skype
38
Отправлено 22.12.2011 - 23:0957
БЛОГГЕР
90 сообщений
Мужчина
nightmare, это хорошо что есть доп. знания smile


моя группа Вконтакте посвещённая робототехнике http://vkontakte.ru/BeamRobots
Профиль Личное сообщение Дом. страница icq Skype
0
Отправлено 29.07.2014 - 20:0558
Начальная группа
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);//выводим на порт
}


Профиль Личное сообщение Дом. страница icq Skype
0
Администраторы
3417 сообщений
Мужчина
Особо не вчитывался но вроде в переменной сонар у вас могут быть левые символы привключении робота и условие может срабатывать неправильно. Либо оно вообще тут не сработывает. Желательно обнульть переменную перед ее считыванием.


Только дурак нуждается в порядке-гений господствует над хаосом...
Онлайн ЧАТ по робототехнике ! Заходи и общайся без регистрации =)
Профиль Личное сообщение Дом. страница icq Skype
34
Отправлено 08.08.2014 - 18:2460
Начальная группа
2 сообщений
Женщина
спасибо, вроде разобралась, первые шаги мой робот уже сделал, проблема осталась в том, что поздно видит препятствие, бывает уже врежется, а потом резко рванет назад) расстояние при котором должен осуществлять маневры сделала уже итак 30 см...может подскажите чего?))


Профиль Личное сообщение Дом. страница icq Skype
0
Форум » Мастерская » Начинающим робототехникам » Прошивка для робота который едет и объезжает препятствия (*icon-0*)
  • Страница 4 из 5
  • «
  • 1
  • 2
  • 3
  • 4
  • 5
  • »
Поиск: