תוכן עניינים:

משקפיים חכמים: 4 שלבים
משקפיים חכמים: 4 שלבים

וִידֵאוֹ: משקפיים חכמים: 4 שלבים

וִידֵאוֹ: משקפיים חכמים: 4 שלבים
וִידֵאוֹ: איך לחסל את הביישנות ב-4 שלבים פשוטים 2024, נוֹבֶמבֶּר
Anonim
משקפיים חכמים
משקפיים חכמים
משקפיים חכמים
משקפיים חכמים

שלום לכולם היום אני הולך להראות לכם איך להכין משקפיים חכמים בבית! אחד הדברים הגדולים ביותר במשקפיים חכמים הוא כמה מועיל שיש דבר כזה בעולם הטכנולוגיה של היום וכי אין רק גרסה אחת של משקפיים חכמים שכן לכולם יש תכונות מדהימות ומספר אינסופי של יישומים שניתן לשלב בעתיד. התכונות של המשקפיים החכמות האלה כוללות את זמן הטעינה, מספרת לך את הטמפרטורה כל 5 דקות, בין אותן 5 דקות שהיא מתחלפת בין הטמפרטורה הגבוהה והנמוכה הצפויה לאותו יום, היא גם אומרת לך את התאריך. אבל התכונה העיקרית שלה היא שהיא מצלמת תמונה כל 10 שניות ואז מנתחת את התמונה הזו לטקסט שבה היא תחזיר מידע שימושי עליה, אם היא תמצא שאלה אז היא תענה עליה באמצעות wolfram, או אם היא תמצא משוואה מתמטית. זה יפתור את זה!

אספקה:

האספקה הדרושה לפרויקט זה תכלול את הדברים הבאים:

1) פטל פיי 0 W (מאת vilros.com)

2) צג OLED ברור בגודל 128x64 (מאת Sparkfun.com)

3) מודול מצלמה המעוצב עבור Raspberry Pi 0 W (מאת amazon.com)

4) כל כוסות לבחירתך

5) חוטים

6) מלחם

7) הלחמה ללא עופרת (מכיוון שאינך רוצה למות מעופרת)

8) דבק דו כיווני

9) כרטיס SD מינימלי של 8GB

10) מחשב וחיבור לאינטרנט

בהנחה שכבר יש לך מחשב וחיבור לאינטרנט העלות של משקפיים אלה תגיע לסביבות 130.00 $

שלב 1: חיווט המעגל

חיווט המעגל!
חיווט המעגל!

על מנת להציג טקסט על המסך, יהיה עליך להתחבר ל- OLED באמצעות I2C או SPI, אני בוחר ב- I2C מכיוון שהוא נוח לי יותר להשתמש בו, אך אם בא לך להתחבר אליו באמצעות SPI, עקוב אחר הדרכה זו ב- אתר Sparkfun וחזור לכאן כשתסיים. https://learn.sparkfun.com/tutorials/transparent-g… אם בחרת ב- I2C מכיוון שהלחמתי את החוטים כפי שמצוין על ידי הדברים הבאים:

Pi \/ OLED \/

3.3v 3.3v

GND GND

SDA SDA

SCL SCL

שימו לב כי ה- OLED הברור יכול להתמודד רק עם 3.3 וולט.

לאחר שסיימת לחבר את המעגל, החלק את כבל הסרט של מודול המצלמה לתוך מחזיק כבל הסרט ב- pi פטל על ידי משיכת המהדק השחור והחלקתו חזרה פנימה לאחר כבל הסרט.

שלב 2: גישה ל- Raspberry Pi

באמצעות ssh אנו יכולים לגשת ל- pi שלנו באמצעות המחשב האישי שלנו מבלי לחבר עכבר ומקלדת חיצוניים נוספים. הדבר הראשון שאתה צריך לעשות הוא לחבר את כרטיס ה- SD למחשב האישי באמצעות מתאם או יציאה מובנית, ואז תצטרך להיכנס לקישור הזה https://www.raspberrypi.org/downloads/raspbian/ ולהוריד באסטר Raspbian. עם שולחן עבודה. שנית, עליך לשים את מערכת ההפעלה על כרטיס ה- SD באמצעות BalenaEtcher בחר את כרטיס ה- SD שלך ואת מערכת ההפעלה Raspbian ולחץ על "פלאש" תהליך זה עלול להימשך זמן מה, אז תחזור כשתסיים. שלישית עבור לכרטיס ה- SD ב- Explorer Explorer או ב- Finder ב- 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.4Ghz כלומר המחשב שלך יצטרך להתחבר לרשת זו. לאחר יצירת קובץ טקסט ריק ללא סיומת הנקראת ssh ולאחר מכן הוצא את כרטיס ה- SD שלך. לאחר מכן תצטרך להתקין את PuTTY https://www.putty.org/ וזהו מה שתשתמש בו כדי לאפשר ssh. לאחר ההתקנה הזן את כתובת ה- IP של פטל הפאי שלך, תוכל להבין מה זה על ידי כניסה לאתר הנתבים שלך והתחברות למכשירים המחוברים.

לאחר שתשיג גישה ל- Raspberry Pi הוא יבקש ממך להיכנס, שם המשתמש המוגדר כברירת מחדל הוא "pi" והסיסמה היא "פטל". הקלד sudo raspi-config ואז עבור לאפשרויות הממשק והפעל את המצלמה, ssh ו- i2c, לחץ על סיום והקלד אתחול מחדש של sudo. עכשיו אתה מוכן להיכנס ל- pi פטל, התקן את שולחן העבודה המרוחק והזן את כתובת ה- IP של הפטל שלך ועכשיו אתה טוב להיכנס ל- pi פטל.

שלב 3: זמן קידוד

זמן קידוד!
זמן קידוד!

בחרתי לקודד את התוכנית הזו ב- python אז וודא שמותקן python3.7 או 3.8 על שולחן העבודה שלך. קוד זה פועל באמצעות שרת ולקוח, כשהנתח הוא המחשב האישי שלך. הלקוח או פטל פאי יצלם תמונה ויעלה אותה ל dropbox שהיא אחזור של השרת שמריץ לאחר מכן עיבוד תמונה וזיהוי טקסט על התמונה. תצטרך להשיג wolframalpha, dropbox ומזהה אפליקציית מפות פתוח כדי שזה יעבוד, כל שעליך לעשות הוא להיכנס להרשמה לאתרים וזה ייתן לך מזהה אפליקציה. ולאחר מכן הכנס אותם למקומות המתאימים שנקבעו על ידי ההערות בקוד. וודא שהתקנת הכל בפיפ והתקנת את Tesseract OCR ו- OpenCV. צור קובץ פייתון בשם Server.py במחשב שלך וקובץ בשם client.py ב- 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:

ייבוא dropbox מאת PIL יבוא תמונה יבוא cv2 יבוא pytesseract מ pytesseract יבוא פלט יבוא numpy כמו np יבוא wolframalpha שקע יבוא זמן יבוא

dbx = dropbox. Dropbox ("dropboxAPIkey")

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

app_id = "מזהה אפליקציה"

host = socket.gethostname ()

יציאה = 60567 הדפסה (מארח) s.bind ((מארח, יציאה)) s.listen (2)

בעוד שזה נכון:

c, addr = s.accept () הדפסה (f'Goted connection from: {addr} ') break

בעוד שזה נכון:

בעוד True: time.sleep (13.7) מטא נתונים, f = dbx.files_download ("/dropbox_API/Image.jpg") out = open ("Image.jpg", 'wb') out.write (f.content) החוצה. close () הדפס ("הורדה התמונה!") image = cv2.imread ("Image.jpg") Image = cv2.resize (תמונה, (640, 480), אינטרפולציה = cv2. INTER_AREA) image68 = cv2.rotate (תמונה, cv2. ROTATE_90_COUNTERCLOCKWISE) אפור = cv2.cvtColor (image68, cv2. COLOR_BGR2GRAY)

def remove_noise (אפור):

return cv2.medianBlur (אפור, 5) סף def (אפור): return cv2.threshold (אפור, 0, 255, cv2. THRESH_BINARY + cv2. THRESH_OTSU) [1] def dilate (אפור): kernel = np.ones ((5, 5), np.uint8) החזר cv2.dilate (אפור, גרעין, איטרציות = 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 ['רוחב'] , d ['גובה'] ) אפור = cv2. מלבן (אפור, (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 ")) if len (text) = 2: query = text client = wolframalpha. Client (app_id) res = client.query (שאילתה) answer = הבא (תוצאות.התוצאות). טקסט answer1 = answer.partition ('\ n') [0] הדפס (answer1) c.send (בתים (answer1, "utf-8")) if len (טקסט) <= 1: c.send (בתים (text2, "utf-8")) time.sleep (7.5) הפסקה

Client.py:

ייבוא dropboximport פיקמרה זמן ייבוא מ- luma.core.interface.serial יבוא i2c מ- luma.core.render ייבוא בד מ- luma.oled.device ייבוא ssd1306, ssd1325, ssd1331, sh1106 ייבוא שקע נתונים מתי הזמן ייבוא שינה יבוא pyowm serial = i2c (port = 1, address = 0x3C) device = ssd1306 (סידורי, סובב = 1) מצלמה = picamera. PiCamera () dropbox_access_token = "" #Dropbox-id שלך שוב 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 עבור מפת הפתוח 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. חודש) + "/" + str (cdt.year) obs = owm.weather_at_place ("")#העיר והמדינה שלך בפורמט מחרוזת מזג אוויר = obs.get_weather () temp2 = str (weather.get_temperature ("פרנהייט")] ["te mp_max "]) temp3 = str (weather.get_temperature (" פרנהייט ") [" temp_min "]) בעוד True: cdt = datetime.datetime.now () min1 = str (cdt.minute) שעה = str (cdt.hour) עם בד (מכשיר) כציור: צייר.טקסט ((0, 0), שעה, מילוי = "לבן") צייר.טקסט ((11, 0), ":", מילוי = "לבן") צייר.טקסט ((15, 0), min1, fill = "לבן") צייר.טקסט ((0, 9), "_", מילוי = "לבן") צייר.טקסט ((0, 9), תאריך, מילוי = "לבן ") if min1 in num: obs = owm.weather_at_place (" ")#העיר והמדינה שלך שוב בפורמט מחרוזת

מזג אוויר = obs.get_weather ()

temp = str (weather.get_temperature ("פרנהייט") ["temp"]) draw.text ((32, 0), "F", fill = "white") draw.text ((40, 0), temp, fill = "לבן") אם min1 לא במספר: 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) הדפס ("

מזג אוויר = obs.get_weather ()

temp = str (weather.get_temperature ("פרנהייט") ["temp"]) draw.text ((32, 0), "F", fill = "white") draw.text ((40, 0), temp, fill = "לבן") אם min1 לא במספר: draw.text ((40, 0), temp3, fill = "white") draw.text ((32, 0), "F", fill = "white") אם len (msg) <= 1: cdt = datetime.datetime.now () min1 = str (cdt.minute) שעה = str (cdt.hour) עם בד (מכשיר) כציור: 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") if min1 in num: obs = owm.weather_at_place ("") #העיר והמדינה שלך שוב בפורמט מחרוזת

מזג אוויר = obs.get_weather ()

temp = str (weather.get_temperature ("פרנהייט") ["temp"]) draw.text ((32, 0), "F", fill = "white") draw.text ((40, 0), temp, fill = "לבן") אם min1 לא במספר: 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 = datetime.datetime.now () min1 = str (cdt.minute) שעה = str (cdt.hour) עם בד (מכשיר) כציור: draw.text ((0, 19), full_msg, fill = "לבן") 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), תאריך, מילוי = "לבן") אם min1 במספר: obs = owm.weather_at_place ("")#העיר והמדינה שלך בפורמט מחרוזת שוב

מזג אוויר = obs.get_weather ()

temp = str (weather.get_temperature ("פרנהייט") ["temp"]) draw.text ((32, 0), "F", fill = "white") draw.text ((40, 0), temp, fill = "white") if min1 not in num: obs = owm.weather_at_place ("")#העיר והמדינה שלך שוב בפורמט מחרוזת

מזג אוויר = obs.get_weather ()

temp = str (weather.get_temperature ("פרנהייט") ["temp"]) draw.text ((32, 0), "F", fill = "white") draw.text ((40, 0), temp, fill = "לבן") אם min1 לא במספר: draw.text ((40, 0), temp3, fill = "white") draw.text ((32, 0), "F", fill = "white") אם len (msg1) <= 1: cdt = datetime.datetime.now () min1 = str (cdt.minute) שעה = str (cdt.hour) עם בד (מכשיר) כציור: 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") if min1 in num: obs = owm.weather_at_place ("") #העיר והמדינה שלך שוב בפורמט מחרוזת

מזג אוויר = obs.get_weather ()

temp = str (weather.get_temperature ("פרנהייט") ["temp"]) draw.text ((32, 0), "F", fill = "white") draw.text ((40, 0), temp, fill = "לבן") אם min1 לא במספר: draw.text ((40, 0), temp3, fill = "white") draw.text ((32, 0), "F", fill = "white") time.sleep (7) הדפסה של client.files_delete (dropbox_path) ("קבצים נמחקו")

נ.ב. אני מתכנת חובב אז אל תטיל ספק בשיטות התכנות הנוראיות שלי.

שלב 4: להרכיב הכל ביחד

לשים את הכל ביחד!
לשים את הכל ביחד!

לאחר שסיימת את כל השאר כמעט סיימת כל מה שנותר לך לעשות הוא לצרף את מצלמת הפטל פטל ולהציג למשקפיים. אתה יכול לעשות זאת על ידי שימוש בדבק הדו צדדי המוזכר במצרכים או שאתה יכול להשתמש בכל שיטה שלדעתך נחוצה. אולי גם שמתם לב שלא הזכרתי סוללה בשום מקום בשיעור זה כיוון שתכננתי שדרוגים עתידיים למשקפיים אלה ולא רציתי לצרף אותה כרגע. אבל אם אתה רוצה לצרף אחד אתה תצטרך מעגל מטען לי-פו של אמזון

אם נהנית מזה ורוצה לראות עוד, פתחתי ערוץ YouTube ואני מקווה שאפרסם שם גם הדרכות. הנה הקישור:

www.youtube.com/channel/UCGqcWhHXdZf231rLe…

אלוהים מציל!

יוחנן ג ': 16 "כי כל כך אהב אלוהים את העולם עד שנתן לבנו האחד והיחיד שהמאמין בו לעולם לא ימות אך יחיה חיי נצח."

מוּמלָץ: