Технический форум по робототехнике.
KitaPro » 06 ноя 2011, 15:44
Сделал ИК бампер на основе Tsop2136. Обвязку сделал по даташиту. В качестве ик-светодиодов использовал TSAL5100. Подключил их через 130Ом 9му цифровому пину. Есть у меня Freeduino 2009(аналог Arduino Duemilanove) и Motor Shield. Собрал отдельно бампер, все работает. В качестве проверки использовал светодиоды. Решил еще подключить мотор. Для генерации импульсов используется функция tone. Она блокирует использование ШИМ на 3 и 11 пине, следовательно M1 и M2 не работают(используют 3 и 11 пины для активации и регулирования скорости моторов 1 и 2). Остаются M3 и M4. Подключаю мотор к M3, и бампер к соответствующим пинам уже на шилде. Питание на мотры от зарядки телефона, 6.8В где-то получается. И тогда бампер ведет себя не правильно, он выполняет то, что должно было быть при срабатывании бампера, и на доли секунд пытается выполнить основной код. Если отключить питание от моторов и перезагрузить шилд(иногда даже не надо), бампер работает нормально. В чем может быть проблема?
- Код: Выделить всё • Развернуть
#include <AFMotor.h>
volatile int state = LOW;
AF_DCMotor motor(3); //мотор подключен к M3
void setup ()
{
pinMode(13,OUTPUT);//сигнальный светодиод(должен гореть только при срабатывании бампера)
pinMode(9,OUTPUT);//выход частоты
pinMode(2,INPUT);//вход сигнала TSOPа
pinMode(11, OUTPUT);//сигнальный светодиод(должен гаснуть только при срабатывании бампера)
attachInterrupt(0, blink, CHANGE);
motor.run(RELEASE);//включаем мотор
motor.setSpeed(100);
}
void loop ()
{
tone(9,38000); //генерируем пачки 36КГц
motor.run(FORWARD);//движемся вперед
motor.setSpeed(100);
digitalWrite(13, LOW);
digitalWrite(11, HIGH);
if(state==HIGH){
digitalWrite(13,HIGH);
digitalWrite(11, LOW);
motor.run(RELEASE);//остановка двигателя
delay(1000);
}
}
void blink(){
state = !state;
}
HarryStar » 06 ноя 2011, 16:55
В просадке напряжения. Померяйте мультиметром, что у вас получается при включении моторов.
KitaPro » 06 ноя 2011, 17:18
HarryStar, а где мерять?
Сейчас замерил питание мотор шилда, там 6,6В. При включении моторов там 6,2В.
Знаете как она сейчас работает по той программе которая выше. Если мотор не подключен, то при обнаружении "препятствия" гаснет светодиод на 11й ножке, и загорается на 1 секунду светодиод на 13й ножке(если убрать препятствие). Когда подключаю мотор, то происходит инвертирование программы) Светодиод 11 гаснет, и загорается 13й, мотор не крутится. Если поднести препятствие и держать секунду, то загорается 11й, гаснет 13й светодиод и начинает крутится мотор. Хотя по идее должно быть же наоборот.
KitaPro » 06 ноя 2011, 23:17
Так. По моему я разобрался, возможно проблема была в плохом соединении моторов, сейчас перепаял все работает как надо. Вот только вопрос, есть аналог команды tone ? Или только если аппаратно генерировать частоту?
Добавлено спустя 1 час 37 минут 34 секунды:
А Ик-диоды обязательно через транзистор вешать? Или можно просто через резистор напрямую к ноге?
HarryStar » 07 ноя 2011, 02:14
Если тока в 40-60 мА достаточно, то можно просто к ноге через резистор. От тока зависит мощность излучения и соотв. дальность. Для бампера - думаю транзистор не нужен.
KitaPro » 07 ноя 2011, 07:49
собирал на макетке, мне хватало вообще 20мА, и то светодиоды были далеко друг от друга и тсопа..
HarryStar » 07 ноя 2011, 09:22
Ну так посмотрите по даташиту макс ток на ножку -обычно до 40-60 мА они без проблем выдают (тини85, мега16, 32 - точно, остальные не помню), так что смело убирайте транзистор.
KitaPro » 07 ноя 2011, 15:45
Спасибо, попробую потом сделать печатную. Почитаю только как