Оглавление:
- Запасы
- Шаг 1: Сборка схемы
- Шаг 2: Настройка RaspberryPi
- Шаг 3. Настройка серверной части
- Шаг 4: Настройка внешнего интерфейса
- Шаг 5: Импорт базы данных для нашего проекта
- Шаг 6: Запуск нашего проекта
- Шаг 7: Дело
- Шаг 8: полюбуйтесь конечным продуктом
- Шаг 9: проблемы
Видео: Бесконтактный водный фонтан: 9 ступеней (с изображениями)
2024 Автор: John Day | [email protected]. Последнее изменение: 2024-01-30 11:48
В конце моего первого года обучения в MCT мне было поручено создать проект, который содержал бы все навыки, которые я приобрел на курсах в течение года.
Я искал проект, который бы соответствовал всем требованиям, установленным моими учителями, и в то же время мне было бы интересно делать. Когда я искал тему, я не мог не почувствовать вдохновение от Covid-19 (это было прямо перед тем, как он стал всемирной вспышкой). Я выбрал бесконтактный фонтан / дозатор для воды, поскольку он предлагает способ борьбы с вирусом. пить воду, не касаясь некоторых кнопок до того, как вытечет вода.
В этом проекте используется датчик расстояния, чтобы определить, была ли чашка или стакан помещена под выход воды. Затем фонтан будет выдавать воду в течение 60 секунд (100 мл / мин). Это сделано для того, чтобы сделать его более последовательным, потому что определение того, было ли оторвано стекло, оказалось слишком сложной / медленной задачей, поэтому был установлен таймер. После того, как ваш стакан был наполнен 100 мл воды, вы можете подождать 5 секунд, и если стакан все еще находится перед датчиком расстояния, он продолжит наполнение в другой раз (это означает, что также есть тайм-аут в 5 секунд между наполнением двух разных Предметы).
Запасы
Компоненты
- 1x RaspberryPi (я использовал 4-ю версию, но старые версии тоже могут работать) - 1x транзистор S8050 или 1x транзистор PN2222 также могут работать- 1x фоторезистор- 1x HC-SR04 (ультразвуковой датчик расстояния) - 1x RFID-RC522- 3x разных цвета светодиоды (синий, желтый, красный) - 1x LCD1602- 1x активный зуммер- 1x PCF8574- 1x MCP3008- 1x водяной насос (использовался перистальтический насос 12В, ссылка на этот элемент)
- 1x источник питания постоянного тока (12В, 600 мАч) - 1x блок питания с 3 точками - 3x макетные платы (вы, вероятно, могли бы использовать меньше) - T-cobbler для контактов RaspberryPi GPIO - T-cobbler кабель (для подключения между pi и cobbler)
Используемые материалы и инструменты
- дрель со следующими сверлами:
- 4мм (для просверливания отверстий под саморезы) - 15мм (для просверливания отверстий под датчик расстояния)
- любая отвертка - 30 шурупов длиной 45 мм - 6 шурупов по 20 мм - 2 петли для двери - пластина из МДФ примерно 130 см на 80 см - пара напильников
Шаг 1: Сборка схемы
Для схемы у нас есть 2 датчика, датчик расстояния и фоторезистор. Датчик расстояния используется для определения того, была ли чашка помещена в зону действия фонтана, и, при желании, я добавил фоторезистор, он используется для определения того, открывался ли корпус кем-либо, кто не должен его открывать. Вдобавок к этому у нас есть считыватель RFID, который можно использовать для аутентификации механика, которому нужно открыть корпус, чтобы наполнить резервуар для воды или для некоторых других механических проблем.
Для активных элементов у нас есть ЖК-дисплей 1602, активный зуммер и перистальтический насос, ЖК-дисплей используется для отображения состояния, например, открыт ли корпус или работает насос, а также отображается IP-адрес устройства, зуммер издавал тревожный звук, когда кейс открывали без чьего-либо разрешения.
Я добавил макет и схематические изображения схемы ниже.
Шаг 2: Настройка RaspberryPi
Чтобы настроить наш RaspberryPi, мы загрузим программное обеспечение для создания образов с сайта Raspberry, с его помощью вы можете загрузить нужную версию Raspbian и создать образ своей SDCARD для вас. После того, как этот инструмент выполнит свою работу, вы можете открыть SDCARD в проводнике Windows, и вы увидите загрузочный раздел вашего RaspberryPi. Здесь мы найдем файл под названием cmdline.txt (не открывайте этот файл в блокноте, открывайте его в Notepad ++ или любой другой IDE). Мы добавим ip = 169.254.10.1 в конец этого файла, чтобы убедиться, что мы можем подключиться к нашему устройству через Ethernet (убедитесь, что вы не добавляете никаких ENTER в конце файла, иначе у вас возникнут проблемы).
Теперь вы можете вставить SDCARD в RaspberryPi и загрузить его, подключить Pi к компьютеру и использовать Putty для подключения к Pi через SSH. Я использую следующую команду для подключения к моему Pi вместо Putty. «ssh [email protected]» это может быть тайм-аут, так что наберитесь терпения и дождитесь загрузки Pi. После запроса пароля мы введем пароль по умолчанию «малина». Обязательно измените этот пароль после входа в систему, чтобы предотвратить доступ к Raspberry Pi со злых умыслов.
Теперь мы настроим наш Pi для обеспечения необходимой функциональности для нашего кода. Используйте «sudo raspi-config», чтобы открыть меню конфигурации, и здесь мы перейдем к параметрам взаимодействия.
Здесь мы включим следующие параметры: - SPI- I2C
Следуйте этому руководству, чтобы настроить беспроводное подключение к Интернету на вашем Pi, после того, как вы успешно это сделаете, мы сможем приступить к установке наших необходимых пакетов.
Пакеты: (выполните команды в указанном здесь порядке)
Следующее, чтобы получить последние обновления для нашего Pi- sudo apt update && apt upgrade -y
Установите наш сервер MySQL и веб-сервер - sudo apt install mariadb-server apache2
Я буду использовать MySQL Workbench для настройки базы данных позже в этом руководстве, если вы не используете это и предпочитаете phpmyadmin, вы можете установить его с помощью следующей команды, вы можете использовать любой другой клиент MySQL, а также до тех пор, пока вы можно правильно импортировать базу данных. - sudo apt install phpmyadmin
После того, как вы выполнили все вышеперечисленное, нам нужно создать пользователя для нашей базы данных. Используйте sudo mysql -u root для входа на ваш сервер MySQL, здесь мы создадим пользователя с именем db_admin с соответствующим паролем, сохраните этот пароль указан где-то для дальнейшего использования в инструкциях. ПРЕДОСТАВЛЯЙТЕ ВСЕ ПРИВИЛЕГИИ НА *. * "db_admin" @ "%", ИДЕНТИФИЦИРОВАННОМ "yourPasswordHere" С ОПЦИЕЙ GRANT;
Используйте команду «\ q» для выхода из терминала MySQL.
Пакеты Python: нам все еще нужно установить некоторые пакеты Python, прежде чем продолжить, выполните приведенную ниже команду, чтобы убедиться, что все есть для безупречного опыта.
sudo pip3 установить Flask Flask-Cors Flask-SocketIO gevent gevent-websocket greenlet spi SPI-Pyspidev
А также следующие MySQL подключают пакеты pythonudo apt install python3-mysql.connector -y
Если все прошло хорошо, вы можете теперь посетить свой Pi в своем веб-браузере по следующему адресу
Шаг 3. Настройка серверной части
Здесь я собираюсь объяснить, как вы можете настроить бэкэнд самостоятельно, сначала загрузите файл rar снизу, распакуйте его во временный каталог. Подключитесь к RaspberryPi с помощью FileZilla или WinSCP со следующими учетными данными:
IP: 169.254.10.1 Пользователь: pi Пароль: raspberry (если вы меняли пароль, сделайте это и здесь)
Затем вы можете перейти к передаче файлов, которые вы не заархивировали, в любой каталог, который вы хотите в домашнем каталоге пользователя pi. Для простоты мы предполагаем, что в этой настройке мы загрузили все наши файлы в каталог документов.
Держите свою программу FTP открытой для следующего шага!
Теперь снова откройте командную строку с помощью вашего SSH-соединения, потому что нам нужно будет внести некоторые изменения в веб-сервер, чтобы интерфейс мог взаимодействовать с серверной частью. Мы собираемся открыть файл конфигурации Apache2 по умолчанию и немного его изменить: sudo нано /etc/apache2/sites-available/000-default.conf
Добавьте следующие строки под DocumentRoot в только что открытый файл конфигурации: ProxyPass / api / https://127.0.0.1:5000/api/ProxyPassReverse / api /
Вы можете посмотреть на прикрепленное изображение для примера.
Шаг 4: Настройка внешнего интерфейса
Перед передачей наших файлов нам нужно будет что-то сделать, прежде чем мы сможем начать передачу наших файлов внешнего интерфейса. Откройте командную строку с помощью SSH-соединения, которое вы сделали ранее, и используйте следующую команду, чтобы переключиться на пользователя root нашего RaspberryPi: "sudo su -"
После этого мы можем изменить пароль нашего пользователя root с помощью следующей команды: "passwd". Это попросит вас ввести новый пароль, после того, как вы это сделаете, вы можете вернуться к своей программе FTP и войти в систему с вашими учетными данными root:
IP: 169.254.10.1 Пользователь: root Пароль:
Загрузите файл rar снизу и распакуйте его во временной папке, вы можете переместить эти файлы на свой RaspberryPi в следующий каталог / var / www / html /, после того, как вы это сделаете, вы можете посетить веб-интерфейс по адресу http: / /169.254.10.1, вы пока не можете взаимодействовать, потому что серверная часть еще не запущена. Позже в этом руководстве я покажу вам, как это сделать.
Шаг 5: Импорт базы данных для нашего проекта
Откройте свою любимую программу управления сервером MySQL и подключитесь к Raspberry Pi с учетными данными, которые мы создали на шаге 2.
Загрузите дамп базы данных снизу и импортируйте его, как обычно, в рабочей среде MySQL выберите Файл> Открыть SQL-скрипт и выберите дамп базы данных, который вы загрузили. Затем нажмите CTRL + SHIFT + ENTER, и SQL-скрипт должен быть запущен, а структура для базы данных должна быть создана.
Я добавил учетные данные, которые использовал для своего RaspberryPi, в качестве примера ниже, а также несколько изображений структуры базы данных, вы можете взглянуть на нее и попытаться получить общее представление о том, как все работает.
Шаг 6: Запуск нашего проекта
Прежде чем мы сможем запустить наш проект, нам нужно изменить учетные данные базы данных в файле config.py, если вы следовали инструкциям точно так, как сказано в этом руководстве, вы можете найти их в /home/pi/Documents/Backend/src/config.py здесь вам нужно изменить учетные данные переменной db_config, чтобы они соответствовали тем, которые мы создали ранее для нашей базы данных. Я добавил пример того, что вы увидите в этом файле ниже.
После этого мы добавим файл.service, этот файл обеспечит запуск нашего проекта при запуске RaspberryPi, убедитесь, что вы изменили каталог, в котором вы установили файлы backend. Используйте следующую команду, чтобы создать служебный файл: sudo nano /etc/systemd/system/dispenser.service Это создаст служебный файл и скопирует и вставит приведенный ниже код в этот файл.
[Единица] Описание = Диспенсер для водыAfter = mysql.service
[Сервис] Тип = simpleRestart = alwaysRestartSec = 1User = piExecStart = / usr / bin / python3 /home/pi/Documents/Backend/index.py
[Установить] WantedBy = multi-user.target
Измените строку, где написано /home/pi/Documents/Backend/index.py, туда, где вы установили свои серверные файлы, если вы не сделаете это правильно, проект не будет запущен правильно! Я добавлю пример файла ниже.
После того, как вы это сделаете и выйдете из текстового редактора, мы можем включить службу с помощью следующих команд: - sudo systemctl daemon-reload- sudo systemctl enable dispenser- sudo systemctl start dispenser
И в качестве дополнения мы можем запустить: sudo systemctl status dispenser Это покажет некоторую информацию о нашем сервисе, активен он или нет, …
Шаг 7: Дело
Поздравляем, мы почти закончили, я добавлю несколько изображений, которые точно покажут размеры, которые я использовал для своего проекта, я использовал плиты МДФ толщиной 18 мм, вы можете использовать другую толщину. Мой корпус можно использовать в качестве ориентира для дизайна вашего, или вы можете воссоздать то, что я сделал. (Если вы используете МДФ другой толщины, мои рисунки больше не позволят вам создать мой дизайн, обязательно адаптируйте его!) Сделанные мной панели: - 2 панели 32 см на 42 см (боковые панели) - 1 панель 24 см на 32 см (нижняя пластина) - 2 панели 16 см на 24 см (передняя панель, где остается ЖК-дисплей, и соседняя пластина) - 1 панель размером 28 см на 24 см (средняя пластина, если смотреть спереди) - 1 панель 30 см на 24 см (верхняя пластина)
Шаг 8: полюбуйтесь конечным продуктом
Вы достигли конца и теперь, надеюсь, сумели воплотить все в реальность. Если вы просто случайный прохожий, тоже добро пожаловать, благодарю вас за то, что дочитали до последнего шага!
Я потратил много крови, пота и слез на этот проект, поэтому буду признателен, если вы оставите комментарий, любая критика по поводу его улучшения приветствуется!
Шаг 9: проблемы
Я бы поместил проект в его текущее состояние в качестве рабочего прототипа, в котором можно увидеть гораздо больше улучшений.
Кодовая база бэкэнда структурирована таким образом, что можно идеально создать отношение «главный-подчиненный», где один фонтан будет действовать как главный интерфейс, а все другие фонтаны будут передавать данные и изменения через REST api главного. В коде также есть остатки системы токенов API, поскольку она должна была быть реализована, но позже сокращена из-за нехватки времени.
Я загрузил свой код на свой сервер Gitlab, и там вы можете просмотреть код целиком:
Рекомендуемые:
Бесконтактный MIDI-контроллер: 6 шагов (с изображениями)
Бесконтактный Midi Controller: В настоящее время в моде бесконтактный доступ. Я создал простой MIDI-контроллер, используя Arduino Pro micro и плату некоторых ИК-датчиков приближения, которая имеет встроенный компаратор, это должно быть доступно довольно легко и дешево. Этот проект может
Водный шутер с активированным ударом: 5 шагов
Водный шутер с активированным ударом: если вы цельный фанат. Вы должны знать Дзимбэя. Дзимбэй - персонаж из серии One Piece, созданной Эйитиро Одой. Дзимбэй - исключительно сильный мастер Каратэ Рыболюдей. Одна из его техник - Кулак пяти тысяч кирпичей. Это
Водный робот: роботизированная лодка Arduino: 9 шагов (с изображениями)
Waterbot: Arduino Robot Boat: Waterbot - это роботизированная лодка Arduino. Его можно запрограммировать с нуля с помощью инструментов Arduino или просто построить и управлять им с помощью приложения LittleBots. В настоящее время он находится в прямом эфире на Kickstarter. На Slant в течение последних двух лет мы разрабатывали и
Умный водный контроллер: 8 шагов
Smart Water Controller: Здравствуйте, это мой первый проект на Instructables. Любые вопросы или предложения, комментарии, пожалуйста, сообщите мне. Я создал узел IOT для своего резервуара с холодной водой на крыше. Это дало мне некоторую информацию, например: 1. Уровень воды в резервуаре 2. Температура, барометрическое давление
Фонтан: 5 ступеней
Фонтан: в этом руководстве рассказывается о том, как сделать фонтан для воды из очень небольшого количества материалов, большинство из которых можно найти в доме. Вам понадобятся: Водяной насос Аккумулятор на 9 Вольт Разъем аккумулятора Фольга Картон Лента Клей Ножницы Какой-то пластиковый контейнер с