İçindekiler:

Akıllı Gözlükler: 4 Adım
Akıllı Gözlükler: 4 Adım

Video: Akıllı Gözlükler: 4 Adım

Video: Akıllı Gözlükler: 4 Adım
Video: Xiaomi Akıllı Gözlük | Gözlük değil bir cep telefonu! 2024, Temmuz
Anonim
Akıllı Gözlük
Akıllı Gözlük
Akıllı Gözlük
Akıllı Gözlük

Herkese merhaba bugün size evde Akıllı Gözlük nasıl yapılır onu göstereceğim! Akıllı gözlüklerle ilgili en güzel şeylerden biri, günümüz teknoloji dünyasında böyle bir şeye sahip olmanın ne kadar faydalı olduğu ve hepsi harika özelliklere ve entegre edilebilecek sonsuz sayıda uygulamaya sahip olduğu için akıllı gözlüklerin tek bir versiyonunun olmamasıdır. gelecekte. Bu akıllı gözlüklerin özellikleri arasında zaman söyleme, her 5 dakikada bir size sıcaklığı söylemesi, bu 5 dakika arasında o gün için beklenen yüksek ve düşük sıcaklık arasında geçiş yapması ve size tarihi söylemesi yer alıyor. Ancak ana özelliği, her 10 saniyede bir resim çekmesi ve ardından bu resmi, metin için analiz edip, metin hakkında yararlı bilgiler vermesi, bir soru bulursa, volfram kullanarak cevap vermesi veya bir matematik denklemi bulmasıdır. çözecek!

Gereçler:

Bu proje için gerekli malzemeler aşağıdakileri içerecektir:

1) Ahududu Pi 0 W (vilros.com'dan)

2) Net bir 128x64 OLED ekran (Sparkfun.com'dan)

3) Raspberry Pi 0 W için biçimlendirilmiş bir kamera modülü (Amazon.com'dan)

4) İstediğiniz herhangi bir bardak

5) Teller

6) Havya

7) Kurşunsuz lehim (çünkü kurşundan ölmek istemezsiniz)

8) 2 yollu yapıştırıcı

9) SD kart minimum 8 gb

10) bilgisayar ve internet bağlantısı

Halihazırda bir bilgisayarınız ve internet bağlantınız olduğunu varsayarsak, bu gözlüğün maliyeti 130,00$ civarında olacaktır.

Adım 1: Devrenin Kablolanması

Devre Kablolama!
Devre Kablolama!

OLED'e I2C veya SPI üzerinden bağlanacağınız ekranda metni görüntülemek için, daha rahat kullandığım için I2C'yi seçiyorum ancak SPI ile bağlanmak istiyorsanız, bu öğreticiyi takip edin. Sparkfun web sitesini ziyaret edin ve işiniz bittiğinde buraya geri dönün. https://learn.sparkfun.com/tutorials/transparent-g… Eğer I2C'yi seçtiyseniz, telleri aşağıdaki şekilde lehimledim:

Pi \/ OLED \/

3.3v 3.3v

GND GND

SDA SDA

SCL SCL

Lütfen şeffaf OLED'in yalnızca 3.3v ile çalışabileceğini unutmayın.

Devreyi bağlamayı bitirdikten sonra, kamera modülünün şerit kablosunu ahududu pi üzerindeki şerit kablo tutucuya, siyah kelepçeyi çekerek ve şerit kablo yerine oturduğunda geri kaydırarak kaydırın.

2. Adım: Raspberry Pi'ye Erişmek

Ssh kullanarak ekstra bir harici klavye fare ve monitör bağlamadan bilgisayarımızla pi'mize erişebiliriz. İlk yapacağınız şey, SD kartınızı bir adaptör veya yerleşik bir bağlantı noktası ile PC'nize bağlamak, ardından bu bağlantıya gitmeniz gerekecek https://www.raspberrypi.org/downloads/raspbian/ ve Raspbian buster'ı indirmeniz gerekecek. masaüstü ile. İkinci olarak, BalenaEtcher kullanarak OS'yi SD karta yerleştirmeniz gerekiyor, SD kartınızı ve Raspbian OS'yi seçin ve "flaş"a tıklayın bu işlem biraz zaman alabilir, bu yüzden işiniz bittiğinde geri gelin. Üçüncüsü, mac'te dosya gezgininde veya bulucuda SD karta gidin ve wpa_supplicant adlı bir metin dosyası oluşturun..txt uzantısını silip.conf ekleyin, dosyaya aşağıdakini yapıştırın:

ülke=ABD

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev update_config=1 ağ={ ssid="WIFI_SSID" scan_ssid=1 psk="WIFI_PASSWORD" key_mgmt=WPA-PSK }

ABD'de değilseniz, WiFi adınızı ve şifrenizi ilgili yerlere ve ülkeye girmeniz gerekecektir. Raspberry Pi'nin yalnızca 2.4Ghz ağa bağlanabileceğini, yani bilgisayarınızın da bu ağa bağlanması gerekeceğini unutmayın. Ssh adında uzantısı olmayan boş bir metin dosyası oluşturduktan sonra SD kartınızı çıkarın. Ardından, ssh'yi etkinleştirmek için kullanacağınız PuTTY https://www.putty.org/ yüklemeniz gerekecek. Kurulduktan sonra ahududu pi'nizin IP adresini girin, yönlendiricinizin web sitesine giriş yaparak ve bağlı cihazlara bakarak ne olduğunu anlayabilirsiniz.

Raspberry Pi'ye erişim sağladıktan sonra sizden giriş yapmanızı isteyecek, varsayılan kullanıcı adı "pi" ve şifre "raspberry" olacaktır. sudo raspi-config yazın, ardından arabirim seçeneklerine gidin ve kamera, ssh ve i2c'yi etkinleştirin, ardından bitir'i tıklayın ve sudo yeniden başlat yazın. Artık ahududu pi'ye ssh yapmaya hazırsınız, devam edin ve Uzak Masaüstü'nü kurun ve raspberry pi'nizin IP adresini girin ve artık ahududu pi'ye ssh yapmaya hazırsınız.

Adım 3: Kodlama Zamanı

Kodlama Zamanı!
Kodlama Zamanı!

Bu programı python'da kodlamayı seçtim, bu yüzden masaüstünüzde python3.7 veya 3.8'in kurulu olduğundan emin olun. Bu kod bir sunucu ve bir istemci kullanarak çalışır, sunucu sizin bilgisayarınızdır. İstemci veya ahududu pi bir resim çekecek ve bunu, görüntü üzerinde görüntü işleme ve metin tanımayı çalıştıran sunucu tarafından alınan dropbox'a yükleyecektir. Bunun çalışması için bir wolframalpha, dropbox ve openweathermap uygulama kimliği almanız gerekecek, tek yapmanız gereken web sitelerine kaydolmak ve size bir uygulama kimliği verecektir. ve ardından bunları koddaki yorumlar tarafından belirlenen ilgili yerlere girin. Her şeyi pip yüklediğinizden ve Tesseract OCR ve OpenCV'yi yüklediğinizden emin olun. Bilgisayarınızda Server.py adında bir python dosyası ve ahududu pi üzerinde client.py adında bir dosya oluşturun ve ardından kodu kopyalayıp yapıştırın. Ancak, karakterler ne kadar kalın ve arka plan ne kadar beyaz olursa, sonuçların o kadar iyi olduğunu bilin, bu her metin tanıma yazılımında geçerlidir.

Bir uygulama kimliğine kaydolmak için gereken tüm bağlantılar \/

www.wolframalpha.com/

openweathermap.org/api

www.dropbox.com/developers/documentation

Tesseract OCR ve OpenCV'yi yüklediğinizden emin olun \/

github.com/UB-Mannheim/tesseract/wiki

opencv.org/

Sunucu.py:

Dropbox'ı PIL'den içe aktar Görüntü içe aktar cv2'yi pytesseract'tan içe aktar içe aktar Çıktı içe aktar numpy'yi np olarak içe aktar wolframalpha içe aktar yuva içe aktarma zamanı

dbx = dropbox. Dropbox("dropboxAPIkey")

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

app_id = "Uygulama Kimliği"

ana bilgisayar = socket.gethostname()

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

Doğru iken:

c, addr = s.accept() print (f'Şuradan bağlantı var: {addr}') break

Doğru iken:

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

def remove_noise(gri):

dönüş cv2.medianBlur(gri, 5) def eşikleme(gri): dönüş cv2.threshold(gri, 0, 255, cv2. THRESH_BINARY + cv2. THRESH_OTSU)[1] def dilate(gri): çekirdek = np.ones((5, 5), np.uint8) return cv2.dilate(gri, çekirdek, yinelemeler=1) d = pytesseract.image_to_data(gri, output_type = Output. DICT)

n_boxes = len(d['metin'])

i in range(n_boxes): if int(d['conf']) > 60: (x, y, w, h) = (d['sol'], d['top'], d['genişlik'], d['yükseklik']) gri = cv2.dikdörtgen(gri, (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(gray) print(text) while True: text2 = " " if len(text) >= 2: c.send(bytes(text, "utf-8")) if len(text) = 2: sorgu = metin client = wolframalpha. Client(app_id) res = client.query(sorgu) cevap = sonraki(res.results).text answer1 = answer.partition('\n')[0] print (cevap1) c.send(bytes(answer1, "utf-8")) if len(metin) <= 1: c.send(bytes(text2, "utf-8")) time.sleep(7.5) sonu

Müşteri.py:

dropboximport picameraimport zamanını luma.core.interface.serial'den içe aktar luma.core.render'dan i2c'yi içe aktar luma.oled.device'den tuvali içe aktar ssd1306, ssd1325, ssd1331, sh1106 içe soketi içe aktar zamandan tarihsaati içe uyku içe aktar pyowm seri = i2c(port=1, address=0x3C) device = ssd1306(seri, döndürme=1) kamera = picamera. PiCamera() dropbox_access_token= "" #Dropbox-id'niz tekrar computer_path=r"/home/pi/Image.jpg" dropbox_path= f"/dropbox_API/Image.jpg" s = socket.socket(socket. AF_INET, socket. SOCK_STREAM) ana bilgisayar = ""bilgisayarınızın #ip adresi bağlantı noktası = 60567 s.connect((ana bilgisayar, bağlantı noktası)) msg1 = " " owm = pyowm. OWM("")#app-id for openweathermap num = ["05", "10", "15", "20", "25", "30", "35", "40", "45", "50", "55", "00"] cdt = datetime.datetime.now() min1 = str(cdt.dakika) tarih = str(cdt.day) + "/" + str(cdt. ay) + "/" + str(cdt.year) obs = owm.weather_at_place("")#kasabanız ve ülkeniz dize biçiminde hava durumu = obs.get_weather() temp2 = str(weather.get_temperature("fahrenhayt")["te mp_max"]) temp3 = str(weather.get_temperature("fahrenheit")["temp_min"]) iken True: cdt = datetime.datetime.now() min1 = str(cdt.dakika) saat = str(cdt.hour) canvas(cihaz) çizim olarak: draw.text((0, 0), saat, dolgu = "beyaz") draw.text((11, 0), ":", dolgu = "beyaz") draw.text((15, 0), min1, dolgu = "beyaz") draw.text((0, 9), "_", dolgu = "beyaz") draw.text((0, 9), tarih, dolgu = "beyaz ") sayı olarak min1 ise: obs = owm.weather_at_place("")#kasabanız ve ülkeniz tekrar dize biçiminde

hava durumu = obs.get_weather()

temp = str(weather.get_temperature("fahrenheit")["temp"]) draw.text((32, 0), "F", fill = "beyaz") draw.text((40, 0), temp, min1 num'da değilse fill = "beyaz"): draw.text((40, 0), temp2, fill = "white") draw.text((32, 0), "F", fill = "beyaz") camera.start_preview() time.sleep(2) camera.capture("/home/pi/Image.jpg") camera.stop_preview client = dropbox. Dropbox(dropbox_access_token) print("[SUCCESS] dropbox hesabı bağlantılı") istemcisi. 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.dakika) saat = str(cdt.hour) tuval(cihaz) ile beraberlik olarak: draw.text((0, 19), full_msg, fill = "beyaz") draw.text((0, 0), saat, dolgu = "beyaz") draw.text((11, 0), ":", dolgu = "beyaz") draw.text((15, 0), min1, dolgu = "beyaz") draw.text((0, 9), "_", dolgu = " beyaz") draw.text((0, 9), tarih, dolgu = "beyaz") sayı olarak min1 ise: obs = owm.weather_at_place("")#kasabanız ve ülkeniz tekrar dize biçiminde

hava durumu = obs.get_weather()

temp = str(weather.get_temperature("fahrenheit")["temp"]) draw.text((32, 0), "F", fill = "beyaz") draw.text((40, 0), temp, min1 num'da değilse fill = "beyaz"): draw.text((40, 0), temp3, fill = "white") draw.text((32, 0), "F", fill = "beyaz") if len(msg) <= 1: cdt = datetime.datetime.now() min1 = str(cdt.dakika) saat = str(cdt.hour) canvas(device) ile beraberlik: draw.text((0, 0)), saat, dolgu = "beyaz") draw.text((11, 0), ":", dolgu = "beyaz") draw.text((15, 0), min1, dolgu = "beyaz") çizin. text((0, 9), "_", dolgu = "beyaz") draw.text((0, 9), tarih, dolgu = "beyaz") eğer sayı olarak min1: obs = owm.weather_at_place("") #şehriniz ve ülkeniz tekrar dize biçiminde

hava durumu = obs.get_weather()

temp = str(weather.get_temperature("fahrenheit")["temp"]) draw.text((32, 0), "F", fill = "beyaz") draw.text((40, 0), temp, min1 num'da değilse fill = "beyaz"): draw.text((40, 0), temp3, fill = "white") draw.text((32, 0), "F", fill = "beyaz") 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.dakika) saat = str(cdt.hour) canvas(device) ile beraberlik: draw.text((0,), 19), full_msg, fill = "beyaz") draw.text((0, 29), full_msg2, fill = "beyaz") draw.text((0, 0), saat, dolgu = "beyaz") draw.text ((11, 0), ":", dolgu = "beyaz") draw.text((15, 0), min1, dolgu = "beyaz") draw.text((0, 9), "_", dolgu = "beyaz") draw.text((0, 9), tarih, dolgu = "beyaz") eğer min1 in num: obs = owm.weather_at_place("")#kasabanız ve ülkeniz tekrar dize biçiminde

hava durumu = obs.get_weather()

temp = str(weather.get_temperature("fahrenheit")["temp"]) draw.text((32, 0), "F", fill = "beyaz") draw.text((40, 0), temp, fill = "beyaz") min1 num'da değilse: obs = owm.weather_at_place("")#kasabanız ve ülkeniz tekrar dize biçiminde

hava durumu = obs.get_weather()

temp = str(weather.get_temperature("fahrenheit")["temp"]) draw.text((32, 0), "F", fill = "beyaz") draw.text((40, 0), temp, min1 num'da değilse fill = "beyaz"): draw.text((40, 0), temp3, fill = "white") draw.text((32, 0), "F", fill = "beyaz") if len(msg1) <= 1: cdt = datetime.datetime.now() min1 = str(cdt.dakika) saat = str(cdt.hour) canvas(device) ile beraberlik: draw.text((0, 0)), saat, dolgu = "beyaz") draw.text((11, 0), ":", dolgu = "beyaz") draw.text((15, 0), min1, dolgu = "beyaz") çizin. text((0, 9), "_", dolgu = "beyaz") draw.text((0, 9), tarih, dolgu = "beyaz") eğer sayı olarak min1: obs = owm.weather_at_place("") #şehriniz ve ülkeniz tekrar dize biçiminde

hava durumu = obs.get_weather()

temp = str(weather.get_temperature("fahrenheit")["temp"]) draw.text((32, 0), "F", fill = "beyaz") draw.text((40, 0), temp, min1 num'da değilse fill = "beyaz"): draw.text((40, 0), temp3, fill = "white") draw.text((32, 0), "F", fill = "beyaz") time.sleep(7) client.files_delete(dropbox_path) print ("Dosyalar silindi")

not Ben amatör bir programcıyım, bu yüzden lütfen korkunç programlama yöntemlerimi sorgulamayın.

Adım 4: Hepsini Bir Araya Getirmek

Hepsini bir araya koy!
Hepsini bir araya koy!

Diğer her şeyi bitirdikten sonra, pratik olarak yapmanız gereken tek şey ahududu pi kamerasını takmak ve gözlüklere görüntülemek. Bunu, sarf malzemelerinde belirtilen çift taraflı yapıştırıcı kullanarak yapabilir veya gerekli olduğunu düşündüğünüz herhangi bir yöntemi kullanabilirsiniz. Ayrıca bu derste herhangi bir pilden bahsetmediğimi fark etmişsinizdir, çünkü bu gözlükler için gelecekte güncellemeler planlıyorum ve şu anda bir tane takmak istemedim. Ancak bir tane takmak istiyorsanız, amazon'dan bir li-po şarj devresine ihtiyacınız olacak

Bunu beğendiyseniz ve daha fazlasını görmek istiyorsanız, bir YouTube kanalı açtım ve umarım orada da eğitimler yayınlayacağım. Bağlantı burada:

www.youtube.com/channel/UCGqcWhHXdZf231rLe…

Tanrı kurtarır!

Yuhanna 3:16 "Çünkü Tanrı dünyayı o kadar sevdi ki, biricik Oğlu'nu verdi, O'na böyle iman eden herkes yok olmayacak, sonsuz bir yaşama sahip olacak."

Önerilen: