Wake Me Up - un réveil intelligent : 6 étapes
Wake Me Up - un réveil intelligent : 6 étapes
Anonim
Wake Me Up - un réveil intelligent
Wake Me Up - un réveil intelligent

Wake me up est un réveil intelligent qui peut également être utilisé comme éclairage intelligent.

La bande LED intégrée simule la lumière naturelle entrant dans votre pièce. Cela permet une manière calme et naturelle de commencer votre journée.

Le réveil est également équipé d'un affichage 4*7 segments pour lire l'heure, de haut-parleurs pour se réveiller avec votre musique préférée, d'un bouton tactile, d'un ldr pour adapter la luminosité de la bande led et d'un capteur de température que vous pouvez utiliser pour visualiser le température de votre pièce.

Fournitures

Une liste des prix exacts que j'ai payés peut être trouvée ici:

Microcontrôleurs et ordinateurs:

Raspberry Pi 4J'ai utilisé le raspberry pi 4 4 Go, cependant, tout modèle de raspberry pi 3+ devrait convenir

Arduino Uno

L'arduino est utilisé pour contrôler l'affichage de l'horloge à 4*7 segments.

Capteurs:

  • TMP36: capteur de température
  • LDR: résistance dépendante de la lumière

Actionneurs:

  • WS2801: Ruban LED adressable individuellement
  • Écran LCD: Un écran LCD 16*2.
  • Affichage de l'horloge 4*7 segments

CI:

  • 74HC595: Shiftregister pour l'affichage lcd
  • MCP3008: convertisseur analogique-numérique 8 bits
  • Convertisseur de niveau logique: utilisé pour communiquer entre raspi et arduino

D'autres choses:

  • Un amplificateur adafruit MAX9744 pour alimenter les enceintes
  • N'importe quel haut-parleur, j'ai utilisé un haut-parleur large bande Visaton 4Ohm 8Watt (Art. No. 2240)
  • Une alimentation 9 volts pour alimenter l'amplificateur
  • Une alimentation de 5 volts pour alimenter la bande de LED et d'autres composants. Gardez à l'esprit que chaque LED de la bande de LED peut consommer 60 mA, alors assurez-vous que votre alimentation est suffisante.
  • Quelques résistances 220Ohm
  • Une petite planche à pain à mettre dans votre valise.

Outils:

  • Un fer à souder.
  • De quoi faire le boîtier (j'ai utilisé une imprimante 3d avec du PLA et du PETG et des autocollants en vinyle pour obtenir l'effet bois.)

Étape 1: Configuration du Raspberry Pi

Le raspberry pi est notre principal microcontrôleur.

Le raspberry pi exécute notre serveur Web local, notre base de données, contrôle la bande de LED, les haut-parleurs, …

Partie 1: Installation de Raspbian

Utilisez ce tutoriel pour installer raspbian:

Assurez-vous que SSH est activé

Partie 2: Se connecter

Pour vous connecter à Internet, vous devez accéder au terminal de votre raspberry pi. Je recommande d'utiliser du mastic. Dans le type de terminal:

wpa_passphrase "Votre réseau" "Votre SSID" >> /etc/wpa_supplicant/wpa_supplicant.conf

"YourNetwork" est le nom de votre réseau wifi et "YourSSID" est le mot de passe du réseau.

Une fois que vous avez ajouté le réseau, essayez de redémarrer le Raspberry Pi.

Tapez la commande 'ping 8.8.8.8' cela enverra un paquet aux serveurs google si vous obtenez une réponse, votre réseau est configuré et fonctionne!

Partie 3: Installez les programmes nécessaires

Nous allons avoir besoin d'installer des programmes supplémentaires pour que ce projet soit opérationnel.

Avant de commencer, exécutez ces 2 commandes pour vous assurer que tout est mis à niveau.

mise à jour sudo apt

mise à niveau sudo apt

Cela peut prendre un certain temps.

Apache

sudo apt installer apache2 -y

sudo apt installer php libapache2-mod-php -y

MariaDB

sudo apt install mariadb-server mariadb-client -y

sudo apt installer php-mysql -y

PHPMonAdmin

sudo apt installer phpmyadmin -y

Pip Python

Nous devons installer pip pour activer certaines bibliothèques python

pip3 installer mysql-connector-python

pip3 installer flask-socketio

pip3 installer des flacons-cors

pip3 installer gevent

pip3 installer gevent-websocket

Étape 2: connexion de l'électronique

Connexion de l'électronique
Connexion de l'électronique
Connexion de l'électronique
Connexion de l'électronique

J'ai ajouté 2 schémas, 1 est un schéma de maquette à des fins de test. Je recommande de construire le premier schéma et d'essayer de faire fonctionner le code.

J'ai ajouté les fichiers fritzing ci-dessous.

Étape 3: Conception de la base de données

Conception de base de données
Conception de base de données

C'est le schéma de base de données que j'ai fait. Les mots sont en néerlandais mais je vais expliquer chaque tableau en détail.

Tableau 1: tblMuziek

C'est une table assez basique. Il enregistre le nom de l'artiste, le nom de la chanson et le nom de fichier d'une chanson.

Tableau 2: tblLedstrip

Ce tableau garde une trace de l'état actuel de la bande de leds, il enregistre l'état de la bande de leds. Nous en avons besoin pour la fonction smartlight.

Tableau 3: tblSensoren

Ce tableau garde une trace des capteurs de notre alarme. Nous stockons le nom du capteur et le canal du MCP3008

Tableau 4: tblMeting

Cette table stocke les valeurs de nos capteurs ainsi que leur temps.

Tableau 5: tblWekker

Ce tableau stocke le mot de passe et le nom de votre réveil (ex. Chambre à coucher) Ce tableau n'est pas obligatoire mais je l'ai ajouté car je suppose que vous aurez plus d'1 réveil dans votre maison.

Tableau 6: tblAlarm

C'est probablement le tableau le plus important. Il garde une trace de l'alarme que vous avez réglée et de ce que l'horloge doit faire (quelle chanson jouer, quelle séquence de led, quels jours doit-elle sonner, …). Il est très important de garder une trace de 2 dates. 1 date permet de mémoriser à quelle heure l'alarme doit se déclencher. L'autre enregistre la dernière fois que l'alarme s'est déclenchée. Pour savoir quel jour de la semaine il doit se déclencher, j'ai utilisé un varchar qui contient un nombre de 7 chiffres. Le premier chiffre est lundi, le deuxième mardi, … Si c'est un 1, alors il devrait s'éteindre, si c'est un 0, il ne devrait pas. Exemple: 1111100 cela signifie que cette alarme doit se déclencher les lundi, mardi, mercredi, jeudi et vendredi.

Étape 4: Configuration Arduino

Cette étape est très facile. Il y aura un lien vers mon github à l'étape suivante où vous pourrez télécharger le fichier arduino.

Que fait le programme ?

Le programme attend que les données série arrivent du pi.

Dès que les données sont reçues, il analyse la chaîne et renvoie une confirmation au pi.

La chaîne sera quelque chose comme ceci: '1201' cela signifie qu'il est 12:01. J'ai utilisé un affichage à 7 segments à anode commune, ce qui signifie que les chiffres doivent être élevés et que A, B, C, D, E, F, G et DP doivent être bas pour les activer. Si vous utilisez une cathode commune, vous devez simplement changer HIGH en LOW et LOW en HIGH.

Voici un lien avec plus d'informations sur le fonctionnement des affichages à 7 segments. (avec l'utilisation de la bibliothèque):

www.instructables.com/id/Using-a-4-digit-7…

Voici un lien sur 7 segments d'affichage sans l'utilisation d'une bibliothèque:

create.arduino.cc/projecthub/SAnwandter1/p…

Étape 5: Backend Raspberry Pi

Backend Raspberry Pi
Backend Raspberry Pi

Vous pouvez télécharger mon code en utilisant Github. (https://github.com/VanHevelNico/WakeMeUp)

Comment installer le programme:

Le backend est écrit en python à l'aide de flacon. Vous pouvez créer un service qui démarre ce programme (app.py) automatiquement.

Vous devez mettre le code frontal dans le fichier html du serveur Apache que nous avons téléchargé précédemment. (/var/html)

Comment fonctionne le programme?

Lorsque le réveil est allumé, accédez à l'adresse IP de votre horloge (elle sera affichée sur l'écran lcd)

Dès que vous accédez à cette adresse IP dans votre navigateur, votre ordinateur enverra une requête socket.io au backend indiquant qu'un client s'est connecté. Lorsque le backend le recevra, quelques fils de discussion commenceront, ce que j'expliquerai ci-dessous.

Installer

Cela initialise tous les objets nécessaires.

ObtenirTemp

Cela lit le canal 0 du mcp3008 et convertit les données binaires en température réelle et les met dans la base de données avec la date et l'heure actuelles.

ObtenirGrafiekTemp

Celui-ci récupère les 20 dernières valeurs du capteur de température et les envoie au frontend.

tijd_sturen

Cette méthode obtient l'heure actuelle et vérifie si la minute a changé. S'il a changé, le programme envoie la nouvelle heure à l'arduino en utilisant la communication série

checkAlarme

C'est la méthode la plus importante. Il obtient toutes les alarmes qui sont activées et vérifie si l'une de ces alarmes doit disparaître entre maintenant et il y a 5 minutes (il s'agit d'un tampon pour s'assurer que chaque alarme se déclenche quand elle en a besoin). Si l'alarme doit se déclencher nous allons démarrer la musique, la bande led, … Nous lisons la résistance sensible à la force en continu et lorsque la valeur descend en dessous de 1000 (lisez le fsr est enfoncé) Nous éteignons l'alarme et mettons à jour l'alarme dans le base de données. Nous avons réglé la date à laquelle l'alarme s'est déclenchée pour la dernière fois à la date actuelle.

statusLight

Cette méthode émet la valeur du ledstrip et allume le ledstrip si nécessaire.

lichtAanpassen

C'est une méthode supplémentaire pour s'assurer que la bande LED et le voyant d'alarme n'entrent pas en conflit.

Étape 6: Cas

Cas
Cas
Cas
Cas
Cas
Cas

Le lien vers mes fichiers se trouve ici:

J'ai utilisé une imprimante 3D pour imprimer le boîtier. Il est imprimé en 4 parties différentes:

  1. La plaque avant avec des trous pour le haut-parleur et quelques murs pour l'affichage à 7 segments
  2. La bague extérieure pour le ledstrip en PETG transparent.
  3. La partie médiane
  4. La plaque arrière avec un trou pour l'écran lcd et un trou pour les câbles.

Dans le modèle d'origine, il n'y avait pas de trou pour l'affichage à 7 segments, mais cela est nécessaire car sinon la lumière de l'affichage à 7 segments ne brillera pas.

Comme vous pouvez le voir après avoir mis tous les composants dedans, j'ai utilisé des autocollants en vinyle avec un aspect bois pour rendre le résultat final plus beau. L'affichage de l'horloge brille à travers l'autocollant, ce qui crée un très bel effet.

Conseillé: