Оглавление:

Mood Speaker - мощный динамик для воспроизведения музыки с настроением в зависимости от температуры окружающей среды: 9 шагов
Mood Speaker - мощный динамик для воспроизведения музыки с настроением в зависимости от температуры окружающей среды: 9 шагов

Видео: Mood Speaker - мощный динамик для воспроизведения музыки с настроением в зависимости от температуры окружающей среды: 9 шагов

Видео: Mood Speaker - мощный динамик для воспроизведения музыки с настроением в зависимости от температуры окружающей среды: 9 шагов
Видео: Космическая Гонка: Почему больше НЕ ЛЕТАЮТ на ЛУНУ? Подробная История! 2024, Июль
Anonim
Mood Speaker - мощный динамик для воспроизведения музыки с настроением в зависимости от температуры окружающей среды
Mood Speaker - мощный динамик для воспроизведения музыки с настроением в зависимости от температуры окружающей среды

Привет!

Для своего школьного проекта в MCT Howest Kortrijk я сделал динамик Mood Speaker, это умный динамик Bluetooth с различными датчиками, ЖК-дисплеем и светодиодной лентой WS2812b в комплекте. Динамик воспроизводит фоновую музыку в зависимости от температуры, но также может использоваться как обычный Bluetooth оратор. Все работает на Raspberry Pi (база данных, веб-сервер, бэкэнд).

Это руководство представляет собой пошаговый процесс того, как я реализовал этот проект за 3 недели. Так что, если вы хотите воссоздать мой проект, следуйте руководству

Это руководство - мое первое, что я написал, поэтому, если есть какие-либо вопросы, я постараюсь ответить на них как можно быстрее!

Мой GitHub:

Шаг 1. Расходные материалы

Raspberry Pi 3B и SD-карта 16 ГБ

Весь мой проект работает на моем Raspberry Pi 3B с настроенным образом, который я объясню позже (Шаг 4: Настройка Raspberry Pi).

ЖК-дисплей 16x2

Я использовал базовый ЖК-дисплей, чтобы распечатать данные о температуре, яркости и IP-адресе.

Лист данных:

Датчик температуры DS18B20

DS18B20 - это однопроводной датчик для измерения температуры, произведенный компанией Maxim Integrated. Есть 2 типа датчиков DS18B20: только компонентный (который я использовал) и водонепроницаемая версия, которая намного больше, но это не то, что мне нужно для моего проекта, поэтому я использовал только компонент. Датчик может измерять температуру в диапазоне от -55 ° C до + 125 ° C (от -67 ° F до + 257 ° F) и имеет точность 0,5 ° C от -10 ° C до + 85 ° C. Он также имеет программируемое разрешение от 9 до 12 бит.

Лист данных:

MCP3008

Для чтения данных с моих LDR и PIR-сенсора я использовал MCP3008, который представляет собой 8-канальный 10-битный аналого-цифровой преобразователь с интерфейсом SPI и довольно легко программируется.

Лист данных:

Датчик движения PIR

Чтобы обнаружить, что кто-то входит в мою комнату и выходит из нее, я использовал пассивный инфракрасный датчик, так как они просты в использовании и имеют небольшие размеры.

Лист данных:

LDR

Я использовал фоторезистор или LDR (Light Decreasing Resistance, или светозависимый резистор), чтобы определить уровень яркости комнаты, в которой он находится. А также включить светодиодную полосу в темноте.

Динамик - 3 дюйма, диаметр - 4 Ом, 3 Вт

Это диффузор динамика, который я выбрал после расчета необходимого напряжения и силы тока, и он идеально подошел для моего проекта Raspberry Pi, производимого Adafruit.

Обзор:

MAX98357 I2S, моноусилитель класса D

Это усилитель, который идет в комплекте с динамиком, это не только усилитель, но и цифро-аналоговый преобразователь I2S, поэтому он также идеально подходит для моей акустической системы и аудиосистемы.

Обзор:

Лист данных:

Ардуино Уно

Arduino Uno - это плата микроконтроллера с открытым исходным кодом, основанная на микроконтроллере Microchip ATmega328P, производимом Arduino.cc. Плата Uno имеет 14 цифровых контактов, 6 аналоговых контактов и полностью программируется с помощью программного обеспечения Arduino IDE.

Обзор:

Levelshifter

Это небольшая плата, которая обеспечивает связь между Arduino Uno и Raspberry Pi и различные напряжения: Arduino: 5 В и Raspberry Pi: 3,3 В. Это необходимо, потому что светодиодная лента подключена к Arduino и работает там, а все остальное работает на Raspberry Pi.

WS2812B - светодиодная лента

Это светодиодная лента с 60 светодиодами RGB (вы можете купить более длинные полосы с большим количеством светодиодов RGB, если хотите). Который в моем случае подключен к Arduino Uno, но также может быть подключен ко многим другим устройствам и действительно прост в использовании.

Лист данных:

GPIO T-Part, 1 макет и множество перемычек

Чтобы подключить все, что мне было нужно, макетные платы и перемычки, я не использовал Т-образную часть GPIO, но вы можете использовать ее, чтобы четко знать, какая корзина куда идет.

Шаг 2: Схема и проводка

Схема и проводка
Схема и проводка
Схема и проводка
Схема и проводка

Для создания моей схемы я использовал Fritzing, это программу, которую вы можете установить, которая позволяет вам очень легко создавать схемы в различных видах. Я использовал макет и схематический вид.

Скачать Fritzing:

Убедитесь, что все подключено правильно. Я использовал цвета, чтобы было проще понять, где соединять провода. В моем случае я использовал разные цвета для проводов

Шаг 3: Дизайн базы данных

Дизайн базы данных
Дизайн базы данных

Мы собираем много данных с 3 датчиков (температура с DS18B20, яркость с LDR и статус с PIR-датчика). Поэтому лучше всего хранить все эти данные в базе данных. На более позднем этапе я объясню, как настроить базу данных (Шаг 5: Передайте проектирование нашей базы данных в RPi!) Но сначала необходимо разработать дизайн или ERD (диаграмму отношений сущностей). Мой был нормализован с помощью 3NF, поэтому мы разделили компоненты и историю компонентов в другую таблицу. Мы используем базу данных «Музыка», чтобы отслеживать прослушанные песни.

В целом, это действительно простой и простой дизайн базы данных для дальнейшей работы.

Шаг 4: Настройте Raspberry Pi

Итак, теперь у нас есть некоторые основы проекта. Начнем с настройки Raspberry Pi!

Часть 1: Настройка SD-карты

1) Загрузите необходимое программное обеспечение и файлы

Вам необходимо загрузить 2 программного обеспечения и 1 ОС, например Raspbian, для этого полного процесса. 1-е программное обеспечение: первое программное обеспечение - это Win32 Disk Imager.

sourceforge.net/projects/win32diskimager/

2-е программное обеспечение: Второе программное обеспечение - это SD Card Formatter.

www.sdcard.org/downloads/formatter_4/

Raspbian OS: это основная операционная система Pi.

www.raspberrypi.org/downloads/raspberry-pi-os/

Распакуйте все файлы на рабочий стол.

2) Получите SD-карту и картридер.

Получите SD-карту памяти класса 10 минимум на 8 ГБ с картридером. Вставьте эту карту в кардридер и подключите ее к USB-порту.

3) Отформатируйте SD-карту

Откройте SD Card Formatter и выберите диск.

Нажмите на формат и не меняйте другие параметры.

Когда форматирование будет завершено, нажмите ОК.

4) Записываем ОС на SD карту

Откройте win32diskimager.

Просмотрите файл.img ОС Raspbian, который был извлечен из загруженного файла.

Нажмите «Открыть», а затем нажмите «Написать».

Если появится какое-либо предупреждение, проигнорируйте его, нажав ОК. Подождите, пока запись будет завершена, это может занять несколько минут. Так что наберитесь терпения.

п

5) Как только это будет сделано, мы готовы внести некоторые окончательные корректировки, прежде чем помещать изображение в наш RPi.

Перейдите в каталог SD-карты, найдите файл с именем cmdline.txt и откройте его.

Теперь добавьте ip = 169.254.10.1 в ту же строку.

Сохраните файл.

Создайте файл с именем 'ssh' без расширения или содержимого. (Самый простой способ - создать текстовый файл, а затем удалить.txt)

Теперь, когда все установлено на SD-карте, вы можете БЕЗОПАСНО извлечь ее из своего компьютера и вставить в Raspberry Pi БЕЗ подключения питания. Как только SD-карта вставлена в RPI, подключите кабель LAN от вашего компьютера к LAN-порту RPi, после того, как он будет подключен, вы можете подключить питание к RPI.

Часть 2: Настройка RPi

Шпатлевка

Теперь мы хотим настроить Raspberry Pi, это делается через Putty.

Программное обеспечение для шпатлевки:

После загрузки откройте Putty и вставьте IP-адрес «169.254.10.1», порт «22» и тип подключения: SSH.

Теперь мы можем, наконец, открыть интерфейс командной строки и войти в систему, указав данные для входа в систему -> Пользователь: pi и пароль: raspberry. (Рекомендуется изменить его как можно быстрее. Вот как это сделать:

Распи-конфиг

Нам нужно будет включить разные интерфейсы, и для этого нам сначала нужно ввести следующий код:

sudo raspi-config

То, что нам нужно включить, находится в разделе интерфейса. Нам нужно включить следующие интерфейсы:

  • Однопроводной
  • Серийный
  • I2C
  • SPI

Это было все, что нам нужно было сделать с raspi-config.

Добавление вашего WIFI

Во-первых, вы должны быть root, чтобы следующая команда стала root

судо -i

После того, как вы получите root-права, используйте следующую команду: (Замените SSID своим сетевым именем и паролем своим сетевым паролем)

wpa_passphrase "ssid" "пароль" >> /etc/wpa_supplicant/wpa_supplicant.conf

Если вы сделали что-то не так, вы можете проверить, обновить или удалить эту сеть, просто введя следующую команду:

нано /etc/wpa_supplicant/wpa_supplicant.conf

Итак, после того, как мы вошли в нашу сеть, давайте войдем в клиентский интерфейс WPA.

wpa_cli

Выберите свой интерфейс

интерфейс wlan0

Перезагрузить файл

переконфигурировать

И, наконец, вы можете увидеть, хорошо ли вы подключены:

ip a

Часть 3: Обновление программного обеспечения для установки RPi +

Теперь, когда мы подключены к Интернету, обновление уже установленных пакетов было бы разумным шагом, поэтому давайте сделаем это сначала, прежде чем устанавливать другие пакеты.

sudo apt-get update

sudo apt-get upgrade

После обновления RPi нам нужно будет установить следующее программное обеспечение:

База данных MariaDB

sudo apt-get install mariadb-server

Веб-сервер Apache2

sudo apt установить apache2

Python

альтернативы обновлений --install / usr / bin / python python /usr/bin/python3.7 1 альтернативы обновлений --install / usr / bin / python python / usr / bin / python3 2

Пакет Python

Вам нужно будет установить все эти пакеты, чтобы серверная часть работала безупречно:

  • Колба
  • Фляга-Корс
  • Flask-MySql
  • Flask-SocketIO
  • Запросы PyMySQL
  • Python-socketio
  • RPi. GPIO
  • Gevent
  • Gevent-websocket

Библиотека динамиков

Для использования динамика с усилителем нам потребуется установить для него библиотеку.

curl -sS > | bash

Step 4: Reboot

After everything has been installed we will have to reboot the pi to make sure everything works correctly

sudo reboot

Step 5: Setting Up the Database to the RPi

Настройка базы данных на RPi!
Настройка базы данных на RPi!

Теперь, когда мы установили все необходимое, давайте поместим нашу базу данных, которую мы разработали, на Raspberry Pi!

Для настройки базы данных нам нужно будет подключить MySql и RPi. Для этого мы откроем MySQLWorkbench и создадим новое соединение. При просмотре изображения вам нужно будет изменить информацию на свою.

Если вы еще ничего не изменили, вы можете использовать для SSH pi и raspberry, для MySQL mysql и mysql.

Если что-то неясно, вы также можете следовать этому руководству:

Чтобы экспортировать вашу базу данных, будет проще использовать PHPmyAdmin, потому что вы можете получить множество ошибок, выполняя это с помощью MySql.

Шаг 6: Настройка Bluetooth на нашем RPi

Мы создаем динамик Mood, который мы также можем использовать с нашей собственной музыкой, поэтому это будет проще, когда RPi

подключенный к bluetooth, я следовал руководству по нему, которое вы можете найти здесь:

scribles.net/streaming-bluetooth-audio-fr…

Я написал все здесь, а также для всех, кто хочет это воссоздать

Удаление уже запущенного bluealsa

sudo rm / var / run / bluealsa / *

Добавьте роль приемника профиля A2DP

sudo bluealsa -p a2dp-раковина &

Откройте интерфейс Bluetooth и включите Bluetooth

bluetoothctl питание включено

Настройте агент сопряжения

агент на default-agent

Сделайте ваш RPi доступным для обнаружения

обнаруживаемый на

  • Теперь на вашем устройстве Bluetooth найдите RPi и подключитесь к нему.
  • Подтвердите сопряжение на обоих устройствах, введите «да» в замазке.
  • Авторизуйте услугу A2DP, снова введите «да».
  • Как только это будет сделано, мы сможем доверять нашему устройству, поэтому нам не придется проходить через все это каждый раз, когда мы хотим подключиться.

доверять XX: XX: XX: XX: XX: XX (ваш Mac-адрес bluetooth с нашего исходного устройства)

Если вы хотите, чтобы ваш RPi оставался обнаруживаемым, это ваш собственный выбор, но я предпочитаю выключить его снова, чтобы люди не могли пытаться подключиться к вашему устройству

обнаруживаемый

Затем мы можем выйти из нашего интерфейса Bluetooth

выход

И, наконец, наша аудиомаршрутизация: наше исходное устройство перенаправляет на наш RPi

bluealsa-aplay 00: 00: 00: 00: 00: 00

Теперь наше устройство подключено к Raspberry через bluetooth, и вы сможете протестировать его, проиграв любой носитель, например Spotify и т. Д.

Шаг 7: написание полного бэкэнда

Итак, настройка завершена, мы можем наконец приступить к написанию нашей серверной программы!

Я использовал код Visual Studio для всего своего бэкэнда, вам просто нужно убедиться, что ваш проект Visual Studio подключен к вашему Raspberry Pi, это означает, что ваш сетевой кабель должен быть подключен к вашему RPi и установить соединение SSH. (информацию о том, как создать удаленное соединение, можно найти здесь:

Я использовал свои собственные классы, и все они также включены в мой GitHub.

В моем бэкэнд-файле я использовал разные классы, поэтому все можно использовать отдельно, и мой основной код не беспорядок со всеми разными потоками. Я использовал потоки для одновременного запуска всех разных классов. А внизу у вас есть все маршруты, чтобы мы могли легко получать данные в нашем интерфейсе.

Шаг 8: Написание внешнего интерфейса (HTML, CSS и JavaScript)

Теперь, когда бэкэнд готов, мы можем приступить к написанию полного интерфейса.

HTML и CSS были для меня довольно сложными, я старался сначала сделать его мобильным, потому что я могу подключиться к нему через Bluetooth, чтобы менять песни с помощью Spotify. Так было бы проще управлять с мобильного дашборда

Вы можете создать свою панель управления как хотите, я просто оставлю здесь свой код и дизайн, вы можете делать все, что захотите!

И Javascript для меня не был проще, работал с несколькими GET из моих внутренних маршрутов, тоннами прослушивателей событий и некоторыми структурами socketio для получения данных с моих датчиков.

Шаг 9: построение моего кейса и объединение всего этого

Создание моего случая и объединение всего этого
Создание моего случая и объединение всего этого
Создание моего случая и объединение всего этого
Создание моего случая и объединение всего этого
Создание моего случая и объединение всего этого
Создание моего случая и объединение всего этого
Создание моего случая и объединение всего этого
Создание моего случая и объединение всего этого

Сначала я начал делать наброски того, как я хотел, чтобы корпус выглядел, важно было то, что он должен был быть достаточно большим, чтобы в него поместилось все, поскольку у нас была большая схема, которую нужно было вставить в корпус, но она должна была оставаться компактной, чтобы она не подходила ''. Я занимаю много места

Я сделал корпус из дерева, думаю, с ним легче всего работать, когда у вас нет такого большого опыта в создании корпусов, и у вас также есть много вещей, которые вы можете с ним сделать.

Я начал со старой доски, которую лежал вокруг, и только что начал пилить дерево. Когда у меня был базовый футляр, мне просто нужно было просверлить в нем отверстия (много на передней части футляра, как вы можете видеть на фотографиях, и вставить в него гвозди, это действительно простой футляр, но выглядит он довольно круто. и подходит идеально. Я также решил покрасить его в белый цвет, чтобы он хорошо смотрелся.

И как только дело было сделано, пришло время собрать все воедино, как вы можете видеть на последней картинке! Внутри коробки какой-то беспорядок, но все работает, и у меня не было намного больше места, поэтому я советую вам, возможно, создать более крупный кейс, если вы воссоздаете мой проект.

Рекомендуемые: