Sisukord:
- Samm: ahela juhtmestik
- Samm: juurdepääs Raspberry Pi -le
- 3. samm: aja kodeerimine
- Samm: pange see kõik kokku
Video: Nutikad prillid: 4 sammu
2024 Autor: John Day | [email protected]. Viimati modifitseeritud: 2024-01-30 08:45
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
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
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
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:
Nutikad valgusfoorid: 6 sammu
Nutikad valgusfoorid: miks ma selle projekti tegin? Olen Howest Kortijki õpilane. See on minu teise semestri kooliprojekt MCT. Kui ma sõidan oma autoga ja tänavatel on rahulik, on mõttetu punaste tulede ees seista, kui vastassuunas pole muud liiklust
Nutikad prillid (alla 10 dollari !!!): 8 sammu (piltidega)
Nutikad prillid (alla 10 dollari !!!): Tere! Me kõik oleme tuttavad selliste nutikate prillidega nagu E.D.I.T.H. tegi meie armastatud tegelane Tony Stark, mis hiljem anti edasi Peter Parkerile. Täna ehitan ühe sellise nutika klaasi, mis on ka alla 10 dollari! Nad pole päris
Nutikad prillid: 6 sammu
Nutikad prillid: Tere kõigile! Täna jagan teiega poisid, midagi, mida ma juba ammu tahtsin DIY nutikad prillid, mis on ehitatud umbes 25 $
DIY nutikad prillid - Arduino/ESP: 5 sammu
DIY nutikad prillid - Arduino/ESP: uus versioon on saadaval siin: [YouTube] Hei poisid! Ma olen siin, et näidata teile oma DIY projekti ja julgustada teid seda ise tegema! Projekt on tõelised nutikad prillid, mida igaüks saab kodus ise teha .Kõik kood on leitav siit ja ressursid: [GitHub] Ma ka
DIY nutikad liitreaalsuse prillid Arduino abil: 7 sammu
DIY nutikad liitreaalsuse prillid Arduino abil: Kuna tehnoloogia kasvab kiiresti ja integreerub inimeste kõigi eluvaldkondadega, püüdsid disainerid ja arendajad pakkuda inimestele meeldivamat tehnoloogiakogemust. Üks tehnoloogiatrendidest, mille eesmärk on elu lihtsamaks muuta, on kandmine