Андрей Смирнов
Время чтения: ~22 мин.
Просмотров: 2

Типы данных ардуино

Содержание

Устройство сервомотора (servo) Arduino

Сервопривод (сервомотор) является важным элементом при конструировании различных роботов и механизмов. Это точный исполнитель, который имеет обратную связь, позволяющую точно управлять движениями механизмов. Другими словами, получая на входе значение управляющего сигнала, сервомотор стремится поддерживать это значение на выходе своего исполнительного элемента.


Что такое сервопривод. Схема устройства сервопривода

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

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


Управление сервоприводом с помощью широтно импульсной модуляции

Работа схемы

Схема устройства представлена на следующем рисунке.

Микросхема драйвера мотора L293D используется для управления двигателями постоянного тока. Входные контакты микросхемы драйвера мотора непосредственно подключены к контактам 8, 9, 10 и 11 платы Arduino. Электродвигатели постоянного тока подключены к выходным контактам микросхемы L293D. Для питания схемы и двигателей постоянного тока мы использовали батарейку на 9 Вольт.

Структурная схема работы устройства показана на следующем рисунке.

Работа схемы достаточно проста – нам в приложении Blynk на смартфоне необходимо просто перемещать джойстик в том направлении, в котором мы хотим чтобы двигался робот. Если мы отпустим кнопку джойстика в приложении, то его рычаг переместится в центр и робот остановится.

Приложение Blynk передает значения двух осей джойстика плате Arduino при помощи Wi-Fi соединения. Плата Arduino принимает эти значения, сравнивает их с заранее определенными значениями и по результатам сравнения выдает команды на движения робота.

Делаем звёздное небо на потолке при помощи оптоволокна и Arduino

Перевод

Хотите увидеть кусочек галактики у себя на потолке? Как это сделать – рассказано ниже.
Несколько лет я мечтал о том, чтобы выполнить этот проект, и вот он, наконец, готов. На его реализацию ушло приличное время, но итоговый результат получился настолько замечательным, что оно того стоило.
Немного о самом проекте. Я старался делать всё своими руками по-максимуму, что дало мне полную творческую свободу

В итоге у меня есть созвездия северного полушария, контроль над звёздными скоплениями при помощи пульта д/у (яркость и цвет), реакция на музыку, контроль подсветки, и, что самое важное – возможность изменить всё, что угодно.

Гены Ардуинщика

В очередной раз, при обдумывании самоделки на Atmega, встал вопрос проектирования соединений. В моем случае 12 внешних коннекторов и 21 связь. Расположение, соединение, пересечения, программирование, ошибки, ошибки, ошибки.
При кажущейся простоте задачи поломать мозг придется день, а то и два. Без опыта — месяц.
И… лень взяла свое.

Основные способности робоплатформы:

Он умеет ловко обнаруживать и перемещаться вслед за световым пятном на полу от яркого луча света оставляемого фонариком. Для этого достаточно просто посветить фонариком перед ним на некотором расстоянии. Чем ближе пятно к робоплатформе, тем быстрее он будет передвигаться и чем дальше, тем медленнее его передвижение по поверхности.

Это самый известный эксперимент начинающего роботостроителя. Робот умеет двигаться по заранее сформированному пути по полю с черной линией благодаря наличию датчиков линии. В заданном режиме 4WD Robot способен ехать вперед, назад, вправо и влево, он легко проезжает как плавные повороты, так и трудные участки маршрута, например, прямые углы, перекрестки, зигзаги.

Датчик цвета принимает свет, отраженный от объекта. Робот идентифицирует цвет расположенного перед ним предмета и изменяет цвет RGB светодиода на цвет объекта, который мы рассматриваем.

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

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

Видеообзоры:

Устройство и сферы применения

Конструктивно RGB–светодиоды представляют собой три светодиодных кристалла с одной оптической линзой, расположенные в одном корпусе. Управление цветом происходит с помощью подачи электрических сигналов на выводы каждого светодиодного кристалла, а сочетание излучений всех трех светодиодов позволяет регулировать итоговый цвет. Для примера, ниже представлен самый популярный RGB–светодиод SMD 5050.

Светодиод RGB – это полноцветный светодиод, смешивая три цвета в разной пропорции можно отобразить любой цвет. К примеру, если зажечь все три цвета на полную мощность, получится свечение белого цвета. 

Сферы применения RGB светодиодов напрямую связаны с развитием рынка рекламы и развлекательных мероприятий. Также готовые RGB–светильники и ленты применяются в области светового оформления архитектурных и дизайнерских решений — ночная подсветка зданий или фонтанов, интерьерный свет, индикаторный системы автомобилей и т.д.

Таблица длины волн светодиодов smd 5050, различного свечения

Разнообразие сфер применения многоцветных светодиодных источников света определяет основные виды внешнего оформления RGB–светодиодов: изделия небольшой мощности выпускаются в стандартных круглых корпусах со сферической линзой и выводами под обычную пайку; маломощные RGB–светодиоды в SMD-корпусах поверхностного монтажа широко применяются в светодиодных лентах или полноцветных светодиодных экранах большой площади; в корпусах типа Emitter выпускают мощные RGB–источники света с независимым управление каждым светодиодным кристаллом; сверх яркие светодиоды в корпусах.

Для упрощения систем управления светом в корпуса некоторых серий многоцветных LED–источников света вмонтированы управляющие микросхемы. Схемы расположения выводов (распиновка) Несколько стандартных схем управления определяют структуру внешних выводов RGB–светодиодов и их соединение внутри корпуса. Существует три основных схемы распиновки, которые соблюдаются на большинстве выпускаемых изделий:

  • В схеме с общим катодом для управления используется три независимых вывода анода, а катодные выводы LED-кристаллов соединены между собой;
  • Распиновка с общим анодом управляется отрицательными импульсами на катодные выводы, а вместе соединены уже анодные электроды светодиодных кристаллов;
  • Независимая схема соединения имеет шесть выводов по числу LED кристаллов, соединений внутри корпуса не производится.

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

Три светодиода и их размеры

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

Общий вывод подключается к единой шине микроконтроллера, а управляющие сигналы подаются на выводы LED–кристаллов через ограничительные резисторы.Управление режимами свечения светодиодных кристаллов происходит с помощью широтной-импульсной модуляции, где скважность импульсов определяет силу света. Программирование ШИМ–модулятора определяет итоговый цвет всего прибора или циклические режимы работы каждого цвета

Шаг 4: измерение угла наклона с помощью гироскопа

Гироскоп в MPU6050 измеряет угловую скорость (скорость вращения) вдоль трех осей. Для нашего самобалансирующегося робота угловая скорость вдоль оси x достаточна для измерения скорости падения робота.
Загрузите скетч Sketch2.ino. В нём считываются данные гироскопа по оси x, преобразуются в градусы в секунду, а затем умножаются на время цикла, чтобы получить изменение угла. Мы добавляем этот полученный угол к предыдущему углу, чтобы получить текущий угол.
Положение, в котором при запуске программы находится MPU6050 — это точка нулевого наклона. Угол наклона будет измеряться относительно этой точки.
Удерживайте робота под фиксированным углом и увидите, что значение угла не будет стабильным, он будет постоянно увеличиваться или уменьшаться. Это связано с дрейфом, который присущ гироскопу.
В приведенном выше коде время цикла вычисляется с помощью функции millis(), встроенной в Arduino IDE. Для более точных интервалов между считыванием данных, позже будет использоваться прерывание таймера. Этот интервал времени между считыванием данных также будет использоваться при в ПИД-регуляторе.

Умный дом xiaomi правильнее, чем home assistant, но можно еще правильнее

В предыдущих сериях я:

  1. Накупил устройств от Xiaomi для умного дома и посредством паяльника заставил их работать в увлекательной манере — без родных серверов через home assistant (ссылка на пост)
  2. Завернул web interface от home assistant в electron (ссылка на пост) с поддержкой нотификаций, менюшек, точбара итд (код тут)
  3. Разобрал протокол miio со стороны рассылки сообщений (ссылка на пост) и реализовал поддержку всяческих кнопок в xiaomi_miio.

Со временем накопилось понимание как устроены разные инкарнации умных домов, с точки зрения реализации сценариев и протоколов взаимодействия. С этим знанием я наделал устройств и реализовал для них «правильную» распределенную среду программирования для IoT с lisp-ом, криптографией и сборкой мусора. Под катом поведаю о ходе и результате процесса.

Как заправить кровать

История[править | править код]

Сигнализация для дома на Arduino

Рассмотрим, как сделать на Arduino Uno или Nano сигнализацию для дома, загородного садового участка или гаража. В проекте мы использовали сенсор движения, датчик воды и температуры — это набор основных сенсоров для самой простой системы оповещения. Вы узнаете о прорыве водопровода, снижении температуры в доме или проникновении посторонних людей в помещении в любое время и в любом месте.

Датчики Ардуино для охранной сигнализации


Датчики Ардуино для домашней сигнализации

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

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

Курс «Ардуино программирование для начинающих»

ВведениеАрдуино: что это такое?Алгоритмы в робототехникеОсновные законы электричества

Модуль 1. «Ардуино — Старт»

1.1. Назначение пинов на Ардуино
1.2. Подключение светодиода к Ардуино
1.3. Мигание светодиода на Ардуино
1.4. Включение светодиода кнопкой
1.5. Задержки Ардуино — delay и millis
1.6. Подключение пьезоизлучателя к Ардуино
1.7. Монитор порта Arduino IDE
1.8. Аналоговый и цифровой выход на Ардуино
1.9. Подключение RGB светодиода к Ардуино
1.10. Аналоговые порты на Ардуино
1.11. Подключение потенциометра к Ардуино
1.12. Циклы for и while в Ардуино
1.13. Плавное включение светодиода
1.14. Последовательное включение светодиодов
1.15. Подключение датчика воды к Ардуино
1.16. Подключение фоторезистора к Ардуино
1.17. Подключение тактовой кнопки к Ардуино
1.18. Включение светодиода кнопкой Ардуино
1.19. Подключение датчика LM35 к Ардуино
1.20. Подключение транзистора к Ардуино
1.21. Подключение лазерного светодиода
1.22. Подключение моторчика к Ардуино
1.23. Семисегментный индикатор Ардуино
1.24. Сдвиговый регистр 74hc595 Ардуино
1.25. Датчик сердцебиения KY-039 Ардуино
1.26. Локальные и глобальные переменные

Модуль 2. «Ардуино — Шилд»

2.1. Подключение реле к Ардуино
2.2. Подключение датчика препятствия
2.3. Подключение сервопривода к Ардуино
2.4. Плавное вращение сервопривода
2.5. Управление Ардуино с компьютера
2.6. Подключение датчика звука к Ардуино
2.7. Подключение датчика движения к Ардуино
2.8. Подключение датчика вибрации к Ардуино
2.9. Подключение модуля с кнопкой
2.10. Подключение датчика освещенности
2.11. Подключение ИК приемника к Ардуино
2.12. Подключение УЗ дальномера к Ардуино
2.13. Подключение датчика DHT11 к Ардуино
2.14. Подключение LCD дисплея к Ардуино
2.15. Русский шрифт на LCD дисплее
2.16. Подключение джойстика к Ардуино
2.17. Управление сервоприводом джойстиком
2.18. Как подключить шаговый двигатель
2.19. Подключение датчика цвета к Ардуино
2.20. Подключение мотор шилд к Ардуино
2.21. Подключение датчика пламени Ардуино
2.22. Подключение датчика геркона к Ардуино
2.23. Подключение датчика тока к Ардуино
2.24. Подключение тензодатчика к Ардуино
2.25. Подключение энкодера к Ардуино
2.26. Четырехразрядный семисегментный индикатор

Модуль 3. «Ардуино — IoT»

3.1. Изменение частоты ШИМ Ардуино
3.2. Arduino EEPROM запись, чтение данных
3.3. Подключение LED ленты к Ардуино
3.4. Подключение DS18B20 к Arduino
3.5. Подключение DF Player mini к Ардуино
3.6. Радио модуль nRF24L01: описание, распиновка
3.7. Подключение модуля nRF24L01 к Ардуино
3.8. Подключение блютуз модуля к Ардуино
3.9. Прошивка блютуз модуля HC-05/06
3.10. Подключение модуля HR911105A к Ардуино

Реализуемые проекты

Машинка с управлением от смартфонаЛодка на Ардуино с ИК управлениемМетеостанция на Ардуино и Андроид

Что дают уроки для начинающих по Ардуино? Arduino UNO — это электронный конструктор, пользующийся огромной популярностью благодаря простоте программирования и возможностью создавать устройства, выполняющие разнообразные функции. Программирование производится на языке C++ или при помощи языка визуального программирования Scratch for Arduino.

Шаг 3: Схема подключения.

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

Мощность на входе моста до 12В он имеет встроенный регулятор напряжения, который выводит 5В, идеальное напряжения для питания нашего Arduino.

Подключите все согласно приведенной выше схеме.

Убедитесь, что двигатели направлены в одном направлении.

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

Манипулятор рука на Arduino.

Робот Arduino с возможностью сканирования используя Unity 3D.

Шаг 1: Что потребуется.

1. ESP-8266 Node MCU — AliExpress

2. Драйвер двигателя L298N: AliExpress

3. Набор проводов для подключения AliExpress

4. Автомобильная полно приводное шасси AliExpress

Приложение на Unity — https://github.com/MatthewHallberg/AR_Robot или Зеркало — https://github.com/robotoss/AR_Robot

Подключение поворотного энкодера с Ардуино

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

Для этого понадобятся:

  • любое устройство Ардуино, например, Arduino UNO, Arduino Mega, Arduino Leonardo, Arduino 101, Arduino Due;
  • любой энкодер Ардуино.

Обзор поворотного энкодера

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

Пины, и что они означают:

  • CLK: выход A (цифровой);
  • DT: выход B (цифровой);
  • SW: нажатие кнопки (цифровой);
  • + : VCC-напряжение питания;
  • GND: заземление.

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

Данное устройство определяет угловое положение вращающегося вала с помощью серии прямоугольных импульсов. Он по существу имеет равномерно расположенные контактные зоны, соединенные с общим узлом, а также два дополнительных контакта, называемых A и B, которые находятся на 90 градусов вне фазы. Когда вал вращается вручную, контакты A и B синхронизируются с общим контактом и генерируют импульс. Подсчитав количество импульсов любого из этих выходов, можно определить положение вращения.

Чтобы определить направление и проверить, вращается ли штифт по часовой стрелке или против часовой стрелки, нужно сделать следующее:

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

Подключение

Если говорить в общем, то CLK, DT и SW, должны быть подключены к цифровым выводам на Ардуино, + должен быть подключен к 5V, а GND заземлен.

Пошаговая инструкция подключения проводов энкодера к Ардуино:

  1. CLK: подключите конец провода к пину CLK на поворотном энкодере, затем к любому цифровому выводу на Arduino (оранжевый провод).
  2. DT: подключите конец провода к пину DT, затем к любому цифровому контакту на Arduino (желтый провод).
  3. SW: подключите конец провода к пину SW, далее к любому цифровому контакту на Arduino (голубой провод).
  4. + : подключите провод к пину +, затем к контакту +5V на Arduino (красный провод).
  5. GND: подключите конец провода к пину GND на энкодер с контактом GND на Arduino. (Черный провод).

Как кодировать

Код изменяет высоту тона в зависимости от того, в каком направлении повернут энкодер. Когда он поворачивается против часовой стрелки, шаг уменьшается, а когда он поворачивается по часовой стрелке, шаг увеличивается.

Что понадобится:

  • датчик поворотного энкодера;
  • Ардуино;
  • пьезодатчик;
  • провода.

Вот сам код:

Описание кода

Итак, сначала нужно определить контакты, к которым подключен кодер, и назначить некоторые переменные, необходимые для работы программы. В разделе «Настройки» нужно определить два контакта в качестве входных данных, и запустить последовательную связь для печати результатов на последовательном мониторе. Также нужно прочитать начальное значение вывода A, затем поместить это значение в переменную aLastState.

Далее в разделе цикла снова изменить вывод A, но теперь поместить значение в переменную aState. Таким образом, если повернуть вал и сгенерировать импульс, эти два значения будут отличаться. Сразу после этого, используя второй параметр «if», определить направление вращения. Если выходное состояние B отличается от A, счетчик будет увеличен на единицу, в противном случае он будет уменьшен. В конце, после вывода результатов на мониторе, нужно обновить переменную aLastState с помощью переменной aState.

Это все, что нужно для этого примера. Если загрузить код, запустить монитор и начать вращать вал, значения станут отображаться на мониторе.

Упрощенный пример

Следующий пример кода продемонстрирует, как считывает сигналы Arduino на датчике энкодера. Он просто обновляет счетчик (encoder0Pos) каждый раз, когда энкодер поворачивается на один шаг, а параметры вращения отправляются на порт ПК.

Код:
Следует обратить внимание на то, что приведенный выше код не является высокопроизводительным. Он предоставлен для демонстрационных целей

Шаг 12. Код Arduino

Загрузите скетч файл Arduino.

Подключите USB-кабель к USB-порту вашего компьютера и загрузите код. Загрузка кода занимает время, Вам нужно проявить терпение.

После полной загрузки, отсоедините USB-кабель, подключите источник питания к Arduino и включите кнопку питания. Код начнет работать моментально.

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

Объяснение кода:

Перед установкой кода импортируте библиотеки, используемые в эскизе (nunchuk.h, wire.h и servo.h).

Далее определяются используемые контакты и объявляются глобальные переменные. Целочисленные переменные angle# (угла) сохраняют начальную позицию для каждого сервопривода. Если Вы хотите, чтобы Ваш робот начал работать в другой позиции, измените значения этих переменных.

Переменные servo # _speed определяют скорость движения каждого сервопривода. Если вы хотите, чтобы определенный сервопривод двигался быстрее, увеличьте его значение. Угол # min и угол # max используются для ограничения максимального и минимального угла для каждого сервопривода. Вы можете установить эти переменные, чтобы избежать коллизий между последовательными суставами робота.

Во время настройки каждый сервопривод подключается к определенному выводу, и его положение запускается.

Здесь также запускается последовательная связь (с последовательным монитором) и связь I2C с Nunchuck.

Основной цикл повторяется снова и снова. Статус Nunchuk читается в каждом цикле. В зависимости от показаний выполняются разные команды.

Джойстик X будет использоваться для перемещения серво #1.

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

Аналогичный блок используется для джойстика Y. Он используется для изменения угла Серво #3. Серво #2 сохраняется в этом коде.

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

Когда нажимается только кнопка C, код считывает угол поворота и использует его как заданное значение. Серво #5 вращается до достижения заданного значения. Это скорость пропорциональна ошибке между фактическим и желаемым положением. Аналогичный код используется для сервоуправления №4, который отслеживает угол наклона контроллера.

Захват закрывается всякий раз, когда нажимаются кнопки C и Z. Когда какая-либо из этих кнопок будет не нажата, манипулятор откроет захват.

К концу эскиза есть блок кода. Он отобразит на Serial Monitor фактический угол каждого сервомотора. Может быть полезно выбрать начальный угол каждого двигателя.

Видео по теме статьи

https://youtube.com/watch?v=7f37sYkIjgI

https://youtube.com/watch?v=ORmQeC57hyM

16 комментариев для “Пример: Игра на Ардуино с LCD дисплеем”

Программирование Android приложения с помощью Processing

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

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

Примечание: ваш Bluetooth модуль должен иметь имя “HC-06”, иначе приложение не сможет с ним соединиться.

После установки приложения на мобильный телефон вы можете соединить ваш телефон по Bluetooth с Bluetooth модулем (подключенным к Arduino) и после этого запустить приложение. Это будет выглядеть примерно следующим образом:

Если же вы хотите сделать приложение более привлекательным или соединить его с другим Bluetooth-устройством (названным не “HC-06”), то вам в этом случае будет необходимо внести изменения в исходный код приложения.

Игра на Ардуино с дисплеем LCD I2C

Для этого проекта нам потребуется:

  • плата Arduino Uno / Arduino Nano / Arduino Mega;
  • жидкокристаллический дисплей с I2C;
  • одна тактовая кнопка и резистор;
  • пьезодинамик;
  • провода «папа-папа», «папа-мама».


Arduino Game. Схема сборки игры на Ардуино

Вместо подключения кнопки к Ардуино через резистор на макетной плате можно использовать модуль с кнопкой. Пьезодинамик (пьезоизлучатель) подключается к плате при желании, можно обойтись и без него. Соберите схему, как на картинке выше, и загрузите следующий скетч. Скачать программу для игры «Дракончик» на Arduino с жк дисплеем можно здесь. Скорость игры и звуки можно изменить в программе.

Скетч для игры «Дракончик» на дисплее

#include <Wire.h>                             // библиотека для протокола IIC
#include <LiquidCrystal_I2C.h>        // подключаем библиотеку LCD IIC
LiquidCrystal_I2C LCD(0x27, 20, 2); // присваиваем имя lcd для дисплея

int level = 1;       // переменная для отсчета уровня
int pause = 400; // переменная для задержки
byte p = 0;          // переменная для времени прыжка

// создаем массивы дракончика, дерева, камня и птицы
byte dracon = {
 0b01110, 0b11011, 0b11111, 0b11100, 0b11111, 0b01100, 0b10010, 0b11011
};
byte derevo = {
 0b00000, 0b00000, 0b00000, 0b11011, 0b11011, 0b11011, 0b01100, 0b01100
};
byte kamen = {
 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b00000, 0b01110, 0b11111
};
byte ptica = {
 0b00100, 0b00101, 0b01111, 0b11111, 0b10100, 0b00100, 0b00000, 0b00000
};

void setup() {
 pinMode (10, OUTPUT); // подключаем пьезодинамик
 pinMode (A1, INPUT);     // подключаем кнопку
 analogWrite(A1, LOW);
 LCD.init();                        // инициализация LCD дисплея
 LCD.backlight();              // включение подсветки дисплея

 // создаем символы дракончика, дерева, камня и птицы
 LCD.createChar(0, dracon);
 LCD.createChar(1, derevo);
 LCD.createChar(2, kamen);
 LCD.createChar(3, ptica);

 // начинаем игру: выводим надпись GO!
 LCD.setCursor(7, 0);
 LCD.print("GO!");
 delay(400);
 tone(10, 600);
 delay(100);
 noTone(10);
 LCD.clear();
}

void loop() {
  // первоначальное положение дракончика и препятствия
  byte d = 1;
  byte x = 15;
  byte y = 1;
  // выбираем препятствие, которое появится, рандомно
  byte i = random (1, 4);
  if (i == 3) y = 0;
  else y = 1;

  while (x > 0) {
    // очищаем экран и выводим номер уровня
    LCD.clear();
    LCD.setCursor(0, 0);
    LCD.print(level);

    // считываем данные с кнопки и учитываем количество циклов в прыжке
    // если дакончик находится в прыжке долго - возвращаем его вниз
    if (digitalRead(A1) == LOW) d = 1;
    if (digitalRead(A1) == HIGH) d = 0;
    if (p > 3) d = 1;

    // выводим дракончика в нужной строке
    LCD.setCursor(4, d);
    LCD.print(char(0));
    // выводим препятствие
    LCD.setCursor(x, y);
    tone(10, 50);
    LCD.print(char(i));
    noTone(10);

    // если дракончик наткнулся на препятствие выводим надпись GAME OVER!
    if (x == 4 && y == d) {
      delay(400);
      tone(10, 50);
      delay(100);
      noTone(10);
      delay(100);
      tone(10, 20);
      delay(300);
      noTone(10);
      LCD.clear();
      delay(200);
      LCD.setCursor(3, 0);
      LCD.print("GAME OVER!");
      delay(600);
      LCD.clear();
      delay(400);
      LCD.setCursor(3, 0);
      LCD.print("GAME OVER!");
      delay(600);
      LCD.clear();
      LCD.setCursor(3, 1);
      LCD.print("LEVEL: ");
      LCD.print(level);
      delay(400);
      LCD.setCursor(3, 0);
      LCD.print("GAME OVER!");
      delay(3000);
      LCD.clear();

      // начинаем игру заново, обнулив уровень игры
      LCD.setCursor(7, 0);
      LCD.print("GO!");
      delay(400);
      tone(10, 600);
      delay(100);
      noTone(10);
      LCD.clear();

      level = 0;
      pause = 400;
      p = 0;
      y = 1;
      x = 0;
      break;
    }

    // если дракончик прыгнул, издаем звук
    if (d == 0) { tone(10, 200); delay(100); noTone(10); }
    else { delay(100); }

    // если дракончик не столкнулся, то меняем положение препятствия
    // начинаем считать сколько циклов дракончик находится в прыжке
    delay(pause);
    x = x - 1;
    p = p + 1;
    if (p > 4) p = 0; 
 }

  // переходим на следующий уровень и сокращаем время задержки
  tone(10, 800);
  delay(20);
  level = level + 1;
  pause = pause - 20;
  if (pause < 0) pause = 0;
}

Как написать библиотеку для Arduino IDE

Библиотека Arduino IDE должна иметь минимум два файла: заголовочный файл (с расширением .h) и файл с исходным кодом (с расширение .cpp). В первом файле содержится описание класса и переменные, второй файл содержит программный код методов. Файл keywords.txt не обязателен, но он позволяет выделять цветом в среде Arduino IDE новые типы и методы из созданной вами библиотеки.

  1. Зайдите в папку C:\Program Files\Arduino\libraries;
  2. Создайте новую папку c названием BlinkLed;
  3. Создайте текстовый документ keywords.txt;
  4. Создайте текстовый документ BlinkLed с расширением .h;
  5. Создайте текстовый документ BlinkLed с расширением .cpp.

Код для файла BlinkLed.h:

Заголовочный файл содержит класс, где объявляются функции, которые будут использоваться в скетче (в нашем случае это blink) и используемые переменные.

/*
здесь размещают информацию о разработчике и инструкцию для пользователя
*/

//  включение стандартных функций Ардуино
#include "Arduino.h"
void blink (int pin, int pause, int repeat);

Код для файла BlinkLed.cpp:

Исходный файл содержит основной код библиотеки. В нашем примере в программе используются три переменные, которые следует указывать в скетче: pin — номер порта, pause задержка в миллисекундах, repeat — количество раз выполнения цикла for.

/*
здесь размещают информацию о разработчике и инструкцию для пользователя
*/

//  включение стандартных функций Ардуино и заголовочного файла
#include "Arduino.h"
#include "BlinkLed.h"

void blink (int pin, int pause, int repeat) {

   pinMode(pin, OUTPUT);

   for (int x=0; x<=repeat; x++) {
        digitalWrite(pin, HIGH);
        delay(pause);
        digitalWrite(pin, LOW);
        delay(pause); 
   }
}

Код для файла keywords.txt:

В файле указывается подсветка синтаксиса в Arduino IDE. Функция KEYWORD1 окрашивает слово в оранжевый цвет, LITERAL1 окрашивает слово в синий цвет.

	BlinkLed		KEYWORD1
	blink		KEYWORD1

Свежие комментарии

Шаг 10. Схема подключения

Как только Вы соберёте манипулятор, и подготовите разъем Nunchuk, Вы будете готовы что бы собрать электросхему. Мы использовали щит платы управления, который был в комплекте вместе с комплектом манипулятора. Это упрощает подключение компонентов, поскольку в нем уже имеются специальные разъемы для сервомоторов, источника питания и т. д.

Подключите компоненты следующим образом:

Контроллер:

  • Контроллер контакт 6 (SCL) => Arduino Mega Контакт 21 (SCL) (на плате)
  • Контроллер контакт 1 (SDA) => Arduino Mega Контакт 20 (SDA) (на плате)
  • Контроллер контакт 3 (Vcc) => Ardino Mega Контакт 3V3 (на плате)
  • Контроллер контакт 4 (Gnd) => Arduino Mega Контакт Gnd (на плате)

Если вы используете Arduino Uno, контакты Nunchuk SCL и SDA должны быть подключены к контактам Arduino следующим образом:

  • Контроллер контакт 6 (SCL) => Arduino Uno контакт A5
  • Контроллер контакт 1 (SDA) => Arduino Uno контакт A4
  • Контроллер контакт 3 (Vcc) => Ardino Uno контакт 3V3
  • Контроллер контакт 4 (Gnd) => Arduino Uno контакт Gnd

Сервопривод:

  • Контакт Платы управления 11 => Сервопривод № 1
  • Контакт Платы управления 12 => Сервопривод №2
  • Контакт Платы управления 13 => Сервопривод № 3
  • Контакт Платы управления 8 => Сервопривод № 4
  • Контакт Платы управления 9 => Сервопривод №5
  • Контакт Платы управления 10 => Сервопривод №6

Если вы не используете плату управления, Вы должны использовать следующую конфигурацию контактов:

  • Arduino Контакт 11 => Серво #1 (Sgn)
  • Arduino Контакт 12 => Серво #2 (Sgn)
  • Arduino Контакт 13 => Серво #3 (Sgn)
  • Arduino Контакт 8 => Серво #4 (Sgn)
  • Arduino Контакт 9 => Серво #5 (Sgn)
  • Arduino Контакт 10 => Серво #6 (Sgn)
  • Arduino Контакт Gnd => Серво Gnd
  • 6В Контакт питания => Серво Vcc

Вам также необходимо подключить внешний источник питания 12 В. Мы предлогаем использовать один блок с выходом более 2A. Сервоприводы потребляют много энергии, и если блок питания недостаточно мощный, сервоприводы будут вибрировать и перегреваться. Они также потеряют свою мощность.

Не подключайте источник питания до тех пор, пока Вы не загрузите код Arduino (см. Дальнейшие шаги). На плате есть кнопка питания. Держите её в выключенном положении.

Подключите USB-кабель к Arduino и перейдите к следующему шагу.

Privacy

The Chatvdvoem.ru Privacy Policy is incorporated into these Terms. By accepting these Terms, you agree to the collection, use, and sharing of your information through the Services in accordance with the Privacy Policy.

Рейтинг автора
5
Материал подготовил
Максим Иванов
Наш эксперт
Написано статей
129
Ссылка на основную публикацию
Похожие публикации