Innholdsfortegnelse:
- Trinn 1: Koble til kretsen
- Trinn 2: Få tilgang til Raspberry Pi
- Trinn 3: Kodetid
- Trinn 4: Sett alt sammen
Video: Smarte briller: 4 trinn
2024 Forfatter: John Day | [email protected]. Sist endret: 2024-01-30 11:20
Hei alle sammen i dag, jeg skal vise deg hvordan du lager smarte briller hjemme! En av de største tingene med smarte briller er hvor fordelaktig det er å ha noe slikt i dagens teknologiverden, og hvordan det ikke bare er en versjon av smarte briller, da alle har fantastiske funksjoner og et uendelig antall applikasjoner som kan integreres i fremtiden. Funksjonene til disse smarte brillene inkluderer tid til å fortelle deg temperaturen hvert 5. minutt, mellom de fem minuttene bytter det mellom forventet høy og lav temperatur for den dagen, det forteller deg også datoen. Men hovedfunksjonen er at det tar et bilde hvert 10. sekund og deretter analyserer det bildet for tekst der det vil returnere nyttig informasjon om det, hvis det finner et spørsmål, vil det svare på det ved hjelp av wolfram, eller hvis det finner en matematisk ligning det vil løse det!
Rekvisita:
Forsyningene som er nødvendige for dette prosjektet vil omfatte følgende:
1) En Raspberry Pi 0 W (Fra vilros.com)
2) En klar 128x64 OLED -skjerm (fra Sparkfun.com)
3) En kameramodul formatert for Raspberry Pi 0 W (fra amazon.com)
4) Eventuelle briller etter eget valg
5) Ledninger
6) Loddejern
7) Blyfritt loddetinn (fordi du ikke vil dø av bly)
8) 2 -veis lim
9) SD -kort min på 8 GB
10) datamaskin og internettforbindelse
Forutsatt at du allerede har en datamaskin og internettforbindelse, vil kostnaden for disse brillene komme til rundt $ 130,00
Trinn 1: Koble til kretsen
For å vise tekst på skjermen skal du koble deg til OLED via I2C eller SPI, jeg velger I2C ettersom det er den jeg er mer komfortabel med å bruke, men hvis du har lyst til å koble til den via SPI, følg denne opplæringen på Sparkfun -nettstedet og kom tilbake hit når du er ferdig. https://learn.sparkfun.com/tutorials/transparent-g… Hvis du har valgt I2C som jeg har loddetrådene som angitt av følgende:
Pi \/ OLED \/
3.3v 3.3v
GND GND
SDA SDA
SCL SCL
Vær oppmerksom på at den klare OLED bare kan håndtere 3,3v.
Etter at du er ferdig med å koble kretsen, skyv båndkabelen til kameramodulen inn i båndkabelholderen på bringebær -pi ved å trekke ut den svarte klemmen og skyve den tilbake når båndkabelen er på plass.
Trinn 2: Få tilgang til Raspberry Pi
Ved å bruke ssh kan vi få tilgang til pi -en vår med PCen uten å koble til en ekstra ekstern tastaturmus og skjerm. Det første du gjør er å koble SD -kortet til PCen med en adapter eller en innebygd port, så må du gå til denne lenken https://www.raspberrypi.org/downloads/raspbian/ og laste ned Raspbian buster med skrivebord. For det andre må du sette operativsystemet på SD -kortet ved hjelp av BalenaEtcher, velg SD -kortet og Raspbian -operativsystemet og klikk "flash", denne prosessen kan ta litt tid, så kom tilbake når du er ferdig. For det tredje, gå til SD -kortet i filutforskeren eller finneren på mac og opprett en tekstfil med navnet wpa_supplicant. Sørg for å slette.txt -utvidelsen og legg til.conf, lim inn følgende i filen:
land = USA
ctrl_interface = DIR =/var/run/wpa_supplicant GROUP = netdev update_config = 1 nettverk = {ssid = "WIFI_SSID" scan_ssid = 1 psk = "WIFI_PASSWORD" key_mgmt = WPA-PSK}
Du må skrive inn WiFi -navnet og passordet ditt på de tilsvarende stedene og landet hvis du ikke er i USA. Husk at Raspberry Pi bare kan koble til et 2,4 GHz -nettverk, noe som betyr at PC -en din også må koble seg til det nettverket. Etter å ha opprettet en tom tekstfil uten utvidelse kalt ssh, og deretter kaste ut SD -kortet. Du må da installere PuTTY https://www.putty.org/ som er det du vil bruke for å aktivere ssh. Når den er installert, skriver du inn IP -adressen til din bringebær pi, du kan finne ut hva det er ved å gå til ruterenes nettsted og logge på og se på de tilkoblede enhetene.
Etter at du har fått tilgang til Raspberry Pi vil den be deg om å logge på, standard brukernavn er "pi" og passordet er "bringebær". Skriv sudo raspi-config, gå deretter til grensesnittalternativer og aktiver kamera, ssh og i2c, klikk deretter på ferdig og skriv sudo reboot. Nå er du klar til å ssh inn i bringebærpi, fortsett og installer Eksternt skrivebord og skriv inn bringebærpis IP -adresse, og du er nå god til å ssh inn i bringebærpien.
Trinn 3: Kodetid
Jeg har valgt å kode dette programmet i python, så sørg for at du har python3.7 eller 3.8 installert på skrivebordet. Denne koden fungerer ved å bruke en server og en klient, tvers er din pc. Klienten eller bringebær pi vil ta et bilde og laste det opp til dropbox som hentes av serveren som deretter kjører bildebehandling og tekstgjenkjenning på bildet. Du må få en wolframalpha, dropbox og openweathermap app-id for at dette skal fungere. Alt du trenger å gjøre er å gå til nettstedets registrering og det vil gi deg en app-id. og deretter legge dem inn på tilsvarende steder bestemt av kommentarene i koden. Pass på at du har pip installert alt og installert Tesseract OCR og OpenCV. Lag en python -fil som heter Server.py på din PC og en fil som heter client.py på bringebær -pi, og kopier og lim inn koden. Men vet at jo dristigere tegnene og hvitere bakgrunn jo bedre resultater, dette er tilfellet med hver tekstgjenkjenningsprogramvare.
Alle koblingene for å registrere deg for en app-id \/
www.wolframalpha.com/
openweathermap.org/api
www.dropbox.com/developers/documentation
Sørg for å installere Tesseract OCR og OpenCV \/
github.com/UB-Mannheim/tesseract/wiki
opencv.org/
Server.py:
import dropbox fra PIL import Bildeimport cv2 import pytesseract fra pytesseract import Utdata 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"
vert = socket.gethostname ()
port = 60567 print (host) s.bind ((host, port)) s.listen (2)
mens det er sant:
c, addr = s.accept () print (f'Fot tilkobling fra: {addr} ') pause
mens det er sant:
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 ("Bilde lastet ned!") image = cv2.imread ("Image.jpg") Image = cv2.resize (image, (640, 480), interpolation = cv2. INTER_AREA) image68 = cv2.rotate (Bilde, cv2. ROTATE_90_COUNTERCLOCKWISE) grå = cv2.cvtColor (image68, cv2. COLOR_BGR2GRAY)
def remove_noise (grå):
return cv2.medianBlur (grå, 5) def terskel (grå): return cv2.threshold (grå, 0, 255, cv2. THRESH_BINARY + cv2. THRESH_OTSU) [1] def dilatere (grå): kjerne = np.ones ((5, 5), np.uint8) return cv2.dilate (grå, kjerne, iterasjoner = 1) d = pytesseract.image_to_data (grå, output_type = Output. DICT)
n_bokser = len (d ['tekst'])
for i i området (n_bokser): hvis int (d ['conf'] )> 60: (x, y, w, h) = (d ['venstre'] , d ['topp'] , d ['bredde'] , d ['høyde'] ) 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 = " "if len (text)> = 2: c.send (bytes (text," utf-8 ")) if len (text) = 2: query = text client = wolframalpha. Client (app_id) res = client.query (spørring) svar = neste (res.results).tekst answer1 = answer.partition ('\ n') [0] print (answer1) c.send (bytes (answer1, "utf-8")) if len (tekst) <= 1: c.send (bytes (text2, "utf-8")) time.sleep (7.5) pause
Client.py:
import dropboximport picameraimport time from luma.core.interface.serial import i2c from luma.core.render import canvas from luma.oled.device import ssd1306, ssd1325, ssd1331, sh1106 import socket importdato from time import sleep import pyowm serial = i2c (port = 1, adresse = 0x3C) enhet = ssd1306 (seriell, roter = 1) kamera = picamera. PiCamera () dropbox_access_token = "" #Din dropbox-id igjen 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 til PC -porten = 60567 s.connect ((host, port)) msg1 = "" owm = pyowm. OWM ("")#app-id for 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 ("")#byen og landet ditt 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 lerret (enhet) som tegning: draw.text ((0, 0), time, fill = "white") draw.text ((11, 0), ":", fill = "white") draw.text ((15, 0), min1, fill = "hvit") draw.text ((0, 9), "_", fill = "white") draw.text ((0, 9), date, fill = "white ") if min1 in num: obs = owm.weather_at_place (" ")#byen og landet ditt i strengformat igjen
vær = obs.get_weather ()
temp = str (weather.get_temperature ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", fill = "white") draw.text ((40, 0), temp, fill = "white") if min1 not in 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 account link") 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 lerret (enhet) som tegning: draw.text ((0, 19), full_msg, 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 = " hvit ") draw.text ((0, 9), dato, fyll = "hvit") hvis min1 i num: obs = owm.weather_at_place ("")#byen og landet ditt i strengformat igjen
vær = obs.get_weather ()
temp = str (weather.get_temperature ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", fill = "white") draw.text ((40, 0), temp, fill = "white") if min1 not in 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 lerret (enhet) som draw: draw.text ((0, 0), time, fill = "hvit") draw.text ((11, 0), ":", fill = "white") draw.text ((15, 0), min1, fill = "white") draw. tekst ((0, 9), "_", fyll = "hvit") draw.text ((0, 9), dato, fyll = "hvit") hvis min1 i num: obs = owm.weather_at_place ("") #byen og landet ditt i strengformat igjen
vær = obs.get_weather ()
temp = str (weather.get_temperature ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", fill = "white") draw.text ((40, 0), temp, fill = "white") if min1 not in 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". bli med (textwrap.wrap (full_msg1, 9))) cdt = datetime.datetime.now () min1 = str (cdt.minute) time = str (cdt.hour) med lerret (enhet) som tegning: draw.text ((0, 19), full_msg, fill = "hvit") 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), "_", fyll = "hvit") draw.text ((0, 9), dato, fyll = "hvit") hvis min1 i num: obs = owm.weather_at_place ("")#byen og landet ditt i strengformat igjen
vær = obs.get_weather ()
temp = str (weather.get_temperature ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", fill = "white") draw.text ((40, 0), temp, fill = "white") if min1 not in num: obs = owm.weather_at_place ("")#town and country in string format again
vær = obs.get_weather ()
temp = str (weather.get_temperature ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", fill = "white") draw.text ((40, 0), temp, fill = "white") if min1 not in 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 lerret (enhet) som draw: draw.text ((0, 0), time, fill = "hvit") draw.text ((11, 0), ":", fill = "white") draw.text ((15, 0), min1, fill = "white") draw. tekst ((0, 9), "_", fyll = "hvit") draw.text ((0, 9), dato, fyll = "hvit") hvis min1 i num: obs = owm.weather_at_place ("") #byen og landet ditt i strengformat igjen
vær = obs.get_weather ()
temp = str (weather.get_temperature ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", fill = "white") draw.text ((40, 0), temp, fill = "white") if min1 not in 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å ikke snakk om mine fryktelige programmeringsmetoder.
Trinn 4: Sett alt sammen
Når du er ferdig med alt annet, er du praktisk talt ferdig. Alt du har igjen å gjøre er å feste bringebær Pi -kameraet og skjermen til brillene. Du kan gjøre dette ved å bruke det dobbeltsidige limet som er nevnt i rekvisita, eller du kan bruke alle metodene du synes er nødvendige. Du har kanskje også lagt merke til at jeg ikke har nevnt et batteri noe sted i denne leksjonen, det er fordi jeg har planlagt fremtidige oppgraderinger for disse brillene og ikke ønsket å koble til et akkurat nå. Men hvis du ønsker å koble til en, trenger du en li-po-ladekrets fra Amazon
Hvis du likte dette og vil se mer, har jeg startet en YouTube -kanal og vil forhåpentligvis legge ut opplæringsprogrammer der også. Her er lenken:
www.youtube.com/channel/UCGqcWhHXdZf231rLe…
Gud redder!
Johannes 3:16 "For så høyt elsket Gud verden at han ga sin eneste sønn den som alltid tror på ham, ikke skal gå fortapt, men ha et evig liv."
Anbefalt:
Smarte trafikklys: 6 trinn
Smarte trafikklys: Hvorfor jeg laget dette prosjektet Jeg er student på Howest Kortijk. Det er et skoleprosjekt for mitt andre semester MCT. Når jeg kjører bilen min og det er rolig på gatene, er det ubrukelig å stå foran røde lys når det ikke er annen trafikk i motstander
Smarte briller (under $ 10 !!!): 8 trinn (med bilder)
Smarte briller (under $ 10 !!!): Hei! Vi er alle kjent med smarte briller som den som heter E.D.I.T.H. laget av vår elskede karakter Tony Stark som senere ble sendt videre til Peter Parker. I dag skal jeg bygge et slikt smart glass som også er under $ 10! De er ikke helt
Smarte briller: 6 trinn
Smarte briller: Hei alle sammen! I dag skal jeg dele med dere, noe jeg lenge har ønsket
DIY smarte briller - Arduino/ESP: 5 trinn
DIY Smart Glasses - Arduino/ESP: Den nye versjonen er tilgjengelig her: [YouTube] Hei, folkens! Jeg er her for å vise deg DIY -prosjektet mitt og oppfordre deg til å gjøre det selv! Prosjektet er ekte smarte briller som alle kan lage hjemme .Hele koden finner du her og ressurser: [GitHub] Jeg også
Slik gjør du smarte rullegardiner med SONOFF smarte brytere ?: 14 trinn
Slik gjør du smarte rullegardiner med SONOFF smarte brytere ?: Bruk låsemodus i SONOFF smarte brytere for å gjøre dine vanlige rullegardiner/persienner til smarte, om de fleste av dere er enige om at dette er en plikt at du trekker rullegardiner/persienner opp om morgenen og trekke den ned på kvelden? Uansett, jeg er