Игрушка показывает возможности взаимодействия разных датчиков для реализации нескольких событий. Включение, выключение и гадание. Гадание основано на использовании генератора случайных чисел. Похожие принципы используются в игральных автоматах, в вендинге (автоматы, продающие что-то). Этот проект научит Вас работать с аппаратными прерываниями, что бывает очень полезно для решения некоторых задач.
Для реализации данного проекта мы использовали следующие компоненты:
- Дисплей LCD1602 – самый простой и недорогой дисплей для ведения диалога с играющим.
- 1602 LCD конвертер в IIC/I2C – для упрощения подключения к микроконтроллеру, можно приобрести в комплекте вместе с дисплеем.
- Сервопривод SG90 (180 град) – недорогой электромотор с редуктором, способный поворачиваться на заданный угол. Его будем использовать для открытия ставней.
- Ультразвуковой датчик измерения расстояния HC-SR04 – Дальномер, который позволит нам определять подошёл ли игрок к Бабке Гадалке.
- Модуль фоторезистора KY-018 – фоторезистор позволит определять бросил ли гадающий монетку.
- Модуль тактовой кнопки – для того, чтобы гадалка знала задумал человек вопрос или ещё думает.
- Контроллер NANO 3.0 CH340G без ног (Arduino совместимый контроллер) – это «мозги» нашей игрушки.
- Пара красных светодиодов 3 мм – это глаза Бабки Гадалки. Пара светодиодов синего цвета 5 мм – это подсветка. Цвета конечно зависят от вашего вкуса. Творчество приветствуется. И нам ещё потребуется один обычный светодиод белого света 5 мм для создания прерывателя с фоторезистором для того, чтобы контроллер понимал, когда брошена монетка.
- Выключатель двухконтактный KCD1-11 – для питания.
Обратите внимание, что в проекте мы используем два события, которые требуют немедленного перехода в другой режим работы игрушки.
- Играющий бросил монетку. Нужно перейти в режим гадания.
- Играющий хочет получить ответ на задуманный вопрос и нажимает кнопку.
Для этого мы используем аппаратные прерывания. На контроллере NANO прерывания можно использовать только на пинах D2 и D3.
Подключение дисплея производится к пинам А4, соответственно у конвертора SDA и А5, у конвертора SСL.
Схема подключения устройств:
Логика игрушки простая. Есть три режима.
Первый – режим включения. Гадалка должна включится тогда, когда к ней подходит человек. Используем ультразвуковой дальномер и задаём дистанцию для срабатывания (оптимальной дистанцией оказалось расстояние 80 – 90 см, которое исключает случайные разрывы дистанции). При появлении человека перед гадалкой, она начинает открывать ставни, зажигать светодиоды и включает диалоговое окно на дисплее, где приглашает бросить монетку в обмен на гадание. Когда ставни открыты, а светодиоды горят, гадалка переходит в режим ожидания. Фактически она вновь проверяет условие дистанции, но поскольку ставни открыты, а светодиоды горят, мы не видим работу функции (режима) включения. Гадалка ждёт события, когда играющий бросит монетку. Контроллер всегда ожидает прерывание от фоторезистора, поэтому если вдруг человек бросил монетку, и случайно отошёл от гадалки, то в следующий раз гадалка включится и сразу перейдёт в режим гадания, так как будет считать, что монетка уже есть. Если монетка не брошена, а человек отошёл от игрушки, то сработает режим выключения, гадалка погасит светодиоды, дисплей и закроет ставни. И вновь будет ждать (УЗ датчик будет мерить дистанцию и смотреть, есть ли кто перед игрушкой), когда кто-то подойдёт.
Второй – режим гадания. Если выполняются два условия – человек стоит перед игрушкой (выполняется условие включения) и бросил монетку, то гадалка переходит в режим гадания, просит задумать вопрос и нажать на кнопку. В этом режиме гадалка будет ждать пока не поступит прерывание от кнопки. Как только кнопка нажата, срабатывает генератор случайных чисел и на дисплее отображается ответ. Поскольку дисплеи русифицированы плохо, то внимательно смотрите, как отображаются ваши надписи. Иногда надписи превращаются в иероглифы. Когда ответ получен, гадалка выключается и включится после 10 секундной задержки, если человек не ушёл.
Третий – режим выключения. Если работал режим включения, но монетка не была брошена, то при разрыве дистанции с игрушкой, гадалка погасит светодиоды, дисплей и закроет ставни (выключится). То же произойдёт по окончании гадания. Гадалка даст возможность прочитать ответ и выключится, перейдя в режим ожидания и будет мерить дистанцию УЗ датчиком и как только кто-то появится в пределах заданного расстояния перейдёт в режим включения.
Приятной игры)))
Реализация скетча проекта может быть различна, но мы постарались сделать простой и понятный для новичка код.
Скачать скетч можно по этой ссылке.
Как работает игрушка «Бабка-гадалка»?
- Человек подходит к игрушке. Игрушка включается и предлагает играющему бросить монетку в обмен на гадание.
- Если человек уйдёт, игрушка выключится.
- Если человек бросил монетку, то игрушка предложит задумать вопрос и когда играющий будет готов, нажать на кнопку.
- После этого она случайным образом выдаст на экране ответ. Подождёт пока играющий прочитает и снова выключится.
- Если игрок бросил монетку и отошёл, игрушка тоже выключится, но если играющий подошёл снова, то она включится и будет ждать, пока игрок не нажмёт на кнопку для получения ответа.
Вы всегда можете усовершенствовать логику и диалог. Приятной игры)))
Используемые библиотеки:
- LCD_1602_RUS_ALL – библиотека с поддержкой русского языка, возможно работать и с другой, но придётся самим в коде задавать символы. Есть уже реализованные варианты.
- Ultrasonic – библиотека для работы УЗ датчика измерения расстояния. Эту библиотеку можно установить из среды разработки. Мы работали с библиотекой Ultrasonic версия 3.0.0, автор Erick SimÕ
- Servo – библиотека для сервопривода. Она является встроенной в среду разработки и её не нужно дополнительно устанавливать.
Комментарии