Kazalo:

Pametna očala: 4 koraki
Pametna očala: 4 koraki

Video: Pametna očala: 4 koraki

Video: Pametna očala: 4 koraki
Video: НЕ ВЗДУМАЙ снимать аккумулятор с машины. Делай это ПРАВИЛЬНО ! 2024, Julij
Anonim
Pametna očala
Pametna očala
Pametna očala
Pametna očala

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

Ožičenje vezja!
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

Čas kodiranja!
Č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

Vse skupaj!
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: