Sisällysluettelo:
- Vaihe 1: Piirin kytkentä
- Vaihe 2: Raspberry Pi: n käyttäminen
- Vaihe 3: Koodausaika
- Vaihe 4: Yhdistä kaikki
Video: Älylasit: 4 vaihetta
2024 Kirjoittaja: John Day | [email protected]. Viimeksi muokattu: 2024-01-30 08:59
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ä
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
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
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:
Älylasit (alle 10 dollaria !!!): 8 vaihetta (kuvilla)
Älylasit (alle 10 dollaria !!!): Hei! Me kaikki tunnemme älylasit, kuten E.D.I.T.H. rakkaan hahmon Tony Starkin tekemä, joka myöhemmin välitettiin Peter Parkerille. Tänään aion rakentaa yhden tällaisen älykkään lasin, joka myös alle 10 dollaria! He eivät ole aivan
Älylasit: 6 vaihetta
Älylasit: Hei kaikille !! Tänään aion jakaa teille kaverit, jotain, mitä olen halunnut jo pitkään DIY Smart -lasit, jotka on rakennettu juuri noin 25 dollaria Nyt antaa kuoleman - tee se äärimmäisen
DIY -älylasit - Arduino/ESP: 5 vaihetta
DIY Smart Glasses - Arduino/ESP: Uusi versio on saatavana täältä: [YouTube] Hei kaverit! Olen täällä näyttääkseni teille DIY -projektini ja rohkaistakseni tekemään sen itse! Projekti on todellisia älylaseja, joita jokainen voi tehdä kotona .Kaikki koodi löytyy täältä ja resurssit: [GitHub] Minä myös
Akustinen levitaatio Arduino Unon kanssa Askel askeleelta (8 vaihetta): 8 vaihetta
Akustinen levitaatio Arduino Unon kanssa Askel askeleelta (8 vaihetta): ultraäänikaiuttimet L298N DC-naarasadapterin virtalähde urospuolisella dc-nastalla ja analogiset portit koodin muuntamiseksi (C ++)
4G/5G HD -videon suoratoisto DJI Dronesta alhaisella latenssilla [3 vaihetta]: 3 vaihetta
4G/5G HD -videon suoratoisto DJI Dronesta alhaisella latenssilla [3 vaihetta]: Seuraava opas auttaa sinua saamaan live-HD-videovirtoja lähes mistä tahansa DJI-dronesta. FlytOS -mobiilisovelluksen ja FlytNow -verkkosovelluksen avulla voit aloittaa videon suoratoiston droonilta