Índice:

Slimbox - um alto-falante Bluetooth inteligente !: 10 etapas (com imagens)
Slimbox - um alto-falante Bluetooth inteligente !: 10 etapas (com imagens)

Vídeo: Slimbox - um alto-falante Bluetooth inteligente !: 10 etapas (com imagens)

Vídeo: Slimbox - um alto-falante Bluetooth inteligente !: 10 etapas (com imagens)
Vídeo: Como sintonizar rádio FM na caixa de som JBL paralela, al-006, al-007 al-009 2024, Novembro
Anonim
Slimbox - um alto-falante Bluetooth inteligente!
Slimbox - um alto-falante Bluetooth inteligente!

Ei!

Para o meu projeto escolar na MCT Howest Kortrijk, eu fiz um dispositivo de alto-falante Bluetooth inteligente com diferentes sensores, um LCD e anel RGB NeoPixel incluídos. Tudo é executado no Raspberry Pi (banco de dados, servidor da Web, backend).

Então neste instrutível vou mostrar como fiz esse projeto em 3 semanas, passo a passo, então se algum de vocês quiser recriar meu projeto, você pode fazer facilmente!

Este também é o meu primeiro instrutível, se você tiver alguma dúvida, tentarei respondê-la o mais rápido possível!

Meu GitHub:

Etapa 1: suprimentos

Suprimentos
Suprimentos
Suprimentos
Suprimentos
Suprimentos
Suprimentos

Sensor de Temperatura DS18B20

O DS18B20 é um sensor monofilar que mede a temperatura, fabricado pela Maxim Integrated. Existem 2 tipos de sensores DS18B20, o componente apenas (que usei) e a versão à prova d'água, que é muito maior, mas não era o que eu precisava para o meu projeto, então usei apenas o componente. O sensor pode medir a temperatura em uma faixa de -55 ° C a + 125 ° C (-67 ° F a + 257 ° F) e tem uma precisão de 0,5 ° C de -10 ° C a + 85 ° C. Ele também tem uma resolução programável de 9 bits a 12 bits.

Folha de dados:

Sensor de potenciômetro

Um potenciômetro é um resistor com três terminais que é manualmente ajustável apenas girando a parte superior do sensor. A posição da parte superior determina a tensão de saída do potenciômetro.

LSM303 Acelerômetro + Compasso Breakout

A placa breakout LSM303 é uma combinação de um acelerômetro de eixo triplo e um magnetômetro / bússola, fabricado pela Adafruit. É usado com a interface I2C do Raspberry Pi.

Visão geral:

Folha de dados:

MCP3008

Para ler os dados do meu potenciômetro, usei um MCP3008, que é um conversor analógico-digital de 8 canais e 10 bits com interface SPI e é muito fácil de programar.

Folha de dados:

Alto-falante - 3”de diâmetro - 8 Ohm 1 Watt

Este é o cone do alto-falante que escolhi depois de calcular a Voltagem e Amperes de que precisaria e foi um ajuste perfeito para o meu projeto Raspberry Pi, fabricado pela Adafruit.

Visão geral:

MAX98357 I2S Class-D Mono Amplifier

Este é o amplificador que vem com o alto-falante, não é apenas um amplificador, é também um conversor digital para analógico I2S, então também é perfeito para meu alto-falante e sistema de áudio.

Visão geral:

Folha de dados:

Arduino Uno

O Arduino Uno é uma placa de microcontrolador de código aberto baseada no microcontrolador Microchip ATmega328P, fabricado pela Arduino.cc. A placa Uno possui 14 pinos digitais, 6 pinos analógicos e é totalmente programável com o software Arduino IDE

Visão geral:

Levelshifter

Esta é uma pequena placa que cuida da comunicação entre o Arduino Uno e o Raspberry Pi e as diferentes tensões, Arduino: 5V e Raspberry Pi: 3,3V. Isso é necessário porque o anel NeoPixel está conectado ao Arduino e é executado nele, enquanto todas as outras coisas são executadas no Raspberry Pi.

Anel RGB NeoPixel

Este é um pequeno anel preenchido com 12 leds RGB (você pode comprar anéis maiores com mais leds RGB, se quiser). Que no meu caso está conectado ao Arduino Uno, mas também pode ser conectado a vários outros dispositivos e é muito simples de usar.

Visão geral:

Display LCD 16x2

Usei um display LCD básico para imprimir minha temperatura, volume e endereço IP.

Folha de dados:

Raspberry Pi 3B + e cartão SD de 16GB

Todo o meu projeto é executado no meu Raspberry Pi 3B + com uma imagem configurada, que irei ajudá-lo a configurar mais tarde no meu instrutível.

GPIO T-Part, 2 placas de ensaio e muitos jumperwires

Para conectar tudo que eu precisava de breadboards e jumperwires, usei a parte GPIO T para ter mais espaço e ficar claro qual pino é qual.

Etapa 2: esquema e fiação

Esquemático e fiação
Esquemático e fiação
Esquemático e fiação
Esquemático e fiação
Esquemático e fiação
Esquemático e fiação

Para o meu esquema, usei o Fritzing, é um programa que você pode instalar e que permite criar um esquema realmente fácil em diferentes tipos de visualizações.

Baixe o Fritzing:

Portanto, certifique-se de conectar tudo da maneira certa! No meu caso as cores dos fios não são as mesmas do esquema.

Etapa 3: Design de banco de dados

Design de banco de dados
Design de banco de dados

Estamos coletando muitos dados dos 3 sensores conectados, então precisamos de um banco de dados para armazenar os dados e sensores. Mais tarde veremos como configurar o banco de dados no Raspberry Pi e como adicionar dados a ele. Mas primeiro o projeto do banco de dados ou ERD (Entity Relationship Diagram) deve ser feito e o meu também foi normalizado com 3NF. É por isso que dividimos os sensores em outra tabela e trabalhamos com IDs.

No geral, este é um projeto de banco de dados realmente básico e fácil de trabalhar.

Etapa 4: Preparando o Raspberry Pi

Então, agora que terminamos algumas noções básicas do projeto. Vamos começar com o Raspberry Pi!

Configuração do cartão SD

Primeiro, você precisa de um cartão SD de 16GB onde pode colocar sua imagem e um programa para carregar uma imagem inicial para o cartão SD.

Software:

Imagem inicial:

Assim que forem baixados:

  1. Coloque o seu cartão SD no seu computador.
  2. Abra o Win32 que você acabou de baixar.
  3. Selecione o arquivo de imagem Raspbian que você acabou de baixar.
  4. Clique em 'escrever' para a localização do seu cartão SD.

Isso pode levar algum tempo, dependendo do seu hardware. Feito isso, estamos prontos para fazer alguns ajustes finais antes de colocar a imagem em nosso RPi.

  1. Vá para o diretório do cartão SD, procure o arquivo chamado 'cmdline.txt' e abra-o.
  2. Agora adicione 'ip = 169.254.10.1' na mesma linha.
  3. Salve o arquivo.
  4. Crie um arquivo chamado 'ssh' sem extensão ou conteúdo.

Agora você pode ejetar com SEGURANÇA o cartão SD do seu computador e colocá-lo no Raspberry Pi SEM energia. Uma vez que o cartão SD esteja no RPI, conecte um cabo LAN do seu computador à porta RPi LAN, uma vez conectado você pode conectar a alimentação ao RPi.

Agora queremos controlar nosso Raspberry Pi, isso é feito através do Putty.

Software Putty:

Depois de fazer o download, abra o Putty e insira o IP '169.254.10.1' e a porta '22' e o tipo de conexão: SSH. Agora podemos finalmente abrir nossa interface de linha de comando e fazer o login com as informações de login inicial -> Usuário: pi e Senha: raspberry.

Raspi-config

sudo raspi-config

O que é realmente importante para este projeto é a seção de interface, temos que habilitar várias interfaces diferentes, habilitar todas as seguintes interfaces:

  • One-wire
  • SPI
  • I2C
  • Serial

Agora que terminamos o raspi-config, vamos tentar fazer uma conexão com a internet.

Conexão wifi

Primeiro, você precisa ser root para os seguintes comandos

sudo -i

Depois de fazer root, use o seguinte comando. SSID é o nome da sua rede e a senha é obviamente a senha.

wpa_passphrase "ssid" "senha" >> /etc/wpa_supplicant/wpa_supplicant.conf

Caso tenha cometido um erro, você pode verificar, atualizar ou excluir esta rede apenas inserindo o arquivo:

nano /etc/wpa_supplicant/wpa_supplicant.conf

Então, depois de entrarmos em nossa rede, vamos entrar na interface do cliente WPA

wpa_cli

Selecione sua interface

interface wlan0

Recarregue o arquivo

reconfigurar

E, finalmente, você pode ver se está bem conectado:

ip a

Atualizar e atualizar

Agora que estamos conectados à internet, atualizar os pacotes já instalados seria uma jogada inteligente, então vamos fazer isso antes de instalar outros pacotes.

sudo apt-get update

sudo apt-get upgrade

Banco de dados MariaDB

Instale o servidor de banco de dados MariaDB:

sudo apt-get install servidor mariadb

Servidor da Web Apache2

Instale o servidor da web Apache2:

sudo apt install apache2

Pitão

Instale o Python:

atualizar-alternativas --install / usr / bin / python python /usr/bin/python2.7 1

atualizar-alternativas --install / usr / bin / python python / usr / bin / python3 2

Pacote Python

Você terá que instalar todos esses pacotes para que o back-end funcione perfeitamente:

  • Frasco
  • Flask-Cors
  • Flask-MySql
  • Flask-SocketIO
  • PyMySQL
  • solicitações de
  • Python-socketio
  • RPi. GPIO
  • Gevent
  • Gevent-websocket
  • Ujson
  • Wsaccel

Biblioteca de palestrantes

Instale a biblioteca de alto-falantes da Adafruit:

curl -sS https://raw.githubusercontent.com/adafruit/Raspbe… | bash

É hora de reiniciar

sudo reboot

Etapa 5: encaminhe nosso banco de dados de engenharia para o RPi

Agora que instalamos tudo o que precisávamos, vamos colocar nosso banco de dados que projetamos em nosso Raspberry Pi!

Portanto, primeiro precisamos projetar nosso banco de dados no ambiente de trabalho MySql, enquanto fazemos isso, copie o código completo do banco de dados e exclua todas as palavras 'visíveis' nele. Então, uma vez copiado, vamos abrir o putty novamente, faça o login e digite:

sudo mysql

e agora você está na interface mysql, copie o código do banco de dados nele e pressione Enter.

Agora só precisamos criar um usuário

CRIAR USUÁRIO 'usuário' IDENTIFICADO PELO 'usuário';

GRANT ALL PRIVILEGES ON *. * TO 'user';

Agora reinicie.

Portanto, tudo deve ser configurado agora, você também pode fazer uma conexão com seu Pi e MySql Workbench, para que seja mais fácil verificar todos os dados em suas tabelas.

Etapa 6: Configurando Bluetooth em Nosso RPi

Estamos criando um alto-falante Bluetooth, então isso significa que a mídia está sendo enviada de nossa fonte para o Raspberry Pi e isso pode ser feito com bastante facilidade, vamos direto ao assunto!

Minha fonte para a conexão bluetooth:

Removendo o bluealsa já em execução

sudo rm / var / run / bluealsa / *

Adicionar função de coletor de perfil A2DP

sudo bluealsa -p a2dp-sink &

Abra a interface bluetooth e ligue o bluetooth

bluetoothctl

ligar

Configure um agente de emparelhamento

agente em

agente-padrão

Torne seu RPi detectável

detectável em

  • Agora, em seu dispositivo bluetooth, procure o RPi e conecte-se a ele.
  • Confirme o emparelhamento em ambos os dispositivos, digite 'sim' em sua massa.
  • Autorize o serviço A2DP, digite 'sim' novamente.
  • Uma vez feito isso, podemos confiar em nosso dispositivo, então não temos que passar por tudo isso toda vez que quisermos nos conectar

trust XX: XX: XX: XX: XX: XX (seu endereço bluetooth mac de nosso dispositivo de origem)

Se você deseja que seu RPi continue sendo detectável, você escolhe, mas prefiro desligá-lo novamente, para que as pessoas não possam tentar se conectar com sua caixa

fora de descoberta

Então podemos sair da nossa interface bluetooth

saída

E, finalmente, nosso roteamento de áudio: nosso dispositivo de origem encaminhando para nosso RPi

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

Agora nosso dispositivo está totalmente conectado ao nosso Raspberry e você deve ser capaz de reproduzir mídia de seu dispositivo de origem no alto-falante Pi.

Etapa 7: Escrevendo o back-end completo

Agora que a configuração está concluída, podemos finalmente começar a escrever nosso programa de back-end!

Usei PyCharm para todo o meu backend, você só precisa ter certeza de que seu projeto PyCharm está conectado ao seu Raspberry Pi, isso significa que seu caminho de implantação está configurado em suas configurações e você instalou todos os pacotes de que precisamos, já deve ter sido feito na etapa 4

Usei minhas próprias classes e elas também estão incluídas no meu GitHub. O link está na introdução, caso você tenha perdido;)

No meu arquivo de back-end, usei classes de threading, para que tudo possa ser executado ao mesmo tempo e não interrompa um ao outro. E na parte inferior você tem todas as rotas para que possamos facilmente obter dados em nosso front-end.

Etapa 8: Escrevendo o front-end (HTML, CSS e JavaScript)

Agora que o back-end está pronto, podemos começar a escrever o front-end completo.

HTML e CSS foram feitos de forma muito fácil, tentei trabalhar primeiro com dispositivos móveis tanto quanto possível, já que na maioria das vezes nos conectamos com Bluetooth a partir de um dispositivo móvel, seria mais fácil controlar a partir de um painel móvel.

Você pode projetar seu painel da maneira que quiser, vou apenas deixar meu código e design aqui, você pode fazer o que quiser!

E o Javascript não foi tão difícil, trabalhei com alguns GET's das minhas rotas de backend, toneladas de ouvintes de eventos e algumas estruturas socketio.

Etapa 9: Construindo meu caso e juntando tudo

Construindo meu caso e juntando tudo
Construindo meu caso e juntando tudo
Construindo meu caso e juntando tudo
Construindo meu caso e juntando tudo
Construindo meu caso e juntando tudo
Construindo meu caso e juntando tudo

Comecei com alguns esboços de como eu queria que a caixa fosse, algo importante era que tinha que ser grande o suficiente para que tudo se encaixasse, já que tínhamos um grande circuito para colocar na caixa.

Eu fiz a caixa de madeira, acho que é mais fácil de trabalhar quando você não tem muita experiência com a construção de caixas e também tem muitas coisas que pode fazer com ela.

Comecei com uma caixa para garrafas de vinho e comecei a serrar a madeira. Depois de ter meu gabinete básico, só tive que fazer furos (muito na frente do case, como vocês podem ver nas fotos: P) e colocar alguns pregos nele, é um case básico mesmo, mas é parece muito legal e se encaixa perfeitamente.

E uma vez feito o case, era hora de colocar tudo junto, como vocês podem ver na última foto! É uma bagunça dentro da caixa, mas tudo funciona e eu não tinha muito mais espaço, então aconselho você a talvez criar um case maior se estiver recriando meu projeto.

Etapa 10: alguns problemas que tive na criação do palestrante Slimbox …

Erros de Bluetooth e bluealsa

Sempre que eu queria tocar música ou me conectar com bluetooth, recebia erros do bluetooth e bluealsa. Pesquisei sobre isso e essa foi a solução para o meu problema. Então, por algum motivo, meu bluetooth foi bloqueado por software, não tenho certeza se isso é bloqueado por software padrão. Você pode ver se é digitando o seguinte comando em seu Putty.

lista de rfkill

Portanto, se for softblocked, basta usar isto:

rfkill desbloquear bluetooth

E você pode querer reiniciar depois disso, minha fonte:

Problemas de conexão serial

Então, outro grande problema que tive foi que não consegui fazer nenhuma conexão com meu Arduino através do shifter, depois de algumas pesquisas descobri que meu '/ dev / ttyS0' havia sumido e isso pode ser devido a uma atualização de seu RPi. Também encontrei uma solução para este

Você terá que reativar o console serial com raspi-config, reiniciar e, em seguida, remover manualmente o bit "console = serial0, 115200" de '/boot/cmdline.txt'. Confirme que "enable_uart = 1" está em' /boot/config.txt ', e reinicie novamente. Isso deve trazer sua porta ttyS0 de volta, bem como o soft link' / dev / serial0 'para ela.

Fonte:

Recomendado: