Оглавление:
2025 Автор: John Day | [email protected]. Последнее изменение: 2025-01-23 15:05
Но подождите … Это еще не все!
Шаг 1. Введение
Что такое APEX?
APEX - это умное (не говоря уже о симпатичном) устройство для мониторинга растений. Просто подключите его к любому растению, и он покажет уровень «счастья» растения! Это отличное напоминание о том, что нужно поливать растения, если у вас есть дурная привычка забывать их поливать.
Как это работает?
Магия. Просто шучу! APEX использует Arduino, прикрепленный к датчику влажности, который вставляется в почву растения. Этот датчик считывает влажность почвы, а затем Arduino вычисляет, какое лицо отображать.
Но почему?
Почему нет?
Шаг 2: Сбор деталей и инструментов
Давайте займемся этим! Для этого руководства вам понадобится немало деталей и инструментов. К счастью для вас, все они перечислены ниже:
В духе конкурса микроконтроллеров этот проект полностью сделан из деталей, купленных на Amazon! (не спонсируется)
Список деталей:
- Ардуино Уно
- Светодиодный экран 8x8
- Емкостной сенсорный датчик
- Датчик влажности
- Разъем аккумулятора 9 В
- Батарея 9В
Список инструментов:
- Провод калибра 22
- Электроизоляционная лента
- Инструмент для зачистки проводов
- Паяльник
- Демонтажный насос
После того, как вы собрали все необходимое оборудование, самое время настроить программное обеспечение Arduino!
Шаг 3: Установка IDE Arduino
Чтобы этот проект заработал, нам нужно иметь возможность программировать Arduino. Для этого необходимо загрузить и установить интегрированную среду разработки Arduino (IDE) на ваш компьютер. Это довольно простое объяснение, но я проведу вас через весь процесс:
1. Посетите веб-сайт Arduino.
2. Перейдите на страницу загрузок («Программное обеспечение»> «Загрузки»).
3. Щелкните ссылку "Загрузить" для своей операционной системы.
Боковое примечание: программа будет работать на Windows, Mac и Linux.
4. Установка в Windows
- Дважды щелкните загруженный файл, чтобы запустить его.
- Нажмите «Согласен», чтобы принять лицензию.
- Следуйте остальным подсказкам
- Программа должна быть установлена!
(Обязательно посмотрите скриншоты, если заблудитесь)
5. Установка на Mac
- Нажмите на загруженный файл
- Выберите "Открыть"
- Программа автоматически установится и запустится!
(Обязательно посмотрите скриншоты, если запутались)
6. Вот и все
И вы сделали! Теперь у вас есть IDE Arduino, загруженная в вашу систему!
Шаг 4: Код
Этот шаг касается кода. Это довольно короткая программа, поэтому я буду повторять ее вместе с вами и объяснять, как она работает. Сначала краткий обзор, затем подробное объяснение и, наконец, как перенести это на Arduino!
Краткий обзор
Для тех из вас, кто не интересуется подробным объяснением кода, я предоставляю сегмент TL; DR! Вот основное объяснение. Arduino получает значения от датчика влажности каждые несколько секунд. Эта информация затем используется для расчета и отображения определенного лица! В конце также есть небольшой код, который позволяет емкостной сенсорной кнопке включать и выключать дисплей. Довольно просто, правда?
Нитти Гритти
Эта часть руководства предназначена для тех, кто очень заинтересован в том, как работает вся программа, строка за строкой. Я предоставлю скриншоты выше, чтобы помочь вам понять, о чем я говорю, а также включу некоторые строки кода в это описание.
Эта программа разделена на пять разделов:
- Включение библиотек и создание переменных
- Функция настройки
- Функции для мимики
- Функция записи Arduino по матрице
- Функция цикла
Включение библиотек и создание переменных:
Первый раздел этого кода посвящен переменным и библиотекам, которые мы будем использовать.
#include "LedControlMS.h"
#define TouchSensor 7 LedControl lc = LedControl (12, 11, 10, 1); int sensorPin = A5; int sensorValue = 0; bool start = false; bool on = true; логическое нажатие = LOW;
Первая строка включает библиотеку под названием LedControlMS. Эта библиотека необходима для отправки значений на светодиодный дисплей. Следующая строка - это оператор определения, который устанавливает контакт сенсорного датчика на 7. После этого у нас есть еще три переменных, которые определяют контакты для светодиодного дисплея, датчика влажности и его значения. Последние три строки являются логическими, которые регулируют состояние сенсорной кнопки и дисплея. После этого у нас есть байтовые значения:
байт smile [4] = {B00000100, B00110010, B01100100, B01100000}; байтовый сюрприз [4] = {B00001110, B00001010, B01101110, B10010000}; byte meh [4] = {B00000100, B00100100, B00100100, B00100000}; byte sad [4] = {B00000010, B01100100, B00110010, B00110000}; байт мертв [6] = {B00001010, B00100100, B00101010, B00100000, B01100000, B01101010}; байтовая ошибка [8] = {B00111100, B01000010, B10100001, B10010001, B10001001, B10000101, B01000010, B00111100}; // Байт Злых лиц esmile [4] = {B00000010, B00101010, B01000100, B01000000}; byte elaugh [4] = {B00000010, B00101010, B01100100, B01100000}; byte eplain [4] = {B00000010, B00101010, B00100100, B00100000}; байтовое отверстие [4] = {B00000001, B01101001, B01100010, B01100000}; byte etalk [4] = {B00000001, B00101001, B01100010, B01100000};
Эти значения представляют все грани APEX. Каждый байт представляет собой массив, содержащий несколько битов, которые определяют состояние каждого пикселя в данной строке. «1» и «0» обозначают Вкл. / Выкл. Соответственно.
Функция настройки:
Переходя к следующему разделу, у нас есть функция настройки.
void setup () {// Последовательный вывод MS Serial.begin (9600);
pinMode (TouchSensor, ВХОД);
// Настройка светодиодной матрицы lc.shutdown (0, false); lc.setIntensity (0, 4); lc.clearDisplay (0); }
Название очень хорошо это объясняет. Здесь мы «настраиваем» сенсорный датчик и дисплей. Первые две строки начинают наш последовательный вывод (используемый для отладки). Третья строка устанавливает контакт датчика касания как вход, а последние четыре строки запускают дисплей.
Функции для мимики:
Это, наверное, самый длинный раздел из всех, но все он очень простой и повторяющийся.
void broken () {lc.setRow (0, 0, ошибка [0]); lc.setRow (0, 1, ошибка [1]); lc.setRow (0, 2, ошибка [2]); lc.setRow (0, 3, ошибка [3]); lc.setRow (0, 4, ошибка [4]); lc.setRow (0, 5, ошибка [5]); lc.setRow (0, 6, ошибка [6]); lc.setRow (0, 7, ошибка [7]); }
void happy () {
lc.setRow (0, 0, смайл [0]); lc.setRow (0, 1, смайл [1]); lc.setRow (0, 2, смайл [2]); lc.setRow (0, 3, смайл [3]); lc.setRow (0, 4, смайл [3]); lc.setRow (0, 5, смайл [2]); lc.setRow (0, 6, смайл [1]); lc.setRow (0, 7, смайл [0]); }
void plain () {
lc.setRow (0, 0, meh [0]); lc.setRow (0, 1, meh [1]); lc.setRow (0, 2, meh [2]); lc.setRow (0, 3, meh [3]); lc.setRow (0, 4, meh [3]); lc.setRow (0, 5, meh [2]); lc.setRow (0, 6, meh [1]); lc.setRow (0, 7, meh [0]); }
void удивлен () {
lc.setRow (0, 0, сюрприз [0]); lc.setRow (0, 1, сюрприз [1]); lc.setRow (0, 2, сюрприз [2]); lc.setRow (0, 3, сюрприз [3]); lc.setRow (0, 4, сюрприз [3]); lc.setRow (0, 5, сюрприз [2]); lc.setRow (0, 6, сюрприз [1]); lc.setRow (0, 7, сюрприз [0]); }
void dying () {
lc.setRow (0, 0, мертвый [0]); lc.setRow (0, 1, мертв [1]); lc.setRow (0, 2, мертвый [2]); lc.setRow (0, 3, мертвый [3]); lc.setRow (0, 4, мертвый [4]); lc.setRow (0, 5, мертв [5]); lc.setRow (0, 6, мертвый [1]); lc.setRow (0, 7, мертвый [0]); }
void crying () {
lc.setRow (0, 0, сад [0]); lc.setRow (0, 1, грустный [1]); lc.setRow (0, 2, грустный [2]); lc.setRow (0, 3, грустный [3]); lc.setRow (0, 4, грустный [3]); lc.setRow (0, 5, грустный [2]); lc.setRow (0, 6, грустный [1]); lc.setRow (0, 7, sad [0]); }
void evilsmile () {
lc.setRow (0, 0, esmile [0]); lc.setRow (0, 1, esmile [1]); lc.setRow (0, 2, esmile [2]); lc.setRow (0, 3, esmile [3]); lc.setRow (0, 4, esmile [3]); lc.setRow (0, 5, esmile [2]); lc.setRow (0, 6, esmile [1]); lc.setRow (0, 7, esmile [0]); }
void evillaugh () {
lc.setRow (0, 0, elaugh [0]); lc.setRow (0, 1, elaugh [1]); lc.setRow (0, 2, elaugh [2]); lc.setRow (0, 3, elaugh [3]); lc.setRow (0, 4, elaugh [3]); lc.setRow (0, 5, elaugh [2]); lc.setRow (0, 6, elaugh [1]); lc.setRow (0, 7, elaugh [0]); }
void evilplain () {
lc.setRow (0, 0, eplain [0]); lc.setRow (0, 1, eplain [1]); lc.setRow (0, 2, eplain [2]); lc.setRow (0, 3, eplain [3]); lc.setRow (0, 4, eplain [3]); lc.setRow (0, 5, eplain [2]); lc.setRow (0, 6, eplain [1]); lc.setRow (0, 7, eplain [0]); }
void evilyell () {
lc.setRow (0, 0, eyell [0]); lc.setRow (0, 1, eyell [1]); lc.setRow (0, 2, eyell [2]); lc.setRow (0, 3, eyell [3]); lc.setRow (0, 4, eyell [3]); lc.setRow (0, 5, eyell [2]); lc.setRow (0, 6, eyell [1]); lc.setRow (0, 7, eyell [0]); }
void eviltalk () {
lc.setRow (0, 0, etalk [0]); lc.setRow (0, 1, etalk [1]); lc.setRow (0, 2, etalk [2]); lc.setRow (0, 3, etalk [3]); lc.setRow (0, 4, etalk [3]); lc.setRow (0, 5, etalk [2]); lc.setRow (0, 6, etalk [1]); lc.setRow (0, 7, etalk [0]); }
Эти функции используются для определения каждого выражения лица с использованием наших байтовых значений из первого раздела. Каждая строка определяет позицию x и байтовые значения, а затем применяет значения к этому столбцу. Некоторым функциям требуется больше строк, потому что для отображения значений этого лица используется больше строк. Каждое лицо симметрично, поэтому повторяем линии.
Функция WriteArduinoOnMatrix:
Четвертый раздел используется для расчета и записи правильных лиц на светодиодном дисплее. Он состоит из серии операторов else if, которые проверяют значения воды, а затем устанавливают отображение, вызывая различные функции из предыдущего раздела.
void writeArduinoOnMatrix () {if (sensorValue> 0 && sensorValue 30 && sensorValue 100 && sensorValue 200 && sensorValue 400 && sensorValue 650 && sensorValue <= 800) {удивлен (); } еще {сломанный (); }}
Вы можете заметить, что мы добавили «ломаные» грани на тот случай, если датчик выйдет за пределы рабочего диапазона. Это предотвращает появление некоторых странных нулевых ошибок и дает нам лучшее визуальное представление о том, что происходит в коде.
Функция цикла:
И последнее, но не менее важное - это функция цикла. Этот код делает именно то, что написано в его названии, он зацикливается! Хотя в этой функции довольно много строк, на самом деле она довольно проста. Код сначала считывает состояние кнопки и видит, включен ли дисплей. Если он обнаружит, что это правда, он вызовет функцию WriteArduinoOnMatrix, которая затем нарисует лицо на APEX. Поскольку эта функция зацикливается, она будет обновлять отображение так часто, как мы хотим. Эта задержка определяется переменной delaytime.
void loop () {если (началось == истина) {delaytime = 3000; } // Нажата кнопка чтения = digitalRead (TouchSensor);
if (нажато) {
если (on == true) {lc.clearDisplay (0); on = false; delay (время задержки); } else {on = true; delay (время задержки); }} sensorValue = analogRead (sensorPin); delay (время задержки); if (on == true) {// Рисуем лица writeArduinoOnMatrix (); }
началось = истина;
}
Вот и все, что касается кода. Надеюсь, теперь вы лучше понимаете, как все это работает, и можете использовать эти знания, чтобы приступить к настройке под свой проект!
Отправка кода в Arduino
Теперь, когда мы рассмотрели весь код, пришло время перенести его на Arduino! К счастью, в среде IDE это очень просто. Все, что вам нужно сделать, это подключить Arduino к компьютеру с помощью USB-кабеля, а затем просто щелкнуть стрелку вправо в верхнем левом углу среды IDE. Позвольте коду нажать, и вы должны увидеть сообщение об успешном выполнении в нижней части программы, если вы все сделали правильно!
Шаг 5: Принципиальная схема
Принципиальная схема, как и код, не слишком сложна. Он состоит только из трех датчиков и Arduino, поэтому я расскажу вам распиновку для каждого, и если вам понадобится другая помощь, просто обратитесь к диаграмме выше.
Светодиодный дисплей:
- VCC -> 5 В
- GRD -> GRD
- DIN -> контакт 12
- CS -> контакт 10
- CLK -> контакт 11
Датчик влажности:
- Положительный -> 5 В
- Отрицательный -> GRD
- Сигнал -> A5
Емкостной сенсорный датчик:
- VCC -> 5 В
- GRD -> GRD
- SIG -> 7
Не так уж сложно, правда? Если у вас возникли проблемы с этой распиновкой, обязательно обратитесь к видео ниже, где я расскажу, как подключить его.
Шаг 6: Собираем все вместе
Сложно объяснить в тексте, как все это сочетается друг с другом, поэтому я определенно рекомендую посмотреть видео для этой части. Я не собираюсь точно объяснять, как я собрал свои, это слишком сложно. Но чтобы объяснить ситуацию расплывчато, я припаял провода и намотал их на заднюю часть платы. Затем я расположил датчики и скрепил их изолентой. Наконец, я протестировал его с батареей 9 В, а затем, когда я понял, что она работает, поместил батарею на заднюю часть и тоже приклеил ее. Как я уже говорил ранее, ПОСМОТРЕТЬ ВИДЕО ДЛЯ ЭТОГО ШАГА, в нем есть приятный небольшой паяльный сегмент, который ускорен и поможет вам правильно намотать провода. Если вы заблудились, можете поставить его на паузу или проиграть на половинной скорости.
Поздравляю! Если все прошло успешно, теперь у вас должен быть полностью функциональный блок APEX!
Чтобы проверить свой агрегат, найдите орошенное растение и включите его! Вы должны обнаружить, что он либо рад, либо удивлен, а это значит, что он должен работать !!! Отличная работа по завершению проекта!
Шаг 7: Заключение
И в этом вся инструкция! Спасибо, что ознакомились с проектом! Оставляйте любые вопросы и комментарии ниже и не забудьте подписаться на Urban Farming Guys, чтобы получить больше интересных уроков, подобных этому! Мы хотели бы услышать о том, как прошла ваша сборка APEX, и мы очень ценим фотографии! Еще раз спасибо, что заглянули, хорошего дня!
(Это руководство было вдохновлено более старым проектом Plant Emoji!)
P. S. Эта инструкция участвует в конкурсе микроконтроллеров, поэтому не забудьте проголосовать за нас! Мы очень ценим это:)
P. P. S. Давайте добавим APEX в журнал Make Magazine! Проголосуйте здесь! Спасибо:)
Рекомендуемые:
Выражатель эмоций: 4 шага
Выражатель эмоций: Введение: Эта машина выражает эмоции, она работает, помогая людям, которые не умеют выражать свои чувства, выражать свои чувства. Эта машина может помочь людям, которые нуждаются в помощи или нуждаются в ком-то, кто выслушает их жалобы на то, что
ОСНОВНОЕ РУКОВОДСТВО ПО ЯЗЫКУ РАЗМЕТКИ ИСКУССТВЕННОГО ИНТЕЛЛЕКТА (AIML) ЧЕРЕЗ NOTEPAD: 8 шагов
ОСНОВНОЕ РУКОВОДСТВО ПО ЯЗЫКУ РАЗМЕТКИ ИСКУССТВЕННОГО ИНТЕЛЛЕКТА (AIML) ЧЕРЕЗ NOTEPAD: Язык разметки искусственного интеллекта (AIML) - это язык программирования, который является спецификацией расширяемого языка разметки (XML), используемой чат-ботами, верботами, пандоработами, суперботами и другими говорящими роботами. Он был разработан доктором Ричардом Уоллесом и
Как сделать реалистичную вывеску из искусственного неона - суперяркая !: 8 шагов (с картинками)
Как сделать реалистичную неоновую вывеску - супер яркую !: Привет, ребята, это мой совершенно новый, полностью оригинальный метод создания симулированной неоновой вывески из светодиодов, которая выглядит супер реалистично. Это действительно похоже на трубку из дутого стекла, со всем разнообразием света, который приходит с преломлением через стекло с разной
Полив растения с помощью Arduino: 5 шагов (с изображениями)
Полив растения с помощью Arduino: у вас есть комнатное растение, которое вам нравится, но вы забываете его слишком часто? Это руководство объяснит, как сделать систему полива растений на базе Arduino и как придать вашему растению немного больше индивидуальности. После того, как вы выполните эту инструкцию, т
Как сделать меняющий цвет шарф из искусственного меха с подсветкой: 11 шагов (с рисунками)
Как сделать шарф из искусственного меха с подсветкой, меняющий цвет: Вот несколько советов по созданию нечеткого шарфа с подсветкой и светодиодами, меняющими цвет, с помощью относительно простого процесса, который подходит для людей с ограниченным опытом шитья или пайки. Линза каждого из этих светодиодов RGB содержит собственный красный