Turinys:

Išmanieji akiniai: 4 žingsniai
Išmanieji akiniai: 4 žingsniai

Video: Išmanieji akiniai: 4 žingsniai

Video: Išmanieji akiniai: 4 žingsniai
Video: Skaitmeninis sąmoningumas - Rasa Jauniškienė 2024, Liepa
Anonim
Išmanieji akiniai
Išmanieji akiniai
Išmanieji akiniai
Išmanieji akiniai

Sveiki visi šiandien, aš jums parodysiu, kaip pasigaminti išmaniuosius akinius namuose! Vienas iš didžiausių išmaniųjų akinių dalykų yra tai, kaip naudinga turėti kažką panašaus į šiuolaikinį technologijų pasaulį ir kaip nėra tik vienos išmaniųjų akinių versijos, nes visi turi nuostabių funkcijų ir begalę programų, kurias būtų galima integruoti ateityje. Šių išmaniųjų akinių savybės apima laiko nurodymą, temperatūros nurodymą kas 5 minutes, tarp tų 5 minučių jis keičiasi tarp tikėtinos aukštos ir žemos temperatūros tą dieną, taip pat nurodo datą. Tačiau jo pagrindinis bruožas yra tas, kad jis fotografuoja kas 10 sekundžių ir tada analizuoja tą paveikslėlį, kad gautų tekstą, kuriame jis pateiks naudingos informacijos apie jį, jei suras klausimą, jis atsakys į jį naudodamas wolframą arba surasdamas matematinę lygtį tai išspręs!

Priedai:

Šiam projektui reikalingos medžiagos bus šios:

1) A Raspberry Pi 0 W (iš vilros.com)

2) Aiškus 128 x 64 OLED ekranas (iš Sparkfun.com)

3) Kameros modulis, suformatuotas „Raspberry Pi 0 W“(iš amazon.com)

4) Bet kokie jūsų pasirinkti akiniai

5) Laidai

6) Lituoklis

7) Lydmetalis be švino (nes nenorite mirti nuo švino)

8) dviejų krypčių klijai

9) SD kortelė, ne mažesnė kaip 8 GB

10) kompiuteris ir interneto ryšys

Darant prielaidą, kad jau turite kompiuterį ir interneto ryšį, šių akinių kaina bus apie 130,00 USD

1 žingsnis: grandinės prijungimas

Grandinės prijungimas!
Grandinės prijungimas!

Norėdami rodyti tekstą ekrane, kurį ketinate prijungti prie OLED per I2C arba SPI, aš renkuosi I2C, nes tai yra patogiau naudoti, bet jei manote, kad norite prisijungti prie jo per SPI, eikite į šią pamoką „Sparkfun“svetainę ir sugrįžkite čia, kai baigsite. https://learn.sparkfun.com/tutorials/transparent-g… Jei pasirinkote I2C, nes aš lituoju laidus, kaip nurodyta toliau:

Pi \/ OLED \/

3.3v 3.3v

GND GND

SDA SDA

SCL SCL

Atminkite, kad skaidrus OLED gali valdyti tik 3.3v.

Baigę prijungti grandinę, įstumkite fotoaparato modulio juostos kabelį į juostelės kabelio laikiklį ant aviečių pi, ištraukdami juodą spaustuką ir stumdami jį atgal, kai juostelės kabelis yra vietoje.

2 veiksmas: prieiga prie „Raspberry Pi“

Naudodami ssh, mes galime pasiekti savo pi su savo kompiuteriu neprijungdami papildomos išorinės klaviatūros pelės ir monitoriaus. Pirmiausia turite prijungti SD kortelę prie kompiuterio naudodami adapterį arba įmontuotą prievadą, tada turėsite pereiti prie šios nuorodos https://www.raspberrypi.org/downloads/raspbian/ ir atsisiųsti „Raspbian buster“su darbalaukiu. Antra, turite įdėti OS į SD kortelę naudodami „BalenaEtcher“, pasirinkite savo SD kortelę ir „Raspbian“OS ir spustelėkite „blykstė“, šis procesas gali užtrukti, todėl grįžkite, kai baigsite. Trečia, eikite į SD kortelę failų naršyklėje arba „Mac“ieškiklyje ir sukurkite tekstinį failą, pavadintą wpa_supplicant, būtinai ištrinkite.txt plėtinį ir pridėkite.conf, įklijuokite failą:

šalis = JAV

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}

Jei nesate JAV, turėsite įvesti savo „WiFi“pavadinimą ir slaptažodį atitinkamose vietose ir šalyje. Atminkite, kad „Raspberry Pi“gali prisijungti tik prie 2,4 GHz tinklo, tai reiškia, kad jūsų kompiuteris taip pat turės prisijungti prie to tinklo. Sukūrę tuščią teksto failą be plėtinio, pavadinto ssh, tada išimkite SD kortelę. Tada turėsite įdiegti „PuTTY“https://www.putty.org/, kurį naudosite ssh įgalinimui. Įdiegę įveskite savo raspberry pi IP adresą, galite sužinoti, kas tai yra, eidami į savo maršrutizatoriaus svetainę, prisijungdami ir žiūrėdami į prijungtus įrenginius.

Kai gausite prieigą prie „Raspberry Pi“, ji paprašys jūsų prisijungti, numatytasis vartotojo vardas yra „pi“, o slaptažodis-„avietė“. Įveskite sudo raspi-config, tada eikite į sąsajos parinktis ir įjunkite fotoaparatą, ssh ir i2c, tada spustelėkite Baigti ir įveskite sudo reboot. Dabar esate pasiruošę prisijungti prie raspberry pi, eikite į priekį ir įdiekite nuotolinį darbalaukį, įveskite savo raspberry pi IP adresą ir dabar galite pereiti prie raspberry pi.

3 žingsnis: kodavimo laikas

Kodavimo laikas!
Kodavimo laikas!

Aš nusprendžiau koduoti šią programą „python“, todėl įsitikinkite, kad darbalaukyje įdiegta „python3.7“arba „3.8“. Šis kodas veikia naudojant serverį ir klientą, o serveris yra jūsų kompiuteris. Klientas arba „Raspberry pi“nufotografuos ir nusiųs jį į „dropbox“, kurį nuskaitys serveris, kuris tada paleis vaizdo apdorojimą ir teksto atpažinimą. Kad tai veiktų, turėsite gauti „wolframalpha“, „dropbox“ir „openweathermap“programos ID. Viskas, ką jums reikia padaryti, tai eiti į registraciją svetainėse ir ji suteiks jums programos ID. ir tada įveskite juos į atitinkamas vietas, nustatytas pagal kodo komentarus. Įsitikinkite, kad viską įdiegėte „pip“ir įdiegėte „Tesseract OCR“ir „OpenCV“. Sukurkite „Python“failą, pavadintą „Server.py“savo kompiuteryje, ir failą pavadinimu client.py „Raspberry pi“, tada nukopijuokite ir įklijuokite kodą. Tačiau žinokite, kad kuo drąsesni simboliai ir baltesnis fonas, tuo geresni rezultatai, taip yra su kiekviena teksto atpažinimo programine įranga.

Visos nuorodos, skirtos prisiregistruoti gauti programos ID \/

www.wolframalpha.com/

openweathermap.org/api

www.dropbox.com/developers/documentation

Įsitikinkite, kad įdiegėte „Tesseract OCR“ir „OpenCV“\/

github.com/UB-Mannheim/tesseract/wiki

opencv.org/

Server.py:

importuoti „dropbox“iš PIL importo vaizdo importuoti cv2 importuoti pytesseract iš „pytesseract“importuoti Išvesties importo numpy kaip np importuoti wolframalpha importavimo lizdą

dbx = dropbox. Dropbox ("dropboxAPIkey")

s = socket.socket (lizdas. AF_INET, lizdas. SOCK_STREAM)

app_id = "Programos ID"

priegloba = socket.gethostname ()

uostas = 60567 spausdinti (pagrindinis kompiuteris) s.bind ((pagrindinis kompiuteris, prievadas)) s.listen (2)

nors tiesa:

c, addr = s.accept () print (f'Got connection from: {addr} ') break

nors tiesa:

o tiesa: laikas.sleep (13.7) metaduomenys, f = dbx.files_download ("/dropbox_API/Image.jpg") out = open ("Image.jpg", 'wb') out.write (f.content) out. close () print ("Vaizdas atsisiųstas!") image = cv2.imread ("Image.jpg") Vaizdas = cv2.resize (vaizdas, (640, 480), interpoliacija = cv2. INTER_AREA) image68 = cv2.rotate (Vaizdas, cv2. ROTATE_90_COUNTERCLOCKWISE) pilka = cv2.cvtColor (68 pav., cv2. COLOR_BGR2GRAY)

def remove_noise (pilka):

return cv2.medianBlur (pilka, 5) def slenkstis (pilka): return cv2.threshold (pilka, 0, 255, cv2. THRESH_BINARY + cv2. THRESH_OTSU) [1] def dilate (pilka): branduolys = np.ones ((5, 5), np.uint8) grąžinti cv2.dilate (pilka, branduolys, iteracijos = 1) d = pytesseract.image_to_data (pilka, output_type = Output. DICT)

n_boxes = len (d ['text'])

i diapazone (n_dėžės): jei int (d ['conf'] )> 60: (x, y, w, h) = (d ['kairė'] , d ['viršuje'] , d ['plotis'] , d ['aukštis'] ) pilka = cv2. stačiakampis (pilka, (x, y), (x + w, y + h), (0, 255, 0), 2) pertrauka pytesseract.pytesseract.tesseract_cmd = r "C: / Program Files / Tesseract-OCR / tesseract.exe" text = pytesseract.image_to_string (pilka) spauda (tekstas), o tiesa: 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 (užklausa) atsakymas = kitas (res.results).text answer1 = answer.partition ('\ n') [0] print (answer1) c.send (bytes (answer1, "utf-8")) if len (text) <= 1: c.send (baitai (tekstas2, „utf-8“)) time.sleep (7.5) pertrauka

Klientas.py:

importuoti dropboximport picameraimportuoti laiką iš luma.core.interface.serial importuoti i2c iš luma.core.render importuoti drobę iš luma.oled.device importuoti ssd1306, ssd1325, ssd1331, sh1106 importuoti lizdą importo datą iš laiko importo miego importuoti pyowm serial = i2c (port = 1, address = 0x3C) device = ssd1306 (serial, rotate = 1) camera = picamera. PiCamera () dropbox_access_token = "" #Jūsų dropbox-id vėl computer_path = r "/home/pi/Image.jpg" dropbox_path = f "/dropbox_API/Image.jpg" s = socket.socket (lizdas. AF_INET, lizdas. SOCK_STREAM) host = ""#PC adreso prievado adresas = 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) data = str (cdt.day) + "/" + str (cdt. mėnuo) + "/" + str (cdt.year) obs = owm.weather_at_place ("")#jūsų miestas ir šalis eilutės formatu oras = obs.get_weather () temp2 = str (weather.get_temperature ("fahrenheit") ["tau mp_max "]) temp3 = str (weather.get_temperature (" fahrenheit ") [" temp_min "]), o tiesa: cdt = datetime.datetime.now () min1 = str (cdt.minute) hour = str (cdt.hour) su piešiniu: drobė (įrenginys): 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), data, fill = "balta ") jei min1 skaičius: obs = owm.weather_at_place (" ")#jūsų miestas ir šalis vėl eilutės formatu

oras = obs.get_weather ()

temp = str (weather.get_temperature ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", fill = "white") draw.text ((40, 0), temp, užpildyti = "balta"), jei min1 nėra skaičius: 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 linked") klientas. files_upload (open (computer_path, "rb"). read (), dropbox_path) print ("[UPLOADED] {}". format (computer_path)) full_msg = "" time.sleep (5) msg = s.recv (100) jei len (msg)> = 2: full_msg += msg.decode ("utf-8") print (full_msg) cdt = datetime.datetime.now () min1 = str (cdt.minute) hour = str (cdt.hour)) su piešiniu: drobė (įrenginys): 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 = " balta ") draw.text ((0, 9), data, užpildyti = "balta"), jei min1 skaičius: obs = owm.weather_at_place ("")#jūsų miestas ir šalis vėl eilutės formatu

oras = obs.get_weather ()

temp = str (weather.get_temperature ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", fill = "white") draw.text ((40, 0), temp, užpildyti = "balta"), jei min1 nėra skaičius: draw.text ((40, 0), temp3, fill = "white") draw.text ((32, 0), "F", fill = "white") jei len (msg) <= 1: cdt = datetime.datetime.now () min1 = str (cdt.minute) hour = str (cdt.hour) su drobė (prietaisas) kaip draw: draw.text ((0, 0), hour, fill = "white") draw.text ((11, 0), ":", fill = "white") draw.text ((15, 0), min1, fill = "white") piešti. text ((0, 9), "_", fill = "white") draw.text ((0, 9), date, fill = "white"), jei min1 skaičius: obs = owm.weather_at_place ("") #Jūsų miestas ir šalis vėl eilutės formatu

oras = obs.get_weather ()

temp = str (weather.get_temperature ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", fill = "white") draw.text ((40, 0), temp, užpildyti = "balta"), jei min1 nėra skaičius: 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". prisijungti (textwrap.wrap (full_msg1, 9))) cdt = datetime.datetime.now () min1 = str (cdt.minute) valanda = str (cdt.val.) su drobė (įrenginys) kaip piešinys: 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 = "balta") draw.text ((0, 9), data, fill = "white"), jei min1 yra skaičius: obs = owm.weather_at_place ("")#jūsų miestas ir šalis vėl eilutės formatu

oras = obs.get_weather ()

temp = str (weather.get_temperature ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", fill = "white") draw.text ((40, 0), temp, užpildyti = "balta"), jei min1 nėra skaičius: obs = owm.weather_at_place ("")#jūsų miestas ir šalis vėl eilutės formatu

oras = obs.get_weather ()

temp = str (weather.get_temperature ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", fill = "white") draw.text ((40, 0), temp, užpildyti = "balta"), jei min1 nėra skaičius: draw.text ((40, 0), temp3, fill = "white") draw.text ((32, 0), "F", fill = "white") jei len (msg1) <= 1: cdt = datetime.datetime.now () min1 = str (cdt.minute) hour = str (cdt.hour) su drobė (prietaisas) kaip draw: draw.text ((0, 0), hour, fill = "white") draw.text ((11, 0), ":", fill = "white") draw.text ((15, 0), min1, fill = "white") piešti. text ((0, 9), "_", fill = "white") draw.text ((0, 9), date, fill = "white"), jei min1 skaičius: obs = owm.weather_at_place ("") #Jūsų miestas ir šalis vėl eilutės formatu

oras = obs.get_weather ()

temp = str (weather.get_temperature ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", fill = "white") draw.text ((40, 0), temp, užpildyti = "balta"), jei min1 nėra skaičius: draw.text ((40, 0), temp3, fill = "white") draw.text ((32, 0), "F", fill = "white") time.sleep (7) client.files_delete (dropbox_path) print („Failai ištrinti“)

P. S. Aš esu programuotojas mėgėjas, todėl prašau neabejoti mano siaubingais programavimo metodais.

4 žingsnis: surinkite viską kartu

Sudėkite viską kartu!
Sudėkite viską kartu!

Kai baigsite visa kita, praktiškai atliksite viską, ką turite padaryti, tai pritvirtinti aviečių pi kamerą ir ekraną prie akinių. Tai galite padaryti naudodami tiekimuose nurodytus dvipusius klijus arba naudodamiesi bet kokiais, jūsų manymu, reikalingais metodais. Jūs taip pat galbūt pastebėjote, kad šioje pamokoje niekur nepaminėjau baterijos, nes aš planuoju būsimus šių akinių atnaujinimus ir nenorėjau jų uždėti. Bet jei norite prijungti vieną, jums reikės ličio po įkroviklio grandinės iš „Amazon“https://www.amazon.com/McIgIcM-Lithium-Charging-Pr…

Jei jums tai patiko ir norite pamatyti daugiau, aš sukūriau „YouTube“kanalą ir, tikiuosi, ten taip pat paskelbsiu pamokas. Štai nuoroda:

www.youtube.com/channel/UCGqcWhHXdZf231rLe…

Dievas gelbsti!

Jono 3:16 „Nes Dievas taip mylėjo pasaulį, kad atidavė savo viengimį Sūnų, kuris taip tiki Jį, nepražus, bet turės amžinąjį gyvenimą“.

Rekomenduojamas: