Πίνακας περιεχομένων:

Έξυπνα γυαλιά: 4 βήματα
Έξυπνα γυαλιά: 4 βήματα

Βίντεο: Έξυπνα γυαλιά: 4 βήματα

Βίντεο: Έξυπνα γυαλιά: 4 βήματα
Βίντεο: ΕΞΥΠΝΑ ΓΥΑΛΙΑ 2024, Ιούλιος
Anonim
Έξυπνα γυαλιά
Έξυπνα γυαλιά
Έξυπνα γυαλιά
Έξυπνα γυαλιά

Γεια σε όλους σήμερα, θα σας δείξω πώς να φτιάξετε έξυπνα γυαλιά στο σπίτι! Ένα από τα μεγαλύτερα πράγματα για τα έξυπνα γυαλιά είναι το πόσο ευεργετικό είναι να υπάρχει κάτι τέτοιο στον σημερινό κόσμο της τεχνολογίας και πώς δεν υπάρχει μόνο μία έκδοση έξυπνων γυαλιών καθώς όλα έχουν εκπληκτικά χαρακτηριστικά και άπειρο αριθμό εφαρμογών που θα μπορούσαν να ενσωματωθούν στο μέλλον. Τα χαρακτηριστικά αυτών των έξυπνων γυαλιών περιλαμβάνουν την ώρα ειδοποίησης, τη θερμοκρασία σας κάθε 5 λεπτά, μεταξύ εκείνων των 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 GB

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.3v.

Αφού ολοκληρώσετε τη σύνδεση του κυκλώματος, σύρετε το καλώδιο της κορδέλας της μονάδας κάμερας στη θήκη του καλωδίου κορδέλας στο βατόμουρο 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 = 1 network = {ssid = "WIFI_SSID" scan_ssid = 1 psk = "WIFI_PASSWORD" key_mgmt = WPA-PSK}

Εάν δεν βρίσκεστε στις ΗΠΑ, θα πρέπει να εισαγάγετε το όνομα και τον κωδικό πρόσβασης WiFi στα αντίστοιχα μέρη και χώρα. Λάβετε υπόψη ότι το Raspberry Pi μπορεί να συνδεθεί μόνο σε δίκτυο 2,4 Ghz, πράγμα που σημαίνει ότι ο υπολογιστής σας θα πρέπει επίσης να συνδεθεί σε αυτό το δίκτυο. Αφού δημιουργήσετε ένα κενό αρχείο κειμένου χωρίς επέκταση που ονομάζεται ssh και, στη συνέχεια, αφαιρέστε την κάρτα SD. Στη συνέχεια, θα χρειαστεί να εγκαταστήσετε το PuTTY https://www.putty.org/ το οποίο θα χρησιμοποιήσετε για να ενεργοποιήσετε το ssh. Μόλις εγκατασταθεί εισαγάγετε τη διεύθυνση IP του raspberry pi σας, μπορείτε να καταλάβετε τι είναι πηγαίνοντας στον ιστότοπο των δρομολογητών σας, συνδεθείτε και κοιτάζοντας τις συνδεδεμένες συσκευές.

Αφού αποκτήσετε πρόσβαση στο Raspberry Pi θα σας ζητήσει να συνδεθείτε, το προεπιλεγμένο όνομα χρήστη είναι "pi" και ο κωδικός πρόσβασης είναι "βατόμουρο". Πληκτρολογήστε sudo raspi-config, μεταβείτε στις επιλογές διασύνδεσης και ενεργοποιήστε την κάμερα, το ssh και το i2c, στη συνέχεια κάντε κλικ στο τέλος και πληκτρολογήστε επανεκκίνηση sudo. Τώρα είστε έτοιμοι να κάνετε ssh στο raspberry pi, προχωρήστε και εγκαταστήστε το Remote Desktop και εισαγάγετε τη διεύθυνση IP του raspberry pi και τώρα είστε καλοί για να ssh στο raspberry pi.

Βήμα 3: Χρόνος κωδικοποίησης

Χρόνος κωδικοποίησης!
Χρόνος κωδικοποίησης!

Έχω επιλέξει να κωδικοποιήσω αυτό το πρόγραμμα σε python, οπότε βεβαιωθείτε ότι έχετε εγκαταστήσει python3.7 ή 3.8 στην επιφάνεια εργασίας σας. Αυτός ο κώδικας λειτουργεί χρησιμοποιώντας έναν διακομιστή και έναν πελάτη, με το διαχωριστικό να είναι ο υπολογιστής σας. Ο πελάτης ή το raspberry pi θα τραβήξει μια φωτογραφία και θα την ανεβάσει στο dropbox, το οποίο ανακτήθηκε από τον διακομιστή ο οποίος στη συνέχεια εκτελεί επεξεργασία εικόνας και αναγνώριση κειμένου στην εικόνα. Θα χρειαστεί να αποκτήσετε ένα wolframalpha, dropbox και openweathermap app-id για να λειτουργήσει αυτό, το μόνο που έχετε να κάνετε είναι να μεταβείτε στην εγγραφή στις ιστοσελίδες και θα σας δώσει ένα αναγνωριστικό εφαρμογής. και στη συνέχεια εισάγετε τα σε αντίστοιχα μέρη που καθορίζονται από τα σχόλια στον κώδικα. Βεβαιωθείτε ότι έχετε εγκαταστήσει τα 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:

εισαγωγή dropbox από εισαγωγή PIL Εικόνα εισαγωγή cv2 εισαγωγή pytesseract από pytesseract εισαγωγή Εισαγωγή εξόδου numpy ως np εισαγωγή wolframalpha εισαγωγή πρίζας χρόνος εισαγωγής

dbx = dropbox. Dropbox ("dropboxAPIkey")

s = socket.socket (υποδοχή. AF_INET, πρίζα. SOCK_STREAM)

app_id = "Αναγνωριστικό εφαρμογής"

host = socket.gethostname ()

θύρα = 60567 print (host) s.bind ((host, port)) s. listenen (2)

ενώ True:

c, addr = s.accept () print (f'Got connection from: {addr} ') break

ενώ True:

ενώ True: μεταδεδομένα time.sleep (13.7), f = dbx.files_download ("/dropbox_API/Image.jpg") out = open ("Image.jpg", 'wb') out.write (f.content) out κλείσιμο () εκτύπωση ("Η εικόνα λήφθηκε!") image = cv2.imread ("Image.jpg") Image = cv2.resize (εικόνα, (640, 480), παρεμβολή = cv2. INTER_AREA) image68 = cv2.rotate (Image, cv2. ROTATE_90_COUNTERCLOCKWISE) γκρι = cv2.cvtColor (εικόνα68, cv2. COLOR_BGR2GRAY)

def remove_noise (γκρι):

επιστροφή cv2.medianBlur (γκρι, 5) def thresholding (γκρι): επιστροφή cv2.threshold (γκρι, 0, 255, cv2. THRESH_BINARY + cv2. THRESH_OTSU) [1] def dilate (grey): 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): if 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 (grey) print (text) while 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 = next (res.results).text answer1 = answer.partition ('\ n') [0] print (answer1) c.send (bytes (answer1, "utf-8")) if len (text) <= 1: c.send (byte (text2, "utf-8")) time.sleep (7.5) break

Client.py:

εισαγωγή dropboximport picameraimport time from luma.core.interface.serial import i2c from luma.core.render canvas import canvas from luma.oled.device import ssd1306, ssd1325, ssd1331, sh1106 socket import data data time from time import sleep sleep pyowm serial = i2c (θύρα = 1, διεύθυνση = 0x3C) συσκευή = ssd1306 (σειριακή, περιστροφή = 1) κάμερα = 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 = "" #ip διεύθυνση της θύρας του υπολογιστή σας = 60567 s.connect ((host, port)) 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.minute) ημερομηνία = str (cdt.day) + "/" + str (cdt μήνα) + "/" + 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 "]) while True: cdt = datetime.datetime.now () min1 = str (cdt.minute) hour = str (cdt.hour) με καμβά (συσκευή) ως draw: 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 ") αν 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") if min1 not in 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 account linked ") client. files_upload (open (computer_path, "rb"). read (), dropbox_path) print ("[UPLOADED] {}". format (computer_path)) full_msg = "" time.sleep (5) msg = s.recv (100) αν 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: 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") if min1 not in num: 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) hour = str (cdt.hour) με καμβά (συσκευή) ως draw: draw.text ((0, 0), ώρα, πλήρωση = "λευκό") draw.text ((11, 0), ":", Fill = "λευκό") draw.text ((15, 0), min1, fill = "white") κλήρωση. κείμενο ((0, 9), "_", fill = "white") draw.text ((0, 9), date, fill = "white") αν min1 in 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") if min1 not in 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".join (textwrap.wrap (full_msg1, 9))) cdt = datetime.datetime.now () min1 = str (cdt.minute) hour = str (cdt.hour) με καμβά (συσκευή) ως 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 = "λευκό") 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: 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") if min1 not in num: 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) hour = str (cdt.hour) με καμβά (συσκευή) ως draw: draw.text ((0, 0), ώρα, πλήρωση = "λευκό") draw.text ((11, 0), ":", Fill = "λευκό") draw.text ((15, 0), min1, fill = "white") κλήρωση κείμενο ((0, 9), "_", fill = "white") draw.text ((0, 9), date, fill = "white") αν min1 in 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") if min1 not in num: draw.text ((40, 0), temp3, fill = "white") draw.text ((32, 0), "F", fill = "white") time.sleep (7) client.files_delete (dropbox_path) print ("Τα αρχεία διαγράφηκαν")

ΥΣΤΕΡΟΓΡΑΦΟ. Είμαι ερασιτέχνης προγραμματιστής, οπότε παρακαλώ μην αμφισβητείτε τις φρικτές μεθόδους προγραμματισμού μου.

Βήμα 4: Το βάζουμε όλα μαζί

Το βάζουμε όλα μαζί!
Το βάζουμε όλα μαζί!

Μόλις τελειώσετε όλα τα άλλα, πρακτικά τελειώσατε το μόνο που έχετε να κάνετε είναι να προσαρτήσετε την κάμερα raspberry pi και να την εμφανίσετε στα γυαλιά. Μπορείτε να το κάνετε αυτό χρησιμοποιώντας την κόλλα διπλής όψης που αναφέρεται στις προμήθειες ή μπορείτε να χρησιμοποιήσετε όποιες μεθόδους θεωρείτε απαραίτητες. Μπορεί επίσης να έχετε παρατηρήσει ότι δεν έχω αναφέρει μπαταρία πουθενά σε αυτό το μάθημα, επειδή έχω προγραμματίσει μελλοντικές αναβαθμίσεις για αυτά τα γυαλιά και δεν ήθελα να το συνδέσω αυτή τη στιγμή. Αλλά αν θέλετε να συνδέσετε ένα, θα χρειαστείτε ένα κύκλωμα φορτιστή li-po από το amazon

Αν σας άρεσε αυτό και θέλετε να δείτε περισσότερα, έχω ξεκινήσει ένα κανάλι στο YouTube και ελπίζω ότι θα δημοσιεύω και εκεί σεμινάρια. Ορίστε ο σύνδεσμος:

www.youtube.com/channel/UCGqcWhHXdZf231rLe…

Ο Θεός σώζει!

Ιωάννης 3:16 «Διότι ο Θεός αγάπησε τόσο πολύ τον κόσμο, ώστε έδωσε τον μοναδικό Υιό Του, ο οποίος πάντα πιστεύει σ’ Αυτόν, δεν θα χαθεί αλλά θα έχει αιώνια ζωή ».

Συνιστάται: