جدول المحتويات:

النظارات الذكية: 4 خطوات
النظارات الذكية: 4 خطوات

فيديو: النظارات الذكية: 4 خطوات

فيديو: النظارات الذكية: 4 خطوات
فيديو: نظارات ب 2 استخدامات، تجعلك أكثر برودة ووسامة وجاذبية 2024, شهر نوفمبر
Anonim
النظارات الذكية
النظارات الذكية
النظارات الذكية
النظارات الذكية

مرحبًا بالجميع اليوم ، سأوضح لكم كيفية صنع النظارات الذكية في المنزل! أحد أعظم الأشياء في النظارات الذكية هو مدى فائدة الحصول على شيء مثل هذا في عالم التكنولوجيا اليوم وكيف لا يوجد إصدار واحد فقط من النظارات الذكية حيث تحتوي جميعها على ميزات مذهلة وعدد لا حصر له من التطبيقات التي يمكن دمجها فى المستقبل. تتضمن ميزات هذه النظارات الذكية معرفة الوقت ، وإخبارك بدرجة الحرارة كل 5 دقائق ، وبين تلك الدقائق الخمس يتم تبديل درجة الحرارة المرتفعة والمنخفضة المتوقعة لذلك اليوم ، كما تخبرك أيضًا بالتاريخ. لكن ميزتها الرئيسية هي أنها تلتقط صورة كل 10 ثوانٍ ثم تحلل تلك الصورة للنص الذي ستعيد فيه معلومات مفيدة عنها ، إذا وجدت سؤالاً فستجيب عليه باستخدام wolfram ، أو إذا وجدت معادلة رياضية سوف تحلها!

اللوازم:

تشمل الإمدادات اللازمة لهذا المشروع ما يلي:

1) A Raspberry Pi 0 W (من vilros.com)

2) شاشة OLED 128x64 واضحة (من Sparkfun.com)

3) وحدة كاميرا مهيأة لـ Raspberry Pi 0 W (من amazon.com)

4) أي أكواب من اختيارك

5) الأسلاك

6) لحام الحديد

7) لحام خالي من الرصاص (لأنك لا تريد أن تموت من الرصاص)

8) 2 طريقة لاصقة

9) بطاقة SD 8 جيجابايت كحد أدنى

10) اتصال الكمبيوتر والانترنت

بافتراض أن لديك بالفعل جهاز كمبيوتر واتصال بالإنترنت ، فإن تكلفة هذه النظارات ستصل إلى حوالي 130.00 دولارًا

الخطوة 1: توصيل الأسلاك في الدائرة

توصيل الدائرة الكهربائية!
توصيل الدائرة الكهربائية!

من أجل عرض النص على الشاشة ، ستقوم بالاتصال بـ OLED عبر I2C أو SPI ، أختار I2C لأنه هو الشخص الذي أشعر براحة أكبر في استخدامه ولكن إذا كنت ترغب في الاتصال به عبر SPI ، فتابع هذا البرنامج التعليمي على موقع Sparkfun والعودة إلى هنا عند الانتهاء. https://learn.sparkfun.com/tutorials/transparent-g… إذا كنت قد اخترت I2C لأنني قمت بلحام الأسلاك كما هو موضح في ما يلي:

بي / / OLED / /

3.3 فولت 3.3 فولت

GND GND

SDA SDA

SCL SCL

يرجى ملاحظة أن OLED الواضح يمكنه التعامل مع 3.3 فولت فقط.

بعد الانتهاء من توصيل الدائرة ، حرك كابل الشريط الخاص بوحدة الكاميرا في حامل كبل الشريط الموجود على raspberry pi عن طريق سحب المشبك الأسود وإعادته مرة أخرى بمجرد وضع كابل الشريط في مكانه.

الخطوة 2: الوصول إلى Raspberry Pi

باستخدام ssh ، يمكننا الوصول إلى جهاز pi الخاص بنا باستخدام جهاز الكمبيوتر الخاص بنا دون توصيل ماوس وشاشة خارجي بلوحة مفاتيح. أول شيء تفعله هو توصيل بطاقة SD بجهاز الكمبيوتر الخاص بك باستخدام محول أو منفذ داخلي ، ثم ستحتاج إلى التوجه إلى هذا الرابط https://www.raspberrypi.org/downloads/raspbian/ وتنزيل Raspbian buster مع سطح المكتب. ثانيًا ، عليك وضع نظام التشغيل على بطاقة SD باستخدام BalenaEtcher ، حدد بطاقة SD الخاصة بك ونظام التشغيل Raspbian وانقر فوق "فلاش" ، وقد تستغرق هذه العملية بعض الوقت ، لذا عد عند الانتهاء. ثالثًا ، انتقل إلى بطاقة SD في مستكشف الملفات أو الباحث على نظام Mac وقم بإنشاء ملف نصي باسم wpa_supplicant ، وتأكد من حذف الامتداد.txt وإضافة.conf ، والصق ما يلي في الملف:

الدولة = الولايات المتحدة

ctrl_interface = DIR = / var / run / wpa_supplicant GROUP = netdev update_config = شبكة واحدة = {ssid = "WIFI_SSID" scan_ssid = 1 psk = "WIFI_PASSWORD" key_mgmt = WPA-PSK}

سيتعين عليك إدخال اسم WiFi وكلمة المرور في الأماكن والبلد المقابلة إذا لم تكن في الولايات المتحدة الأمريكية. ضع في اعتبارك أن Raspberry Pi يمكنه الاتصال فقط بشبكة 2.4 جيجا هرتز مما يعني أن جهاز الكمبيوتر الخاص بك سيتعين عليه أيضًا الاتصال بهذه الشبكة. بعد إنشاء ملف نصي فارغ بدون امتداد يسمى ssh ، ثم أخرج بطاقة SD الخاصة بك. ستحتاج بعد ذلك إلى تثبيت PuTTY https://www.putty.org/ وهو ما ستستخدمه لتمكين ssh. بمجرد التثبيت ، أدخل عنوان IP الخاص بـ raspberry pi ، يمكنك معرفة ما هو من خلال الانتقال إلى موقع الويب الخاص بأجهزة التوجيه وتسجيل الدخول والنظر إلى الأجهزة المتصلة.

بعد الوصول إلى Raspberry Pi ، سيطلب منك تسجيل الدخول ، واسم المستخدم الافتراضي هو "pi" وكلمة المرور "raspberry". اكتب sudo raspi-config ثم انتقل إلى خيارات الواجهة وقم بتمكين الكاميرا و ssh و i2c ، ثم انقر فوق إنهاء واكتب sudo reboot. أنت الآن جاهز للدخول إلى raspberry pi ، امض قدمًا وقم بتثبيت Remote Desktop وأدخل عنوان IP الخاص بـ raspberry Pi وأنت الآن جيد في ssh في raspberry pi.

الخطوة 3: وقت البرمجة

وقت الترميز!
وقت الترميز!

لقد اخترت ترميز هذا البرنامج في python ، لذا تأكد من تثبيت python3.7 أو 3.8 على سطح المكتب. يعمل هذا الرمز باستخدام خادم وعميل ، ويكون الخادم هو جهاز الكمبيوتر الخاص بك. يلتقط العميل أو raspberry pi صورة ويحملها إلى صندوق الإسقاط الذي يتم استرداده بواسطة الخادم الذي يقوم بعد ذلك بتشغيل معالجة الصور والتعرف على النص على الصورة. سيتعين عليك الحصول على wolframalpha ، و dropbox ، ومعرف التطبيق openweathermap حتى يعمل هذا ، كل ما عليك فعله هو الانتقال إلى الاشتراك في مواقع الويب وسيمنحك معرف التطبيق. ثم أدخلها في الأماكن المقابلة التي تحددها التعليقات في الكود. تأكد من تثبيت Pip لكل شيء وتثبيت Tesseract OCR و OpenCV. قم بإنشاء ملف python باسم Server.py على جهاز الكمبيوتر الخاص بك وملف باسم client.py على raspberry pi ثم انسخ الكود والصقه. لكن اعلم أنه كلما كانت الأحرف أكثر جرأة وخلفية بيضاء كلما كانت النتائج أفضل ، هذا هو الحال مع كل برنامج للتعرف على النص.

جميع الروابط للاشتراك في معرف التطبيق / /

www.wolframalpha.com/

openweathermap.org/api

www.dropbox.com/developers/documentation

تأكد من تثبيت Tesseract OCR و OpenCV / /

github.com/UB-Mannheim/tesseract/wiki

opencv.org/

Server.py:

استيراد صندوق الإسقاط من PIL استيراد صورة استيراد cv2 استيراد pytesseract من pytesseract استيراد إخراج استيراد numpy مثل استيراد np استيراد wolframalpha وقت استيراد مقبس

dbx = dropbox. Dropbox ("dropboxAPIkey")

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

app_id = "معرف التطبيق"

المضيف = socket.gethostname ()

المنفذ = 60567 print (host) s.bind ((host، port)) s.listen (2)

احيانا صحيح:

c، addr = s.accept () print (f'Got connection from: {addr} ') فاصل

احيانا صحيح:

بينما True: time.sleep (13.7) metadata ، f = dbx.files_download ("/ dropbox_API / Image.jpg") out = open ("Image.jpg"، 'wb') out.write (f.content). أغلق () print ("تم تنزيل الصورة!") image = cv2.imread ("Image.jpg") Image = cv2.resize (image، (640، 480)، interpolation = cv2. INTER_AREA) image68 = cv2.rotate (صورة ، cv2. ROTATE_90_COUNTERCLOCKWISE) رمادي = cv2.cvtColor (image68، cv2. COLOR_BGR2GRAY)

def remove_noise (رمادي):

إرجاع cv2.medianBlur (رمادي ، 5) عتبة def (رمادي): إرجاع cv2.threshold (رمادي ، 0 ، 255 ، cv2. THRESH_BINARY + cv2. THRESH_OTSU) [1] def تمدد (رمادي): kernel = np.ones ((5، 5)، np.uint8) إرجاع cv2.dilate (رمادي ، kernel ، التكرارات = 1) d = pytesseract.image_to_data (رمادي ، output_type = Output. DICT)

n_boxes = len (d ['text'])

بالنسبة لـ i في النطاق (n_boxes): إذا كان int (d ['conf'] )> 60: (x ، y ، w ، h) = (d ['left'] ، d ['top'] ، d ['width'] ، d ['height'] ) رمادي = cv2.rectangle (رمادي ، (x ، y) ، (x + w ، y + h) ، (0، 255، 0)، 2) كسر pytesseract.pytesseract.tesseract_cmd = r "C: / Program Files / Tesseract-OCR / tesseract.exe" text = pytesseract.image_to_string (رمادي) طباعة (نص) بينما True: text2 = " "if len (text)> = 2: c.send (bytes (text،" utf-8 ")) إذا كان 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 (بايت (text2، "utf-8")) time.sleep (7.5) break

Client.py:

استيراد dropboximport picameraimport time from luma.core.interface.serial import i2c from luma.core.render import canvas from luma.oled.device import ssd1306، ssd1325، ssd1331، sh1106 استيراد مأخذ التوصيل datetime من وقت استيراد استيراد sleep pyowm serial = i2c (المنفذ = 1 ، العنوان = 0x3C) الجهاز = ssd1306 (تسلسلي ، تدوير = 1) camera = picamera. PiCamera () dropbox_access_token = "" # معرف صندوق الإسقاط مرة أخرى 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 لمنفذ الكمبيوتر الخاص بك = 60567 s.connect ((host، port)) msg1 = "" owm = pyowm. OWM ("") # app-id لـ 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. month) + "/" + str (cdt.year) obs = owm.weather_at_place ("") # مدينتك وبلدك بتنسيق سلسلة weather = obs.get_weather () temp2 = str (weather.get_temperature ("fahrenheit") ["ر mp_max "]) temp3 = str (weather.get_temperature (" fahrenheit ") [" temp_min "]) بينما صحيح: cdt = datetime.datetime.now () min1 = str (cdt.minute) hour = str (cdt.hour) باستخدام قماش (جهاز) كرسمة: draw.text ((0 ، 0) ، ساعة ، تعبئة = "أبيض") draw.text ((11 ، 0) ، ":" ، ملء = "أبيض") draw.text ((15، 0)، min1، fill = "white") draw.text ((0، 9)، "_"، fill = "white") draw.text ((0، 9)، date، fill = "white ") if min1 في num: obs = owm.weather_at_place (" ") # بلدتك وبلدك في تنسيق سلسلة مرة أخرى

الطقس = obs.get_weather ()

temp = str (weather.get_temperature ("fahrenheit") ["temp"]) draw.text ((32، 0)، "F"، fill = "white") draw.text ((40، 0)، temp، fill = "white") إذا لم يكن min1 في 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 مرتبط"). files_upload (open (computer_path، "rb"). read ()، dropbox_path) طباعة ("[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) باستخدام لوحة الرسم (الجهاز) مثل الرسم: 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 = " أبيض ") draw.text ((0 ، 9) ، التاريخ ، التعبئة = "أبيض") إذا كان min1 في num: obs = owm.weather_at_place ("") # بلدتك وبلدك بتنسيق سلسلة مرة أخرى

الطقس = obs.get_weather ()

temp = str (weather.get_temperature ("fahrenheit") ["temp"]) draw.text ((32، 0)، "F"، fill = "white") draw.text ((40، 0)، temp، fill = "white") إذا لم يكن min1 في 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) مع canvas (device) as draw: 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") إذا كان min1 في num: obs = owm.weather_at_place ("") # بلدتك وبلدك بتنسيق سلسلة مرة أخرى

الطقس = obs.get_weather ()

temp = str (weather.get_temperature ("fahrenheit") ["temp"]) draw.text ((32، 0)، "F"، fill = "white") draw.text ((40، 0)، temp، fill = "white") إذا لم يكن min1 في 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". انضم (textwrap.wrap (full_msg1، 9))) cdt = التاريخ والوقت. 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)، "_"، ملء = "أبيض") draw.text ((0، 9)، date، fill = "white") إذا كان min1 في num: obs = owm.weather_at_place ("") # بلدتك وبلدك بتنسيق سلسلة مرة أخرى

الطقس = obs.get_weather ()

temp = str (weather.get_temperature ("fahrenheit") ["temp"]) draw.text ((32، 0)، "F"، fill = "white") draw.text ((40، 0)، temp، ملء = "أبيض") إذا لم يكن min1 في num: obs = owm.weather_at_place ("") # بلدتك وبلدك بتنسيق سلسلة مرة أخرى

الطقس = obs.get_weather ()

temp = str (weather.get_temperature ("fahrenheit") ["temp"]) draw.text ((32، 0)، "F"، fill = "white") draw.text ((40، 0)، temp، fill = "white") إذا لم يكن min1 في 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) مع canvas (device) as draw: 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") إذا كان min1 في num: obs = owm.weather_at_place ("") # بلدتك وبلدك بتنسيق سلسلة مرة أخرى

الطقس = obs.get_weather ()

temp = str (weather.get_temperature ("fahrenheit") ["temp"]) draw.text ((32، 0)، "F"، fill = "white") draw.text ((40، 0)، temp، fill = "white") إذا لم يكن min1 في num: draw.text ((40، 0)، temp3، fill = "white") draw.text ((32، 0)، "F"، fill = "white") time.sleep (7) client.files_delete (dropbox_path) طباعة ("تم حذف الملفات")

ملاحظة. أنا مبرمج هاو ، لذا من فضلك لا تشكك في طرق البرمجة الرهيبة.

الخطوة 4: وضع كل ذلك معًا

ضع كل شيء معا!
ضع كل شيء معا!

بمجرد الانتهاء من كل شيء آخر ، تكون قد انتهيت عمليًا ، كل ما عليك فعله هو إرفاق كاميرا raspberry pi وعرضها على النظارات. يمكنك القيام بذلك باستخدام المادة اللاصقة ذات الوجهين المذكورة في المستلزمات أو يمكنك استخدام أي طرق تعتقد أنها ضرورية. ربما لاحظت أيضًا أنني لم أذكر بطارية في أي مكان في هذا الدرس لأن لدي ترقيات مستقبلية مخططة لهذه النظارات ولم أرغب في إرفاقها في الوقت الحالي. ولكن إذا كنت تريد إرفاق واحدة ، فستحتاج إلى دائرة شاحن li-po من أمازون

إذا كنت قد استمتعت بهذا وترغب في رؤية المزيد ، فقد بدأت قناة على YouTube ونأمل أن أنشر دروسًا هناك أيضًا. ها هو الرابط الالكتروني:

www. YouTube.com/channel/UCGqcWhHXdZf231rLe…

يحفظ الله!

يوحنا 3:16 "لأنه هكذا أحب الله العالم حتى أنه بذل ابنه الوحيد الذي يؤمن به دائمًا لن يهلك بل تكون له حياة أبدية."

موصى به: