Satura rādītājs:
- 1. solis: ķēdes pieslēgšana
- 2. darbība. Piekļuve Raspberry Pi
- 3. solis: kodēšanas laiks
- 4. solis: salieciet visu kopā
Video: Viedās brilles: 4 soļi
2024 Autors: John Day | [email protected]. Pēdējoreiz modificēts: 2024-01-30 10:51
Sveiki visiem šodien, es jums parādīšu, kā mājās pagatavot viedās brilles! Viena no lielākajām lietām viedajās brillēs ir tas, cik izdevīgi ir kaut kas līdzīgs mūsdienu tehnoloģiju pasaulē un kā nav tikai vienas viedo brilles versijas, jo tām visām ir pārsteidzošas funkcijas un bezgalīgs skaits lietojumprogrammu, kuras varētu integrēt nākotnē. Šo viedo brilles iezīmes ietver laika noteikšanu, temperatūras noteikšanu ik pēc 5 minūtēm, starp šīm 5 minūtēm tā mainās starp gaidāmo augsto un zemo temperatūru šai dienai, kā arī norāda datumu. Bet tā galvenā iezīme ir tā, ka tā uzņem attēlu ik pēc 10 sekundēm un pēc tam analizē šo attēlu tekstam, kurā tas atgriezīs noderīgu informāciju par to; ja tas atradīs jautājumu, tas atbildēs uz to, izmantojot volframu, vai arī atrod matemātisko vienādojumu tas to atrisinās!
Piegādes:
Šim projektam nepieciešamās preces būs šādas:
1) A Raspberry Pi 0 W (no vilros.com)
2) Skaidrs 128x64 OLED displejs (no Sparkfun.com)
3) Kameras modulis, kas formatēts Raspberry Pi 0 W (no amazon.com)
4) Jebkuras brilles pēc jūsu izvēles
5) Vadi
6) lodāmurs
7) lodēt bez svina (jo jūs nevēlaties mirt no svina)
8) divvirzienu līme
9) SD karte vismaz 8 GB
10) dators un interneta pieslēgums
Pieņemot, ka jums jau ir dators un interneta pieslēgums, šo brilles izmaksas būs aptuveni 130,00 USD
1. solis: ķēdes pieslēgšana
Lai ekrānā parādītu tekstu, kuram, izmantojot I2C vai SPI, būs jāizveido savienojums ar OLED, es izvēlos I2C, jo tā ir ērtāka lietošana, bet, ja vēlaties izveidot savienojumu ar to, izmantojot SPI, dodieties uz šo pamācību Sparkfun vietni un atgriezieties šeit, kad esat pabeidzis. https://learn.sparkfun.com/tutorials/transparent-g… Ja esat izvēlējies I2C, jo es esmu pielodējis vadus, kā norādīts tālāk:
Pi \/ OLED \/
3.3v 3.3v
GND GND
SDA SDA
SCL SCL
Lūdzu, ņemiet vērā, ka caurspīdīgais OLED spēj apstrādāt tikai 3.3V.
Kad esat pabeidzis ķēdes pievienošanu, iebīdiet kameras moduļa lentes kabeli aveņu pi lentes kabeļa turētājā, izvelkot melno skavu un iebīdot to atpakaļ, kad lentes kabelis ir ievietots.
2. darbība. Piekļuve Raspberry Pi
Izmantojot ssh, mēs varam piekļūt mūsu pi ar datoru, nepievienojot papildu ārējo tastatūras peli un monitoru. Vispirms pievienojiet SD karti datoram ar adapteri vai iebūvētu portu, tad jums būs jāiet uz šo saiti https://www.raspberrypi.org/downloads/raspbian/ un lejupielādējiet Raspbian buster ar darbvirsmu. Otrkārt, jums ir jāieliek operētājsistēma SD kartē, izmantojot BalenaEtcher, atlasiet savu SD karti un Raspbian OS un noklikšķiniet uz "flash", šis process var aizņemt kādu laiku, tāpēc atgriezieties, kad esat pabeidzis. Treškārt, dodieties uz SD karti failu pārlūkā vai Mac meklētājā un izveidojiet teksta failu ar nosaukumu wpa_supplicant. Noteikti izdzēsiet.txt paplašinājumu un pievienojiet.conf, failā ielīmējiet šo:
valsts = ASV
ctrl_interface = DIR =/var/run/wpa_supplicant GROUP = netdev update_config = 1 tīkls = {ssid = "WIFI_SSID" scan_ssid = 1 psk = "WIFI_PASSWORD" key_mgmt = WPA-PSK}
Ja neatrodaties ASV, jums būs jāievada savs WiFi nosaukums un parole attiecīgajās vietās un valstī. Paturiet prātā, ka Raspberry Pi var izveidot savienojumu tikai ar 2,4 GHz tīklu, kas nozīmē, ka arī jūsu datoram būs jāpievienojas šim tīklam. Pēc tam izveidojiet tukšu teksta failu bez paplašinājuma ar nosaukumu ssh un pēc tam izņemiet SD karti. Pēc tam jums būs jāinstalē PuTTY https://www.putty.org/, ko izmantosit, lai iespējotu ssh. Kad esat instalējis, ievadiet sava aveņu pi IP adresi, jūs varat saprast, kas tā ir, dodoties uz maršrutētāja vietni, piesakoties un apskatot pievienotās ierīces.
Pēc piekļuves Raspberry Pi tas lūgs jums pieteikties, noklusējuma lietotājvārds ir "pi" un parole ir "aveņu". Ierakstiet sudo raspi-config, pēc tam dodieties uz saskarnes opcijām un iespējojiet kameru, ssh un i2c, pēc tam noklikšķiniet uz Pabeigt un ierakstiet sudo reboot. Tagad jūs esat gatavs ssh ievadīt aveņu pi, dodieties uz priekšu un instalējiet attālo darbvirsmu un ievadiet aveņu pi IP adresi, un tagad jūs varat ssh ievadīt aveņu pi.
3. solis: kodēšanas laiks
Esmu izvēlējies kodēt šo programmu python, tāpēc pārliecinieties, vai jūsu darbvirsmā ir instalēta python3.7 vai 3.8. Šis kods darbojas, izmantojot serveri un klientu, un serveris ir jūsu dators. Klients vai aveņu pi uzņems attēlu un augšupielādēs to dropbox, kuru izgūst serveris, kurš pēc tam attēlam palaiž attēlu apstrādi un teksta atpazīšanu. Lai tas darbotos, jums būs jāiegūst wolframalpha, dropbox un openweathermap app-id. Viss, kas jums jādara, ir jāiet uz reģistrēšanos vietnēs, un tas jums piešķirs lietotnes ID. un pēc tam ievadiet tos atbilstošās vietās, kuras nosaka koda komentāri. Pārliecinieties, vai esat instalējis pip visu un instalējis Tesseract OCR un OpenCV. Izveidojiet savā datorā python failu ar nosaukumu Server.py un aveņu pi failu ar nosaukumu client.py un pēc tam nokopējiet un ielīmējiet kodu. Bet ziniet, ka, jo drosmīgākas rakstzīmes un baltāks fons, jo labāki rezultāti, tā tas ir ar katru teksta atpazīšanas programmatūru.
Visas saites, lai reģistrētos lietotnes ID \/
www.wolframalpha.com/
openweathermap.org/api
www.dropbox.com/developers/documentation
Noteikti instalējiet Tesseract OCR un OpenCV \/
github.com/UB-Mannheim/tesseract/wiki
opencv.org/
Server.py:
importēt dropboxfrom PIL importēt attēlu importēt cv2 importēt pytesseract no pytesseract importa
dbx = dropbox. Dropbox ("dropboxAPIkey")
s = ligzda.socket (ligzda. AF_INET, ligzda. SOCK_STREAM)
app_id = "Lietotnes ID"
resursdators = socket.gethostname ()
ports = 60567 print (resursdators) s.bind ((resursdators, ports)) s.listen (2)
kamēr taisnība:
c, addr = s.accept () print (f'Got savienojumu no: {addr} ') pārtraukums
kamēr taisnība:
kamēr True: time.sleep (13.7) metadati, f = dbx.files_download ("/dropbox_API/Image.jpg") out = open ("Image.jpg", 'wb') out.write (f.content) out. aizvērt () drukāt ("Attēls lejupielādēts!") image = cv2.imread ("Image.jpg") Attēls = cv2.izmērs (attēls, (640, 480), interpolācija = cv2. INTER_AREA), cv2. ROTATE_90_COUNTERCLOCKWISE) pelēks = cv2.cvtColor (attēls68, cv2. COLOR_BGR2GRAY)
def remove_noise (pelēks):
return cv2.medianBlur (pelēks, 5) def sliekšņa noteikšana (pelēks): atgriežas cv2.threshold (pelēks, 0, 255, cv2. THRESH_BINARY + cv2. THRESH_OTSU) [1] def dilate (pelēks): kodols = np.ones ((5, 5), np.uint8) atgriezt cv2.dilate (pelēks, kodols, iterācijas = 1) d = pytesseract.image_to_data (pelēks, output_type = Output. DICT)
n_kastes = len (d ['teksts'])
i diapazonā (n_kastes): ja int (d ['conf'] )> 60: (x, y, w, h) = (d ['pa kreisi'] , d ['augšā'] , d ['platums'] , d ['augstums'] ) pelēks = cv2. taisnstūris (pelēks, (x, y), (x + w, y + h), (0, 255, 0), 2) pārtraukt pytesseract.pytesseract.tesseract_cmd = r "C: / Program Files / Tesseract-OCR / tesseract.exe" text = pytesseract.image_to_string (pelēks) drukāt (tekstu), bet 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 (vaicājums) atbilde = nākamais (res.results).teksta atbilde1 = atbilde.nodaļa ('\ n') [0] drukāt (atbilde1) c.sūtīt (baiti (atbilde1, "utf-8")), ja len (teksts) <= 1: c.send (baiti (teksts2, "utf-8")) time.sleep (7,5) pārtraukums
Client.py:
importēt dropboximport picameraimportēt laiku no luma.core.interface.serial importēt i2c no luma.core.render importēt audeklu no luma.oled.device importēt ssd1306, ssd1325, ssd1331, sh1106 importēt ligzdas importēšanas datumu no laika importēt miega importēt pyowm serial = i2c (ports = 1, adrese = 0x3C) ierīce = ssd1306 (sērijveida, pagriezt = 1) kamera = picamera. PiCamera () dropbox_access_token = "" #Jūsu dropbox-id atkal computer_path = r "/home/pi/Image.jpg" dropbox_path = f "/dropbox_API/Image.jpg" s = socket.socket (socket. AF_INET, socket. SOCK_STREAM) host = ""#datora porta IP adrese = 60567 s.connect ((resursdators, ports)) 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. mēnesis) + "/" + str (cdt.gads) obs = owm.weather_at_place ("")#jūsu pilsēta un valsts virknes formātā laika apstākļi = obs.get_weather () temp2 = str (weather.get_temperature ("fahrenheit") ["Te mp_max "]) temp3 = str (weather.get_temperature (" fahrenheit ") [" temp_min "]), kamēr True: cdt = datetime.datetime.now () min1 = str (cdt.minute) stunda = str (cdt.stunda) ar audeklu (ierīci) kā zīmējumu: draw.text ((0, 0), hour, fill = "white") draw.text ((11, 0), ":", fill = "white") draw.text ((15, 0), min1, fill = "balts") draw.text ((0, 9), "_", fill = "white") draw.text ((0, 9), date, fill = "white ") ja min1 skaitlī: obs = owm.weather_at_place (" ")#jūsu pilsēta un valsts atkal virkņu formātā
laika apstākļi = obs.get_weather ()
temp = str (weather.get_temperature ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", fill = "white") draw.text ((40, 0), temp, aizpildīt = "balts"), ja min1 nav skaitlis: 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 konts saistīts") klients. files_upload (open (computer_path, "rb"). read (), dropbox_path) print ("[UPLOADED] {}". formāts (computer_path)) full_msg = "" time.sleep (5) msg = s.recv (100) ja len (msg)> = 2: full_msg += msg.decode ("utf-8") print (full_msg) cdt = datetime.datetime.now () min1 = str (cdt.minute) stunda = str (cdt.stunda) ar zīmējumu: audekls (ierīce): draw.text ((0, 19), full_msg, 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 = " balts ") draw.text ((0, 9), date, fill = "balts"), ja min1 ir skaitlis: obs = owm.weather_at_place ("")#jūsu pilsēta un valsts atkal virkņu formātā
laika apstākļi = obs.get_weather ()
temp = str (weather.get_temperature ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", fill = "white") draw.text ((40, 0), temp, aizpildīt = "balts"), ja min1 nav skaitlis: draw.text ((40, 0), temp3, fill = "white") draw.text ((32, 0), "F", fill = "white") ja len (msg) <= 1: cdt = datetime.datetime.now () min1 = str (cdt.minute) stunda = str (cdt.stunda) ar audeklu (ierīce) kā zīmējumu: 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"), ja min1 skaitlī: obs = owm.weather_at_place ("") #jūsu pilsēta un valsts atkal stīgu formātā
laika apstākļi = obs.get_weather ()
temp = str (weather.get_temperature ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", fill = "white") draw.text ((40, 0), temp, aizpildīt = "balts"), ja min1 nav skaitlis: 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". pievienoties (textwrap.wrap (full_msg1, 9))) cdt = datetime.datetime.now () min1 = str (cdt.minute) stunda = str (cdt.stunda) ar audeklu (ierīce) kā zīmējumu: 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 = "balts") draw.text ((0, 9), date, fill = "white") ja min1 skaitļos: obs = owm.weather_at_place ("")#jūsu pilsēta un valsts atkal virkņu formātā
laika apstākļi = obs.get_weather ()
temp = str (weather.get_temperature ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", fill = "white") draw.text ((40, 0), temp, aizpildīt = "balts"), ja min1 nav skaitļos: obs = owm.weather_at_place ("")#jūsu pilsēta un valsts atkal virkņu formātā
laika apstākļi = obs.get_weather ()
temp = str (weather.get_temperature ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", fill = "white") draw.text ((40, 0), temp, aizpildīt = "balts"), ja min1 nav numurā: draw.text ((40, 0), temp3, fill = "white") draw.text ((32, 0), "F", fill = "white") ja len (msg1) <= 1: cdt = datetime.datetime.now () min1 = str (cdt.minute) stunda = str (cdt.stunda) ar audeklu (ierīce) kā zīmējumu: 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"), ja min1 skaitlī: obs = owm.weather_at_place ("") #jūsu pilsēta un valsts atkal stīgu formātā
laika apstākļi = obs.get_weather ()
temp = str (weather.get_temperature ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", fill = "white") draw.text ((40, 0), temp, aizpildīt = "balts"), ja min1 nav skaitlis: draw.text ((40, 0), temp3, fill = "white") draw.text ((32, 0), "F", fill = "white") time.sleep (7) client.files_delete (dropbox_path) print ("Faili izdzēsti")
P. S. Es esmu programmētājs amatieris, tāpēc, lūdzu, neapšaubiet manas šausmīgās programmēšanas metodes.
4. solis: salieciet visu kopā
Kad esat pabeidzis visu pārējo, praktiski esat pabeidzis, jums atliek tikai piestiprināt aveņu pi kameru un displeju pie brillēm. To var izdarīt, izmantojot piegādēs minēto divpusējo līmi, vai arī izmantot jebkuras metodes, kuras uzskatāt par nepieciešamām. Jūs, iespējams, arī pamanījāt, ka šajā stundā es nekur neesmu minējis akumulatoru, jo tas ir tāpēc, ka man ir plānoti jauninājumi attiecībā uz šīm brillēm, un es negribēju to pašlaik piestiprināt. Bet, ja jūs vēlaties pievienot vienu, jums būs nepieciešama litija lādētāja ķēde no Amazon
Ja jums tas patika un vēlaties redzēt vairāk, esmu izveidojis YouTube kanālu un, cerams, arī tur ievietošu pamācības. Šeit ir saite:
www.youtube.com/channel/UCGqcWhHXdZf231rLe…
Dievs glābj!
Jāņa 3:16 "Jo Dievs tik ļoti mīlēja pasauli, ka Viņš deva savu vienpiedzimušo Dēlu, kurš vienmēr tic Viņam, nepazudīs, bet iegūs mūžīgu dzīvi."
Ieteicams:
Viedās brilles (zem 10 USD !!!): 8 soļi (ar attēliem)
Viedās brilles (zem 10 USD !!!): Sveiki! Mēs visi esam pazīstami ar tādām viedajām brillēm kā E.D.I.T.H. veidoja mūsu mīļotais varonis Tonijs Stārks, kas vēlāk tika nodots Pēterim Pārkeram. Šodien es būvēšu vienu tik gudru stiklu, kas arī ir zem 10 USD! Viņi nav gluži
Viedās brilles: 6 soļi
Viedās brilles: Sveiki visiem! Šodien es dalīšos ar jums, puiši, kaut ko, ko es gribēju jau ilgu laiku DIY viedās brilles, kas uzceltas tikai aptuveni 25 ASV dolāros
DIY viedās brilles - Arduino/ESP: 5 soļi
DIY viedās brilles - Arduino/ESP: jaunā versija ir pieejama šeit: [YouTube] Heyho guys! Es esmu šeit, lai parādītu jums savu DIY projektu un mudinātu jūs to izdarīt pats! Projekts ir īstas viedās brilles, kuras ikviens var izgatavot mājās . Visu kodu var atrast šeit un resursos: [GitHub] Es arī
DIY viedās paplašinātās realitātes brilles, izmantojot Arduino: 7 soļi
DIY viedās paplašinātās realitātes brilles, izmantojot Arduino: Tā kā tehnoloģija strauji attīstās un integrējas visos cilvēku dzīves aspektos, dizaineri un izstrādātāji centās sniegt cilvēkiem patīkamāku tehnoloģiju pieredzi. Viena no tehnoloģiju tendencēm, kuras mērķis ir atvieglot dzīvi, ir valkāšana
Šķidro kristālu brilles ambliopijai (mainīgas oklūzijas treniņu brilles) [ATtiny13]: 10 soļi (ar attēliem)
Šķidro kristālu brilles ambliopijai (mainīgas oklūzijas treniņbrilles) [ATtiny13]: Ambliopija (slinka acs), redzes traucējumi, kas skar aptuveni 3% iedzīvotāju, parasti ārstējot ar vienkāršiem acu plāksteriem vai atropīna pilieniem. Diemžēl šīs ārstēšanas metodes ilgstoši, nepārtraukti nepārtrauc spēcīgāku aci, nē