Inhoudsopgave:

Mood Speaker- een krachtige luidspreker voor het afspelen van Mood Music op basis van de omgevingstemperatuur - Ajarnpa
Mood Speaker- een krachtige luidspreker voor het afspelen van Mood Music op basis van de omgevingstemperatuur - Ajarnpa

Video: Mood Speaker- een krachtige luidspreker voor het afspelen van Mood Music op basis van de omgevingstemperatuur - Ajarnpa

Video: Mood Speaker- een krachtige luidspreker voor het afspelen van Mood Music op basis van de omgevingstemperatuur - Ajarnpa
Video: Rubyoung's Bluetooth Speaker Brings the BOOMBOX BACK! 2024, November
Anonim
Mood Speaker- een krachtige luidspreker voor het afspelen van stemmingsmuziek op basis van de omgevingstemperatuur
Mood Speaker- een krachtige luidspreker voor het afspelen van stemmingsmuziek op basis van de omgevingstemperatuur

Hoi!

Voor mijn schoolproject bij MCT Howest Kortrijk heb ik een Mood Speaker gemaakt dit is een slim Bluetooth speaker apparaat met verschillende sensoren, een LCD en WS2812b ledstrip meegeleverd. De speaker speelt achtergrondmuziek af op basis van de temperatuur maar kan ook als gewone bluetooth gebruikt worden spreker. Alles draait op de Raspberry Pi (Database, Webserver, Backend).

Dus deze instructable is een stapsgewijs proces van hoe ik dit project in 3 weken heb gerealiseerd. Dus als jullie mijn project opnieuw willen maken, kun je de gids volgen

Deze instructable is mijn eerste die ik heb geschreven, dus als er vragen zijn, zal ik proberen ze zo snel mogelijk te beantwoorden!

Mijn GitHub:

Stap 1: Benodigdheden

Raspberry Pi 3B & 16GB SD-kaart

Mijn hele project draait op mijn Raspberry Pi 3B met een geconfigureerde afbeelding, die ik in een latere stap zal uitleggen (stap 4: Setup Raspberry Pi)

LCD-scherm 16x2

Ik gebruikte een standaard LCD-scherm om mijn temperatuur, helderheid en IP-adres af te drukken.

Gegevensblad:

DS18B20 Temperatuursensor

De DS18B20 is een eendraadssensor die de temperatuur meet, vervaardigd door Maxim Integrated. Er zijn 2 soorten DS18B20-sensoren, alleen de component (die ik heb gebruikt) en de waterdichte versie, die veel groter is, maar dat was niet wat ik nodig had voor mijn project, dus ik gebruikte alleen de component. De sensor kan de temperatuur meten in een bereik van -55 °C tot +125 °C (-67 °F tot +257 °F) en heeft een nauwkeurigheid van 0,5 °C van -10 °C tot +85 °C. Het heeft ook een programmeerbare resolutie van 9 bits tot 12 bits.

Gegevensblad:

MCP3008

Om de data van mijn LDR en PIR-sensor uit te lezen heb ik een MCP3008 gebruikt, dit is een 8 kanaals 10 bit analoog naar digitaal convertor met de SPI interface en is vrij eenvoudig te programmeren.

Gegevensblad:

PIR bewegingssensor

Om te detecteren wanneer iemand mijn kamer binnenkomt en verlaat, heb ik een passieve infraroodsensor gebruikt, omdat ze gemakkelijk te gebruiken en klein zijn.

Gegevensblad:

LDR

Ik heb een fotoresistor of LDR (Light Decreasing Resistance, of lichtafhankelijke weerstand) gebruikt om het helderheidsniveau van de kamer waarin het zich bevindt te detecteren. En om ook mijn Ledstrip aan te zetten als het te donker is.

Luidspreker – 3”Diameter – 4 Ohm 3 Watt

Dit is de luidsprekerconus die ik heb gekozen na het berekenen van de spanning en ampère die hij nodig heeft en deze paste perfect bij mijn Raspberry Pi-project, vervaardigd door Adafruit.

Overzicht:

MAX98357 I2S klasse-D monoversterker

Dit is de versterker die bij de luidspreker wordt geleverd, het is niet alleen een versterker, het is ook een I2S digitaal naar analoog converter, dus het past ook perfect bij mijn luidspreker- en audiosysteem.

Overzicht:

Gegevensblad:

Arduino Uno

De Arduino Uno is een open-source microcontrollerkaart op basis van de Microchip ATmega328P-microcontroller, vervaardigd door Arduino.cc. Het Uno-bord heeft 14 digitale pinnen, 6 analoge pinnen en is volledig programmeerbaar met de Arduino IDE-software

Overzicht:

Niveauverschuiver

Dit is een klein bordje dat zorgt voor de communicatie tussen de Arduino Uno en de Raspberry Pi en de verschillende spanningen, Arduino: 5V & Raspberry Pi: 3.3V. Dit is nodig omdat de ledstrip is aangesloten op de Arduino en daarop draait, terwijl alle andere dingen op de Raspberry Pi draaien.

WS2812B - Ledstrip

Dit is een ledstrip met 60 RGB-leds (je kunt desgewenst langere strips met meer RGB-leds kopen). Die is in mijn geval aangesloten op de Arduino Uno, maar kan ook op veel andere apparaten worden aangesloten en is echt eenvoudig te gebruiken.

Gegevensblad:

GPIO T-Part, 1 Breadboard en veel jumperwires

Om alles wat ik nodig had breadboards en jumperwires aan te sluiten, heb ik het GPIO T-deel niet gebruikt, maar je kunt het gebruiken om duidelijk te weten welke bak waar hoort.

Stap 2: Schema en bedrading

Schema en bedrading
Schema en bedrading
Schema en bedrading
Schema en bedrading

Voor het maken van mijn schema heb ik Fritzing gebruikt, het is een programma dat je kunt installeren waarmee je heel eenvoudig een schema kunt maken in verschillende soorten weergaven. Ik gebruikte het breadboard en de schematische weergave.

Fritzing downloaden:

Zorg ervoor dat alles correct is aangesloten. Ik heb kleuren gebruikt om het wat duidelijker te maken waar de draden moeten worden aangesloten. In mijn geval gebruikte ik verschillende kleuren voor de draden

Stap 3: Database-ontwerp

Database-ontwerp
Database-ontwerp

We verzamelen veel gegevens van de 3 sensoren (Temperatuur van DS18B20, Helderheid van LDR en Status van PIR-sensor). Het is dus het beste om al deze gegevens in een database te bewaren. Ik zal in een latere stap uitleggen hoe je de database configureert (Stap 5: Forward Engineering Our Database to the RPi!) Maar eerst moet het ontwerp of ERD (Entity Relationship Diagram) worden gemaakt. De mijne was genormaliseerd met 3NF, daarom hebben we de componenten en de geschiedenis van de componenten in een andere tabel opgesplitst. We gebruiken de muziekdatabase om bij te houden welke nummers zijn beluisterd.

Over het algemeen is dit een heel eenvoudig en eenvoudig databaseontwerp om verder mee te werken.

Stap 4: Stel Raspberry Pi in

Dus nu we een aantal basisprincipes van het project hebben gedaan. Laten we beginnen met het instellen van de Raspberry Pi!

Deel 1: De SD-kaart configureren

1) Download de benodigde software en bestanden

U moet 2 software en 1 besturingssysteem, d.w.z. Raspbian, downloaden voor dit volledige proces. 1e software: de eerste software is Win32 Disk Imager.

sourceforge.net/projects/win32diskimager/

2e software: Tweede software is SD Card Formatter.

www.sdcard.org/downloads/formatter_4/

Raspbian OS: Dit is het belangrijkste besturingssysteem van de Pi.

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

Pak alle bestanden uit naar het bureaublad.

2) Haal de SD-kaart en de kaartlezer

Koop een SD-kaart van minimaal 8 GB klasse 10 met een kaartlezer. Steek die kaart in de kaartlezer en steek die in de USB-poort.

3) Formatteer de SD-kaart

Open SD Card Formatter en selecteer het station.

Klik op formaat en wijzig geen andere opties.

Wanneer het formatteren is voltooid, klikt u op OK.

4) Schrijf het besturingssysteem op de SD-kaart

Open win32diskimager.

Blader door het.img-bestand van Raspbian OS dat uit het gedownloade bestand is geëxtraheerd.

Klik op openen en vervolgens op Schrijven.

Als er een waarschuwing verschijnt, negeer deze dan door op OK te klikken. Wacht tot het schrijven is voltooid. Dit kan enkele minuten duren. Dus wees geduldig.

N

5) Zodra dit is gebeurd, zijn we klaar om enkele laatste aanpassingen te maken voordat we de afbeelding in onze RPi plaatsen.

Ga naar de map van je SD-kaart, zoek naar het bestand met de naam 'cmdline.txt' en open het.

Voeg nu 'ip=169.254.10.1' toe op dezelfde regel.

Bewaar het bestand.

Maak een bestand met de naam 'ssh' zonder extensie of inhoud. (de makkelijkste manier is om een txt-bestand te maken en daarna de.txt te verwijderen)

Nu alles op de SD-kaart is geïnstalleerd, kunt u deze VEILIG van uw computer verwijderen en in de Raspberry Pi plaatsen ZONDER de stroom aan te sluiten. Zodra de SD-kaart in de RPI zit, sluit u een LAN-kabel van uw computer aan op de RPi LAN-poort, zodra deze is aangesloten, kunt u de voeding op de RPi aansluiten.

Deel 2: De RPi. configureren

Stopverf

Nu willen we onze Raspberry Pi configureren, dit gaat via Putty.

Putty-software:

Na het downloaden opent u Putty en voert u IP '169.254.10.1' en poort '22' en verbindingstype: SSH in.

Nu kunnen we eindelijk onze opdrachtregelinterface openen en inloggen met de inloggegevens van de starter -> Gebruiker: pi & wachtwoord: raspberry. (Het wordt aanbevolen om het zo snel mogelijk te wijzigen. Hier is een handleiding hoe:

Raspi-config

We zullen verschillende interfaces moeten inschakelen en daarvoor moeten we eerst de volgende code typen:

sudo raspi-config

De dingen die we moeten inschakelen, staan in de interface-sectie. We moeten de volgende interfaces inschakelen:

  • Eendraads
  • serieel
  • I2C
  • SPI

Dat was alles wat we moesten doen met raspi-config

Uw wifi toevoegen

Eerst moet je root zijn om het volgende commando root te laten worden:

sudo -i

Als je eenmaal root bent, gebruik je de volgende opdracht: (Vervang SSID door je netwerknaam en wachtwoord door je netwerkwachtwoord)

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

Als je iets verkeerd hebt gedaan, kun je dit netwerk controleren, bijwerken of verwijderen door het volgende commando in te voeren:

nano /etc/wpa_supplicant/wpa_supplicant.conf

Dus nadat we ons netwerk zijn binnengegaan, gaan we naar de WPA-clientinterface

wpa_cli

Selecteer uw interface

interface wlan0

Herlaad het bestand

opnieuw configureren

En tot slot kun je zien of je goed aangesloten bent:

ip a

Deel 3: De RPi bijwerken + software installeren

Nu we verbonden zijn met internet, zou het een slimme zet zijn om de reeds geïnstalleerde pakketten bij te werken, dus laten we dat eerst doen voordat we andere pakketten installeren.

sudo apt-get update

sudo apt-get upgrade

Na het updaten van de RPi zullen we de volgende software moeten installeren:

MariaDB-database

sudo apt-get install mariadb-server

Apache2-webserver

sudo apt installeer apache2

Python

update-alternatives --install /usr/bin/python python /usr/bin/python3.7 1 update-alternatives --install /usr/bin/python python /usr/bin/python3 2

Python-pakket

Je zult al deze pakketten moeten installeren om de backend perfect te laten werken:

  • Kolf
  • Kolf-Cors
  • Kolf-MySql
  • Kolf-SocketIO
  • PyMySQL-verzoeken
  • Python-socketio
  • RPi. GPIO
  • Gent
  • Gevent-websocket

Luidsprekerbibliotheek

Om de luidspreker met de versterker te gebruiken, moeten we er een bibliotheek voor installeren

krul -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

De database instellen op de RPi!
De database instellen op de RPi!

Nu we alles hebben geïnstalleerd wat we nodig hadden, laten we onze database die we hebben ontworpen op onze Raspberry Pi zetten!

Voor het opzetten van de database zullen we MySql en RPi moeten verbinden. Daarvoor openen we MySQLWorkbench en maken we een nieuwe verbinding. Als je naar de afbeelding kijkt, moet je veranderen om de informatie in de jouwe te veranderen.

Als je nog niets hebt veranderd, kun je voor SSH pi en raspberry, voor MySQL mysql en mysql gebruiken.

Als iets niet duidelijk is, kun je ook deze tutorial volgen:

Om uw database te exporteren, zou het gemakkelijker moeten zijn om PHPmyAdmin te gebruiken, omdat u veel fouten kunt krijgen als u dit doet met MySql

Stap 6: Bluetooth configureren op onze RPi

We zijn een Mood-luidspreker aan het maken, die we ook met onze eigen muziek kunnen gebruiken, dus dit is gemakkelijker als de RPi is

verbonden met bluetooth Ik heb er een tutorial voor gevolgd die je hier kunt vinden:

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

Ik heb hier ook alles opgeschreven voor iedereen die het opnieuw wil maken

Het verwijderen van de reeds lopende bluealsa

sudo rm /var/run/bluealsa/*

Voeg A2DP-profiel Sink-rol toe

sudo bluealsa -p a2dp-sink &

Open de bluetooth-interface en zet je bluetooth aan

bluetoothctl inschakelen

Stel een koppelingsagent in

agent op default-agent

Maak uw RPi vindbaar

vindbaar op

  • Zoek nu vanaf uw Bluetooth-apparaat naar de RPi en maak er verbinding mee.
  • Bevestig de koppeling op beide apparaten, typ 'ja' in je stopverf.
  • Autoriseer A2DP-service, typ nogmaals 'ja'.
  • Zodra dit is gebeurd, kunnen we ons apparaat vertrouwen, dus we hoeven dit niet elke keer opnieuw te doen als we verbinding willen maken

vertrouw XX:XX:XX:XX:XX:XX (Uw bluetooth mac-adres van ons bronapparaat)

Als je wilt dat je RPi vindbaar blijft, is dat je eigen keuze, maar ik zet hem liever weer uit, zodat mensen niet kunnen proberen verbinding te maken met je box

vindbaar uit

Dan kunnen we onze bluetooth-interface verlaten

Uitgang

En tot slot onze audiorouting: ons bronapparaat doorsturen naar onze RPi

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

Nu is ons apparaat met bluetooth verbonden met onze Raspberry en je zou het moeten kunnen testen door media af te spelen, bijvoorbeeld Spotify, enz.

Stap 7: De volledige backend schrijven

Dus nu de installatie is voltooid, kunnen we eindelijk beginnen met het schrijven van ons backend-programma!

Ik heb Visual Studio Code voor mijn hele backend gebruikt, je hoeft alleen maar te zorgen dat je Visual Studio-project is aangesloten op je Raspberry Pi, dit betekent dat je LAN-kabel moet zijn aangesloten op je RPi en een SSH-verbinding moet maken. (info over het maken van een externe verbinding vindt u hier:

Ik heb mijn eigen lessen gebruikt en deze zijn ook allemaal opgenomen in mijn GitHub.

In mijn backend-bestand heb ik verschillende klassen gebruikt, zodat alles afzonderlijk kan worden gebruikt en zodat mijn hoofdcode geen puinhoop is met alle verschillende threads. Ik gebruikte threading om alle verschillende klassen tegelijk uit te voeren. En onderaan heb je alle routes zodat we gemakkelijk gegevens in onze frontend kunnen krijgen.

Stap 8: Frontend schrijven (HTML, CSS & JavaScript)

Nu de backend klaar is, kunnen we beginnen met het schrijven van de volledige frontend.

HTML en CSS waren best moeilijk voor mij, ik deed mijn best om het eerst mobiel te maken omdat ik er verbinding mee kan maken met bluetooth om de nummers met Spotify te wijzigen. Dus het zou gemakkelijker te bedienen zijn vanaf een mobiel dashboard

Je kunt je dashboard op elke gewenste manier ontwerpen, ik laat gewoon mijn code en ontwerp hier achter, je kunt doen wat je wilt!

En Javascript was niet eenvoudiger voor mij, werkte met een paar GET's van mijn backend-routes, tonnen gebeurtenisluisteraars en enkele socketio-structuren om de gegevens van mijn sensoren te krijgen.

Stap 9: Mijn zaak opbouwen en alles samenvoegen

Mijn zaak bouwen en alles samenbrengen
Mijn zaak bouwen en alles samenbrengen
Mijn zaak bouwen en alles samenbrengen
Mijn zaak bouwen en alles samenbrengen
Mijn zaak bouwen en alles samenbrengen
Mijn zaak bouwen en alles samenbrengen
Mijn zaak bouwen en alles samenbrengen
Mijn zaak bouwen en alles samenbrengen

Ik begon eerst te schetsen hoe ik wilde dat de behuizing eruit zou zien, iets belangrijks was dat het groot genoeg moest zijn om alles erin te laten passen, aangezien we een groot circuit hadden om in de behuizing te plaatsen, maar we moesten compact blijven zodat het niet deed' neemt niet veel ruimte in beslag

Ik heb de kist van hout gemaakt, ik denk dat het het gemakkelijkst is om mee te werken als je niet zoveel ervaring hebt met het bouwen van kisten en je ook veel dingen hebt die je ermee kunt doen.

Ik ben begonnen met een oude plank die ik had liggen en ben net begonnen met het zagen van het hout. Toen ik mijn basiskoffer had, moest ik er alleen gaten in boren (veel aan de voorkant van de koffer, zoals je op de foto's kunt zien en er wat spijkers in doen, het is een heel basiskoffer, maar het ziet er best cool uit en past perfect. Ik heb ook besloten om het wit te schilderen om het er goed uit te laten zien.

En toen de zaak klaar was, was het tijd om alles in elkaar te zetten, zoals je kunt zien op de laatste foto! Het is een beetje een puinhoop in de doos, maar alles werkt en ik had niet zoveel meer ruimte, dus ik raad je aan om misschien een grotere koffer te maken als je mijn project opnieuw maakt.

Aanbevolen: