Kazalo:
- 1. korak: Ožičenje vezja
- 2. korak: Dostop do Raspberry Pi
- 3. korak: Čas kodiranja
- 4. korak: Združite vse skupaj
Video: Pametna očala: 4 koraki
2024 Avtor: John Day | [email protected]. Nazadnje spremenjeno: 2024-01-30 12:02
Pozdravljeni, danes vam bom pokazal, kako narediti pametna očala doma! Ena največjih stvari pri pametnih očalih je, kako koristno je imeti kaj takega v današnjem svetu tehnologije in kako ne obstaja samo ena različica pametnih očal, saj imajo vse neverjetne lastnosti in neskončno število aplikacij, ki bi jih bilo mogoče integrirati v prihodnosti. Značilnosti teh pametnih očal vključujejo čas, ki vam pove temperaturo vsakih 5 minut, med temi 5 minutami se zamenja med pričakovano visoko in nizko temperaturo za ta dan, pove pa tudi datum. Njegova glavna značilnost pa je, da fotografira vsakih 10 sekund in nato analizira to sliko za besedilo, v katerem bo vrnila koristne podatke o njej, če najde vprašanje, bo nanj odgovoril z wolframom ali če najde matematično enačbo to bo rešilo!
Zaloge:
Zaloge, potrebne za ta projekt, bodo vključevale naslednje:
1) A Raspberry Pi 0 W (Iz vilros.com)
2) Čist zaslon OLED velikosti 128 x 64 (s spletnega mesta Sparkfun.com)
3) Modul kamere, formatiran za Raspberry Pi 0 W (Iz amazon.com)
4) Vsa kozarca po vaši izbiri
5) Žice
6) Spajkalnik
7) Spajka brez svinca (ker ne želite umreti zaradi svinca)
8) dvosmerno lepilo
9) SD kartica najmanj 8 GB
10) računalniška in internetna povezava
Ob predpostavki, da že imate računalnik in internetno povezavo, bodo cena teh očal znašala okoli 130,00 USD
1. korak: Ožičenje vezja
Če želite prikazati besedilo na zaslonu, ki ga boste morali povezati z OLED -om prek I2C ali SPI, se odločim za I2C, saj je tisto, ki ga bolj udobno uporabljam, če pa se želite povezati z njim prek SPI, sledite tej vadnici na spletno stran Sparkfun in se vrnite sem, ko končate. https://learn.sparkfun.com/tutorials/transparent-g… Če ste izbrali I2C, saj sem spajkal žice, kot kaže naslednje:
Pi \/ OLED \/
3.3v 3.3v
GND GND
SDA SDA
SCL SCL
Upoštevajte, da lahko prozorni OLED prenese samo 3.3v.
Ko končate s povezovanjem vezja, potisnite tračni kabel modula kamere v nosilec tračnega kabla na malini pi, tako da izvlečete črno sponko in jo potisnete nazaj, ko je tračni kabel nameščen.
2. korak: Dostop do Raspberry Pi
S pomočjo ssh lahko dostopamo do našega pi z računalnikom, ne da bi priklopili dodatno zunanjo miško na tipkovnico in monitor. Najprej morate kartico SD povezati z računalnikom z adapterjem ali vgrajenimi vrati, nato pa se boste morali odpraviti na to povezavo https://www.raspberrypi.org/downloads/raspbian/ in prenesti Raspbian buster z namizjem. Drugič, operacijski sistem morate namestiti na kartico SD z uporabo programa BalenaEtcher, izberite kartico SD in OS Raspbian ter kliknite »flash«. Ta postopek lahko traja nekaj časa, zato se vrnite, ko končate. Tretjič, pojdite na kartico SD v raziskovalcu datotek ali iskalniku na macu in ustvarite besedilno datoteko z imenom wpa_supplicant, ne pozabite izbrisati razširitve.txt in dodati.conf, v datoteko prilepite naslednje:
država = ZDA
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}
Če niste v ZDA, boste morali v ustrezna mesta in državo vnesti ime in geslo za WiFi. Upoštevajte, da se Raspberry Pi lahko poveže samo z omrežjem 2,4 GHz, kar pomeni, da se mora tudi vaš računalnik povezati s tem omrežjem. Ko ustvarite prazno besedilno datoteko brez razširitve, imenovano ssh, nato odstranite kartico SD. Nato boste morali namestiti PuTTY https://www.putty.org/, kar boste uporabili za omogočanje ssh. Ko je nameščen, vnesite naslov IP vašega maline pi, lahko ugotovite, kaj je to, tako da se prijavite na spletno mesto usmerjevalnikov in pogledate povezane naprave.
Ko dobite dostop do Raspberry Pi, vas bo prosil, da se prijavite, privzeto uporabniško ime je "pi", geslo pa "malina". Vnesite sudo raspi-config, nato pojdite na možnosti vmesnika in omogočite kamero, ssh in i2c, nato kliknite dokončaj in vnesite sudo reboot. Zdaj ste pripravljeni, da ssh vnesete v malinovo pi, nadaljujte z namestitvijo Oddaljenega namizja in vnesite naslov IP svojega malinskega pi in zdaj je dobro, da ssh v malinovo pi.
3. korak: Čas kodiranja
Odločil sem se, da kodiram ta program v pythonu, zato se prepričajte, da imate na namizju nameščen python3.7 ali 3.8. Ta koda deluje s strežnikom in odjemalcem, strežnik pa je vaš računalnik. Odjemalec ali malina pi bo posnel sliko in jo naložil v dropbox, ki ga pridobi strežnik, ki nato zažene obdelavo slike in prepoznavanje besedila na sliki. Če želite, da to deluje, boste morali dobiti ID aplikacije wolframalpha, dropbox in openweathermap. Vse, kar morate storiti, je, da se prijavite na spletna mesta in ta vam bo dal ID aplikacije. in jih nato vnesite na ustrezna mesta, določena s komentarji v kodi. Prepričajte se, da je pip namestil vse in da je namestil Tesseract OCR in OpenCV. Ustvarite datoteko python z imenom Server.py na računalniku in datoteko client.py na malini pi, nato kopirajte in prilepite kodo. Toda vedite, da bolj ko so znaki bolj beli in ozadje bolj belo, boljši so rezultati, to velja za vsako programsko opremo za prepoznavanje besedila.
Vse povezave do prijave za ID aplikacije \/
www.wolframalpha.com/
openweathermap.org/api
www.dropbox.com/developers/documentation
Namestite Tesseract OCR in OpenCV \/
github.com/UB-Mannheim/tesseract/wiki
opencv.org/
Server.py:
import dropboxfrom PIL import Image import cv2 import pytesseract from pytesseract import Output import numpy as np import wolframalpha import socket import time
dbx = dropbox. Dropbox ("dropboxAPIkey")
s = socket.socket (socket. AF_INET, socket. SOCK_STREAM)
app_id = "ID aplikacije"
host = socket.gethostname ()
port = 60567 print (host) s.bind ((host, port)) s.listen (2)
medtem ko je res:
c, addr = s.accept () print (f'Got povezave iz: {addr} ') break
medtem ko je res:
medtem ko True: time.sleep (13.7) metapodatki, f = dbx.files_download ("/dropbox_API/Image.jpg") out = open ("Image.jpg", 'wb') out.write (f.content) out. close () print ("Slika prenesena!") image = cv2.imread ("Image.jpg") Image = cv2.resize (image, (640, 480), interpolation = cv2. INTER_AREA) image68 = cv2.rotate (Image, cv2. ROTATE_90_COUNTERCLOCKWISE) siva = cv2.cvtBarva (image68, cv2. COLOR_BGR2GRAY)
def remove_noise (siva):
return cv2.medianBlur (sivo, 5) def prag (sivo): return cv2.threshold (sivo, 0, 255, cv2. THRESH_BINARY + cv2. THRESH_OTSU) [1] def dilate (sivo): kernel = np.ones ((5, 5), np.uint8) return cv2.dilate (siva, jedro, ponovitve = 1) d = pytesseract.image_to_data (siva, output_type = Output. DICT)
n_boxes = len (d ['besedilo'])
za i v razponu (n_polji): če je int (d ['conf'] )> 60: (x, y, w, h) = (d ['levo'] , d ['zgoraj'] , d ['širina'] , d ['višina'] ) siva = cv2.pravokotnik (siva, (x, y), (x + w, y + h), (0, 255, 0), 2) prekinite pytesseract.pytesseract.tesseract_cmd = r "C: / Program Files / Tesseract-OCR / tesseract.exe" text = pytesseract.image_to_string (sivo) print (besedilo) medtem ko je True: text2 = " "če je len (besedilo)> = 2: c.send (bajti (besedilo," utf-8 ")), če je len (besedilo) = 2: poizvedba = besedilni odjemalec = wolframalpha. Client (app_id) res = client.query (poizvedba) answer = next (res.results).text answer1 = answer.partition ('\ n') [0] print (answer1) c.send (bytes (answer1, "utf-8")) if len (besedilo) <= 1: c.send (bytes (text2, "utf-8")) time.sleep (7.5) break
Client.py:
uvoz dropboximport picameraimport čas iz luma.core.interface.serial uvoz i2c iz luma.core.render uvoz platno iz luma.oled.device uvoz ssd1306, ssd1325, ssd1331, sh1106 uvoz vtičnice datum in čas iz časa uvoza spanje uvoz pyowm serial = i2c (vrata = 1, naslov = 0x3C) naprava = ssd1306 (zaporedna, vrti = 1) kamera = pikamera. PiCamera () dropbox_access_token = "" #Vaš dropbox-id znova 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 naslov vašega računalniškega vmesnika = 60567 s.connect ((gostitelj, vrata)) msg1 = "" owm = pyowm. OWM ("")#app-id za 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. mesec) + "/" + str (cdt.year) obs = owm.weather_at_place ("")#vaše mesto in država v nizu format weather = obs.get_weather () temp2 = str (weather.get_temperature ("fahrenheit") ["te mp_max "]) temp3 = str (weather.get_temperature (" fahrenheit ") [" temp_min "]) medtem ko je True: cdt = datetime.datetime.now () min1 = str (cdt.minute) ura = str (cdt.hour) s platnom (naprava) kot risba: draw.text ((0, 0), ura, fill = "bela") draw.text ((11, 0), ":", fill = "bela") draw.text ((15, 0), min1, fill = "white") draw.text ((0, 9), "_", fill = "white") draw.text ((0, 9), date, fill = "white ") če je min1 v številki: obs = owm.weather_at_place (" ")#vaše mesto in država spet v nizu
vreme = obs.get_weather ()
temp = str (weather.get_temperature ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", fill = "white") draw.text ((40, 0), temp, fill = "white"), če min1 ni v številki: 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 račun povezan") odjemalec. files_upload (open (computer_path, "rb"). read (), dropbox_path) print ("[UPLOADED] {}". format (computer_path)) full_msg = "" time.sleep (5) msg = s.recv (100) če je len (msg)> = 2: full_msg += msg.decode ("utf-8") print (full_msg) cdt = datetime.datetime.now () min1 = str (cdt.minute) ura = str (cdt.hour) s platnom (naprava) kot draw: 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 = " bela ") draw.text ((0, 9), date, fill = "bela"), če je min1 v številki: obs = owm.weather_at_place ("")#vaše mesto in država znova v nizu
vreme = obs.get_weather ()
temp = str (weather.get_temperature ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", fill = "white") draw.text ((40, 0), temp, fill = "white"), če min1 ni v številki: draw.text ((40, 0), temp3, fill = "white") draw.text ((32, 0), "F", fill = "white") če je len (msg) <= 1: cdt = datetime.datetime.now () min1 = str (cdt.minute) ura = str (cdt.hour) s platnom (naprava) kot draw: 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"), če je min1 v številki: obs = owm.weather_at_place ("") #vaše mesto in dežela spet v nizu
vreme = obs.get_weather ()
temp = str (weather.get_temperature ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", fill = "white") draw.text ((40, 0), temp, fill = "white"), če min1 ni v številki: draw.text ((40, 0), temp3, fill = "white") draw.text ((32, 0), "F", fill = "white") time.sleep (5.4) full_msg1 = "" msg1 = s.recv (100), če je 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) ura = str (cdt.hour) s platnom (naprava) kot draw: 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 = "white") draw.text ((0, 9), date, fill = "white") if min1 in num: obs = owm.weather_at_place ("")#vaše mesto in država spet v nizu
vreme = obs.get_weather ()
temp = str (weather.get_temperature ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", fill = "white") draw.text ((40, 0), temp, fill = "white"), če min1 ni v številki: obs = owm.weather_at_place ("")#vaše mesto in država znova v nizu
vreme = obs.get_weather ()
temp = str (weather.get_temperature ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", fill = "white") draw.text ((40, 0), temp, fill = "white"), če min1 ni v številki: draw.text ((40, 0), temp3, fill = "white") draw.text ((32, 0), "F", fill = "white") če je len (msg1) <= 1: cdt = datetime.datetime.now () min1 = str (cdt.minute) ura = str (cdt.hour) s platnom (naprava) kot draw: 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"), če je min1 v številki: obs = owm.weather_at_place ("") #vaše mesto in dežela znova v nizu
vreme = obs.get_weather ()
temp = str (weather.get_temperature ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", fill = "white") draw.text ((40, 0), temp, fill = "white"), če min1 ni v številki: draw.text ((40, 0), temp3, fill = "white") draw.text ((32, 0), "F", fill = "white") time.sleep (7) client.files_delete (dropbox_path) print ("Datoteke izbrisane")
P. S. Sem amaterski programer, zato vas prosim, da ne dvomite o mojih groznih metodah programiranja.
4. korak: Združite vse skupaj
Ko končate vse ostalo, ste praktično končali, le še pritrdite malinovo kamero in zaslon na očala. To lahko storite z uporabo dvostranskega lepila, omenjenega v zalogah, ali pa uporabite kakršne koli metode, ki se vam zdijo potrebne. Morda ste tudi opazili, da v tej lekciji nikjer nisem omenil baterije, ker imam v načrtu prihodnje nadgradnje za ta očala in jih trenutno ne želim namestiti. Če pa ga želite priključiti, boste potrebovali vezje polnilnika li-po iz amazona
Če vam je bilo všeč in želite videti več, sem odprl kanal v YouTubu in upam, da bom tudi tam objavil vaje. Tukaj je povezava:
www.youtube.com/channel/UCGqcWhHXdZf231rLe…
Bog rešuje!
Janez 3:16 "Kajti Bog je tako ljubil svet, da je dal svojega edinorojenega Sina, ki tako veruje vanj, ne bo propadel, ampak bo imel večno življenje."
Priporočena:
Pametna očala (pod 10 USD !!!): 8 korakov (s slikami)
Pametna očala (pod 10 USD !!!): Pozdravljeni! Vsi poznamo pametna očala, kot je tista z imenom E.D.I.T.H. izdelal naš ljubljeni lik Tony Stark, ki ga je kasneje posredoval Peter Parker. Danes bom zgradil eno tako pametno steklo, ki bo tudi pod 10 USD! Niso ravno
Pametna očala: 6 korakov
Pametna očala: Pozdravljeni! Danes bom z vami delila nekaj, kar sem si že dolgo želela DIY pametna očala, zgrajena le okoli 25 USD, zdaj omogočajo DIE - Naredite to izjemno
Pametna očala DIY - Arduino/ESP: 5 korakov
Pametna očala DIY - Arduino/ESP: Nova različica je na voljo tukaj: [YouTube] Hej fantje! Tukaj sem, da vam pokažem svoj projekt DIY in vas spodbudim, da to storite sami! Projekt so prava pametna očala, ki jih lahko vsak naredi doma .Vse kode najdete tukaj in vire: [GitHub] Tudi jaz
DIY pametna očala za razširjeno resničnost z uporabo Arduina: 7 korakov
DIY pametna očala za razširjeno resničnost z uporabo Arduina: Ker tehnologija hitro raste in se vključuje v vse vidike življenja ljudi, so oblikovalci in razvijalci poskušali ljudem zagotoviti prijetnejšo izkušnjo s tehnologijo. Eden od tehnoloških trendov, ki si olajšajo življenje, je nošenje
Očala s tekočimi kristali za ambliopijo (očala za izmenično okluzijo) [ATtiny13]: 10 korakov (s slikami)
Očala s tekočimi kristali za ambliopijo (očala za izmenično okluzijo) [ATtiny13]: ambliopija (leno oko), motnja vida, ki prizadene približno 3% prebivalstva, običajno pa se zdravi s preprostimi očesnimi očesi ali kapljicami atropina. Na žalost te metode zdravljenja dolgotrajno in neprekinjeno zapirajo močnejše oči, ne