جدول المحتويات:
- الخطوة 1: توصيل الأسلاك في الدائرة
- الخطوة 2: الوصول إلى Raspberry Pi
- الخطوة 3: وقت البرمجة
- الخطوة 4: وضع كل ذلك معًا
فيديو: النظارات الذكية: 4 خطوات
2024 مؤلف: John Day | [email protected]. آخر تعديل: 2024-01-30 07:35
مرحبًا بالجميع اليوم ، سأوضح لكم كيفية صنع النظارات الذكية في المنزل! أحد أعظم الأشياء في النظارات الذكية هو مدى فائدة الحصول على شيء مثل هذا في عالم التكنولوجيا اليوم وكيف لا يوجد إصدار واحد فقط من النظارات الذكية حيث تحتوي جميعها على ميزات مذهلة وعدد لا حصر له من التطبيقات التي يمكن دمجها فى المستقبل. تتضمن ميزات هذه النظارات الذكية معرفة الوقت ، وإخبارك بدرجة الحرارة كل 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 "لأنه هكذا أحب الله العالم حتى أنه بذل ابنه الوحيد الذي يؤمن به دائمًا لن يهلك بل تكون له حياة أبدية."
موصى به:
النظارات الذكية (أقل من 10 دولارات !!!): 8 خطوات (بالصور)
النظارات الذكية (أقل من 10 دولارات !!!): مرحبًا! نحن جميعًا على دراية بالنظارات الذكية مثل تلك التي تحمل اسم E.D.I.T.H. من صنع شخصيتنا المحبوبة توني ستارك والتي تم نقلها لاحقًا إلى بيتر باركر. اليوم سوف أقوم ببناء زجاج ذكي أقل من 10 دولارات! إنهم ليسوا
النظارات الذكية: 6 خطوات
النظارات الذكية: مرحبًا بالجميع! سأشارككم اليوم شيئًا ما أردته منذ فترة طويلة A DIY Smart Glasses المصممة بحوالي 25 دولارًا فقط تتيح الآن DIE - Do It Extremely
كيف تصنع الستائر الدوارة الذكية باستخدام مفاتيح SONOFF الذكية ؟: 14 خطوة
كيف تصنع الستائر الدوارة الذكية باستخدام مفاتيح SONOFF الذكية؟: استخدم وضع التعشيق في مفاتيح SONOFF الذكية لتحويل الستائر / الستائر الدوارة العادية إلى ستائر ذكية ، وما إذا كان معظمكم سيوافق على أن هذا عمل روتيني تقوم بسحب الستائر الدوارة / الستائر العاتمة في الصباح وهدمه في المساء؟ على أي حال ، أنا
البستنة الذكية القائمة على إنترنت الأشياء والزراعة الذكية باستخدام ESP32: 7 خطوات
البستنة الذكية القائمة على إنترنت الأشياء والزراعة الذكية باستخدام ESP32: يتغير العالم مع مرور الوقت وكذلك الزراعة. في الوقت الحاضر ، يقوم الناس بدمج الإلكترونيات في كل مجال والزراعة ليست استثناءً من ذلك. يساعد دمج الإلكترونيات في الزراعة المزارعين والأشخاص الذين يديرون الحدائق. في هذا
حافظة النظارات الذكية: 5 خطوات
حافظة النظارات الذكية: تتيح لك حقيبة نظارات LED تحديد مكان نظارتك في الصباح عندما تكون الغرفة مظلمة عادةً مع خطوط LED. يمكنك أيضًا استخدامه كمصباح ليلي لأنه بعد وضع نظارتك بالداخل ، مما يؤدي إلى تشغيل مستشعر الموجات فوق الصوتية. هذا المشروع المؤتمر الوطني العراقي