Sisukord:

Nutikad prillid: 4 sammu
Nutikad prillid: 4 sammu

Video: Nutikad prillid: 4 sammu

Video: Nutikad prillid: 4 sammu
Video: 4 урок "Знание или послушание" - Торбен Сондергаард. 2024, Juuli
Anonim
Nutikad prillid
Nutikad prillid
Nutikad prillid
Nutikad prillid

Tere kõigile täna, ma näitan teile, kuidas kodus nutikaid prille teha! Nutiklaaside üks suurimaid asju on see, kui kasulik on tänapäeva tehnoloogiamaailmas midagi sellist omada ja kuidas pole olemas ainult ühte nutiprillide versiooni, kuna kõigil on hämmastavad funktsioonid ja lõpmatu arv rakendusi, mida saaks integreerida tulevikus. Nende nutiklaaside funktsioonide hulka kuulub aja ütlemine, temperatuuri näitamine iga 5 minuti järel, nende 5 minuti vahel vahetab see selle päeva eeldatava kõrge ja madala temperatuuri vahel, samuti näitab see kuupäeva. Kuid selle peamine omadus on see, et ta teeb pildi iga 10 sekundi järel ja analüüsib seejärel seda pilti teksti jaoks, milles see annab selle kohta kasulikku teavet, kui ta leiab küsimuse, vastab ta sellele volframi abil või kui ta leiab matemaatilise võrrandi see lahendab selle!

Tarvikud:

Selle projekti jaoks vajalikud tarvikud hõlmavad järgmist:

1) Vaarika Pi 0 W (saidilt vilros.com)

2) selge 128x64 OLED -ekraan (saidilt Sparkfun.com)

3) Raspberry Pi 0 W jaoks vormindatud kaameramoodul (aadressilt amazon.com)

4) Teie valitud prillid

5) juhtmed

6) jootekolb

7) Pliivaba joodis (kuna te ei taha pliist surra)

8) kahesuunaline liim

9) Minimaalne SD -kaart 8 GB

10) arvuti ja internetiühendus

Eeldades, et teil on juba arvuti ja Interneti -ühendus, on nende prillide hind umbes 130,00 dollarit

Samm: ahela juhtmestik

Ahela juhtmestik!
Ahela juhtmestik!

Teksti kuvamiseks ekraanil, mille te ühendate OLED -iga I2C või SPI kaudu, valin I2C, kuna seda on mul mugavam kasutada, kuid kui tunnete, et soovite sellega SPI kaudu ühenduse luua, järgige seda õpetust Sparkfuni veebisaidilt ja tulge siia tagasi, kui olete lõpetanud. https://learn.sparkfun.com/tutorials/transparent-g… Kui olete valinud I2C, olen jootnud juhtmed järgmiselt:

Pi \/ OLED \/

3.3v 3.3v

GND GND

SDA SDA

SCL SCL

Pange tähele, et läbipaistev OLED suudab töödelda ainult 3.3v.

Kui olete vooluahela ühendamise lõpetanud, libistage kaameramooduli lintkaabel vaarika pi lindi kaablihoidikusse, tõmmates musta klambri välja ja libistades selle tagasi, kui lintkaabel on paigas.

Samm: juurdepääs Raspberry Pi -le

Kasutades ssh -d, pääseme arvutiga oma pi -le juurde ilma täiendava välise klaviatuuri hiire ja monitori ühendamata. Esimese asjana ühendage oma SD -kaart adapteriga või sisseehitatud pordiga arvutiga, seejärel peate minema sellele lingile https://www.raspberrypi.org/downloads/raspbian/ ja laadima alla Raspbian buster töölauaga. Teiseks peate operatsioonisüsteemi BalenaEtcheri abil SD -kaardile panema, valima oma SD -kaardi ja Raspbiani OS -i ning klõpsama nupul "Välk", see protsess võib veidi aega võtta, nii et tulge tagasi, kui olete lõpetanud. Kolmandaks minge failihalduris või Macis leidjas SD -kaardile ja looge tekstifail nimega wpa_supplicant. Kustutage kindlasti laiend.txt ja lisage failile.conf, kleepige järgmine:

riik = USA

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}

Kui te ei asu USA -s, peate sisestama oma WiFi nime ja parooli vastavatesse kohtadesse ja riikidesse. Pidage meeles, et Raspberry Pi saab ühendada ainult 2,4 GHz võrguga, mis tähendab, et ka teie arvuti peab selle võrguga ühenduse looma. Pärast tühja tekstifaili loomist ilma laiendita nimega ssh ja eemaldage SD -kaart. Seejärel peate installima PuTTY https://www.putty.org/, mida kasutate ssh lubamiseks. Kui olete installinud, sisestage oma vaarika pi IP -aadress, saate aru saada, mis see on, minnes oma ruuterite veebisaidile sisse logides ja vaadates ühendatud seadmeid.

Kui olete Raspberry Pi-le juurdepääsu saanud, palub see teil sisse logida, vaikimisi kasutajanimi on "pi" ja parool on "vaarikas". Tippige sudo raspi-config, seejärel liidese suvandite juurde ja lubage kaamera, ssh ja i2c, seejärel klõpsake nuppu Lõpeta ja tippige sudo reboot. Nüüd olete valmis vaarika pi sisse lülitama, installige kaugtöölaud ja sisestage oma vaarika pi IP -aadress ning saate nüüd vaarika pi sisse sisestada.

3. samm: aja kodeerimine

Kodeerimise aeg!
Kodeerimise aeg!

Olen otsustanud selle programmi pythonis kodeerida, nii et veenduge, et teie töölauale oleks installitud python3.7 või 3.8. See kood töötab serveri ja kliendi abil, milleks on teie arvuti. Klient või vaarika pi teeb pildi ja laadib selle dropboxi, mille otsib üles server, kes seejärel käivitab pildil pilditöötluse ja tekstituvastuse. Selle toimimiseks peate hankima Wolframalpha, dropboxi ja openweathermap'i rakenduse-ID. Peate vaid minema veebisaitidele registreeruma ja see annab teile rakenduse ID. ja seejärel sisestage need koodi kommentaaridega määratud vastavatesse kohtadesse. Veenduge, et olete pip kõik installinud ning Tesseract OCR ja OpenCV. Looge oma arvutisse pythoni fail nimega Server.py ja fail nimega client.py, ning kopeerige ja kleepige kood. Kuid teadke, et mida julgemad on tegelased ja valgem taust, seda paremad on tulemused, nii on see iga tekstituvastustarkvara puhul.

Kõik lingid rakenduse ID registreerimiseks \/

www.wolframalpha.com/

openweathermap.org/api

www.dropbox.com/developers/documentation

Installige kindlasti Tesseract OCR ja OpenCV \/

github.com/UB-Mannheim/tesseract/wiki

opencv.org/

Server.py:

import dropboxfrom PIL import Pildi importimine cv2 import pytesseract pytesseract importimisest Väljundi import numpy kui np import wolframalpha impordi pesa importimise aeg

dbx = dropbox. Dropbox ("dropboxAPIkey")

s = pistikupesa (pistikupesa. AF_INET, pesa. SOKK_STREAM)

app_id = "Rakenduse ID"

host = socket.gethostname ()

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

kuigi tõsi:

c, addr = s.accept () print (f'ühendus: {addr} ') katkestus

kuigi tõsi:

samas Tõsi: meta.aeg (13.7) metaandmed, f = dbx.files_download ("/dropbox_API/Image.jpg") out = open ("Image.jpg", 'wb') out.write (f.content) out. close () print ("Pilt on alla laaditud!") image = cv2.imread ("Image.jpg") Pilt = cv2.resize (pilt, (640, 480), interpolatsioon = cv2. INTER_AREA) image68 = cv2.rotate (Pilt, cv2. ROTATE_90_COUNTERCLOCKWISE) hall = cv2.cvtColor (pilt68, cv2. COLOR_BGR2GRAY)

def remove_noise (hall):

return cv2.medianBlur (hall, 5) def läviväärtus (hall): return cv2.threshold (hall, 0, 255, cv2. THRESH_BINARY + cv2. THRESH_OTSU) [1] def dilate (hall): kernel = np.ones ((5, 5), np.uint8) tagastab cv2.dilate (hall, kernel, iteratsioonid = 1) d = pytesseract.image_to_data (hall, output_type = Output. DICT)

n_kastid = len (d ['tekst'])

i jaoks vahemikus (n_kastid): kui int (d ['conf'] )> 60: (x, y, w, h) = (d ['vasak'] , d ['üleval'] , d ['laius'] , d ['kõrgus'] ) hall = cv2. ristkülik (hall, (x, y), (x + w, y + h), (0, 255, 0), 2) murda pytesseract.pytesseract.tesseract_cmd = r "C: / Program Files / Tesseract-OCR / tesseract.exe" text = pytesseract.image_to_string (hall) print (tekst), samas True: text2 = " "kui len (tekst)> = 2: c.send (baiti (tekst," utf-8 ")) kui len (tekst) = 2: päring = teksti klient = wolframalpha. Client (rakenduse_id) res = klient.päring (päring) vastus = järgmine (res.results).text answer1 = answer.partition ('\ n') [0] print (answer1) c.send (bytes (answer1, "utf-8")) kui len (tekst) <= 1: c.send (baiti (tekst2, "utf-8")) time.sleep (7,5) paus

Client.py:

import dropboximport picameraimport aeg luma.core.interface.serial import i2c luma.core.render impordi lõuend luma.oled.device impordi ssd1306, ssd1325, ssd1331, sh1106 impordi pistikupesa impordi kuupäev kellaajast impordi unerežiim import pyowm serial = i2c (port = 1, aadress = 0x3C) seade = ssd1306 (jada, pööramine = 1) kaamera = 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 = ""#PC -pordi aadress = 60567 s.connect ((host, port)) msg1 = "" owm = pyowm. OWM ("")#app-id 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. kuu) + "/" + str (cdt.year) obs = owm.weather_at_place ("")#teie linn ja riik stringivormingus ilm = obs.get_weather () temp2 = str (weather.get_temperature ("fahrenheit") ["te mp_max "]) temp3 = str (weather.get_temperature (" fahrenheit ") [" temp_min "]) samas True: cdt = datetime.datetime.now () min1 = str (cdt.minute) tund = str (cdt.tund) joonistades lõuendiga (seade): draw.text ((0, 0), tund, fill = "valge") draw.text ((11, 0), ":", fill = "white") draw.text ((15, 0), min1, fill = "valge") draw.text ((0, 9), "_", fill = "white") draw.text ((0, 9), date, fill = "white ") kui min1 numbris: obs = owm.weather_at_place (" ")#teie linn ja riik stringivormingus uuesti

ilm = obs.get_weather ()

temp = str (weather.get_temperature ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", fill = "white") draw.text ((40, 0), temp, fill = "valge") kui min1 pole numbris: 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] dropboxi konto lingitud") klient. files_upload (avatud (arvuti_tee, "rb"). loe (), dropbox_path) print ("[UPLOADED] {}". formaat (arvuti_tee)) full_msg = "" time.sleep (5) msg = s.recv (100) kui len (msg)> = 2: full_msg += msg.decode ("utf-8") print (full_msg) cdt = datetime.datetime.now () min1 = str (cdt.minute) tund = str (cdt.tund) joonistades lõuendiga (seade): draw.text ((0, 19), full_msg, fill = "white") draw.text ((0, 0), tund, fill = "valge") draw.text ((11, 0), ":", fill = "white") draw.text ((15, 0), min1, fill = "white") draw.text ((0, 9), "_", fill = " valge ") draw.text ((0, 9), kuupäev, täitmine = "valge") kui min1 arvus: obs = owm.weather_at_place ("")#teie linn ja riik uuesti stringivormingus

ilm = obs.get_weather ()

temp = str (weather.get_temperature ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", fill = "white") draw.text ((40, 0), temp, fill = "valge") kui min1 pole numbris: draw.text ((40, 0), temp3, fill = "white") draw.text ((32, 0), "F", fill = "white") kui len (msg) <= 1: cdt = datetime.datetime.now () min1 = str (cdt.minute) hour = str (cdt.hour) koos lõuendiga (seade) joonisena: 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") kui min1 arvus: obs = owm.weather_at_place ("") #teie linn ja riik stringivormingus uuesti

ilm = obs.get_weather ()

temp = str (weather.get_temperature ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", fill = "white") draw.text ((40, 0), temp, fill = "valge") kui min1 pole numbris: 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) tund = str (cdt.tund) koos lõuendiga (seade) joonisena: 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 = "valge") draw.text ((0, 9), date, fill = "white") if min1 in num: obs = owm.weather_at_place ("")#teie linn ja riik stringivormingus uuesti

ilm = obs.get_weather ()

temp = str (weather.get_temperature ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", fill = "white") draw.text ((40, 0), temp, fill = "valge") kui min1 ei ole numbris: obs = owm.weather_at_place ("")#teie linn ja riik stringivormingus uuesti

ilm = obs.get_weather ()

temp = str (weather.get_temperature ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", fill = "white") draw.text ((40, 0), temp, fill = "valge") kui min1 pole numbris: draw.text ((40, 0), temp3, fill = "white") draw.text ((32, 0), "F", fill = "white") kui len (msg1) <= 1: cdt = datetime.datetime.now () min1 = str (cdt.minute) tund = str (cdt.tund) koos lõuendiga (seade) joonisena: 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") kui min1 arvus: obs = owm.weather_at_place ("") #teie linn ja riik stringivormingus uuesti

ilm = obs.get_weather ()

temp = str (weather.get_temperature ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", fill = "white") draw.text ((40, 0), temp, fill = "valge") kui min1 pole numbris: draw.text ((40, 0), temp3, fill = "white") draw.text ((32, 0), "F", fill = "white") time.sleep (7) client.files_delete (dropbox_path) print ("Failid kustutatud")

P. S. Olen amatöörprogrammeerija, nii et palun ärge segage kahtluse alla minu kohutavaid programmeerimismeetodeid.

Samm: pange see kõik kokku

Kõike kokku panema!
Kõike kokku panema!

Kui olete kõik muu lõpetanud, on teil praktiliselt kõik tehtud, jääb üle vaid kinnitada vaarika pi kaamera ja ekraan prillide külge. Seda saate teha, kasutades tarnides mainitud kahepoolset liimi, või võite kasutada mis tahes meetodeid, mida peate vajalikuks. Võib -olla olete ka märganud, et ma pole selles õppetükis patareid kusagil maininud, sest mul on plaanis nende prillide jaoks tulevikus täiendusi teha ja ma ei tahtnud seda praegu kinnitada. Kuid kui soovite selle ühendada, vajate Amazoni li-po laadimisahelat

Kui teile see meeldis ja soovite rohkem näha, olen käivitanud YouTube'i kanali ja loodetavasti postitan sinna ka õpetusi. Siin on link:

www.youtube.com/channel/UCGqcWhHXdZf231rLe…

Jumal päästab!

Johannese 3:16 "Sest Jumal armastas maailma nii palju, et andis oma ainsa Poja, kes iganes temasse usub, ei hukku, vaid saab igavese elu."

Soovitan: