Daftar Isi:
- Langkah 1: Menghubungkan Sirkuit
- Langkah 2: Mengakses Raspberry Pi
- Langkah 3: Waktu Pengkodean
- Langkah 4: Menyatukan Semuanya
Video: Kacamata Cerdas: 4 Langkah
2024 Pengarang: John Day | [email protected]. Terakhir diubah: 2024-01-30 09:53
Halo semuanya hari ini saya akan menunjukkan cara membuat Kacamata Cerdas di rumah! Salah satu hal terbesar tentang kacamata pintar adalah betapa bermanfaatnya memiliki sesuatu seperti ini di dunia teknologi saat ini dan bagaimana tidak hanya ada satu versi kacamata pintar karena semua memiliki fitur luar biasa dan jumlah aplikasi tak terbatas yang dapat diintegrasikan di masa depan. Fitur kacamata pintar ini termasuk memberi tahu waktu, memberi tahu Anda suhu setiap 5 menit, antara 5 menit itu bertukar antara suhu tinggi dan rendah yang diharapkan untuk hari itu, juga memberi tahu Anda tanggalnya. Tetapi fitur utamanya adalah ia mengambil gambar setiap 10 detik dan kemudian menganalisis gambar itu untuk teks di mana ia akan mengembalikan informasi yang berguna tentangnya, jika ia menemukan pertanyaan maka ia akan menjawabnya menggunakan wolfram, atau jika ia menemukan persamaan matematika itu akan menyelesaikannya!
Perlengkapan:
Perlengkapan yang diperlukan untuk proyek ini meliputi:
1) Raspberry Pi 0 W (Dari vilros.com)
2) Tampilan OLED 128x64 yang jelas (Dari Sparkfun.com)
3) Modul kamera yang diformat untuk Raspberry Pi 0 W (Dari amazon.com)
4) Kacamata apa pun pilihan Anda
5) Kabel
6) Besi solder
7) Solder bebas timah (karena Anda tidak ingin mati karena timah)
8) perekat 2 arah
9) kartu SD minimal 8gb
10) komputer dan koneksi internet
Dengan asumsi Anda sudah memiliki komputer dan koneksi internet, biaya kacamata ini akan mencapai sekitar $130,00
Langkah 1: Menghubungkan Sirkuit
Untuk menampilkan teks di layar Anda akan terhubung ke OLED melalui I2C atau SPI, saya memilih I2C karena ini adalah yang saya lebih nyaman gunakan tetapi jika Anda ingin menghubungkannya melalui SPI, ikuti tutorial ini di situs web Sparkfun dan kembali ke sini setelah Anda selesai. https://learn.sparkfun.com/tutorials/transparent-g… Jika Anda telah memilih I2C karena saya telah menyolder kabel seperti yang ditunjukkan oleh berikut ini:
Pi \/ OLED \/
3.3v 3.3v
GND GND
SDA SDA
SCL SCL
Harap dicatat bahwa OLED bening hanya dapat menangani 3.3v.
Setelah Anda selesai menghubungkan sirkuit, geser kabel pita modul kamera ke dalam dudukan kabel pita pada raspberry pi dengan menarik keluar klem hitam dan geser kembali setelah kabel pita terpasang di tempatnya.
Langkah 2: Mengakses Raspberry Pi
Menggunakan ssh kita dapat mengakses pi kita dengan pc kita tanpa menghubungkan mouse dan monitor keyboard eksternal tambahan. Hal pertama yang Anda lakukan adalah menghubungkan kartu SD Anda ke PC Anda dengan adaptor atau port bawaan, maka Anda harus menuju ke tautan ini https://www.raspberrypi.org/downloads/raspbian/ dan unduh Raspbian buster dengan desktop. Kedua Anda harus meletakkan OS ke kartu SD menggunakan BalenaEtcher pilih kartu SD Anda dan OS Raspbian dan klik "flash" proses ini bisa memakan waktu lama jadi kembalilah ketika Anda selesai. Ketiga, buka kartu SD di file explorer atau finder di mac dan buat file teks bernama wpa_supplicant pastikan untuk menghapus ekstensi.txt dan tambahkan.conf, di file tempel berikut ini:
negara=AS
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 }
Anda harus memasukkan nama dan kata sandi WiFi Anda di tempat dan negara yang sesuai jika Anda tidak berada di AS. Perlu diingat bahwa Raspberry Pi hanya dapat terhubung ke jaringan 2.4Ghz yang berarti komputer Anda juga harus terhubung ke jaringan itu. Setelah membuat file teks kosong tanpa ekstensi bernama ssh dan kemudian keluarkan kartu SD Anda. Anda kemudian perlu menginstal Putty https://www.putty.org/ yang akan Anda gunakan untuk mengaktifkan ssh. Setelah terinstal masukkan alamat IP raspberry pi Anda, Anda dapat mengetahui apa itu dengan masuk ke situs web router Anda masuk dan melihat perangkat yang terhubung.
Setelah Anda mendapatkan akses ke Raspberry Pi, ia akan meminta Anda untuk masuk, nama pengguna default adalah "pi" dan kata sandinya adalah "raspberry". Ketik sudo raspi-config lalu buka opsi antarmuka dan aktifkan kamera, ssh, dan i2c, lalu klik selesai dan ketik sudo reboot. Sekarang Anda siap untuk ssh ke raspberry pi, lanjutkan dan instal Remote Desktop dan masukkan alamat IP raspberry pi Anda dan sekarang Anda bisa ssh ke raspberry pi.
Langkah 3: Waktu Pengkodean
Saya telah memilih untuk mengkode program ini dengan python jadi pastikan Anda telah menginstal python3.7 atau 3.8 di desktop Anda. Kode ini bekerja dengan menggunakan server dan klien, server adalah komputer Anda. Klien atau raspberry pi akan mengambil gambar dan mengunggahnya ke dropbox yang diambil oleh server yang kemudian menjalankan pemrosesan gambar dan pengenalan teks pada gambar. Anda harus mendapatkan wolframalpha, dropbox, dan id aplikasi openweathermap agar ini berfungsi, yang harus Anda lakukan adalah pergi ke pendaftaran situs web dan itu akan memberi Anda id aplikasi. dan kemudian memasukkannya ke tempat yang sesuai yang ditentukan oleh komentar dalam kode. Pastikan Anda telah menginstal pip semuanya dan menginstal Tesseract OCR dan OpenCV. Buat file python bernama Server.py di pc Anda dan file bernama client.py di raspberry pi lalu salin dan tempel kodenya. Tetapi ketahuilah bahwa semakin tebal karakter dan semakin putih latar belakang, semakin baik hasilnya, demikian halnya dengan setiap perangkat lunak pengenalan teks.
Semua tautan untuk mendaftar ke app-id \/
www.wolframalpha.com/
openweathermap.org/api
www.dropbox.com/developers/documentation
Pastikan Anda menginstal Tesseract OCR dan OpenCV \/
github.com/UB-Mannheim/tesseract/wiki
opencv.org/
Server.py:
import dropboxfrom PIL import Image import cv2 import pytesseract dari pytesseract import Output import numpy as np import wolframalpha import socket waktu impor
dbx = dropbox. Dropbox("dropboxAPIkey")
s = socket.socket(socket. AF_INET, socket. SOCK_STREAM)
app_id = "ID-Aplikasi"
host = socket.gethostname()
port = 60567 cetak (host) s.bind((host, port)) s.listen(2)
sementara Benar:
c, addr = s.accept() print (f'Dapatkan koneksi dari: {addr}') break
sementara Benar:
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("Gambar diunduh!") image = cv2.imread("Image.jpg") Gambar = cv2.resize(gambar, (640, 480), interpolasi=cv2. INTER_AREA) image68 = cv2.rotate(Gambar, cv2. ROTATE_90_COUNTERCLOCKWISE) abu-abu = cv2.cvtColor(image68, cv2. COLOR_BGR2GRAY)
def remove_noise(abu-abu):
return cv2.medianBlur(abu-abu, 5) def thresholding(abu-abu): return cv2.threshold(abu-abu, 0, 255, cv2. THRESH_BINARY + cv2. THRESH_OTSU)[1] def melebar(abu-abu): kernel = np.ones((5, 5), np.uint8) mengembalikan cv2.dilate(abu-abu, kernel, iterasi=1) d = pytesseract.image_to_data(abu-abu, output_type = Output. DICT)
n_box = len(d['teks'])
for i in range(n_boxes): if int(d['conf']) > 60: (x, y, w, h) = (d['left'], d['top'], d['lebar'], d['tinggi']) abu-abu = cv2.persegi panjang(abu-abu, (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(abu-abu) print(text) while True: text2 = " " if len(text) >= 2: c.send(bytes(text, "utf-8")) if len(text) = 2: query = teks 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) break
Klien.py:
impor dropboximport picameraimport waktu dari luma.core.interface.serial impor i2c dari luma.core.render impor kanvas dari luma.oled.device impor ssd1306, ssd1325, ssd1331, sh1106 impor soket waktu impor dari waktu impor tidur impor pyowm serial = i2c(port=1, address=0x3C) device = ssd1306(serial, rotate=1) camera = picamera. PiCamera() dropbox_access_token= "" #Your dropbox-id again computer_path=r"/home/pi/Image.jpg" dropbox_path= f"/dropbox_API/Image.jpg" s = socket.socket(socket. AF_INET, socket. SOCK_STREAM) host = ""#alamat ip port pc Anda = 60567 s.connect((host, port)) msg1 = " " owm = pyowm. OWM("")#app-id untuk openweathermap num = ["05", "10", "15", "20", "25", "30", "35", "40", "45", "50", "55", "00"] cdt = datetime.datetime.now() min1 = str(cdt.minute) tanggal = str(cdt.day) + "/" + str(cdt. bulan) + "/" + str(cdt.year) obs = owm.weather_at_place("")#kota dan negara Anda dalam format string cuaca = 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) dengan kanvas(perangkat) sebagai gambar: draw.text((0, 0), hour, fill = "white") draw.text((11, 0), ":", fill = "white") draw.text((15, 0), min1, fill = "putih") draw.text((0, 9), "_", fill = "putih") draw.text((0, 9), tanggal, fill = "putih ") jika min1 dalam num: obs = owm.weather_at_place("")#kota dan negara Anda dalam format string lagi
cuaca = obs.get_weather()
temp = str(cuaca.get_temperature("fahrenheit")["temp"]) draw.text((32, 0), "F", fill = "white") draw.text((40, 0), temp, isi = "putih") jika min1 tidak ada dalam angka: 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] akun dropbox tertaut") klien. 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) hour = str(cdt.hour) dengan canvas(device) sebagai 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 = " putih") draw.text((0, 9), tanggal, isi = "putih") jika min1 dalam num: obs = owm.weather_at_place("")#kota dan negara Anda dalam format string lagi
cuaca = obs.get_weather()
temp = str(cuaca.get_temperature("fahrenheit")["temp"]) draw.text((32, 0), "F", fill = "white") draw.text((40, 0), temp, fill = "white") jika min1 tidak ada dalam angka: 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) dengan kanvas(perangkat) sebagai draw: draw.text((0, 0), jam, isi = "putih") draw.text((11, 0), ":", fill = "putih") draw.text((15, 0), min1, isi = "putih") draw. teks((0, 9), "_", isi = "putih") draw.text((0, 9), tanggal, isi = "putih") if min1 in num: obs = owm.weather_at_place("") #kota dan negara Anda dalam format string lagi
cuaca = obs.get_weather()
temp = str(cuaca.get_temperature("fahrenheit")["temp"]) draw.text((32, 0), "F", fill = "white") draw.text((40, 0), temp, fill = "white") jika min1 tidak ada dalam angka: 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) dengan kanvas(perangkat) sebagai 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("")#kota dan negara Anda dalam format string lagi
cuaca = obs.get_weather()
temp = str(cuaca.get_temperature("fahrenheit")["temp"]) draw.text((32, 0), "F", fill = "white") draw.text((40, 0), temp, isi = "putih") jika min1 tidak dalam angka: obs = owm.weather_at_place("")#kota dan negara Anda dalam format string lagi
cuaca = obs.get_weather()
temp = str(cuaca.get_temperature("fahrenheit")["temp"]) draw.text((32, 0), "F", fill = "white") draw.text((40, 0), temp, fill = "white") jika min1 tidak ada dalam angka: 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) dengan kanvas(perangkat) sebagai draw: draw.text((0, 0), jam, isi = "putih") draw.text((11, 0), ":", fill = "putih") draw.text((15, 0), min1, isi = "putih") draw. teks((0, 9), "_", isi = "putih") draw.text((0, 9), tanggal, isi = "putih") if min1 in num: obs = owm.weather_at_place("") #kota dan negara Anda dalam format string lagi
cuaca = obs.get_weather()
temp = str(cuaca.get_temperature("fahrenheit")["temp"]) draw.text((32, 0), "F", fill = "white") draw.text((40, 0), temp, fill = "white") jika min1 tidak ada dalam angka: draw.text((40, 0), temp3, fill = "white") draw.text((32, 0), "F", fill = "white") time.sleep(7) client.files_delete(dropbox_path) print ("File dihapus")
P. S. Saya seorang programmer amatir jadi tolong jangan mempertanyakan metode pemrograman saya yang mengerikan.
Langkah 4: Menyatukan Semuanya
Setelah Anda menyelesaikan semua yang lain, Anda praktis selesai, yang tersisa untuk dilakukan adalah memasang kamera raspberry pi dan tampilan ke kacamata. Anda dapat melakukannya dengan menggunakan perekat dua sisi yang disebutkan dalam persediaan atau Anda dapat menggunakan metode apa pun yang Anda anggap perlu. Anda juga mungkin telah memperhatikan bahwa saya belum menyebutkan baterai di mana pun dalam pelajaran ini karena saya memiliki rencana peningkatan di masa mendatang untuk kacamata ini dan tidak ingin memasangnya sekarang. Tetapi jika Anda ingin memasangnya, Anda memerlukan sirkuit pengisi daya li-po dari amazon
Jika Anda menikmati ini dan ingin melihat lebih banyak, saya telah memulai saluran YouTube dan mudah-mudahan akan memposting tutorial di sana juga. Ini tautannya:
www.youtube.com/channel/UCGqcWhHXdZf231rLe…
Tuhan Menyelamatkan!
Yohanes 3:16 "Karena begitu besar kasih Allah akan dunia ini, sehingga Ia mengaruniakan Anak-Nya yang tunggal, yang selalu percaya kepada-Nya, tidak binasa, melainkan beroleh hidup yang kekal."
Direkomendasikan:
Kacamata Cerdas (Di Bawah $10!!!): 8 Langkah (dengan Gambar)
Kacamata Cerdas (Di Bawah $10!!!): Hai! Kita semua sudah tidak asing lagi dengan Smart Glasses seperti yang bernama E.D.I.T.H. dibuat oleh karakter kesayangan kita Tony Stark yang kemudian diteruskan ke Peter Parker. Hari ini saya akan membuat satu kaca pintar yang harganya juga di bawah $10! Mereka tidak cukup
Kacamata Cerdas: 6 Langkah
Kacamata Cerdas: Hai semuanya !!Hari ini saya akan berbagi dengan kalian, sesuatu yang saya inginkan sejak lamaSebuah Kacamata Cerdas DIY dibuat hanya sekitar 25$Sekarang mari MATI - Lakukan dengan Sangat
Kacamata Cerdas DIY - Arduino/ESP: 5 Langkah
Kacamata Cerdas DIY - Arduino/ESP: Versi baru tersedia di sini: [YouTube]Hai teman-teman! Saya di sini untuk menunjukkan kepada Anda proyek DIY saya dan mendorong Anda untuk Melakukannya Sendiri! Proyek ini adalah kacamata pintar nyata yang dapat dibuat semua orang di rumah .Semua kode dapat ditemukan di sini dan sumber daya:[GitHub]Saya juga
Kotak Kacamata Cerdas: 5 Langkah
Casing Kacamata Cerdas: Wadah Kacamata LED memungkinkan Anda menemukan kacamata Anda di pagi hari saat ruangan biasanya gelap dengan garis-garis LED. Anda juga dapat menggunakannya sebagai lampu malam karena setelah Anda memasukkan kacamata ke dalam, memicu sensor ultrasonik. Proyek ini termasuk
Kacamata Kristal Cair untuk Amblyopia (Kacamata Pelatihan Oklusi Bergantian) [ATtiny13]: 10 Langkah (dengan Gambar)
Kacamata Kristal Cair untuk Amblyopia (Kacamata Pelatihan Oklusi Bergantian) [ATtiny13]: Amblyopia (mata malas), gangguan penglihatan yang mempengaruhi sekitar 3% populasi, biasanya diobati dengan penutup mata sederhana atau tetes atropin. Sayangnya, metode pengobatan tersebut menutup mata yang lebih kuat untuk jangka waktu yang lama dan tidak terputus, tidak