Indholdsfortegnelse:
- Trin 1: Tilslutning af kredsløbet
- Trin 2: Adgang til Raspberry Pi
- Trin 3: Kodningstid
- Trin 4: Sæt det hele sammen
Video: Smarte briller: 4 trin
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-30 08:25
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
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
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
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:
Smarte briller (under $ 10 !!!): 8 trin (med billeder)
Smarte briller (under $ 10 !!!): Hej! Vi kender alle til smarte briller som den, der hedder E.D.I.T.H. lavet af vores elskede karakter Tony Stark, som senere blev givet videre til Peter Parker. I dag skal jeg bygge et sådant smart glas, der også er under $ 10! De er ikke helt
Smarte briller: 6 trin
Smart Glasses: Hej alle sammen !! I dag vil jeg dele med jer, noget som jeg længe har ønsket En DIY Smart Glasses bygget lige omkring 25 $ Nu kan vi dø - Do It Extremely
Din egen smarte bil og ud over HyperDuino+R V3.5R med Funduino/Arduino: 4 trin
Din egen Smart Car & Beyond HyperDuino+R V3.5R Med Funduino/Arduino: Dette er en direkte kopi af dette sæt instruktioner HER. For mere information, gå til HyperDuino.com. Med HyperDuino+R v4.0R kan du starte en udforskningsvej i mange forskellige retninger, fra at styre motorer til at udforske elektronik, fra
Sådan gør du smarte rullegardiner med SONOFF Smart Switches ?: 14 trin
Sådan gør du smarte rullegardiner med SONOFF -smartafbrydere?: Brug låsemodus i SONOFF -smartafbrydere til at gøre dine almindelige rullegardiner/persienner til smarte, om de fleste af jer er enige om, at dette er en opgave, at du trækker rullegardiner/persienner op om morgenen og trække den ned om aftenen? Jeg er ihvertfald
Garduino - den smarte have med Arduino: 4 trin (med billeder)
Garduino - den smarte have med Arduino: I disse dage er ingen uskyldige. Er der nogen, der ikke ved et uheld dræbte en plante ??? Det er svært at holde dine planter i live. Du køber et nyt anlæg, og i værste fald glemmer du bare at vande det. I bedre tilfælde husker du, at den eksisterer, men du gør