Игрушки на arduino своими руками

Обновлено: 07.05.2024

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

О нас

Мы — команда очаровательных программистов в составе Екатерины Браун, Анастасии Гореловой и Алёны Кудашевой — представляем вам свой первый и, очевидно, не последний учебный проект. Этот проект — курсовая работа по С++, которую делают все студенты бакалаврской программы «Прикладная математика и информатика» в конце первого курса под руководством опытного ментора. Нашим наставником был Тимур Исхаков — выпускник ФКН ВШЭ, сейчас работает Forward Deployed Engineer в Palantir London. Опыта создания больших проектов у нас не было, поэтому мы работали изо всех сил, чтобы создать что-то стоящее.

Поиск идеи

Для начала нужно было определиться с темой проекта. Для этого мы решили создать гугл-форму, где программисты могли поделиться темами своих студенческих проектов, а люди из других сфер рассказать, каких приложений им не хватает. Нас заинтересовал необычный комментарий одного из опрошенных — реализовать игру, причем не на ПК, а на плате с собственным процессором. Так и родилась красивая идея, чтобы запрограммировать портативную игровую консоль — маленькую коробочку с сенсорным экраном.

Аутентичная пиксельная графика. Знакомые с детства правила игры. Кстати, подробнее о них.

Правила и суть игры

Легенда игры

Легенда игры

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

Платы

Нет. Идея сделать игру полностью на плате тормозила проект с самого начала. Вот с какими вопросами мы столкнулись:

На каком языке прошивается плата?

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

Хватит ли на плате памяти?

Знающие люди намекнули, что главная отличительная особенность микроконтроллера от компьютера — это ограниченность памяти.

Какую плату выбрать?

Мы могли осуществить первоначальную идею на Arduino, Raspberry, Teensy и множестве других микроконтроллеров.

Выбор платы


Название

ОЗУ

Габариты

Разъем

Язык

Python (и другие)

Цена

Как вы уже поняли, остановились мы на Ардуино:

Во-первых, она стоила сравнительно недорого, и мы могли заказать сразу три платы.

Во-вторых, мы нашли огромное количество туториалов по работе с этим микроконтроллером.

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

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

Новая концепция

В итоге мы заказали Arduino Mega и экран TFT LCD Touch screen 2.4. Получили. Первым делом решили познакомиться с платой и запустить Paint. Оказалось, что даже такое простое приложение смотрелось достаточно мелко на экране. Изначально мы хотели, чтобы плата выполняла роль как устройства ввода, так и устройства вывода, что оказалось бы крайне некомфортно для пользователя. Поэтому мы решили поменять стратегию и разделить управление и отрисовку на разные модули, однако по-прежнему хотели оставить в проекте фишку с Ардуино.

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

Слева — предполагаемая графика на Ардуино, справа — на ПК

Слева — предполагаемая графика на Ардуино, справа — на ПК

Тут стоит добавить, что дизайн мы обдумали заранее и пришли к выводу, что изображения всех объектов на поле будут нами вручную отрисованы в приложении Procreate на Ipad Pro.

Ардуино в роли геймпада

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

Есть две части кода:

Первая — внутри Ардуино, то есть этот код нужно буквально вшить в плату. Удобно это делать при помощи специальной среды Arduino IDE, в ней есть встроенный менеджер библиотек для плат компании Arduino и удобный интерфейс для прошивки девайса. Мы же выбрали PlatformIO — специальный фреймфорк для работы с любым микроконтроллером. Он более функционален и позволил нам шире разобраться в программировании плат. Установили PlatformIO мы в среду разработки Atom. Самое важное тут — это правильно выставить информацию о пинах, к которым подключен экран, силу нажатия, границы сенсоров, цветопередачу, сказать, где лево, а где право и так далее. К счастью, есть библиотека, которая позволяет помочь подобрать эти константы под ваш экран. Также в этом коде прописан вид главного меню, кнопок влево, вправо и паузы, меню паузы, меню выбора бонуса. Именно тут мы обрабатываем, на какую кнопку нажал игрок, и отправляем информацию об этом в порт. Более того, если в порт попала информация, что игрок умер и монет достаточно, на экране компьютера и на Ардуино высвечивается меню с кнопками YES/NO.

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

Дальше ребром встал вопрос, каким образом реализовывать графику игры, и как она будет взаимодействовать с логикой.

Графика и логика

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

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

Архитектура игры

В итоге мы разделили игру на несколько самостоятельных частей.

Логика. Отвечает за пересчет и хранение состояния игры. Получает запросы на изменение от координатора.

Контроллер ввода. Собирает данные от подключенного устройства управления игрой и направляет их координатору. Мы реализовали этот модуль с помощью абстрактного класса Controller in. По нашей задумке он должен представлять собой интерфейс контроллера-ввода. Сейчас от него отнаследованы два класса: Arduino controller и Key controller, которые непосредственно реализуют считывание действий игрока.

Контроллер вывода. Координатор с периодичностью передает ему набор объектов, которые изменили свое положение, и их новые координаты для перерисовки поля.

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

Координатор. Самый главный. Общается со всеми частями и связывает их в единое целое.

Использование библиотеки Qt для графики, таймеров и не только

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

Для корабля, астероидов, выстрелов и подобных объектов был создан общий класс Gameobject, отнаследованный от классов QObject и QGraphicsPixmapItem. Каждому объекту задаются изображение, размеры и координаты установки на QGraphicsScene, которое и представляет собой игровое поле. Для быстрого поиска объектов на поле была введена hashmap, которая позволяет по ID обратиться к нужному Gameobject. Помимо этого на экране присутствует информационная панель и статистические данные. При создании этих частей мы использовали классы QVBoxLayout и QLabel.

Также мы добавили меню, которое позволяет просмотреть таблицы рекордов и легенду. Все окна были сделаны как QWidget, на которых располагаются текст, таблицы или кнопки. Для идентификации игрока необходимо было добавить возможность ввода имени, мы сделали это при помощи экземпляра класса QLineEdit — echoLineEdit. Тут также был задействован механизм сигналов и слотов. Нажатие на клавишу Enter после окончания записи ника было сигналом для сохранения строки, появившейся внутри echoLineEdit.

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

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

Панель меню

Панель меню

Однако отрисовка игры была не единственным применением этой библиотеки. Мы также использовали Qt при написании контроллера-клавиатуры. С ее помощью был создан поток, в котором отслеживаются и фильтруются нажатия на клавиши. Любое событие, совершенное пользователем, фиксируется как QEvent. Затем, если это событие было подходящим (в нашем случае, нажатием на клавишу клавиатуры — QKeyEvent), оно передается дальше:

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

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

Логика игры

В модуле логики присутствует достаточно много вспомогательных классов, которые определяют поведение соответствующих им объектов на игровом поле и хранят важную информацию — их ID и текущие координаты: Spaceship, Monster, Asteroid, Shot и т.д. А также главный класс Gamе, отвечающий за их взаимодействие и изменение общего состояния игры. Кроме того, присутствует универсальная структура Changes, которая используется для передачи события, произошедшего в игре: появление нового объекта, его исчезновение или передвижение по полю. Заметим, что она обязательно хранит в себе ID, ведь именно это служит ключом в hashmap для быстрого обращения к объектам на стороне графики.

Кстати, генерация объектов на поле происходит случайным образом, конечно, с некоторыми оговорками. Например, объекты не могут накладываться друг на друга, одновременно на поле не может быть больше трех астероидов и т.д. Для этого было удобно использовать функцию из C++11:

Система бонусов

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

Тогда мы добавили единый класс Bonus, внутри которого хранится тип данного бонуса:

кристалл, замедляющий таймеры;

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

Спасать планету от астероидов стало в разы увлекательнее, к тому же подключить систему бонусов было довольно легко, ведь бонусы, как и все остальные объекты, при создании получали ID. Это значит, при поимке бонуса (его столкновении на поле с лазером корабля) достаточно было посмотреть на его тип и добавить в вектор изменений очередную структуру Changes, которая уже использовалась для обработки событий с астероидами. Напомним, эта структура содержит всю необходимую информацию: ID объекта, его координаты, а также указание, что необходимо с ним сделать. Для последнего самым простым и удобным решением оказалось использовать enum Actions:

Помимо бонусов, мы добавили в игру главного босса — прекрасного монстра, который вылетает с определенной периодичностью и вызывает вас на дуэль. Теперь есть два исхода: или вы отобьете его атаку, продолжив играть, или же он сотрет вас в порошок. Кстати, победить его будет не так просто, ведь он хаотично двигается в разные стороны. Все дело в том, что монстр, сделав в одну сторону определенное количество шагов, с вероятностью ½ решает, изменить ему направление или нет. Определенное количество шагов в одну сторону нужно для того, чтобы он не “дергался” на одном месте, слишком быстро меняя направление.


Таблицы рекордов

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

Таблица рекордов: локальная

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

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

Таблица рекордов: глобальная. Сервер

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

В коде игры есть клиент, который после окончания раунда посылает на сервер имя и результат в формате json. На сервере эти данные сериализуются в структуру LeaderboardRecord, где к тому же хранится uuid, чтобы избежать коллизии при совпадении имени пользователя. Результат кладется в вектор, далее всё сортируется.

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

За все эти возможности спасибо библиотеке crow.

Обрабатываются запросы на удаленном компьютере ВШЭ, именно там запущен код нашего сервера.

Слева — глобальная таблица рекордов, справа — локальная

Слева — глобальная таблица рекордов, справа — локальная

Многопоточность

В связи с тем, что игра непрерывно меняет состояние на нескольких фронтах одновременно, мы также затронули тему многопоточности. Так, контроллеры запускаются в отдельном треде, общаясь с основной частью игры при помощи потокобезопасной очереди. В ней хранятся действия пользователя, совершенные между двумя итерациями. Осуществлено это было не самым сложным способом: контроллеры непрерывно анализируют действия пользователя, используя бесконечный цикл в случае Ардуино или более хитрые механизмы в случае Qt. После того, как произошло событие, они добавляют его в очередь. Затем из вектора все данные собираются координатором, обрабатываются и отправляются в логику.

Обращение к этой очереди было решено делать под std::mutex, поскольку это могло гарантировать одновременный доступ к данным лишь одного участника, а значит, избавить от возможной одновременной записи и чтения вектора.

Вот пример относительно безопасного добавления элемента в вектор:

Заключение

Вот, что у нас получилось:

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

Если у вас есть тяга к технологиям (или ребёнок с такой тягой), рассмотрите Arduino. Эта штука озадачит вас и ребёнка на много часов, а на выходе получатся удивительные проекты.

10 интересных вещей, которые можно сделать на Arduino

Что за Arduino

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

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

1. Робот-бармен с Bluetooth-управлением

Сложность: 4/5.

Время: 5/5.

Робот-бармен с Bluetooth-управлением

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

Главная сложность при изготовлении — инженерная. Нужно точно прикрутить все детали и соединить их между собой, чтобы ёмкость оказывалась точно под нужными бутылками.

2. Светящийся куб на 512 светодиодов

Сложность: 3/5.

Время: 3/5.

Светящийся куб на 512 светодиодов

Красивая штука, которая может светиться в такт музыке как трёхмерный эквалайзер и показывать 3D-анимацию. А ещё это может работать как необычный ночник.

3. Взломщик кодовых замков

Сложность: 5/5.

Время: 4/5.

10 интересных вещей, которые можно сделать на Arduino

Этот проект разработал хакер Сэми Камкар, и мы приводим его только в демонстрационных целях. Для взлома, кроме платы Arduino, автор взял серво- и шаговый двигатели для перебора комбинаций и соединил всё на самодельном шасси из алюминия. В основе алгоритма — простой перебор всех комбинаций, но робот это делает быстрее человека.

4. Nod Bang — киваем головой и делаем бит

Сложность: 2/5.

Время: 3/5.

Nod Bang — киваем головой и делаем бит

Идея в том, чтобы не просто кивать в такт музыке, а кивками самому генерировать звук. Эндрю Ли сделал специальное устройство, которое следит за положением головы и в момент наклона воспроизводит нужный звук.

В наушники он встроил акселерометр, кнопки отвечают за выбор звука, а Arduino — за воспроизведение звука на компьютере через MIDI-интерфейс. Чтобы всё выглядело эффектнее, у кнопок есть подсветка, и они тоже делают бит.

5. Поющее растение

Сложность: 2/5.

Время: 2/5.

Поющее растение

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

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

6. Замок, который открывается на секретный стук

Сложность: 3/5.

Время: 2/5.

Замок, который открывается на секретный стук

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

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

7. Горшок для цветов с автополивом

Сложность: 4/5.

Время: 3/5.

10 интересных вещей, которые можно сделать на Arduino

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

Основные характеристики чудо-горшка:

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

8. Драм-машина

Сложность: 1/5.

Время: 2/5.

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

Математическая основа этого устройства — разложение в ряд Фурье, которое решается подключением стандартной библиотеки.

9. Шагающий робот

Сложность: 2/5.

Время: 1/5.

Шагающий робот

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

Чтобы его сделать, вам понадобятся сервомоторы для ног, немного проволоки и любой пластик, из которого делается шасси. Для питания — аккумулятор любой модели, который крепится на спине робота.

10. Робот-пылесос

Сложность: 4/5.

Время: 5/5.

Робот-пылесос

Дмитрий Иванов из Сочи собрал настоящий робот-пылесос, который делает всё то же самое, что и промышленные устройства, только с возможностью тонкой настройки под себя и свою квартиру.

Основные детали — плата Arduino, 6 инфракрасных датчиков, турбина с двигателем и щётками и аккумулятор. Ещё у робота есть датчики столкновения, которые помогают объезжать препятствия, и контроллер аккумулятора, который следит за уровнем батарей и предупреждает о том, что пылесос надо зарядить.

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

A simple LCD screen game where you jump over hills and duck under crows with buttons.

LCD Hill Run v2 Runner Game

Project tutorial by PunkyMunky64

  • 28,019 views
  • 74 comments
  • 98 respects

LED Dice

Learn how to simulate throwing a dice with the Arduino and 6 LEDs!

LED Dice

Project showcase by EvdS

  • 94,537 views
  • 47 comments
  • 197 respects

Arduino Controlled Pinball Machine

A standard sized pinball machine made using parts from the home store and pinball supply houses. The game play is controlled by an Arduino.

Arduino Controlled Pinball Machine

Project tutorial by Bob Blomquist

  • 64,961 views
  • 51 comments
  • 153 respects

Make an Arduino Memory Game

A tutorial for beginners for making a memory game with an arduino and leds

Make an Arduino Memory Game

Project tutorial by Jeremie

  • 50,027 views
  • 49 comments
  • 77 respects

Wooden Chess Board with Piece Recognition

Arduino & Rapberry Pi based chess computer that uses Stockfish ,recognises piece positions using reed switches and signals its move


Если у инженеров появляется свободная минутка, то они либо скучают, либо берут паяльник в руки. Либо берут паяльник в руки от скуки и собирают устройства подобно тем, что представлены ниже. Ибо чем ещё, кроме скуки, умелых рук и пытливого мозга, можно объяснить появление лилии, издающей ноту «фа», или стула, который ломается после восьмого приседания на него?

Встречайте топ странных изобретений, собранных на Arduino.

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

Поющее растение

Казалось бы: зачем растению петь? Поскольку ответить на этот вопрос тяжело, проект попал в данную подборку. Автор решил добавить терменвоксу красоты и благоухания – в остальном принципы работы остались почти те же. В основе модели лежит сенсорное восприятие, но с регистрацией изменения амплитуды сигнала. Итак, пользователь по имени madshobye прикрепил сенсорный детектор для измерения ёмкости и последующего преобразования в сигнал.

Для всего этого ему понадобились плата Arduino, шилд Gameduino и самодельный шилд для сенсорного восприятия. Если честно, то автор польстил себе, назвав проект «поющим растением». Судя по видео, растение в лучшем случае просто звучащее.

Система Nod Bang

Ещё одно устройство о звуках, причём дословно это не перевести. Идея заключается в том, что мы довольно часто киваем в такт музыке. Andrew Lee решил, что кивок может сам по себе быть музыкой, а точнее – битом.

Встроенный в наушники акселерометр реагирует на кивки головы, кнопки отвечают за различные биты, Arduino очищает и нормирует звук, а затем транслирует на комьютер через интерфейс MIDI USB. По умолчанию при кивке издаются звуки, как в метрономе, а кнопки светятся белым. Но если нажимать на них, то получится создать полноценный бит. Сами кнопки при этом будут, конечно же, красиво мигать.

«Обнимашкобот»

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

Дабы не беспокоить коллег и не кидаться на случайных прохожих, пользователь под ником [kaytdek] создал Hugbot – «обнимашкобота». Робот встретит с распростёртыми объятиями любого и при необходимости подарит гораздо больше обнимашек, чем гласит «дневная норма».

Этот раздел wiki — сборник простых проектов. Если у вас без дела пылится Arduino Uno, по нашим рецептам вы за несколько минут соберёте законченное устройство. Для сборки проектов не понадобятся инструменты, кучи компонентов и даже рабочий стол — мы обойдёмся без пайки и проводов.

Все скетчи к проектам подробно прокомментированы. Вы можете просто скопировать код и получить готовое устройство. А можете проанализировать программы — в таком случае наверняка найдёте полезные трюки и лайфхаки.

Какие железки используем

Все представленные устройства собираются на базе контроллера Arduino Uno и платы Slot Shield. В зависимости от проекта к ним добавятся от одного до шести Тройка-модулей — сенсоров и индикаторов.


Контроллер

Железки и скетчи протестированы на оригинальной итальянской Arduino Uno третьей ревизии. Если у вас неоригинальная плата — вероятнее всего, проекты будут работать, но гарантировать это нельзя.


Troyka-модули

Мы используем готовые элементы в формате Тройка-модулей. У них на борту все необходимые для работы элементы и обвязка для быстрого подключения к управляющей плате. У нас на выбор более сотни модулей — от простейших светодиодов, до систем спутниковой навигации. Единый формат модулей избавит от проблем с совместимостью. Ко всем модулям написаны библиотеки, которые упростят процесс программирования и сделают код простым и прозрачным.

arduino-troyka-slot-shield.4.jpg

Slot Shield

Проекты собираются на Slot Shield. Эта плата расширения крепится поверх Ардуино и выводит гребёнки пинов на удобные разъёмы. На Slot Shield можно установить от одного до шести модулей в разных комбинациях. Новая комбинация — новое устройство.

Разумеется, вы можете повторить проекты и на обычной макетке или Troyka Shield — соедините указанные в схеме пины обычными проводами и всё заработает.

1. Электронные часы. Как собрать…

…простые часы


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

…часы c подстройкой времени


Простые часы, с четырёхкнопочной клавиатурой. Кнопками можно изменить текущее время — отдельно часы и минуты.

…автономные часы


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

…электронный будильник


Часы с громкой пьезопищалкой. Текущее время и время срабатывания сигнала задаются с помощью четырёхкнопочной клавиатуры. За точность хода отвечает модуль часов реального времени.

…световой будильник


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

2. Метеостанция. Как собрать…

…простую станцию для компьютера


Подключим цифровой метеодатчик и выведем результаты на компьютер.

…метеостанцию с дисплеем


Метеостанция, которая выводит температуру и влажность на компактный четырёхразрядный экран.

…автономную метеостанцию с барометром


Станция для метеозаисимых людей. Гаджет выводит на экран температуру, влажность и атмосферное давление.

…метеостанцию с внешним датчиком температуры


Метеостанция, которая покажет не только температуру, влажность и атмосферное давление в помещении, но и сообщит о погоде за окном.

Читайте также: