Inhoudsopgave:

Slimme bril: 4 stappen
Slimme bril: 4 stappen

Video: Slimme bril: 4 stappen

Video: Slimme bril: 4 stappen
Video: Deze slimme bril wil je wel op zetten 2024, November
Anonim
Slimme bril
Slimme bril
Slimme bril
Slimme bril

Hallo allemaal, vandaag ga ik je laten zien hoe je thuis een slimme bril kunt maken! Een van de grootste dingen van slimme brillen is hoe nuttig het is om zoiets te hebben in de huidige wereld van technologie en hoe er niet slechts één versie van slimme brillen is, want ze hebben allemaal geweldige functies en een oneindig aantal toepassingen die kunnen worden geïntegreerd in de toekomst. De kenmerken van deze slimme bril zijn onder meer het vertellen van de tijd, het vertelt je de temperatuur om de 5 minuten, tussen die 5 minuten wisselt het tussen de verwachte hoge en lage temperatuur voor die dag, het vertelt je ook de datum. Maar het belangrijkste kenmerk is dat het elke 10 seconden een foto maakt en vervolgens die foto analyseert voor tekst waarin het nuttige informatie erover zal retourneren, als het een vraag vindt, zal het deze beantwoorden met behulp van wolfram, of als het een wiskundige vergelijking vindt het zal het oplossen!

Benodigdheden:

De benodigdheden voor dit project zijn onder andere:

1) Een Raspberry Pi 0 W (van vilros.com)

2) Een duidelijk 128x64 OLED-scherm (van Sparkfun.com)

3) Een cameramodule geformatteerd voor Raspberry Pi 0 W (van amazon.com)

4) Elke bril naar keuze

5) Draden

6) Soldeerbout:

7) Loodvrij soldeer (omdat je niet dood wilt gaan aan lood)

8) 2-weg lijm

9) SD-kaart min van 8 gb

10) computer en internetverbinding

Ervan uitgaande dat u al een computer en een internetverbinding heeft, bedragen de kosten van deze bril ongeveer $ 130,00

Stap 1: Bedrading van het circuit

Bedrading van het circuit!
Bedrading van het circuit!

Om tekst op het scherm weer te geven, moet je verbinding maken met de OLED via I2C of SPI, ik kies I2C omdat ik het prettiger vind om te gebruiken, maar als je er via SPI verbinding mee wilt maken, volg dan deze tutorial op de Sparkfun-website en kom hier terug als je klaar bent. https://learn.sparkfun.com/tutorials/transparent-g… Als je voor I2C hebt gekozen, heb ik de draden gesoldeerd zoals aangegeven door het volgende:

Pi / OLED /

3.3v 3.3v

GND GND

SDA SDA

SCL SCL

Houd er rekening mee dat de heldere OLED slechts 3.3v aankan.

Nadat u klaar bent met het aansluiten van het circuit, schuift u de lintkabel van de cameramodule in de lintkabelhouder op de Raspberry Pi door de zwarte klem eruit te trekken en terug te schuiven zodra de lintkabel op zijn plaats zit.

Stap 2: Toegang tot de Raspberry Pi

Met ssh hebben we toegang tot onze pi met onze pc zonder een extra externe toetsenbordmuis en monitor aan te sluiten. Het eerste dat u doet, is uw SD-kaart op uw pc aansluiten met een adapter of een ingebouwde poort, dan moet u naar deze link gaan https://www.raspberrypi.org/downloads/raspbian/ en Raspbian buster downloaden met bureaublad. Ten tweede moet je het besturingssysteem op de SD-kaart plaatsen met BalenaEtcher, je SD-kaart en het Raspbian-besturingssysteem selecteren en op "flash" klikken. Dit proces kan enige tijd duren, dus kom terug als je klaar bent. Ga ten derde naar de SD-kaart in bestandsverkenner of vinder op mac en maak een tekstbestand met de naam wpa_supplicant, verwijder de.txt-extensie en voeg.conf toe, plak het volgende in het bestand:

land=VS

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 }

Als u zich niet in de VS bevindt, moet u uw WiFi-naam en wachtwoord invoeren op de overeenkomstige plaatsen en in het land. Houd er rekening mee dat de Raspberry Pi alleen verbinding kan maken met een 2,4 Ghz-netwerk, wat betekent dat uw pc ook verbinding moet maken met dat netwerk. Maak daarna een leeg tekstbestand zonder extensie genaamd ssh en verwijder vervolgens uw SD-kaart. Je zult dan PuTTY https://www.putty.org/ moeten installeren, wat je gaat gebruiken om ssh in te schakelen. Na de installatie voert u het IP-adres van uw raspberry pi in, u kunt erachter komen wat het is door naar de website van uw router te gaan, in te loggen en naar de aangesloten apparaten te kijken.

Nadat je toegang hebt gekregen tot de Raspberry Pi, wordt je gevraagd om in te loggen, de standaard gebruikersnaam is "pi" en het wachtwoord is "raspberry". Typ sudo raspi-config en ga naar interface-opties en schakel camera, ssh en i2c in, klik vervolgens op voltooien en typ sudo reboot. Nu ben je klaar om naar de raspberry pi te ssh'en, ga je gang en installeer Remote Desktop en voer het IP-adres van je raspberry pi in en je bent nu klaar om te ssh in de raspberry pi.

Stap 3: Codeertijd

Codeer tijd!
Codeer tijd!

Ik heb ervoor gekozen om dit programma in python te coderen, dus zorg ervoor dat python3.7 of 3.8 op je bureaublad is geïnstalleerd. Deze code werkt met behulp van een server en een client, waarbij de server uw pc is. De client of raspberry pi zal een foto maken en die uploaden naar dropbox, die wordt opgehaald door de server die vervolgens de beeldverwerking en tekstherkenning op de afbeelding uitvoert. Je moet een wolframalpha-, dropbox- en openweathermap-app-id hebben om dit te laten werken, het enige wat je hoeft te doen is naar de website te gaan om je aan te melden en je krijgt een app-id. en voer ze vervolgens in op overeenkomstige plaatsen die worden bepaald door de opmerkingen in de code. Zorg ervoor dat pip alles heeft geïnstalleerd en Tesseract OCR en OpenCV heeft geïnstalleerd. Maak een python-bestand met de naam Server.py op uw pc en een bestand met de naam client.py op de raspberry pi en kopieer en plak de code. Maar weet dat hoe vetter de karakters en witter de achtergrond, hoe beter de resultaten, dit is het geval met elke tekstherkenningssoftware.

Alle links om je aan te melden voor een app-id \/

www.wolframalpha.com/

openweathermap.org/api

www.dropbox.com/developers/documentation

Zorg ervoor dat u Tesseract OCR en OpenCV installeert \/

github.com/UB-Mannheim/tesseract/wiki

opencv.org/

Server.py:

import dropboxvan PIL import Afbeelding import cv2 import pytesseract vanuit pytesseract import Uitvoer import numpy als np import wolframalpha import socket import tijd

dbx = dropbox. Dropbox("dropboxAPIkey")

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

app_id = "App-ID"

host = socket.gethostnaam()

poort = 60567 print (host) s.bind((host, poort)) s.listen(2)

terwijl waar:

c, addr = s.accept() print (f'Heb verbinding van: {addr}') break

terwijl waar:

while True: time.sleep(13.7) metadata, f = dbx.files_download("/dropbox_API/Image.jpg") out = open("Image.jpg", 'wb') out.write(f.content) out. close() print("Afbeelding gedownload!") image = cv2.imread("Image.jpg") Image = cv2.resize(image, (640, 480), interpolation=cv2. INTER_AREA) image68 = cv2.rotate(Image, cv2. ROTATE_90_COUNTERCLOCKWISE) grijs = cv2.cvtColor(image68, cv2. COLOR_BGR2GRAY)

def remove_noise (grijs):

retourneer cv2.medianBlur(grijs, 5) def drempelwaarde(grijs): retourneer cv2.threshold(grijs, 0, 255, cv2. THRESH_BINARY + cv2. THRESH_OTSU)[1] def dilate(grijs): kernel = np.ones(((5, 5), np.uint8) return cv2.dilate(grijs, kernel, iteraties=1) d = pytesseract.image_to_data(grijs, output_type = Output. DICT)

n_boxes = len(d['tekst'])

for i in range(n_boxes): if int(d['conf']) > 60: (x, y, w, h) = (d['left'], d['top'], d['breedte'], d['hoogte']) grijs = cv2.rechthoek(grijs, (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(grijs) print(text) while 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(query) answer = next(res.results).text answer1 = answer.partition('\n')[0] print (answer1) c.send(bytes(answer1, "utf-8")) if len(text) <= 1: c.send(bytes(text2, "utf-8")) time.sleep(7.5) pauze

Klant.py:

import dropboximport picameraimport tijd van luma.core.interface.serial import i2c van luma.core.render import canvas van luma.oled.device import ssd1306, ssd1325, ssd1331, sh1106 import socket import datetime from time import sleep import pyowm serial = i2c(poort=1, adres=0x3C) apparaat = ssd1306(serieel, draaien=1) camera = picamera. PiCamera() dropbox_access_token= "" #Uw dropbox-id opnieuw 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-adres van uw pc-poort = 60567 s.connect((host, poort)) msg1 = " " owm = pyowm. OWM("")#app-id voor 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. maand) + "/" + str(cdt.jaar) obs = owm.weather_at_place("")#uw stad en land in tekenreeksformaat weather = obs.get_weather() temp2 = str(weather.get_temperature("fahrenheit")["te mp_max"]) temp3 = str(weather.get_temperature("fahrenheit")["temp_min"]) while True: cdt = datetime.datetime.now() min1 = str(cdt.minute) hour = str(cdt.hour) met canvas(apparaat) als draw: draw.text((0, 0), hour, fill = "white") draw.text((11, 0), ":", fill = "white") draw.text((15, 0), min1, fill = "wit") draw.text((0, 9), "_", fill = "wit") draw.text((0, 9), date, fill = "wit ") if min1 in num: obs = owm.weather_at_place("")#uw stad en land opnieuw in tekenreeksformaat

weer = obs.get_weather()

temp = str(weather.get_temperature("fahrenheit")["temp"]) draw.text((32, 0), "F", fill = "white") draw.text((40, 0), temp, fill = "white") indien min1 niet in num: 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 gekoppeld") client. files_upload(open(computer_path, "rb").read(), dropbox_path) print("[UPLOADED] {}".format(computer_path)) full_msg = " " time.sleep(5) msg = s.recv(100) if len(msg) >= 2: full_msg += msg.decode("utf-8") print (full_msg) cdt = datetime.datetime.now() min1 = str(cdt.minute) uur = str(cdt.hour) met canvas(apparaat) als draw: draw.text((0, 19), full_msg, fill = "white") draw.text((0, 0), hour, fill = "white") draw.text((11, 0), ":", fill = "wit") draw.text((15, 0), min1, fill = "wit") draw.text((0, 9), "_", fill = " wit") draw.text((0, 9), date, fill = "wit") indien min1 in aantal: obs = owm.weather_at_place("")#uw stad en land opnieuw in tekenreeksformaat

weer = obs.get_weather()

temp = str(weather.get_temperature("fahrenheit")["temp"]) draw.text((32, 0), "F", fill = "white") draw.text((40, 0), temp, fill = "white") indien min1 niet in num: draw.text((40, 0), temp3, fill = "white") draw.text((32, 0), "F", fill = "white") if len(msg) <= 1: cdt = datetime.datetime.now() min1 = str(cdt.minute) hour = str(cdt.hour) met canvas(apparaat) als draw: draw.text((0, 0)), hour, fill = "wit") draw.text((11, 0), ":", fill = "wit") draw.text((15, 0), min1, fill = "wit") draw. text((0, 9), "_", fill = "white") draw.text((0, 9), date, fill = "white") if min1 in num: obs = owm.weather_at_place("") #jouw stad en land opnieuw in tekenreeksformaat

weer = obs.get_weather()

temp = str(weather.get_temperature("fahrenheit")["temp"]) draw.text((32, 0), "F", fill = "white") draw.text((40, 0), temp, fill = "white") indien min1 niet in num: 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) met canvas(apparaat) als draw: draw.text((0, 19), full_msg, fill = "wit") draw.text((0, 29), full_msg2, fill = "wit") draw.text((0, 0), hour, fill = "wit") draw.text ((11, 0), ":", fill = "wit") draw.text((15, 0), min1, fill = "wit") draw.text((0, 9), "_", fill = "wit") draw.text((0, 9), date, fill = "white") if min1 in num: obs = owm.weather_at_place("")#uw stad en land opnieuw in tekenreeksformaat

weer = obs.get_weather()

temp = str(weather.get_temperature("fahrenheit")["temp"]) draw.text((32, 0), "F", fill = "white") draw.text((40, 0), temp, fill = "white") indien min1 niet in aantal: obs = owm.weather_at_place("")#uw stad en land opnieuw in tekenreeksformaat

weer = obs.get_weather()

temp = str(weather.get_temperature("fahrenheit")["temp"]) draw.text((32, 0), "F", fill = "white") draw.text((40, 0), temp, fill = "white") indien min1 niet in num: draw.text((40, 0), temp3, fill = "white") draw.text((32, 0), "F", fill = "white") if len(msg1) <= 1: cdt = datetime.datetime.now() min1 = str(cdt.minute) hour = str(cdt.hour) met canvas(apparaat) als draw: draw.text((0, 0)), hour, fill = "wit") draw.text((11, 0), ":", fill = "wit") draw.text((15, 0), min1, fill = "wit") draw. text((0, 9), "_", fill = "white") draw.text((0, 9), date, fill = "white") if min1 in num: obs = owm.weather_at_place("") #jouw stad en land opnieuw in tekenreeksformaat

weer = obs.get_weather()

temp = str(weather.get_temperature("fahrenheit")["temp"]) draw.text((32, 0), "F", fill = "white") draw.text((40, 0), temp, fill = "white") indien min1 niet in num: draw.text((40, 0), temp3, fill = "white") draw.text((32, 0), "F", fill = "white") time.sleep(7) client.files_delete(dropbox_path) print ("Bestanden verwijderd")

PS Ik ben een amateurprogrammeur, dus twijfel niet aan mijn vreselijke programmeermethoden.

Stap 4: Alles bij elkaar

Alles bij elkaar!
Alles bij elkaar!

Als je klaar bent met al het andere, hoef je alleen nog maar de Raspberry Pi-camera en het display op de bril te bevestigen. U kunt dit doen door de dubbelzijdige lijm te gebruiken die in de benodigdheden wordt vermeld of u kunt alle methoden gebruiken die u nodig acht. Het is je misschien ook opgevallen dat ik nergens in deze les een batterij heb genoemd, omdat ik toekomstige upgrades voor deze bril heb gepland en er op dit moment geen wilde bevestigen. Maar als je er een wilt aansluiten, heb je een li-po-opladercircuit van amazon nodig

Als je dit leuk vond en meer wilt zien, ik ben een YouTube-kanaal begonnen en zal daar hopelijk ook tutorials plaatsen. Hier is de link:

www.youtube.com/channel/UCGqcWhHXdZf231rLe…

God redt!

Johannes 3:16 "Want God had de wereld zo lief dat Hij Zijn enige Zoon heeft gegeven, wie ooit in Hem gelooft, zal niet verloren gaan, maar eeuwig leven hebben."

Aanbevolen: