Indholdsfortegnelse:

Smarte briller: 4 trin
Smarte briller: 4 trin

Video: Smarte briller: 4 trin

Video: Smarte briller: 4 trin
Video: НОВЫЙ НАГИБАТОР JBL CHARGE 3 - TRONSMART FORCE+??? 2024, November
Anonim
Smarte briller
Smarte briller
Smarte briller
Smarte briller

Hej alle i dag, jeg vil vise dig, hvordan du laver smarte briller derhjemme! En af de største ting ved smarte briller er, hvor gavnligt det er at have sådan noget i dagens teknologiske verden, og hvordan der ikke kun er en version af smarte briller, da alle har fantastiske funktioner og et uendeligt antal applikationer, der kan integreres i fremtiden. Funktionerne i disse smarte briller inkluderer tid til at fortælle dig temperaturen hvert 5. minut, mellem de fem minutter skifter den mellem den forventede høje og lave temperatur for den dag, den fortæller dig også datoen. Men dens hovedtræk er, at det tager et billede hvert 10. sekund og derefter analyserer det billede for tekst, hvor det vil returnere nyttige oplysninger om det, hvis det finder et spørgsmål, vil det besvare det ved hjælp af wolfram, eller hvis det finder en matematisk ligning det vil løse det!

Tilbehør:

De nødvendige forsyninger til dette projekt vil omfatte følgende:

1) En Raspberry Pi 0 W (Fra vilros.com)

2) En klar 128x64 OLED -skærm (Fra Sparkfun.com)

3) Et kameramodul formateret til Raspberry Pi 0 W (Fra amazon.com)

4) Eventuelle glas efter eget valg

5) Ledninger

6) Loddejern

7) Blyfrit loddemiddel (fordi du ikke vil dø af bly)

8) 2 -vejs klæbemiddel

9) SD -kort min på 8 GB

10) computer og internetforbindelse

Forudsat at du allerede har en computer og internetforbindelse, vil prisen på disse briller komme til omkring $ 130,00

Trin 1: Tilslutning af kredsløbet

Tilslutning af kredsløbet!
Tilslutning af kredsløbet!

For at vise tekst på skærmen skal du oprette forbindelse til OLED via I2C eller SPI, jeg vælger I2C, da det er den, jeg er mere komfortabel med at bruge, men hvis du har lyst til at oprette forbindelse til den via SPI, skal du følge denne vejledning på Sparkfun -webstedet og kom tilbage her, når du er færdig. https://learn.sparkfun.com/tutorials/transparent-g… Hvis du har valgt I2C, da jeg har loddet ledningerne som angivet af følgende:

Pi \/ OLED \/

3.3v 3.3v

GND GND

SDA SDA

SCL SCL

Bemærk, at den klare OLED kun kan klare 3,3v.

Når du er færdig med at forbinde kredsløbet, skal du glide kameramodulets båndkabel ind i båndkabelholderen på hindbærpien ved at trække den sorte klemme ud og skubbe den tilbage, når båndkablet er på plads.

Trin 2: Adgang til Raspberry Pi

Ved hjælp af ssh kan vi få adgang til vores pi med vores pc uden at tilslutte en ekstra ekstern tastaturmus og skærm. Første ting du gør er at tilslutte dit SD -kort til din pc med en adapter eller en indbygget port, så skal du gå til dette link https://www.raspberrypi.org/downloads/raspbian/ og downloade Raspbian buster med skrivebord. For det andet skal du sætte OS på SD -kortet ved hjælp af BalenaEtcher, vælg dit SD -kort og Raspbian OS og klik på "flash", denne proces kan tage noget tid, så kom tilbage, når du er færdig. For det tredje skal du gå til SD -kortet i filudforsker eller finder på mac og oprette en tekstfil ved navn wpa_supplicant, sørg for at slette.txt -udvidelsen og tilføj.conf i filen, indsæt følgende:

land = USA

ctrl_interface = DIR =/var/run/wpa_supplicant GROUP = netdev update_config = 1 netværk = {ssid = "WIFI_SSID" scan_ssid = 1 psk = "WIFI_PASSWORD" key_mgmt = WPA-PSK}

Du bliver nødt til at indtaste dit WiFi -navn og adgangskode de tilsvarende steder og land, hvis du ikke er i USA. Husk, at Raspberry Pi kun kan oprette forbindelse til et 2,4 GHz netværk, hvilket betyder, at din pc også skal oprette forbindelse til det netværk. Efter at have oprettet en tom tekstfil uden udvidelse kaldet ssh og derefter skubbe dit SD -kort ud. Du bliver derefter nødt til at installere PuTTY https://www.putty.org/, som du vil bruge til at aktivere ssh. Når den er installeret, skal du indtaste IP -adressen på din hindbær pi, du kan finde ud af, hvad det er ved at gå til dit routers websted for at logge ind og se på de tilsluttede enheder.

Når du har fået adgang til Raspberry Pi, vil den bede dig om at logge ind, standardbrugernavnet er "pi" og adgangskoden er "hindbær". Skriv sudo raspi-config, gå derefter til grænsefladeindstillinger og aktiver kamera, ssh og i2c, klik derefter på afslut, og skriv sudo genstart. Nu er du klar til at ssh ind i hindbær pi, fortsæt og installer Fjernskrivebord og indtast din hindbær pis IP -adresse, og du er nu god til at ssh ind i hindbær pi.

Trin 3: Kodningstid

Kodningstid!
Kodningstid!

Jeg har valgt at kode dette program i python, så sørg for at have python3.7 eller 3.8 installeret på dit skrivebord. Denne kode fungerer ved hjælp af en server og en klient, hvoraf serveren er din pc. Klienten eller hindbær pi vil tage et billede og uploade det til dropbox, som hentes af serveren, der derefter kører billedbehandling og tekstgenkendelse på billedet. Du bliver nødt til at få en wolframalpha, dropbox og openweathermap app-id for at dette kan fungere. Alt du skal gøre er at gå til webstedets tilmelding, og det vil give dig et app-id. og indtast dem derefter på tilsvarende steder bestemt af kommentarerne i koden. Sørg for, at du har installeret pip alt og installeret Tesseract OCR og OpenCV. Opret en python -fil ved navn Server.py på din pc og en fil med navnet client.py på hindbær pi, og kopier og indsæt derefter koden. Men ved, at jo federe tegnene og hvidere baggrund, jo bedre resultater, er dette tilfældet med hver tekstgenkendelsessoftware.

Alle links til tilmelding til et app-id \/

www.wolframalpha.com/

openweathermap.org/api

www.dropbox.com/developers/documentation

Sørg for at installere Tesseract OCR og OpenCV \/

github.com/UB-Mannheim/tesseract/wiki

opencv.org/

Server.py:

import dropbox fra PIL import Billede import cv2 import pytesseract fra pytesseract import Output import numpy som np import wolframalpha import socket importtid

dbx = dropbox. Dropbox ("dropboxAPIkey")

s = socket.socket (socket. AF_INET, socket. SOCK_STREAM)

app_id = "App-ID"

host = socket.gethostname ()

port = 60567 print (host) s.bind ((host, port)) s.listen (2)

mens det er sandt:

c, addr = s.accept () print (f'Fik forbindelse fra: {addr} ') pause

mens det er sandt:

while True: time.sleep (13.7) metadata, f = dbx.files_download ("/dropbox_API/Image.jpg") out = open ("Image.jpg", 'wb') out.write (f.content) out. close () print ("Billede downloadet!") image = cv2.imread ("Image.jpg") Image = cv2.resize (billede, (640, 480), interpolation = cv2. INTER_AREA) image68 = cv2.rotate (Billede, cv2. ROTATE_90_COUNTERCLOCKWISE) grå = cv2.cvtColor (image68, cv2. COLOR_BGR2GRAY)

def remove_noise (grå):

return cv2.medianBlur (grå, 5) def tærskelværdi (grå): return cv2.threshold (grå, 0, 255, cv2. THRESH_BINARY + cv2. THRESH_OTSU) [1] def dilate (grå): kernel = np.ones ((5, 5), np.uint8) return cv2.dilate (grå, kerne, iterationer = 1) d = pytesseract.image_to_data (grå, output_type = Output. DICT)

n_boxes = len (d ['tekst'])

for i i området (n_bokse): hvis int (d ['conf'] )> 60: (x, y, w, h) = (d ['venstre'] , d ['top'] , d ['bredde'] , d ['højde'] ) grå = cv2.rektangel (grå, (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 (grå) print (tekst) mens True: text2 = " "hvis len (tekst)> = 2: c.send (bytes (tekst," utf-8 ")) hvis len (tekst) = 2: forespørgsel = tekstklient = wolframalpha. Client (app_id) res = client.query (forespørgsel) svar = næste (gen.resultater).tekst svar1 = svar.partition ('\ n') [0] print (svar1) c.send (bytes (svar1, "utf-8")) if len (tekst) <= 1: c.send (bytes (text2, "utf-8")) time.sleep (7.5) pause

Client.py:

import dropboximport picameraimport tid fra luma.core.interface.seriel import i2c fra luma.core.render import lærred fra luma.oled.enhed import ssd1306, ssd1325, ssd1331, sh1106 import socket importdato fra tidspunkt import sleep import pyowm serial = i2c (port = 1, adresse = 0x3C) enhed = ssd1306 (seriel, roter = 1) kamera = picamera. PiCamera () dropbox_access_token = "" #Din dropbox-id igen computer_path = r "/home/pi/Image.jpg" dropbox_path = f "/dropbox_API/Image.jpg" s = socket.socket (socket. AF_INET, socket. SOCK_STREAM) host = "" #ip -adresse på din pc -port = 60567 s.connect ((host, port)) msg1 = "" owm = pyowm. OWM ("")#app-id til 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. måned) + "/" + str (cdt.year) obs = owm.weather_at_place ("")#din by og dit land i strengformat weather = obs.get_weather () temp2 = str (weather.get_temperature ("fahrenheit") ["te mp_max "]) temp3 = str (weather.get_temperature (" fahrenheit ") [" temp_min "]) mens True: cdt = datetime.datetime.now () min1 = str (cdt.minute) time = str (cdt.hour) med lærred (enhed) som tegning: draw.text ((0, 0), time, fill = "hvid") draw.text ((11, 0), ":", fill = "white") draw.text ((15, 0), min1, fill = "hvid") draw.text ((0, 9), "_", fill = "white") draw.text ((0, 9), date, fill = "white ") hvis min1 i num: obs = owm.weather_at_place (" ")#din by og dit land i strengformat igen

vejr = obs.get_weather ()

temp = str (weather.get_temperature ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", fill = "white") draw.text ((40, 0), temp, fill = "hvid") hvis min1 ikke i 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) print ("[SUCCESS] dropbox konto linket") klient. files_upload (open (computer_path, "rb"). read (), dropbox_path) print ("[UPLOADED] {}". format (computer_path)) full_msg = "" time.sleep (5) msg = s.recv (100) hvis len (msg)> = 2: full_msg += msg.decode ("utf-8") print (full_msg) cdt = datetime.datetime.now () min1 = str (cdt.minute) time = str (cdt.hour) med lærred (enhed) som tegning: draw.text ((0, 19), full_msg, fill = "hvid") draw.text ((0, 0), time, fill = "white") draw.text ((11, 0), ":", fill = "hvid") draw.text ((15, 0), min1, fill = "white") draw.text ((0, 9), "_", fill = " hvid ") draw.text ((0, 9), dato, fill = "hvid") hvis min1 i num: obs = owm.weather_at_place ("")#din by og dit land i strengformat igen

vejr = obs.get_weather ()

temp = str (weather.get_temperature ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", fill = "white") draw.text ((40, 0), temp, fill = "hvid") hvis min1 ikke i num: draw.text ((40, 0), temp3, fill = "white") draw.text ((32, 0), "F", fill = "white") hvis len (msg) <= 1: cdt = datetime.datetime.now () min1 = str (cdt.minute) time = str (cdt.hour) med lærred (enhed) som draw: draw.text ((0, 0), time, fill = "hvid") draw.text ((11, 0), ":", fill = "white") draw.text ((15, 0), min1, fill = "white") draw. tekst ((0, 9), "_", fill = "hvid") draw.text ((0, 9), dato, fill = "hvid") hvis min1 i num: obs = owm.weather_at_place ("") #din by og land i strengformat igen

vejr = obs.get_weather ()

temp = str (weather.get_temperature ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", fill = "white") draw.text ((40, 0), temp, fill = "hvid") hvis min1 ikke i 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) time = str (cdt.hour) med lærred (enhed) som tegning: draw.text ((0, 19), full_msg, fill = "hvid") draw.text ((0, 29), full_msg2, fill = "white") draw.text ((0, 0), time, fill = "white") draw.text ((11, 0), ":", fill = "white") draw.text ((15, 0), min1, fill = "white") draw.text ((0, 9), "_", fill = "hvid") draw.text ((0, 9), dato, fill = "hvid") hvis min1 i num: obs = owm.weather_at_place ("")#din by og dit land i strengformat igen

vejr = obs.get_weather ()

temp = str (weather.get_temperature ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", fill = "white") draw.text ((40, 0), temp, fill = "hvid") hvis min1 ikke i num: obs = owm.weather_at_place ("")#din by og dit land i strengformat igen

vejr = obs.get_weather ()

temp = str (weather.get_temperature ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", fill = "white") draw.text ((40, 0), temp, fill = "hvid") hvis min1 ikke i num: draw.text ((40, 0), temp3, fill = "white") draw.text ((32, 0), "F", fill = "white") hvis len (msg1) <= 1: cdt = datetime.datetime.now () min1 = str (cdt.minute) time = str (cdt.hour) med lærred (enhed) som draw: draw.text ((0, 0), time, fill = "hvid") draw.text ((11, 0), ":", fill = "white") draw.text ((15, 0), min1, fill = "white") draw. tekst ((0, 9), "_", fill = "hvid") draw.text ((0, 9), dato, fill = "hvid") hvis min1 i num: obs = owm.weather_at_place ("") #din by og land i strengformat igen

vejr = obs.get_weather ()

temp = str (weather.get_temperature ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", fill = "white") draw.text ((40, 0), temp, fill = "hvid") hvis min1 ikke i num: draw.text ((40, 0), temp3, fill = "white") draw.text ((32, 0), "F", fill = "white") time.sleep (7) client.files_delete (dropbox_path) print ("Filer slettet")

P. S. Jeg er en amatørprogrammerer, så stil ikke spørgsmålstegn ved mine frygtelige programmeringsmetoder.

Trin 4: Sæt det hele sammen

Samler det hele!
Samler det hele!

Når du er færdig med alt andet, er du praktisk talt færdig, alt du har tilbage at gøre er at vedhæfte hindbær pi -kameraet og displayet til brillerne. Du kan gøre dette ved at bruge det dobbeltsidede klæbemiddel, der er nævnt i forbrugsvarerne, eller du kan bruge alle metoder, du synes er nødvendige. Du har måske også bemærket, at jeg ikke har nævnt et batteri nogen steder i denne lektion, det er fordi jeg har planlagt fremtidige opgraderinger til disse briller og ikke ønskede at vedhæfte et lige nu. Men hvis du vil vedhæfte en, skal du bruge et li-po oplader kredsløb fra amazon

Hvis du nød dette og vil se mere, har jeg startet en YouTube -kanal og vil forhåbentlig også lægge tutorials ud der. Her er linket:

www.youtube.com/channel/UCGqcWhHXdZf231rLe…

Gud gemmer!

Johannes 3:16 "For Gud elskede verden så meget, at han gav sin enbårne søn, den der altid tror på ham, skal ikke gå til grunde, men have et evigt liv."

Anbefalede: