В этом проекте мы создадим электронную версию классического атрибута любой уважающей себя гадалки - шара судьбы =)

Нам понадобится
Компоненты
- Плата Arduino
- Макетная плата
- Перемычки
- ЖК-дисплей размером 16x2
- Датчик наклона
- Потенциометр с сопротивлением 50 кОм
- Резистор с сопротивлением 1 кОм
Библиотеки
- LiquidCrystal

Нам понадобится
Принцип работы
Шар судьбы (также известный как магический шар или шар вопросов и ответов) — игрушка, созданная в 1950-е годы и состоящая из полого шара, в котором икосаэдр (фигура с 20 гранями) плавает в темной жидкости. Когда вы задаете вопрос и встряхиваете шар, одна сторона фигуры всплывает, и вы видите ответ в окошке шара.
Для этого проекта понадобится датчик наклона, показанный на рис. 14.1. Датчик наклона состоит из металлической капсулы с шариком внутри. Шарик перекатывается в капсуле и замыкает или размыкает цепь. Таким образом, датчик выдает простой цифровой сигнал: логический ноль или единицу, в зависимости оттого, в какую сторону наклонена капсула. Существует множество датчиков наклона, и все они основаны на одном и том же принципе. В этом проекте вам нужно будет задать вопрос и потрясти датчик. Когда датчик сработает, произойдет подключение к плате Arduino, будет выбран случайный ответ из восьми предустановленных и выведен на ЖК-дисплей.
Потенциометр управляет контрастностью ЖК-дисплея.

Сборка
1. Подготовьте ЖК-дисплей в соответствии с инструкциями, приведенными в разделе «Подготовка ЖК-дисплея» в проекте 12.
2. Установите ЖК-дисплей на макетную плату, вставив штырьки в соответствующие отверстия платы. Также установите на макетную плату потенциометр и с помощью перемычек подключите ЖК-дисплей и потенциометр к плате Arduino.

3. Не забудьте использовать шины макетной платы, чтобы создать несколько подключений к контакту GND платы Arduino, как показано на рис. 14.2.
4. Центральный контакт потенциометра должен быть подключен к контакту 3 ЖК-дисплея (VO). Теперь подключите один из внешних контактов потенциометра к контакту GND, а другой — к контакту 5V платы Arduino. Потенциометр будет управлять контрастностью ЖК-дисплея.

5. Установите датчик наклона на макетную плату и подключите одну его ножку через резистор с сопротивлением 1 кОм к контакту б платы Arduino, а другую ножку — к контакту GND.

6. Подключите шины макетной платы к контактам 5V и GND платы Arduino для обеспечения питания.
7. Убедитесь, что ваша цепь соответствует схеме, показанной на рис. 14.3, и загрузите в память Arduino код скетча, приведенный в разделе «Скетч» далее в этом проекте.

Скетч
Код в этом проекте довольно прост. Когда вы включаете Arduino, на ЖК-дисплее появляется текст Ask a Question. Встряхивание датчика наклона приводит к выполнению кода скетча, и плата Arduino выбирает случайный ответ из восьми возможных (case в диапазоне от 0 до 7).
Ниже показана строка, в которой это происходит:
reply = random(8);
Чтобы добавить свои собственные ответы, измените значение 8 на количество возможных ответов, затем добавьте собственные ответы в том же формате, как остальные:
case 8: led.print("Не сомневайся"); break;
Ниже показан полный код скетча:
#include <LiquidCrystal.h> LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // Контакты, к которым подключен ЖК-дисплей const int switchPin = 6; // Контакт, к которому подключен датчик int switchState = 0; int prevSwitchState = 0; int reply; void setup() { lcd.begin(16, 2); pinMode(switchPin, INPUT); // Перевод контакта датчика в режим ввода lcd.print("ГАДАЛКА"); // Это выводится в строке 1 lcd.setCursor(0, 1); lcd.print("Задайте вопрос"); // Это выводится в строке 2 } void loop() { switchState = digitalRead(switchPin); // Считывание значения с контакта датчика if (switchState != prevSwitchState) { if (switchState == LOW) { // Если цепь разорвана, дать ответ reply = random(8); // Повторить варианты с 1 по 8 ниже lcd.clear(); lcd.setCursor(0, 0); lcd.print("Ответ таков: "); // Это выводится на дисплей lcd.setCursor(0, 1); switch (reply) { // Ответом будет одним из следующих вариантов case 0: lcd.print("Да"); break; case 1: lcd.print("Возможно"); break; case 2: lcd.print("Определенно"); break; case 3: lcd.print("Не говори глупостей"); break; case 4: lcd.print("Конечно"); break; case 5: lcd.print("Спроси еще раз"); break; case 6: lcd.print("Сомнительно"); break; case 7: lcd.print("Нет"); break; } } } prevSwitchState = switchState; // Обнуление значения датчика }
Теги: