Файл: С чего начинаются роботы. О проекте Arduino для школьников (В.Н. Гололобов, 2011).pdf
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 16.06.2025
Просмотров: 1231
Скачиваний: 3
Глава 10. С чего начинаются роботы?
Загрузив программу в модуль Arduino, я включаю оба устройства и… и… и ничего интересного не вижу. Что-то, где-то не так.
Рис. 10.5. Загрузка программы в модуль Arduino
Как проверить, где ошибка или неточность?
Попробуем сделать что-то похожее на отладку в программе VirtualBreadBoard. Но, чтобы не делать лишних паек, не добавлять отладочные светодиоды, используем тот светодиод, что уже стоит на плате модуля Arduino. Он на 13 цифровом выводе, который я использую для включения зеленого света. Поскольку программа не работает должным образом, это светодиод не загорается. Для начала я добавлю строку отладки в исходный текст при начале расшифровки кода:
if (photoState == LOW) |
{ |
|
// начинаем читать |
код и переключать светодиоды, если код «свой» |
|
delayMicroseconds(4500); |
// ждѐм 4.5 мС |
|
digitalWrite(ledPinGreen, HIGH); photoState = digitalRead(photoPin);
Загружаем программу и, поднося излучатель ИК-кода к фотоприёмнику, убеждаемся, что светодиод «зелёный свет» загорается. Скопируем эту строку, закомментируем её в этом месте и вставим в следующую проверку.
Так, перемещаясь по программе вниз, доходим до того места, где появилась ошибка.
if (photoState == LOW){ |
|
delayMicroseconds(3500); |
// ждѐм 3.5 мС |
Место ошибки!!!! Нужно добавить: photoState = digitalRead(photoPin); if (photoState == HIGH){
digitalWrite(ledPinRed, LOW); // выключаем красный digitalWrite(ledPinGreen, HIGH);//включаем зелѐный delay(2000); // зелѐный 2 секунды digitalWrite(ledPinGreen, LOW);//выключаем зелѐный
}
}
Перед последней проверкой не было команды проверки состояния входа! И, следовательно, последняя проверка if (photoState == HIGH) не подтвердила код.
112
Глава 10. С чего начинаются роботы?
Рис. 10.6. Отладка (выделена пропущенная команда) в программе Arduino
Добавляем утерянную строку и проверяем, загрузив правильный текст программы в модуль, окончательную работу программы. Зелёный светодиод загорается, когда к фотоприёмнику подносится излучатель ИК-кода, и гаснет через 5 секунд, что я выбрал в качестве паузы между переключениями семафора. Вот полный и правильный текст программы.
// установка выводов
const int photoPin = 2; // номер вывода, к которому подключѐн фотоприѐмник const int ledPinGreen = 13; // номер вывода зелѐного светодиода
const int ledPinRed = 12; // номер вывода красного светодиода
int photoState = HIGH; // переменная для чтения состояния фотоприѐмника
void setup() {
//инициализируем выходы для светодиодов pinMode(ledPinGreen, OUTPUT); pinMode(ledPinRed, OUTPUT);
//инициализируем вход для фотоприѐмника pinMode(photoPin, INPUT);
}
void loop(){
// включаем красный свет digitalWrite(ledPinRed, HIGH);
//читаем состояние входа photoState = digitalRead(photoPin);
//проверяем есть ли пачка импульсов
//если есть, то photoState становится LOW if (photoState == LOW) {
// начинаем читать код и переключать светодиоды, если код «свой» delayMicroseconds(4500); // ждѐм 4.5 мС
photoState = digitalRead(photoPin);
113
Глава 10. С чего начинаются роботы?
if (photoState == HIGH){ |
|
delay(1); // ждѐм 1 мС |
|
photoState = digitalRead(photoPin); |
|
if (photoState == LOW){ |
|
delay(1); // ждѐм 1 мС |
|
photoState = digitalRead(photoPin); |
|
if (photoState == HIGH){ |
|
delay(1); // ждѐм 1 мС |
|
photoState = digitalRead(photoPin); |
|
if (photoState == LOW){ |
|
delayMicroseconds(3500); |
// ждѐм 3.5 мС |
photoState = digitalRead(photoPin); if (photoState == HIGH){
// выключаем красный digitalWrite(ledPinRed, LOW);
//включаем зелѐный digitalWrite(ledPinGreen, HIGH); delay(2000); // зелѐный 2 секунды
//выключаем зелѐный digitalWrite(ledPinGreen, LOW);
}
}
}
}
}
}// иначе ничего не делаем
}
И глава, и книга должны были быть о роботах. А мы всё о программах, о паровозиках да семафорах, когда же про роботов?
Прежде, чем робот сделает первое движение, вы должны сделать первые шаги в освоении этой техники. Вот вы и сделали эти шаги, если прочитали все предыдущие главы, повторили всё, о чём в них написано. Если ваши устройства для паровозика и семафора заработали, то вы можете модифицировать описанные ранее программы так, чтобы паровозик «видел» семафор — добавьте к модулю фотоприёмник TSOP — а семафор, отправлял сигнал паровозику, что горит красный свет. Паровозик, принимая сигнал, отправлял бы сигнал «я свой», а семафор, получив его, включал зелёный свет. Вы можете добавить реле (включив его через транзистор к устройству в паровозике), которое будет отключать двигатель паровозика, получив сигнал от семафора, что горит красный свет, а «увидев» зелёный, включало бы двигатель. И вы получили первый роботпаровозик.
Впрочем, оставим «Паровозик из Ромашкова». Что нам мешает собранные и проверенные модули применить иначе. Например, если у вас есть тележка с электрическим моторчиком, умеющая поворачивать, то... Установим на эту тележку модуль семафора. Он будет принимать тот ИК-код, который мы проверили. А модуль излучения ИК-кода мы модифицируем следующим образом: вместо одного светодиода (АЛ307А) включим две гирлянды из светодиодов. Если использовать напряжение 12 В, то можно включить в гирлянду 8-9 светодиодов. И ничто не мешает сделать не две, а скажем четыре гирлянды, подключив все транзисторы к одному выходу микроконтроллера.
Зачем нам эта новогодняя ёлка? Выложим этими гирляндами периметр в виде прямоугольника. Внутрь поместим тележку-робота, которую запрограммируем так, чтобы, получив сигнал от излучателя, она останавливалась, отъезжала назад, поворачивала и вновь пыталась проехать к «ограде». Если мы оставим в ограде ворота, то получим робота, который должен найти выход из «загона».
114
Глава 10. С чего начинаются роботы?
Экспериментируя с «дальнобойностью» излучателей, скоростью движения робота-тележки, вы наработаете некоторый материал, который поможет создавать более сложные устройства. Сегодня и в Интернете, и в магазинах можно поискать и найти многое, что позволит собирать роботы. Есть много таких полезных датчиков, как ультразвуковой датчик расстояния, исполнительных механизмов, таких как сервомоторы и т.д.
Рис. 10.7. Компоненты для создания роботов в Интернет-магазине
Есть достаточно много заготовок, которые можно использовать в роботостроении. Вот, например, что можно найти в магазине:
115
Глава 10. С чего начинаются роботы?
Рис. 10.8. Готовые модули и блоки в радиомагазине
Но самое главное, чем вам следует обзавестись, это желанием научиться всему, терпением и умением придумывать что-то своё и реализовывать эти задумки. Возможно, обретя эти навыки, вы выберете себе профессию, увлекательную и современную, создателя роботов. Успехов вам!
116
Приложение А. О языке программирования Arduino
Приложение А. О языке программирования Arduino
117
Приложение А. О языке программирования Arduino
Arduino
блокнот
программиста
Brian W. Evans
118
Приложение А. О языке программирования Arduino
119
Приложение А. О языке программирования Arduino
120
Приложение А. О языке программирования Arduino
Оглавление |
||
Оглавление............................................................................................................................................... |
121 |
|
предисловие ............................................................................................................................................ |
123 |
|
структура .................................................................................................................................................. |
125 |
|
setup() ................................................................................................................................................... |
125 |
|
loop() ..................................................................................................................................................... |
126 |
|
функции................................................................................................................................................ |
126 |
|
,- фигурные скобки.............................................................................................................................. |
127 |
|
; точка с запятой................................................................................................................................... |
127 |
|
* ... |
*/ блок комментария ................................................................................................................... |
128 |
однострочный комментарий.............................................................................................................. |
128 |
|
переменные............................................................................................................................................. |
129 |
|
объявление переменных.................................................................................................................... |
130 |
|
границы переменных.......................................................................................................................... |
131 |
|
byte ....................................................................................................................................................... |
132 |
|
int |
.......................................................................................................................................................... |
132 |
long........................................................................................................................................................ |
132 |
|
float ....................................................................................................................................................... |
132 |
|
массивы................................................................................................................................................ |
133 |
|
арифметика.............................................................................................................................................. |
134 |
|
смешанное присваивание .................................................................................................................. |
134 |
|
операторы сравнения ......................................................................................................................... |
135 |
|
логические операторы ........................................................................................................................ |
135 |
|
константы ................................................................................................................................................. |
136 |
|
true/false............................................................................................................................................... |
136 |
|
high/low ................................................................................................................................................ |
136 |
|
input/output.......................................................................................................................................... |
136 |
|
управление программой ........................................................................................................................ |
137 |
|
if............................................................................................................................................................. |
137 |
|
if... |
else ................................................................................................................................................... |
138 |
for |
.......................................................................................................................................................... |
139 |
while...................................................................................................................................................... |
140 |
|
121
Приложение А. О языке программирования Arduino
do...while............................................................................................................................................... |
140 |
цифровой ввод/вывод ............................................................................................................................ |
141 |
pinMode (pin, mode) ............................................................................................................................ |
141 |
digitalRead (pin) .................................................................................................................................... |
142 |
digitalWrite (pin, value)......................................................................................................................... |
142 |
analogRead (pin) ................................................................................................................................... |
143 |
analogWtite (pin, value)........................................................................................................................ |
144 |
время и математика................................................................................................................................ |
145 |
delay (ms).............................................................................................................................................. |
145 |
millis().................................................................................................................................................... |
145 |
min (x, y)................................................................................................................................................ |
145 |
max (x, y) ............................................................................................................................................... |
145 |
случайные числа...................................................................................................................................... |
146 |
randomSeed (seed) ............................................................................................................................... |
146 |
random (max)........................................................................................................................................ |
146 |
random (min, max)................................................................................................................................ |
146 |
последовательный обмен ...................................................................................................................... |
147 |
Serial.begin (rate).................................................................................................................................. |
147 |
Serial.println (data) ............................................................................................................................... |
147 |
приложение ............................................................................................................................................. |
148 |
цифровой выход .................................................................................................................................. |
149 |
цифровой ввод .................................................................................................................................... |
150 |
сильноточный выход........................................................................................................................... |
151 |
pwm выход ........................................................................................................................................... |
152 |
вход с потенциометра......................................................................................................................... |
153 |
вход от переменного резистора ........................................................................................................ |
154 |
серво вывод ......................................................................................................................................... |
155 |
122