Sisällysluettelo:

Älylasit: 4 vaihetta
Älylasit: 4 vaihetta

Video: Älylasit: 4 vaihetta

Video: Älylasit: 4 vaihetta
Video: Menestyvän parisuhteen 4 vaihetta 2024, Marraskuu
Anonim
Älykkäät lasit
Älykkäät lasit
Älykkäät lasit
Älykkäät lasit

Hei kaikki tänään, aion näyttää sinulle kuinka tehdä älylaseja kotona! Yksi älykkäiden lasien suurimmista asioista on se, kuinka hyödyllistä on saada tällainen tekniikka nykymaailmassa ja kuinka ei ole vain yhtä versiota älylaseista, koska kaikilla on hämmästyttäviä ominaisuuksia ja ääretön määrä sovelluksia, jotka voitaisiin integroida tulevaisuudessa. Näiden älylasien ominaisuuksiin kuuluu kellonajan kertominen, lämpötilan kertominen 5 minuutin välein, ja 5 minuutin välillä se vaihtaa päivän odotetun korkean ja matalan lämpötilan välillä ja kertoo myös päivämäärän. Mutta sen pääominaisuus on, että se ottaa kuvan 10 sekunnin välein ja analysoi sitten kuvan tekstiksi, jossa se palauttaa hyödyllisiä tietoja siitä, jos se löytää kysymyksen, se vastaa siihen wolframilla tai jos se löytää matemaattisen yhtälön se ratkaisee sen!

Tarvikkeet:

Tätä hanketta varten tarvittavat tarvikkeet sisältävät seuraavat:

1) A Vadelma Pi 0 W (osoitteesta vilros.com)

2) Selkeä 128 x 64 OLED -näyttö (Sparkfun.com)

3) Raspberry Pi 0 W: lle alustettu kameramoduuli (osoitteesta amazon.com)

4) Kaikki valitsemasi lasit

5) Johdot

6) Juotosrauta

7) Lyijytön juote (koska et halua kuolla lyijystä)

8) kaksisuuntainen liima

9) SD -kortti vähintään 8 Gt

10) tietokone ja Internet -yhteys

Olettaen, että sinulla on jo tietokone ja internetyhteys, näiden lasien hinta on noin 130,00 dollaria

Vaihe 1: Piirin kytkentä

Piirin johdotus!
Piirin johdotus!

Jos haluat näyttää tekstiä näytöllä, jonka aiot muodostaa yhteyden OLED -laitteeseen I2C: n tai SPI: n kautta, valitsen I2C: n, koska se on mukavampi käyttää, mutta jos haluat muodostaa yhteyden siihen SPI: n kautta, seuraa tätä opetusohjelmaa Sparkfun -verkkosivustolla ja palaa tänne, kun olet valmis. https://learn.sparkfun.com/tutorials/transparent-g… Jos olet valinnut I2C: n, olen juottanut johdot seuraavan mukaisesti:

Pi \/ OLED \/

3.3v 3.3v

GND GND

SDA SDA

SCL SCL

Huomaa, että kirkas OLED voi käsitellä vain 3.3v.

Kun olet liittänyt piirin, liu'uta kameramoduulin nauhakaapeli vadelmapilan nauhakaapelin pidikkeeseen vetämällä musta puristin ulos ja liu'uttamalla se takaisin sisään, kun nauhakaapeli on paikallaan.

Vaihe 2: Raspberry Pi: n käyttäminen

Ssh: n avulla pääsemme pi: hen tietokoneella ilman ylimääräistä ulkoista näppäimistön hiirtä ja näyttöä. Ensimmäinen asia, jonka teet, on liittää SD -kortti tietokoneeseen sovittimen tai sisäänrakennetun portin avulla, ja sinun on siirryttävä tähän linkkiin https://www.raspberrypi.org/downloads/raspbian/ ja ladattava Raspbian buster työpöydän kanssa. Toiseksi sinun on asetettava käyttöjärjestelmä SD -kortille BalenaEtcherin avulla, valitse SD -korttisi ja Raspbian -käyttöjärjestelmä ja napsauta "flash", tämä prosessi voi kestää jonkin aikaa, joten palaa takaisin, kun olet valmis. Kolmanneksi siirry SD -kortille File Explorerissa tai Finderissa Macissa ja luo tekstitiedosto nimeltä wpa_supplicant. Varmista, että poistat.txt -laajennuksen ja lisäät.conf, liitä tiedostoon seuraava:

maa = 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}

Sinun on annettava WiFi -nimesi ja salasanasi vastaaviin paikkoihin ja maahan, jos et ole Yhdysvalloissa. Muista, että Raspberry Pi voi muodostaa yhteyden vain 2,4 GHz: n verkkoon, joten tietokoneesi on myös muodostettava yhteys tähän verkkoon. Luo tyhjä tekstitiedosto ilman laajennusta nimeltä ssh ja poista sitten SD -kortti. Sinun on sitten asennettava PuTTY https://www.putty.org/, jota käytät ssh: n käyttöönottoon. Kun olet asentanut raspberry pi -laitteen IP -osoitteen, voit selvittää, mikä se on, menemällä reitittimen verkkosivustoon kirjautumalla sisään ja katsomalla yhdistettyjä laitteita.

Kun pääset käyttämään Raspberry Pi -laitetta, se pyytää sinua kirjautumaan sisään, oletuskäyttäjätunnus on "pi" ja salasana on "vadelma". Kirjoita sudo raspi-config ja siirry sitten liitäntävaihtoehtoihin ja ota kamera, ssh ja i2c käyttöön, napsauta sitten Valmis ja kirjoita sudo reboot. Nyt olet valmis ssh: hen vadelmapi: ssä, asenna Remote Desktop ja syötä vadelmapi: n IP -osoite, ja voit nyt ssh: n mukaan vadelma pi: hen.

Vaihe 3: Koodausaika

Koodausaika!
Koodausaika!

Olen päättänyt koodata tämän ohjelman pythonissa, joten varmista, että työpöydällesi on asennettu python3.7 tai 3.8. Tämä koodi toimii käyttämällä palvelinta ja asiakasta, katkaisija on tietokoneesi. Asiakas tai vadelma pi ottaa kuvan ja lähettää sen dropboxiin, jonka palvelin hakee ja joka suorittaa kuvankäsittelyn ja tekstin tunnistamisen kuvassa. Sinun on hankittava wolframalpha, dropbox ja openweathermap app-id, jotta tämä toimisi. Sinun tarvitsee vain mennä verkkosivustojen rekisteröintiin ja se antaa sinulle sovellustunnuksen. ja syötä ne sitten vastaaviin paikkoihin, jotka määritetään koodin kommenteissa. Varmista, että olet asentanut pip kaiken ja asentanut Tesseract OCR: n ja OpenCV: n. Luo python -tiedosto nimeltä Server.py tietokoneellesi ja tiedosto nimeltä client.py raspberry pi: lle ja kopioi ja liitä koodi. Mutta muista, että mitä rohkeammat merkit ja valkoisempi tausta, sitä paremmat tulokset, tämä pätee kaikkiin tekstintunnistusohjelmistoihin.

Kaikki linkit, joilla voit rekisteröityä sovellustunnukseen \/

www.wolframalpha.com/

openweathermap.org/api

www.dropbox.com/developers/documentation

Muista asentaa Tesseract OCR ja OpenCV \/

github.com/UB-Mannheim/tesseract/wiki

opencv.org/

Server.py:

tuoda pudotuslaatikko PIL -tuonnista Kuvan tuonti cv2 -tuonti pytesseract pytesseract -tuonnista Tuonti tuonnin numero, kuten np tuonti wolframalpha tuonti socket tuonti aika

dbx = dropbox. Dropbox ("dropboxAPIkey")

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

app_id = "Sovellustunnus"

isäntä = socket.gethostname ()

portti = 60567 tulosta (isäntä) s.bind ((isäntä, portti)) s.listen (2)

vaikka totta:

c, addr = s.accept () print (f'Ota yhteys: {addr} ') katkeaa

vaikka totta:

kun taas True: time.sleep (13.7) metatiedot, f = dbx.files_download ("/dropbox_API/Image.jpg") out = open ("Image.jpg", 'wb') out.write (f.content) out. close () print ("Kuva ladattu!") image = cv2.imread ("Image.jpg") Image = cv2.resize (kuva, (640, 480), interpolointi = cv2. INTER_AREA) image68 = cv2.rotate (Kuva, cv2. ROTATE_90_COUNTERCLOCKWISE) harmaa = cv2.cvtColor (kuva68, cv2. COLOR_BGR2GRAY)

def remove_noise (harmaa):

return cv2.medianBlur (harmaa, 5) def kynnysarvo (harmaa): return cv2.threshold (harmaa, 0, 255, cv2. THRESH_BINARY + cv2. THRESH_OTSU) [1] def dilate (harmaa): ydin = np.ones ((5, 5), np.uint8) return cv2.dilate (harmaa, ydin, iteraatiot = 1) d = pytesseract.image_to_data (harmaa, output_type = Output. DICT)

n_boxes = len (d ['teksti'])

i alueella (n_boxes): jos int (d ['conf'] )> 60: (x, y, w, h) = (d ['left'] , d ['top'] , d ['leveys'] , d ['korkeus'] ) harmaa = cv2.suorakulmio (harmaa, (x, y), (x + w, y + h), (0, 255, 0), 2) break pytesseract.pytesseract.tesseract_cmd = r "C: / Program Files / Tesseract-OCR / tesseract.exe" text = pytesseract.image_to_string (harmaa) tulosta (teksti), kun taas 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 (kysely) vastaus = seuraava (res.results).teksti vastaus1 = vastaus.osio ('\ n') [0] tulosta (vastaus1) c. lähetä (tavua (vastaus1, "utf-8")) jos len (teksti) <= 1: c.send (tavua (teksti2, "utf-8")) time.sleep (7.5) tauko

Asiakas.py:

tuoda dropboximport picameraimport time luma.core.interface.serial import i2c from luma.core.render tuonti kangas luma.oled.device tuonti ssd1306, ssd1325, ssd1331, sh1106 tuonti pistorasia tuonti ajankohta tuonnista lepotila tuonti pyowm serial = i2c (portti = 1, osoite = 0x3C) laite = ssd1306 (sarja, kierrä = 1) kamera = picamera. PiCamera () dropbox_access_token = "" #Lähetyslaatikkotunnuksesi taas 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 -porttisi IP -osoite = 60567 s.connect ((isäntä, portti)) msg1 = "" owm = pyowm. OWM ("")#app-id for openweathermap number = ["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. month) + "/" + str (cdt.year) obs = owm.weather_at_place ("")#kaupunkisi ja maasi merkkijonomuodossa sää = obs.get_weather () temp2 = str (weather.get_temperature ("fahrenheit") ["te mp_max "]) temp3 = str (sää.get_lämpötila (" fahrenheit ") [" temp_min "]) kun taas Tosi: cdt = datetime.datetime.now () min1 = str (cdt.minute) hour = str (cdt.hour) piirtämällä kangas (laite): 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 ") jos min1 numerossa: obs = owm.weather_at_place (" ")#kaupunki ja maa merkkijonomuodossa

sää = obs.get_weather ()

temp = str (weather.get_temperature ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", fill = "white") draw.text ((40, 0), temp, fill = "valkoinen") jos min1 ei ole numerossa: 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 -tili linkitetty") -asiakas. files_upload (open (computer_path, "rb"). read (), dropbox_path) print ("[UPLOADED] {}". format (computer_path)) full_msg = "" time.sleep (5) msg = s.recv (100) jos len (msg)> = 2: full_msg += msg.decode ("utf-8") print (full_msg) cdt = datetime.datetime.now () min1 = str (cdt.minute) hour = str (cdt.hour) piirtämällä kangas (laite): 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 = " valkoinen ") draw.text ((0, 9), date, fill = "valkoinen") jos min1 numero: obs = owm.weather_at_place ("")#kaupunki ja maa merkkijonomuodossa

sää = obs.get_weather ()

temp = str (weather.get_temperature ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", fill = "white") draw.text ((40, 0), temp, fill = "valkoinen") jos min1 ei ole numerossa: draw.text ((40, 0), temp3, fill = "white") draw.text ((32, 0), "F", fill = "white") jos len (msg) <= 1: cdt = datetime.datetime.now () min1 = str (cdt.minute) hour = str (cdt.hour) piirtoalustalla (laite) piirteenä: draw.text ((0, 0), hour, fill = "white") draw.text ((11, 0), ":", fill = "white") draw.text ((15, 0), min1, fill = "white"). text ((0, 9), "_", fill = "white") draw.text ((0, 9), date, fill = "white") jos min1 numerossa: obs = owm.weather_at_place ("") #kaupunkisi ja maasi merkkijonomuodossa jälleen

sää = obs.get_weather ()

temp = str (weather.get_temperature ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", fill = "white") draw.text ((40, 0), temp, fill = "valkoinen") jos min1 ei ole numerossa: 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) hour = str (cdt.hour) piirtoalustalla (laite) piirteenä: 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 = "valkoinen") draw.text ((0, 9), date, fill = "white") if min1 in number: obs = owm.weather_at_place ("")#kaupunki ja maa merkkijonomuodossa

sää = obs.get_weather ()

temp = str (weather.get_temperature ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", fill = "white") draw.text ((40, 0), temp, fill = "valkoinen") jos min1 ei ole numero: obs = owm.weather_at_place ("")#kaupunki ja maa merkkijonomuodossa

sää = obs.get_weather ()

temp = str (weather.get_temperature ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", fill = "white") draw.text ((40, 0), temp, fill = "valkoinen") jos min1 ei ole numerossa: draw.text ((40, 0), temp3, fill = "white") draw.text ((32, 0), "F", fill = "white") jos len (msg1) <= 1: cdt = datetime.datetime.now () min1 = str (cdt.minute) hour = str (cdt.hour) piirtoalustalla (laite) piirteenä: draw.text ((0, 0), hour, fill = "white") draw.text ((11, 0), ":", fill = "white") draw.text ((15, 0), min1, fill = "white"). text ((0, 9), "_", fill = "white") draw.text ((0, 9), date, fill = "white") jos min1 numerossa: obs = owm.weather_at_place ("") #kaupunkisi ja maasi merkkijonomuodossa jälleen

sää = obs.get_weather ()

temp = str (weather.get_temperature ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", fill = "white") draw.text ((40, 0), temp, fill = "valkoinen") jos min1 ei ole numerossa: draw.text ((40, 0), temp3, fill = "white") draw.text ((32, 0), "F", fill = "white") time.sleep (7) client.files_delete (dropbox_path) print ("Tiedostot poistettu")

P. S. Olen amatööri -ohjelmoija, joten älä kyseenalaista kauheita ohjelmointitapojani.

Vaihe 4: Yhdistä kaikki

Yhdistä kaikki!
Yhdistä kaikki!

Kun olet lopettanut kaiken muun, olet käytännössä valmis, sinun on vain liitettävä vadelma pi -kamera ja näyttö laseihin. Voit tehdä tämän käyttämällä tarvikkeissa mainittua kaksipuolista liimaa tai käyttää mitä tahansa tarpeellisina pitämiäsi menetelmiä. Olet ehkä myös huomannut, etten ole maininnut paristoa missään tässä oppitunnissa, koska minulla on suunnitelmissa päivityksiä näille laseille enkä halunnut kiinnittää sitä juuri nyt. Mutta jos haluat liittää sellaisen, tarvitset Amazonin li-po-latauspiirin

Jos pidit tästä ja haluat nähdä lisää, olen perustanut YouTube -kanavan ja toivottavasti julkaisen myös siellä opetusohjelmia. Tässä on linkki:

www.youtube.com/channel/UCGqcWhHXdZf231rLe…

Jumala pelastaa!

Joh. 3:16 "Sillä Jumala on niin rakastanut maailmaa, että antoi ainoan Poikansa, joka ikinä uskoo häneen, ei hukku, vaan hänellä on ikuinen elämä."

Suositeltava: