Tableau de bord de vaisseau spatial jouet – Hackster.io

vf4Yj3arMf


introduction

Cet automne, ma sœur m'a envoyé une vidéo de ma nièce de 4 ans, au beau milieu de sa phase d'astronaute, montrant un vaisseau spatial en carton pour l'évaluation de ses oncles ingénieurs. Mon frère et moi avons adoré et avons discuté à quel point ce serait cool si nous lui envoyions une sorte de panneau de commande composé de boutons et d'interrupteurs. Ne serait-il pas particulièrement cool de pouvoir jouer avec elle de loin en envoyant des messages vidéo? C'est donc ce que nous avons décidé de faire pour son cadeau de Hanoucca. Le résultat a été – comme la plupart de mes projets – un tas d'apprentissage fumant. Mais nous l'avons fait et j'adore ça. Cela a pris environ 100 heures et 150 $, mais serait la moitié de chaque si je commençais avec ce que je sais maintenant.

Concept

L'objectif était de produire un petit package amusant et convivial qui pourrait être utilisé par un enfant. Je voulais que l'utilisateur puisse accrocher l'appareil au-dessus du bord d'une boîte en carton pour lui donner l'impression de faire partie d'un véhicule en carton. Je me suis inspiré de bons souvenirs en jouant avec un Compaq Portable quand j'étais enfant. Tout ce qu'il y avait était un programme de calendrier, alors mon frère, ma sœur et moi avons construit un fort autour de lui et avons fait défiler le calendrier pour voyager dans le temps dans notre machine à voyager dans le temps imaginaire.

Compte tenu de la rapidité avec laquelle les intérêts des enfants changent, mon objectif était d'imaginer des cas d'utilisation qu'un enfant apprécierait tout en le rendant suffisamment flexible pour être ce qu'il pourrait imaginer.

Une fois que j'ai pu visualiser le facteur de forme et certains boutons, j'ai dû décider à quoi ressemblerait l'expérience utilisateur. J'ai décidé que je voulais qu'il démarre dans un menu qui offrait deux options: une pour afficher un tableau de bord à l'écran et une qui afficherait une liste de messages vidéo disponibles pour la lecture. J'ai décidé de consacrer un bouton au cycle entre les options et un bouton à l'exécution de la sélection actuelle. J'ai finalement ajouté un deuxième menu avant celui-ci car l'appareil devait d'abord se connecter au Wi-Fi et vérifier les nouveaux messages vidéo et les télécharger s'ils étaient disponibles avant que le programme principal ne s'exécute. Cela offrait à l'utilisateur la possibilité de lire le dernier message une fois la vérification terminée ou de passer au menu principal.

Enfin, j'ai décidé de l'éteindre une batterie USB, accessible en ouvrant un panneau de porte transparent recouvrant la moitié inférieure du boîtier.

Aperçu

Le plan suivant suit à peu près mon processus de conception, moins tous les voyages de retour à la planche à dessin. Une fois que nous avons eu un concept, l'étape suivante a été de créer un schéma qui clarifiait les composants matériels nécessaires pour s'insérer dans l'enceinte. Ensuite, nous pourrions sélectionner des pièces et modéliser l'enceinte autour d'elles. J'ai construit un prototype sur une maquette en installant le logiciel nécessaire et en codant les programmes pour obtenir la fonctionnalité souhaitée. Vous trouverez ci-dessous un diagramme de Gantt qui a été jeté lorsque nous avons eu un épuisement à mi-projet.

Schématique

Ce diagramme a été préparé au début du projet, il ne correspond donc pas au produit final, en particulier dans les brochages. Mais cela montre les éléments clés nécessaires.

Conception de matériel

L'ordinateur à carte unique

Nous avons décidé dès le départ d'utiliser un Raspberry Pi afin de pouvoir afficher du contenu sur un écran et de pouvoir recevoir des vidéos via WiFi. Nous avons finalement opté pour un Raspberry Pi 3A, qui reste mon Pi préféré. Il possède un module WiFi intégré et un câble HDMI de taille normale, mais son encombrement est inférieur à celui d'un Pi traditionnel. Il sacrifie trois ports USB et le port Ethernet, mais je pense que c'est un excellent commerce, non seulement pour la taille, mais parce que je pense qu'il souffre moins de la pénurie de courant constante qui sévit dans la plupart des Pis récents.

L'écran d'affichage

C'est le deuxième projet Pi que j'ai réalisé avec un écran. Le précédent avait un écran de 7 pouces connecté à l'aide d'une carte HDMI vers TFT. Nous avons décidé d'utiliser un écran de 3,5 pouces dès le début car il serait difficile de ranger quelque chose de plus grand à l'intérieur, et aussi parce que je voulais être économe en énergie consommation. Nous avons décidé de connecter l'écran en utilisant les broches GPIO au lieu du port HDMI car je pensais que cela réduirait la complexité, le coût et éventuellement la consommation d'énergie, même si à la fin je ne sais pas si cela faisait vraiment l'un des trois. Nous avons essayé deux écrans différents, et tous deux souffraient d'un manque de documentation (je déteste critiquer, car j'apprécie les tonnes de travail des développeurs! Mais il y avait encore des obstacles).

Le système d'alimentation

Il a été décidé très tôt d'alimenter le tableau de bord avec un bloc d'alimentation USB. Il délivre la puissance et le courant corrects, il est rechargeable et compact, et il comprend son propre circuit de charge et un affichage de niveau. Mieux encore, cela fonctionne par thème! Un enfant de quatre ans peut voir le niveau de puissance actuel, et s'il s'épuise au milieu de la récréation, le remplacement de la pile à combustible du navire peut facilement faire partie de l'aventure. Sachez cependant que certains blocs d'alimentation exigent que l'utilisateur appuie sur un bouton pour les allumer. Nous en avons utilisé un qui fournit de l'énergie dès qu'il détecte une connexion de périphérique.

Le connecteur USB A mène à un commutateur physique, qui a très bien fonctionné (éventuellement).

Les interrupteurs

Les commutateurs sont cruciaux. J'ai repensé aux boutons les plus amusants avec lesquels jouer lors de voyages à Radio Shack quand j'étais enfant et j'ai ajouté trois boutons bascules standard, une bascule éclairée couverte, un curseur et un bouton d'arcade, plus deux modestes boutons momentanés. Malheureusement, je n'ai pas pu utiliser le curseur car je n'avais pas réalisé au départ que le convertisseur analogique-numérique que je prévoyais d'utiliser nécessitait les broches SPI requises par l'écran. Je n'ai pas pu mapper les réactions au bouton d'arcade ou à la bascule éclairée non plus parce que plusieurs broches que je pensais disponibles ne l'étaient pas, et j'ai manqué de temps. Mais les bascules et les boutons qui fonctionnent fournissent des bips et des gazouillis satisfaisants et de nombreuses actions réactives, donc je suis content de toute façon.

Les indicateurs de sortie

Je voulais une lumière qui clignote pour indiquer quand un nouveau message avait été détecté, et j'ai commandé une LED RVB adressable qui est contrôlée à l'aide d'un circuit intégré WS2812. Cela utilise la bibliothèque NeoPixel. Sachez que ce CI ne peut être contrôlé que par les broches GPIO 10, 12, 18 ou 21 (et les broches 10 et 18 ne sont pas disponibles si vous utilisez l'écran PiTFT).

Le code nécessaire est décrit dans ce guide: Contrôle NeoPixel en Python. Il n'apparaît pas dans mon code car je n'ai pas inclus cette LED lors du prototypage, donc au moment où j'ai découvert que je devais la connecter à la broche 12 ou 21, je n'ai pas eu le temps de le faire.

Le haut-parleur

L'appareil avait besoin d'un haut-parleur pour lire les bips sonores ainsi que l'audio des transmissions entrantes. J'ai été surpris de ne pas pouvoir trouver une carte de haut-parleur et un amplificateur compacts. J'ai trouvé quelques choses qui semblaient pouvoir fonctionner, mais je ne pouvais pas trouver d'exemples de personnes les utilisant et je ne savais pas quel volume elles produisaient, alors j'ai fini par utiliser un haut-parleur à hamburger que j'avais traîné. Afin de l'installer dans le boîtier, je l'ai démonté et je l'ai monté sur un support de carte personnalisé qui se trouve dans les fichiers CAO 3D.

La programmation

Configuration du Raspberry Pi

Configurez une installation propre du système d'exploitation Raspberry Pi comme décrit ici: Installez le système d'exploitation Raspberry Pi à l'aide de Raspberry Pi Imager

Configuration de l'affichage

Installez les pilotes d'affichage pour refléter l'affichage HDMI via les broches GPIO comme décrit ici: Installation facile de l'écran tactile Adafruit PiTFT 3,5 "

Il y a un autre composant qui était très difficile à trouver et absolument critique: lors de l'exécution d'un pygame dans un script python via le terminal, la sortie est affichée sur n'importe quel écran affichant le terminal. Cela pose un problème lors de l'exécution d'une instance pygame depuis le démarrage, car aucun affichage n'est affecté. La solution consiste à attribuer un affichage en préfixant la commande python qui appelle le script avec "DISPLAY =: 0" comme ceci:

$ DISPLAY =: 0 python3 /home/pi/script.py

De plus, j'avais besoin de désactiver l'économiseur d'écran. Le moyen le plus simple de le faire sur le système d'exploitation Raspberry Pi est d'installer xscreensaver, qui crée un menu de paramètres à partir duquel l'économiseur d'écran peut être désactivé.

Configurer Pygame

Pygame est assez incroyable. Il vous permet de générer du texte, des images et des formes sur un écran ainsi que de lire des clips audio. Suivez les instructions ici: Prise en main – Pygame Wiki. Les commandes importantes que j'ai utilisées sont dans IV.

pygame.init () : Initier pygame

screen = pygame.display.set_mode ((0,0), pygame.FULLSCREEN) : Attribuez la surface d'affichage et demandez-lui de remplir l'écran

win_obs = pygame.image.load ('/ home / pi / Rocket-dashboard / Images / win-observatory.png') : Chargez une image et affectez-la à une variable

beep1 = pygame.mixer.Sound ('/ home / pi / Rocket-dashboard / Sounds / beep1.wav') : Charger un son et l'assigner à une variable

beep1.play () : Jouez un son

screen.blit (objet_image, (0,0)) : Attribuez l'emplacement d'une image à l'écran. Dans ce cas, son coin supérieur gauche se trouve dans le coin supérieur gauche de l'écran.

font1 = pygame.font.SysFont (Aucun, 50) : Définir une police

text1 = font1.render ('NOUVELLE TRANSMISSION REÇUE', True, (255,102,178)) : Définissez un objet texte, y compris son contenu et sa couleur.

screen.blit (texte1, (50,30)) : Attribuer la position d'un objet texte

pygame.display.update () : Afficher les objets spécifiés à l'écran

Création des éléments visuels

C'était peut-être l'étape la plus facile et la plus amusante. Dans GIMP, j'ai présenté du texte et des images, et j'ai ajouté un logo Star Trek Starfleet. J'ai également créé une image similaire pour l'arrière-plan du bureau sur le Raspberry Pi afin de garder une cohérence stylistique lorsque pygame n'est pas en cours d'exécution, comme lors du démarrage et lors du basculement entre certains écrans.

Exécution depuis le démarrage

Pour quelque chose d'aussi commun que celui-ci, je pensais qu'il y aurait un guide clair et officiel en ligne, mais il s'avère que ce que vous voulez faire a un impact important sur la méthode que vous souhaitez utiliser. Dans ce cas, nous voulons démarrer un programme après l'initialisation du bureau et du WiFi. J'ai utilisé crontab, qui peut être édité avec la commande "crontab -e". De là, j'ai ajouté une commande de démarrage à la fin du fichier:

@reboot DISPLAY =: 0 python /home/pi/startup.py

Lecture de la vidéo

La lecture de vidéo s'est avérée être un fiasco. C'était le plus grand défi de tout le projet, et en vérité je ne l'ai jamais fait fonctionner aussi bien que je le souhaitais. Il y a eu plusieurs approches essayées, et chacune a souffert d'une sorte de problème, et donc, afin d'obtenir le projet à un état d'achèvement dans un resserrement, j'ai simplement demandé au programme python d'émettre une commande de terminal ouvrant une vidéo sélectionnée dans le lecteur multimédia VLC en externe . Cela a introduit des défauts de segmentation sur lesquels j'ai travaillé avec certains scripts shell pour corriger les problèmes, mais si j'avais eu plus de temps, je l'aurais résolu jusqu'à ce que je trouve une solution plus propre.

Téléchargement vidéo automatisé

Dès le départ, une des principales sources d'inspiration pour cet appareil était l'espoir que je pourrais jouer à distance avec ma nièce en enregistrant des vidéos la alertant sur des aventures et des missions qui avaient besoin de ses exploits. Pour ce faire, nous avons utilisé Rclone pour vérifier un dossier Google Drive au démarrage. Si le dossier contenait une vidéo introuvable dans un dossier local, le programme la téléchargerait sur l'appareil et avertirait l'utilisateur qu'une nouvelle transmission avait été reçue. Dans les deux cas, le programme demandait à l'utilisateur s'il voulait lire la vidéo la plus récente, et les quatre plus récentes étaient accessibles à partir du menu de la radio.

Dépannage

J'ai ajouté les informations d'identification du réseau WiFi dans la liste des suppliants wpa avant d'envoyer le produit fini à ma nièce, mais si travailler avec Raspberry Pi m'a appris une chose, c'est que tout configurer ostensiblement parfaitement n'est pas une garantie qu'il le fera réellement. travail. Donc, pour rendre possible le dépannage ou la saisie manuelle d'un mot de passe WiFi, j'ai téléchargé le clavier à l'écran de la boîte d'allumettes et laissé un raccourci sur le bureau. L'écran tactile est recouvert d'un petit protecteur d'écran en polycarbonate, mais si nécessaire, il se détache pour permettre le dépannage de l'écran tactile. J'ai également ajouté une commande kill dans le script principal qui est déclenchée en appuyant à la fois sur les boutons de cycle et de sélection en même temps.

Conclusions

Ce projet était plein de hauts et de bas. J'ai passé sous silence de nombreux maux de tête et frustrations, et j'aimerais beaucoup pouvoir raccourcir le processus de démarrage (cela prend actuellement plus de 30 secondes après la mise sous tension avant que l'écran ne donne des informations à l'utilisateur). Mais je suis toujours ravi de la façon dont j'ai pu mettre en œuvre la vision ambitieuse qui a lancé ce projet. Et le meilleur de tous, c'est pour un enfant précoce de quatre ans: donc après son arrivée, j'ai été informé à la fois qu'il n'exécutait pas la plupart de ses fonctions et aussi que le dépannage n'était pas nécessaire, car ma nièce a immédiatement commencé à jouer avec lui et l'a expliqué avec confiance. qu'elle savait déjà exactement comment fonctionnait l'ordinateur de son vaisseau spatial.

Si vous voulez le voir en action, il termine son démarrage à 0:38



Source link

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *