Сделай Сам Свою Работу на 5

Средство разработки Arduino IDE.





Скачайте с сайта Arduino.ru последнюю версию Arduino IDE. Программа не требует какой-то специальной установки, достаточно распаковать содержимое архива в нужное место. В конце данной статьи находится файл библиотеки УЗ дальномера Ultrasonic. Его следует распаковать в папку Libraries.

Запускаем приложение. Проверяем правильность установки библиотеки, заходим в меню, «Файл» - «Примеры». Почти в самом низу должен появиться пункт Ultrasonic как на рис. 3

Рис. 3 Проверка правильности установки библиотеки Ultrasonic.

Если все нормально, переходим в пункт «Сервис» - «Плата». Нам необходимо выбрать нашу плату – Arduino Pro Mini 5v.

Рис. 4 настройка платы контроллера

Последовательный порт необходимо выбрать тот, который появится после подключения Arduino к компьютеру.

Следует немного сказать по поводу Arduino Pro Mini. В отличие от других контроллеров семейства Arduino, у Pro Mini нет встроенного модуля соединения с компьютером. Он поставляется отдельно в виде платы адаптера USB to UART(TTL) и при помощи четырех проводков соединяется с платой контроллера.

Рис. 5 USB-UART (TTL) адаптер.

На рис. 6 показано, как правильно нужно соединить контроллер и адаптер.



 

Рис. 6. Соединение контроллера с USB-UART адаптером.

В отличии от принятого соединения сигнальных линий, вместо RX-TX и TX-RX эти линии нужно соединять напрямую: RX-RX, TX-TX.

При первом подключении адаптера к компьютеру автоматически начнется установка драйверов устройства. Следует дождаться окончания установки.

Еще одной особенностью контроллера является отсутствия программного сброса Reset в момент программирования. Это конечно немного неудобно, но не настолько чтобы отказаться от Pro Mini. Достаточно нажать кнопку Reset на контроллере после того, как надпись «Компилирование» сменится на «Загрузка», Рис. 7

Рис. 7 Отображение информации о ходе программирования МК.

 

Пишем код.

 

В этой главе я не буду подробно останавливаться на описании команд, директив и операторов Arduino IDE. Предполагается, что вы уже имеете некоторые базовые знания. В противном случае нужно обратиться к документации на официальном сайте Arduino или другим источникам в сети Internet.

Написание кода программы мы будем выполнять четко по плану или алгоритму, который мы составили. В определенные блоки алгоритма я добавил код, который мы сейчас рассмотрим подробнее на рис. 8.




 

 

Рис. 8 Написания начального блока программы.

 

Первый блок: директива #include подключает к нашему проекту библиотеку управления модулем Ultrasonic.

Второй блок: Объявляем переменные и записываем в них начальные значения равные нулю. Обращаю ваше внимание, что мы не будем создавать имена для портов выводов МК. Я намеренно оставил их в цифровом виде, чтобы вам было удобно сверяться с принципиальной схемой. В данном блоке мы объявляем всего три переменные - это левый и правый датчики ринга (L_Sensor и R_Sensor) в них будут записаны значения АЦП. А так же переменная расстояния УЗ дальномера (dist_sm), в нее запишется расстояние в сантиметрах до препятствия.

Строчка Ultrasonic ultrasonic (4, 2), не что иное, как объявление переменной для УЗ дальномера, взятое из примера подключенной библиотеки. В скобках указаны порты, к которым подключены ножки датчика Trig и Echo.

Третий блок: void setup(), в нем мы настраиваем все входы и выходы микроконтроллера. Входящие сигналы мы будем принимать портами 15, 17, поэтому назначаем им INPUT (Вход). Двигателями у нас управляют четыре порта: 3,5 для левого двигателя и 6,9 для правого двигателя, назначаем их как выход OUTPUT .

Почему мы задействуем для одного двигателя два порта? Все просто; если на контакты мотора подать напряжение он начнет крутиться в одну из сторон, скажем по часовой стрелке. Но если изменить полярность, т.е. поменять «плюс» и «минус» - вал моторчика будет крутиться в другую сторону. Это свойство мы и будем использовать для полноценных маневров.



 

5. Основной цикл Loop.

В этом цикле выполняется основная программа контроллера . Из него нельзя выйти совсем или завершить его. Из него возможны лишь вызовы внешних процедур, так называемых подпрограмм.

Рассмотрим структуру нашего цикла на основе алгоритма рис. 9

 

Рис. 9 Алгоритм основного цикла Loop

С самого начала нам необходимо получить показания всех датчиков, для этого мы вызываем подпрограмму:

void check_sensor() // Подпрограмма проверки сенсоров.

{

R_Sensor=analogRead(15); // считываем показания правого датчика

delay(10); //задержка для окончания преобразования АЦП

L_Sensor=analogRead(17); // считываем показания левого датчика

delay(10); //задержка для окончания преобразования АЦП

dist_cm = ultrasonic.Ranging(CM); // считываем показания УЗ дальномера

delay(10); // Задержка для окончания преобразования

}

 

 

После получения данных нам нужно их обработать. Сначала мы должны определить свое местоположение, на ринге мы ли нет. Если на ринге проверяем наличие противника в пределах 40 см. Если противника нет, мы его ищем поворачиваясь налево процедура:

 

void go_left() // поиск цели или движение налево

{

analogWrite(3, 0); //LEFT MOTOR

analogWrite(5, 100); //LEFT MOTOR

analogWrite(6, 100); //RIGHT MOTOR

analogWrite(9, 0); //RIGHT MOTOR

}

 

Значение мощности моторов снижено почти вдвое, если крутиться слишком быстро мы можем по инерции проскочить обнаруженную цель.

Если цель обнаружена, мы должны ее атаковать, двигаясь вперед на полном ходу.

 

void go_forward() //Атакуем - движение вперед

{

analogWrite(3, 0); //LEFT MOTOR

analogWrite(5, 255); //LEFT MOTOR

analogWrite(6, 0); //RIGHT MOTOR

analogWrite(9, 255); //RIGHT MOTOR

}

 

Если в момент атаки мы наехали на край ринга и обнаружили белую полосу, то нам нужно остановиться, сдать назад, развернуться и проехать чуть вперед, затем снова возобновить поиск. Для этого по порядку вызываем процедуры:

 

{

go_stop(); // Остановка

delay(100); //Ждем 10 мс

go_back(); //Движемся назад

delay(1000); //1 секунду.

go_right(); //Поворачиваем направо

delay(300); //300 мс

go_forward(); //Движемся вперед

delay(300); //300 мс

}

 

 

void go_stop() //остановка

{

analogWrite(3, 255); //LEFT MOTOR

analogWrite(5, 255); //LEFT MOTOR

analogWrite(6, 255); //RIGHT MOTOR

analogWrite(9, 255); //RIGHT MOTOR

}

 

void go_back () //двидение назад

{

analogWrite(3, 255); //LEFT MOTOR

analogWrite(5, 0); //LEFT MOTOR

analogWrite(6, 255); //RIGHT MOTOR

analogWrite(9, 0); //RIGHT MOTOR

}

void go_right () //поиск цели или движение направо

{

analogWrite(3, 100); //LEFT MOTOR

analogWrite(5, 0); //LEFT MOTOR

analogWrite(6, 0); //RIGHT MOTOR

analogWrite(9, 100); //RIGHT MOTOR

}

 

void go_forward() //Атакуем движение вперед

{

analogWrite(3, 0); //LEFT MOTOR

analogWrite(5, 255); //LEFT MOTOR

analogWrite(6, 0); //RIGHT MOTOR

analogWrite(9, 255); //RIGHT MOTOR

}

 

Временные задержки между процедурами определяют длительность работы двигателей в разных направлениях движения. Если ее увеличивать или уменьшать, то можно добиться различных углов поворота или расстояния, которое робот проедет до выполнения следующей команды.

Полный скетч для скачивания, находится в конце статьи.

Представленный код, естественно не является окончательным или самым правильным вариантом, каждый из вас вправе его дополнить или исправить под свои требования, ведь общая суть статьи научить начинающих робототехников логически и системно мыслить, правильно решать поставленные задачи с использованием всех доступных ресурсов.

 

 

 








Не нашли, что искали? Воспользуйтесь поиском по сайту:



©2015 - 2024 stydopedia.ru Все материалы защищены законодательством РФ.