Mục lục:
- Bước 1: Đấu dây mạch
- Bước 2: Truy cập Raspberry Pi
- Bước 3: Thời gian mã hóa
- Bước 4: Kết hợp tất cả lại với nhau
Video: Kính thông minh: 4 bước
2024 Tác giả: John Day | [email protected]. Sửa đổi lần cuối: 2024-01-30 13:30
Xin chào các bạn hôm nay mình sẽ hướng dẫn các bạn cách làm Kính thông minh tại nhà nhé! Một trong những điều tuyệt vời nhất về kính thông minh là lợi ích của việc có một thứ như thế này trong thế giới công nghệ ngày nay và việc không chỉ có một phiên bản kính thông minh vì tất cả đều có các tính năng tuyệt vời và vô số ứng dụng có thể được tích hợp trong tương lai. Các tính năng của những chiếc kính thông minh này bao gồm cho biết thời gian, cho bạn biết nhiệt độ cứ sau 5 phút, giữa 5 phút đó, nó hoán đổi giữa nhiệt độ cao và thấp dự kiến cho ngày đó, nó cũng cho bạn biết ngày tháng. Nhưng tính năng chính của nó là cứ 10 giây lại chụp một bức ảnh và sau đó phân tích bức ảnh đó để tìm văn bản, trong đó nó sẽ trả về thông tin hữu ích về nó, nếu nó tìm thấy câu hỏi thì nó sẽ trả lời nó bằng cách sử dụng wolfram hoặc nếu nó tìm thấy một phương trình toán học. nó sẽ giải quyết nó!
Quân nhu:
Các nguồn cung cấp cần thiết cho dự án này sẽ bao gồm:
1) Raspberry Pi 0 W (Từ vilros.com)
2) Màn hình OLED 128x64 rõ ràng (Từ Sparkfun.com)
3) Một mô-đun máy ảnh được định dạng cho Raspberry Pi 0 W (Từ amazon.com)
4) Bất kỳ loại kính nào bạn lựa chọn
5) Dây điện
6) Sắt hàn
7) Chất hàn không chì (vì bạn không muốn chết vì chì)
8) keo 2 chiều
9) Thẻ SD tối thiểu 8gb
10) máy tính và kết nối internet
Giả sử bạn đã có máy tính và kết nối internet, giá của những chiếc kính này sẽ vào khoảng $ 130,00
Bước 1: Đấu dây mạch
Để hiển thị văn bản trên màn hình, bạn sẽ phải kết nối với OLED qua I2C hoặc SPI, tôi chọn I2C vì nó là cái tôi thấy thoải mái hơn khi sử dụng nhưng nếu bạn muốn kết nối với nó qua SPI, hãy làm theo hướng dẫn này trên trang web Sparkfun và quay lại đây khi bạn hoàn tất. https://learn.sparkfun.com/tutorials/transparent-g… Nếu bạn đã chọn I2C vì tôi đã hàn các dây như được chỉ ra bằng cách sau:
Pi / / OLED / /
3.3 v 3.3 v
GND GND
SDA SDA
SCL SCL
Xin lưu ý rằng màn hình OLED rõ ràng chỉ có thể xử lý 3.3v.
Sau khi bạn kết nối xong mạch, hãy trượt cáp ruy-băng của mô-đun máy ảnh vào giá đỡ cáp ruy-băng trên mâm xôi pi bằng cách kéo kẹp màu đen ra và trượt lại khi cáp ruy-băng vào đúng vị trí.
Bước 2: Truy cập Raspberry Pi
Sử dụng ssh, chúng ta có thể truy cập số pi bằng máy tính của mình mà không cần kết nối thêm chuột và màn hình bàn phím bên ngoài. Điều đầu tiên bạn làm là kết nối thẻ SD với PC bằng bộ điều hợp hoặc cổng tích hợp, sau đó bạn cần truy cập liên kết này https://www.raspberrypi.org/downloads/raspbian/ và tải xuống Raspbian buster với máy tính để bàn. Thứ hai, bạn phải đặt hệ điều hành vào thẻ SD bằng cách sử dụng BalenaEtcher chọn thẻ SD của bạn và hệ điều hành Raspbian và nhấp vào "flash" quá trình này có thể mất một chút thời gian vì vậy hãy quay lại khi bạn hoàn tất. Thứ ba, truy cập thẻ SD trong trình khám phá tệp hoặc công cụ tìm trên mac và tạo tệp văn bản có tên wpa_supplicant, đảm bảo xóa phần mở rộng.txt và thêm.conf, trong tệp, dán nội dung sau:
country = US
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}
Bạn sẽ phải nhập tên và mật khẩu WiFi của mình ở các địa điểm và quốc gia tương ứng nếu bạn không ở Hoa Kỳ. Hãy nhớ rằng Raspberry Pi chỉ có thể kết nối với mạng 2.4Ghz có nghĩa là máy tính của bạn cũng sẽ phải kết nối với mạng đó. Sau khi tạo một tệp văn bản trống không có phần mở rộng được gọi là ssh và sau đó đẩy thẻ SD của bạn ra. Sau đó, bạn sẽ cần cài đặt PuTTY https://www.putty.org/, đây là những gì bạn sẽ sử dụng để kích hoạt ssh. Sau khi cài đặt, hãy nhập địa chỉ IP của raspberry pi của bạn, bạn có thể tìm ra nó là gì bằng cách truy cập trang web bộ định tuyến của bạn đăng nhập và xem các thiết bị được kết nối.
Sau khi bạn có quyền truy cập vào Raspberry Pi, nó sẽ yêu cầu bạn đăng nhập, tên người dùng mặc định là "pi" và mật khẩu là "raspberry". Gõ sudo raspi-config, sau đó chuyển đến tùy chọn giao diện và bật camera, ssh và i2c, sau đó bấm hoàn tất và gõ sudo khởi động lại. Bây giờ bạn đã sẵn sàng để ssh vào raspberry pi, hãy tiếp tục và cài đặt Remote Desktop và nhập địa chỉ IP của raspberry pi và bây giờ bạn đã có thể ssh vào raspberry pi.
Bước 3: Thời gian mã hóa
Tôi đã chọn viết mã chương trình này bằng python, vì vậy hãy đảm bảo rằng bạn đã cài đặt python3.7 hoặc 3.8 trên máy tính để bàn của mình. Mã này hoạt động bằng cách sử dụng máy chủ và máy khách, máy chủ là máy tính của bạn. Ứng dụng khách hoặc raspberry pi sẽ chụp ảnh và tải ảnh đó lên dropbox. Đây là ảnh được truy xuất bởi máy chủ, sau đó chạy xử lý ảnh và nhận dạng văn bản trên ảnh. Bạn sẽ phải có một wolframalpha, dropbox và openweathermap app-id để điều này hoạt động, tất cả những gì bạn phải làm là truy cập đăng ký trang web và nó sẽ cung cấp cho bạn một id ứng dụng. và sau đó nhập chúng vào các vị trí tương ứng được xác định bởi các chú thích trong mã. Đảm bảo rằng bạn đã cài đặt pip mọi thứ và cài đặt Tesseract OCR và OpenCV. Tạo tệp python có tên Server.py trên máy tính của bạn và tệp có tên client.py trên raspberry pi, sau đó sao chép và dán mã. Nhưng hãy biết rằng các ký tự càng đậm và nền càng trắng thì kết quả càng tốt, đây là trường hợp của mọi phần mềm nhận dạng văn bản.
Tất cả các liên kết để đăng ký id ứng dụng / /
www.wolframalpha.com/
openweathermap.org/api
www.dropbox.com/developers/documentation
Đảm bảo rằng bạn cài đặt Tesseract OCR và OpenCV / /
github.com/UB-Mannheim/tesseract/wiki
opencv.org/
Server.py:
nhập dropbox từ nhập PIL Nhập hình ảnh cv2 nhập pytesseract từ nhập pytesseract Nhập đầu ra numpy dưới dạng np nhập thời gian nhập ổ cắm nhập wolframalpha
dbx = dropbox. Dropbox ("dropboxAPIkey")
s = socket.socket (socket. AF_INET, socket. SOCK_STREAM)
app_id = "ID ứng dụng"
host = socket.gethostname ()
port = 60567 print (host) s.bind ((host, port)) s.listen (2)
trong khi Đúng:
c, addr = s.accept () print (f'Got kết nối từ: {addr} ') break
trong khi Đúng:
trong khi siêu dữ liệu True: time.sleep (13.7), f = dbx.files_download ("/ dropbox_API / Image.jpg") out = open ("Image.jpg", 'wb') out.write (f.content) out. close () print ("Đã tải xuống hình ảnh!") image = cv2.imread ("Image.jpg") Image = cv2.resize (image, (640, 480), interpolation = cv2. INTER_AREA) image68 = cv2.rotate (Hình ảnh, cv2. ROTATE_90_COUNTERCLOCKWISE) xám = cv2.cvtColor (image68, cv2. COLOR_BGR2GRAY)
def remove_noise (xám):
trả về cv2.medianBlur (xám, 5) xác định ngưỡng (xám): trả về cv2.threshold (xám, 0, 255, cv2. THRESH_BINARY + cv2. THRESH_OTSU) [1] def dilate (xám): kernel = np.ones ((5, 5), np.uint8) trả về cv2.dilate (màu xám, hạt nhân, lần lặp = 1) d = pytesseract.image_to_data (màu xám, output_type = Output. DICT)
n_boxes = len (d ['text'])
for i in range (n_boxes): if int (d ['conf'] )> 60: (x, y, w, h) = (d ['left'] , d ['top'] , d ['width'] , d ['height'] ) gray = cv2.rectangle (gray, (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 (xám) print (text) trong khi True: text2 = " "if len (text)> = 2: c.send (byte (text," utf-8 ")) if len (text) = 2: query = text client = wolframalpha. Client (app_id) res = client.query (truy vấn) answer = next (res.results).text answer1 = answer.partition ('\ n') [0] print (answer1) c.send (byte (answer1, "utf-8")) if len (text) <= 1: c.send (byte (text2, "utf-8")) time.sleep (7,5) ngắt
Client.py:
import 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 import socket import daytime from time import sleep import pyowm serial = i2c (port = 1, address = 0x3C) device = ssd1306 (serial, xoay = 1) camera = picamera. PiCamera () dropbox_access_token = "" # Lại dropbox-id của bạn 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 address of your pc port = 60567 s.connect ((host, port)) msg1 = "" owm = pyowm. OWM ("") # app-id cho 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. tháng) + "/" + str (cdt.year) obs = owm.weather_at_place ("") # thị trấn và quốc gia của bạn ở định dạng chuỗi weather = obs.get_weather () temp2 = str (weather.get_tempeosystem ("fahrenheit") ["te mp_max "]) temp3 = str (weather.get_tempether (" fahrenheit ") [" temp_min "]) trong khi True: cdt = datetime.datetime.now () min1 = str (cdt.minute) giờ = str (cdt.hour) với canvas (thiết bị) dưới dạng 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 ") if min1 in num: obs = owm.weather_at_place (" ") # thị trấn và quốc gia của bạn ở định dạng chuỗi lại
thời tiết = obs.get_weather ()
temp = str (weather.get_tempeosystem ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", fill = "white") draw.text ((40, 0), temp, fill = "white") nếu min1 không có trong num: draw.text ((40, 0), temp2, fill = "white") draw.text ((32, 0), "F", fill = "trắng") camera.start_preview () time.sleep (2) camera.capture ("/ home / pi / Image.jpg") camera.stop_preview client = dropbox. Dropbox (dropbox_access_token) print ("[SUCCESS] tài khoản dropbox được liên kết"). 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) với canvas (thiết bị) dưới dạng 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 = " trắng ") draw.text ((0, 9), ngày tháng, điền = "white") if min1 in num: obs = owm.weather_at_place ("") # thị trấn và quốc gia của bạn ở định dạng chuỗi một lần nữa
thời tiết = obs.get_weather ()
temp = str (weather.get_tempeosystem ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", fill = "white") draw.text ((40, 0), temp, fill = "white") nếu min1 không có trong num: draw.text ((40, 0), temp3, fill = "white") draw.text ((32, 0), "F", fill = "trắng") if len (msg) <= 1: cdt = datetime.datetime.now () min1 = str (cdt.minute) hour = str (cdt.hour) với canvas (device) là draw: draw.text ((0, 0), giờ, điền = "trắng") draw.text ((11, 0), ":", fill = "trắng") draw.text ((15, 0), min1, fill = "white") vẽ. text ((0, 9), "_", fill = "white") draw.text ((0, 9), date, fill = "white") if min1 in num: obs = owm.weather_at_place ("") # thị trấn và quốc gia của bạn ở định dạng chuỗi một lần nữa
thời tiết = obs.get_weather ()
temp = str (weather.get_tempether ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", fill = "white") draw.text ((40, 0), temp, fill = "white") nếu min1 không có trong num: draw.text ((40, 0), temp3, fill = "white") draw.text ((32, 0), "F", fill = "trắng") 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) giờ = str (cdt.hour) với canvas (thiết bị) là 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 ("") # thị trấn và quốc gia của bạn ở định dạng chuỗi lại
thời tiết = obs.get_weather ()
temp = str (weather.get_tempeosystem ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", fill = "white") draw.text ((40, 0), temp, fill = "white") nếu min1 không phải ở num: obs = owm.weather_at_place ("") # thị trấn và quốc gia của bạn ở định dạng chuỗi một lần nữa
thời tiết = obs.get_weather ()
temp = str (weather.get_tempether ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", fill = "white") draw.text ((40, 0), temp, fill = "white") nếu min1 không có trong num: draw.text ((40, 0), temp3, fill = "white") draw.text ((32, 0), "F", fill = "trắng") if len (msg1) <= 1: cdt = datetime.datetime.now () min1 = str (cdt.minute) hour = str (cdt.hour) với canvas (device) dưới dạng draw: draw.text ((0, 0), giờ, điền = "trắng") draw.text ((11, 0), ":", fill = "trắng") draw.text ((15, 0), min1, fill = "white") vẽ. text ((0, 9), "_", fill = "white") draw.text ((0, 9), date, fill = "white") if min1 in num: obs = owm.weather_at_place ("") # thị trấn và quốc gia của bạn ở định dạng chuỗi một lần nữa
thời tiết = obs.get_weather ()
temp = str (weather.get_tempether ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", fill = "white") draw.text ((40, 0), temp, fill = "white") nếu min1 không có trong num: draw.text ((40, 0), temp3, fill = "white") draw.text ((32, 0), "F", fill = "trắng") time.sleep (7) client.files_delete (dropbox_path) print ("Tệp đã bị xóa")
P. S. Tôi là một lập trình viên nghiệp dư vì vậy xin đừng thắc mắc về phương pháp lập trình khủng khiếp của tôi.
Bước 4: Kết hợp tất cả lại với nhau
Khi bạn đã hoàn thành mọi thứ khác, bạn thực tế đã làm xong tất cả những gì bạn còn lại phải làm là gắn máy ảnh mâm xôi pi và màn hình vào kính. Bạn có thể làm điều này bằng cách sử dụng keo hai mặt được đề cập trong các nguồn cung cấp hoặc bạn có thể sử dụng bất kỳ phương pháp nào bạn cho là cần thiết. Bạn cũng có thể nhận thấy rằng tôi đã không đề cập đến pin ở bất kỳ đâu trong bài học này bởi vì tôi có kế hoạch nâng cấp trong tương lai cho những chiếc kính này và không muốn gắn một chiếc vào ngay bây giờ. Nhưng nếu bạn muốn gắn một cái, bạn sẽ cần một mạch sạc li-po từ amazon
Nếu bạn thích điều này và muốn xem thêm, tôi đã bắt đầu một kênh YouTube và hy vọng sẽ đăng các hướng dẫn trên đó. Đây là liên kết:
www.youtube.com/channel/UCGqcWhHXdZf231rLe…
Chúa cứu rỗi!
Giăng 3:16 "Vì Đức Chúa Trời yêu thương thế gian, đến nỗi đã ban Con Một của Ngài, Đấng hằng tin vào Ngài sẽ không bị hư mất mà được sự sống đời đời."
Đề xuất:
Đèn LED để bàn thông minh - Chiếu sáng thông minh W / Arduino - Neopixels Workspace: 10 bước (có hình ảnh)
Đèn LED để bàn thông minh | Chiếu sáng thông minh W / Arduino | Neopixels Workspace: Ngày nay chúng ta dành nhiều thời gian ở nhà, học tập và làm việc ảo, vậy tại sao không biến không gian làm việc của chúng ta trở nên tuyệt vời hơn với hệ thống chiếu sáng tùy chỉnh và thông minh dựa trên Arduino và Ws2812b LED. Sau đây tôi chỉ cho bạn cách xây dựng Smart của bạn Đèn LED để bàn
Biến điện thoại thông minh không sử dụng thành màn hình thông minh: 6 bước (có hình ảnh)
Biến điện thoại thông minh không sử dụng thành màn hình thông minh: Hướng dẫn Deze có trong het Engels, voor de Nederlandse versie klik hier Bạn có điện thoại thông minh (cũ) chưa sử dụng? Biến nó thành một màn hình thông minh bằng Google Trang tính và một số bút và giấy, bằng cách làm theo hướng dẫn từng bước dễ dàng này. Khi bạn hoàn thành
Ống kính kính vạn hoa thú vị cho máy ảnh điện thoại thông minh: 3 bước
Ống kính kính vạn hoa thú vị cho máy ảnh điện thoại thông minh: Trong dự án này, tôi hướng dẫn bạn cách tạo một ống kính kính vạn hoa nhỏ vui nhộn phù hợp với điện thoại thông minh của bạn! Thật tuyệt khi thử nghiệm với các vật thể ngẫu nhiên đặt xung quanh nhà và xem loại phản xạ nào có thể được tạo ra
Máy pha cà phê thông minh - Một phần của Hệ sinh thái Nhà thông minh: 4 bước
Máy pha cà phê thông minh - Một phần của Hệ sinh thái SmartHome: Máy pha cà phê bị tấn công, biến nó thành một phần của Hệ sinh thái nhà thông minh Tôi sở hữu một Máy pha cà phê Delonghi cũ tốt (DCM) (không phải là một chương trình khuyến mãi và muốn nó “thông minh”. Vì vậy, tôi đã hack nó bằng cách cài đặt ESP8266) mô-đun có giao diện với bộ não / bộ vi điều khiển của nó sử dụng
Quay số thông minh - Điện thoại truyền thống thông minh tự động sửa lỗi: 8 bước
Smart Dial - Điện thoại truyền thống thông minh tự động sửa lỗi: Smart Dial là điện thoại tự động sửa lỗi thông minh được tạo ra cho người cao tuổi có nhu cầu đặc biệt và nó cho phép người cao tuổi quay số trực tiếp từ điện thoại truyền thống mà họ quen dùng. Chỉ nhờ hoạt động tình nguyện tại một trung tâm chăm sóc người cao niên địa phương mà tôi