В этом проекте мы создадим электронную версию классического атрибута любой уважающей себя гадалки - шара судьбы =)
Нам понадобится
Компоненты
- Плата Arduino
- Макетная плата
- Перемычки
- ЖК-дисплей размером 16x2
- Датчик наклона
- Потенциометр с сопротивлением 50 кОм
- Резистор с сопротивлением 1 кОм
Библиотеки
- LiquidCrystal

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

3. Не забудьте использовать шины макетной платы, чтобы создать несколько подключений к контакту GND платы Arduino, как показано на рис. 14.2.
4. Центральный контакт потенциометра должен быть подключен к контакту 3 ЖК-дисплея (VO). Теперь подключите один из внешних контактов потенциометра к контакту GND, а другой — к контакту 5V платы Arduino. Потенциометр будет управлять контрастностью ЖК-дисплея.
Рисунок 14.2: ЖК-дисплей подключен к плате Arduino
5. Установите датчик наклона на макетную плату и подключите одну его ножку через резистор с сопротивлением 1 кОм к контакту б платы Arduino, а другую ножку — к контакту GND.
6. Подключите шины макетной платы к контактам 5V и GND платы Arduino для обеспечения питания.
7. Убедитесь, что ваша цепь соответствует схеме, показанной на рис. 14.3, и загрузите в память Arduino код скетча, приведенный в разделе «Скетч» далее в этом проекте.
Рисунок 14.3: Принципиальная схема цепи предсказателя судьбы
Скетч
Код в этом проекте довольно прост. Когда вы включаете 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; // Обнуление значения датчика
}
Теги: