Table des matières:
- Étape 1: Câblage du circuit
- Étape 2: Accéder au Raspberry Pi
- Étape 3: Temps de codage
- Étape 4: Tout assembler
Vidéo: Lunettes intelligentes : 4 étapes
2024 Auteur: John Day | [email protected]. Dernière modifié: 2024-01-30 09:05
Bonjour à tous, aujourd'hui je vais vous montrer comment fabriquer des Smart Glasses à la maison ! L'une des plus grandes choses à propos des lunettes intelligentes est à quel point il est avantageux d'avoir quelque chose comme ça dans le monde de la technologie d'aujourd'hui et comment il n'y a pas qu'une seule version de lunettes intelligentes car toutes ont des fonctionnalités étonnantes et un nombre infini d'applications qui pourraient être intégrées à l'avenir. Les caractéristiques de ces lunettes intelligentes incluent l'affichage de l'heure, vous indiquant la température toutes les 5 minutes, entre ces 5 minutes, il bascule entre la température haute et basse attendue pour ce jour-là, il vous indique également la date. Mais sa principale caractéristique est qu'il prend une photo toutes les 10 secondes, puis analyse cette image pour le texte dans lequel il renverra des informations utiles à ce sujet, s'il trouve une question, il y répondra en utilisant wolfram, ou s'il trouve une équation mathématique ça va le résoudre !
Fournitures:
Les fournitures nécessaires à ce projet comprendront les éléments suivants:
1) Un Raspberry Pi 0 W (De vilros.com)
2) Un écran OLED 128x64 clair (de Sparkfun.com)
3) Un module de caméra formaté pour Raspberry Pi 0 W (de amazon.com)
4) Tous les verres de votre choix
5) Fils
6) Fer à souder
7) Soudure sans plomb (parce que vous ne voulez pas mourir du plomb)
8) Adhésif 2 voies
9) Carte SD d'au moins 8 Go
10) ordinateur et connexion internet
En supposant que vous ayez déjà un ordinateur et une connexion Internet, le coût de ces lunettes s'élèvera à environ 130,00 $
Étape 1: Câblage du circuit
Afin d'afficher du texte sur l'écran que vous allez devoir vous connecter à l'OLED via I2C ou SPI, je choisis I2C car c'est celui que je suis le plus à l'aise d'utiliser mais si vous avez envie de vous y connecter via SPI allez suivre ce tutoriel sur le site Sparkfun et revenez ici lorsque vous avez terminé. https://learn.sparkfun.com/tutorials/transparent-g… Si vous avez choisi I2C car j'ai soudé les fils comme indiqué par ce qui suit:
Pi \/ OLED \/
3.3v 3.3v
TERRE TERRE
SDA SDA
SCL SCL
Veuillez noter que l'OLED transparent ne peut gérer que 3.3v.
Une fois que vous avez terminé de connecter le circuit, faites glisser le câble plat du module de caméra dans le support de câble plat du raspberry pi en tirant sur la pince noire et en la faisant glisser une fois le câble plat en place.
Étape 2: Accéder au Raspberry Pi
En utilisant ssh, nous pouvons accéder à notre pi avec notre PC sans connecter un clavier, une souris et un moniteur externes supplémentaires. La première chose à faire est de connecter votre carte SD à votre PC avec un adaptateur ou un port intégré, puis vous devrez vous rendre sur ce lien https://www.raspberrypi.org/downloads/raspbian/ et télécharger Raspbian buster avec bureau. Deuxièmement, vous devez mettre le système d'exploitation sur la carte SD à l'aide de BalenaEtcher, sélectionnez votre carte SD et le système d'exploitation Raspbian et cliquez sur "flash". Ce processus peut prendre un certain temps, alors revenez lorsque vous avez terminé. Troisièmement, accédez à la carte SD dans l'explorateur de fichiers ou le Finder sur mac et créez un fichier texte nommé wpa_supplicant, assurez-vous de supprimer l'extension.txt et d'ajouter.conf, dans le fichier, collez ce qui suit:
pays=États-Unis
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev update_config=1 network={ ssid="WIFI_SSID" scan_ssid=1 psk="WIFI_PASSWORD" key_mgmt=WPA-PSK }
Vous devrez entrer votre nom et mot de passe WiFi dans les endroits et pays correspondants si vous n'êtes pas aux États-Unis. Gardez à l'esprit que le Raspberry Pi ne peut se connecter qu'à un réseau 2,4 GHz, ce qui signifie que votre ordinateur devra également se connecter à ce réseau. Après avoir créé un fichier texte vide sans extension appelé ssh, puis éjectez votre carte SD. Vous devrez ensuite installer PuTTY https://www.putty.org/, ce que vous utiliserez pour activer ssh. Une fois installé, entrez l'adresse IP de votre raspberry pi, vous pouvez savoir de quoi il s'agit en vous connectant au site Web de votre routeur et en regardant les appareils connectés.
Après avoir accédé au Raspberry Pi, il vous demandera de vous connecter, le nom d'utilisateur par défaut est "pi" et le mot de passe est "raspberry". Tapez sudo raspi-config puis accédez aux options d'interfaçage et activez la caméra, ssh et i2c, puis cliquez sur terminer et tapez sudo reboot. Maintenant, vous êtes prêt à ssh dans le raspberry pi, allez-y et installez Remote Desktop et entrez l'adresse IP de votre raspberry pi et vous êtes maintenant prêt à ssh dans le raspberry pi.
Étape 3: Temps de codage
J'ai choisi de coder ce programme en python, alors assurez-vous que python3.7 ou 3.8 est installé sur votre bureau. Ce code fonctionne en utilisant un serveur et un client, le serveur étant votre PC. Le client ou raspberry pi prendra une photo et la téléchargera dans la boîte de dépôt qui est récupérée par le serveur qui exécute ensuite le traitement de l'image et la reconnaissance de texte sur l'image. Vous devrez obtenir un identifiant d'application wolframalpha, dropbox et openweathermap pour que cela fonctionne, tout ce que vous avez à faire est de vous inscrire sur les sites Web et cela vous donnera un identifiant d'application. puis entrez-les dans les endroits correspondants déterminés par les commentaires dans le code. Assurez-vous que pip a tout installé et installé Tesseract OCR et OpenCV. Créez un fichier python nommé Server.py sur votre PC et un fichier nommé client.py sur le raspberry pi puis copiez et collez le code. Mais sachez que plus les caractères sont gras et le fond plus blanc meilleurs sont les résultats, c'est le cas de tous les logiciels de reconnaissance de texte.
Tous les liens pour s'inscrire à un app-id \/
www.wolframalpha.com/
openweathermap.org/api
www.dropbox.com/developers/documentation
Assurez-vous d'installer Tesseract OCR et OpenCV \/
github.com/UB-Mannheim/tesseract/wiki
opencv.org/
Serveur.py:
import dropboxfrom PIL import Image import cv2 import pytesseract from pytesseract import Output import numpy as np import wolframalpha import socket import time
dbx = dropbox. Dropbox("dropboxAPIkey")
s = socket.socket(socket. AF_INET, socket. SOCK_STREAM)
app_id = "App-ID"
hôte = socket.gethostname()
port = 60567 print (host) s.bind((host, port)) s.listen(2)
tant que vrai:
c, addr = s.accept() print (f'Connection obtenue depuis: {addr}') break
tant que vrai:
while True: métadonnées time.sleep(13.7), f = dbx.files_download("/dropbox_API/Image.jpg") out = open("Image.jpg", 'wb') out.write(f.content) out. close() print("Image téléchargée !") image = cv2.imread("Image.jpg") Image = cv2.resize(image, (640, 480), interpolation=cv2. INTER_AREA) image68 = cv2.rotate(Image, cv2. ROTATE_90_COUNTERCLOCKWISE) gris = cv2.cvtColor(image68, cv2. COLOR_BGR2GRAY)
def remove_noise (gris):
return cv2.medianBlur(gris, 5) seuillage def(gris): return cv2.threshold(gris, 0, 255, cv2. THRESH_BINARY + cv2. THRESH_OTSU)[1] def dilate(gris): kernel = np.ones((5, 5), np.uint8) renvoie cv2.dilate(gris, noyau, itérations=1) d = pytesseract.image_to_data(gris, output_type = Output. DICT)
n_boxes = len(d['texte'])
for i in range(n_boxes): if int(d['conf']) > 60: (x, y, w, h) = (d['left'], d['top'], d['largeur'], d['hauteur']) gray = cv2.rectangle(gray, (x, y), (x + w, y + h), (0, 255, 0), 2) break pytesseract.pytesseract.tesseract_cmd = r"C:\Program Files\Tesseract-OCR\tesseract.exe" text = pytesseract.image_to_string(gray) print(text) while True: text2 = " " if len(text) >= 2: c.send(bytes(text, "utf-8")) if len(text) = 2: query = text client = wolframalpha. Client(app_id) res = client.query(query) answer = next(res.results).text answer1 = answer.partition('\n')[0] print (answer1) c.send(bytes(answer1, "utf-8")) if len(text) <= 1: c.send(bytes(text2, "utf-8")) time.sleep(7.5) pause
Client.py:
importer dropboximport picameraimport time de luma.core.interface.serial importer i2c de luma.core.render importer canvas de luma.oled.device importer ssd1306, ssd1325, ssd1331, sh1106 importer socket importer datetime from time import sleep importer pyowm serial = i2c(port=1, address=0x3C) device = ssd1306(serial, rotate=1) camera = picamera. PiCamera() dropbox_access_token= "" #Your dropbox-id again computer_path=r"/home/pi/Image.jpg" dropbox_path= f"/dropbox_API/Image.jpg" s = socket.socket(socket. AF_INET, socket. SOCK_STREAM) host = ""#adresse ip de votre pc port = 60567 s.connect((host, port)) msg1 = " " owm = pyowm. OWM("")#app-id pour openweathermap num = ["05", "10", "15", "20", "25", "30", "35", "40", "45", "50", "55", "00"] cdt = datetime.datetime.now() min1 = str(cdt.minute) date = str(cdt.day) + "/" + str(cdt. mois) + "/" + str(cdt.année) obs = owm.weather_at_place("")#votre ville et votre pays au format chaîne météo = obs.get_weather() temp2 = str(weather.get_temperature("fahrenheit")["te mp_max"]) temp3 = str(weather.get_temperature("fahrenheit")["temp_min"]) tandis que True: cdt = datetime.datetime.now() min1 = str(cdt.minute) hour = str(cdt.hour) avec canvas(device) comme draw: draw.text((0, 0), hour, fill = "white") draw.text((11, 0), ":", fill = "white") draw.text((15, 0), min1, fill = "white") draw.text((0, 9), "_", fill = "white") draw.text((0, 9), date, fill = "white ") si min1 dans num: obs = owm.weather_at_place("")#votre ville et votre pays au format chaîne à nouveau
météo = obs.get_weather()
temp = str(weather.get_temperature("fahrenheit")["temp"]) draw.text((32, 0), "F", fill = "white") draw.text((40, 0), temp, fill = "white") si min1 n'est pas dans num: draw.text((40, 0), temp2, fill = "white") draw.text((32, 0), "F", fill = "white") camera.start_preview() time.sleep(2) camera.capture("/home/pi/Image.jpg") camera.stop_preview client = dropbox. Dropbox(dropbox_access_token) client print("[SUCCESS] compte dropbox lié"). files_upload(open(computer_path, "rb").read(), dropbox_path) print("[UPLOADED] {}".format(computer_path)) full_msg = " " time.sleep(5) msg = s.recv(100) if len(msg) >= 2: full_msg += msg.decode("utf-8") print (full_msg) cdt = datetime.datetime.now() min1 = str(cdt.minute) hour = str(cdt.hour) avec canvas(device) comme draw: draw.text((0, 19), full_msg, fill = "white") draw.text((0, 0), hour, fill = "white") draw.text((11, 0), ":", fill = "white") draw.text((15, 0), min1, fill = "white") draw.text((0, 9), "_", fill = " blanc") draw.text((0, 9), date, fill = "blanc") si min1 dans num: obs = owm.weather_at_place("")#votre ville et votre pays au format chaîne à nouveau
météo = obs.get_weather()
temp = str(weather.get_temperature("fahrenheit")["temp"]) draw.text((32, 0), "F", fill = "white") draw.text((40, 0), temp, fill = "white") si min1 n'est pas dans num: draw.text((40, 0), temp3, fill = "white") draw.text((32, 0), "F", fill = "white") if len(msg) <= 1: cdt = datetime.datetime.now() min1 = str(cdt.minute) hour = str(cdt.hour) avec canvas(device) comme draw: draw.text((0, 0), heure, fill = "white") draw.text((11, 0), ":", fill = "white") draw.text((15, 0), min1, fill = "white") draw. text((0, 9), "_", fill = "white") draw.text((0, 9), date, fill = "white") if min1 in num: obs = owm.weather_at_place("") #votre ville et votre pays au format chaîne à nouveau
météo = obs.get_weather()
temp = str(weather.get_temperature("fahrenheit")["temp"]) draw.text((32, 0), "F", fill = "white") draw.text((40, 0), temp, fill = "white") si min1 n'est pas dans num: draw.text((40, 0), temp3, fill = "white") draw.text((32, 0), "F", fill = "white") time.sleep(5.4) full_msg1 = " " msg1 = s.recv(100) if len(msg1) >= 2: full_msg1 += msg1.decode("utf-8") full_msg2 = ("\n".join(textwrap.wrap(full_msg1, 9))) cdt = datetime.datetime.now() min1 = str(cdt.minute) hour = str(cdt.hour) avec canvas(device) comme draw: draw.text((0, 19), full_msg, fill = "white") draw.text((0, 29), full_msg2, fill = "white") draw.text((0, 0), hour, fill = "white") draw.text ((11, 0), ":", fill = "white") draw.text((15, 0), min1, fill = "white") draw.text((0, 9), "_", fill = "white") draw.text((0, 9), date, fill = "white") if min1 in num: obs = owm.weather_at_place("")#votre ville et votre pays au format chaîne à nouveau
météo = obs.get_weather()
temp = str(weather.get_temperature("fahrenheit")["temp"]) draw.text((32, 0), "F", fill = "white") draw.text((40, 0), temp, fill = "white") si min1 n'est pas dans num: obs = owm.weather_at_place("")#votre ville et votre pays au format chaîne à nouveau
météo = obs.get_weather()
temp = str(weather.get_temperature("fahrenheit")["temp"]) draw.text((32, 0), "F", fill = "white") draw.text((40, 0), temp, fill = "white") si min1 n'est pas dans num: draw.text((40, 0), temp3, fill = "white") draw.text((32, 0), "F", fill = "white") if len(msg1) <= 1: cdt = datetime.datetime.now() min1 = str(cdt.minute) hour = str(cdt.hour) avec canvas(device) comme draw: draw.text((0, 0), heure, fill = "white") draw.text((11, 0), ":", fill = "white") draw.text((15, 0), min1, fill = "white") draw. text((0, 9), "_", fill = "white") draw.text((0, 9), date, fill = "white") if min1 in num: obs = owm.weather_at_place("") #votre ville et votre pays au format chaîne à nouveau
météo = obs.get_weather()
temp = str(weather.get_temperature("fahrenheit")["temp"]) draw.text((32, 0), "F", fill = "white") draw.text((40, 0), temp, fill = "white") si min1 n'est pas dans num: draw.text((40, 0), temp3, fill = "white") draw.text((32, 0), "F", fill = "white") time.sleep(7) client.files_delete(dropbox_path) print ("Fichiers supprimés")
P. S. Je suis un programmeur amateur, alors ne remettez pas en question mes horribles méthodes de programmation.
Étape 4: Tout assembler
Une fois que vous avez terminé tout le reste, vous avez pratiquement terminé, il ne vous reste plus qu'à attacher la caméra Raspberry Pi et l'écran aux lunettes. Vous pouvez le faire en utilisant l'adhésif double face mentionné dans les fournitures ou vous pouvez utiliser toutes les méthodes que vous jugez nécessaires. Vous avez peut-être également remarqué que je n'ai mentionné aucune batterie dans cette leçon, car j'ai prévu de futures mises à niveau pour ces lunettes et je ne voulais pas en attacher une pour le moment. Mais si vous voulez en attacher un, vous aurez besoin d'un circuit de chargeur li-po d'amazon
Si vous avez apprécié cela et que vous voulez en voir plus, j'ai lancé une chaîne YouTube et j'espère y publier également des tutoriels. Voici le lien:
www.youtube.com/channel/UCGqcWhHXdZf231rLe…
Dieu sauve !
Jean 3:16 "Car Dieu a tant aimé le monde qu'il a donné son Fils unique, celui qui croit toujours en lui ne périra pas mais aura la vie éternelle."
Conseillé:
Lunettes intelligentes (moins de 10 $ !!!): 8 étapes (avec photos)
Lunettes intelligentes (moins de 10 $ !!!) : Bonjour ! Nous connaissons tous les lunettes intelligentes comme celle nommée E.D.I.T.H. réalisé par notre personnage bien-aimé Tony Stark qui a ensuite été transmis à Peter Parker. Aujourd'hui, je vais construire un verre intelligent à moins de 10 $ ! Ils ne sont pas tout à fait un
Lunettes intelligentes : 6 étapes
Lunettes intelligentes : Salut tout le monde !! Aujourd'hui, je vais partager avec vous, quelque chose que je voulais depuis longtemps
Lunettes de réalité augmentée intelligentes DIY utilisant Arduino: 7 étapes
Lunettes de réalité augmentée intelligentes DIY utilisant Arduino : Alors que la technologie se développe rapidement et s'intègre à tous les aspects de la vie des gens, les concepteurs et les développeurs ont essayé de fournir une expérience plus agréable de la technologie aux gens. L'une des tendances technologiques qui visent à rendre la vie plus facile est l'usure
Lunettes à cristaux liquides pour l'amblyopie (lunettes d'entraînement à occlusion alternée) [ATtiny13] : 10 étapes (avec photos)
Lunettes à cristaux liquides pour l'amblyopie (lunettes d'entraînement à occlusion alternée) [ATtiny13] : amblyopie (œil paresseux), un trouble de la vue qui affecte environ 3% de la population, généralement traité par de simples cache-œil ou des gouttes d'atropine. Malheureusement, ces méthodes de traitement bloquent un œil plus fort pendant de longues périodes ininterrompues, non
Support pour ordinateur portable à 3 $ et 3 étapes (avec lunettes de lecture et porte-stylo) : 5 étapes
Support pour ordinateur portable à 3 $ et 3 étapes (avec lunettes de lecture et porte-stylo): Ce support à 3 $ et amp; Le support pour ordinateur portable en 3 étapes peut être fabriqué en 5 minutes. Il est très solide, léger et peut être plié pour l'emporter partout où vous allez