Talaan ng mga Nilalaman:

Mga Smart Salamin: 4 na Hakbang
Mga Smart Salamin: 4 na Hakbang

Video: Mga Smart Salamin: 4 na Hakbang

Video: Mga Smart Salamin: 4 na Hakbang
Video: PARA IWAS MALAS, WAG MONG ITAPAT ANG SALAMIN SA WALONG LUGAR NA ITO! 2024, Disyembre
Anonim
Matalinong Salamin
Matalinong Salamin
Matalinong Salamin
Matalinong Salamin

Kumusta ang lahat ngayon ay ipapakita ko sa iyo kung paano gumawa ng Mga Smart Salamin sa bahay! Ang isa sa mga pinakadakilang bagay tungkol sa matalinong baso ay kung gaano kapaki-pakinabang ang pagkakaroon ng tulad nito sa mundo ng teknolohiya ngayon at kung paano hindi lamang isang bersyon ng mga matalinong baso dahil ang lahat ay may kamangha-manghang mga tampok at isang walang katapusang bilang ng mga application na maaaring isama sa hinaharap. Ang mga tampok ng mga matalinong baso na ito ay nagsasama ng nagsasabi ng oras, na sinasabi sa iyo ang temperatura bawat 5 minuto, sa pagitan ng 5 minuto na ito ay nagpapalitan sa pagitan ng inaasahang mataas at mababang temperatura para sa araw na iyon, sasabihin din sa iyo ang petsa. Ngunit ang pangunahing tampok nito ay kumukuha ng isang larawan bawat 10 segundo at pagkatapos ay pinag-aaralan ang larawan na iyon para sa teksto kung saan ibabalik nito ang kapaki-pakinabang na impormasyon tungkol dito, kung makahanap ito ng isang katanungan pagkatapos ay sasagutin ito gamit ang wolfram, o kung nakakita ito ng isang equation sa matematika malulutas nito!

Mga Pantustos:

Ang mga suplay na kinakailangan para sa proyektong ito ay isasama ang mga sumusunod:

1) Isang Raspberry Pi 0 W (Mula sa vilros.com)

2) Isang malinaw na 128x64 OLED display (Mula sa Sparkfun.com)

3) Isang module ng camera na na-format para sa Raspberry Pi 0 W (Mula sa amazon.com)

4) Anumang baso na iyong pinili

5) Mga wire

6) bakal na bakal

7) Lead free solder (dahil ayaw mong mamatay mula sa lead)

8) 2 way adhesive

9) SD card na min ng 8gb

10) koneksyon sa computer at internet

Ipagpalagay na mayroon ka nang koneksyon sa computer at internet ang halaga ng mga baso na ito ay aabot sa $ 130.00

Hakbang 1: Pag-kable sa Circuit

Kable ng Circuit!
Kable ng Circuit!

Upang maipakita ang teksto sa screen na magkakonekta ka sa OLED sa pamamagitan ng I2C o SPI, pipiliin ko ang I2C dahil ito ang mas komportable kong gamitin ngunit kung nais mong kumonekta dito sa pamamagitan ng SPI sundin ang tutorial na ito ang Sparkfun website at bumalik dito kapag tapos ka na. https://learn.sparkfun.com/tutorials/transparent-g… Kung pinili mo ang I2C dahil na-solder ko ang mga wire tulad ng ipinahiwatig ng mga sumusunod:

Pi / / OLED / /

3.3v 3.3v

GND GND

SDA SDA

SCL SCL

Mangyaring tandaan na ang malinaw na OLED ay makakayanan lamang ang 3.3v.

Matapos mong maikonekta ang circuit, i-slide ang ribbon cable ng module ng camera sa may hawak ng ribbon cable sa raspberry pi sa pamamagitan ng paghugot ng itim na clamp at i-slide ito pabalik sa sandaling ang ribbon cable ay nasa lugar na.

Hakbang 2: Pag-access sa Raspberry Pi

Gamit ang ssh maaari naming ma-access ang aming pi sa aming pc nang hindi kumukonekta sa isang labis na panlabas na mouse sa keyboard at monitor. Ang unang bagay na gagawin mo ay ikonekta ang iyong SD card sa iyong PC gamit ang isang adapter o isang built in port, kakailanganin mong magtungo sa link na ito https://www.raspberrypi.org/downloads/raspbian/ at i-download ang Raspbian buster may desktop. Pangalawa kailangan mong ilagay ang OS sa SD card gamit ang BalenaEtcher piliin ang iyong SD card at ang Raspbian OS at i-click ang "flash" ang prosesong ito ay maaaring tumagal ng ilang oras kaya bumalik ka matapos ka. Pangatlo pumunta sa SD card sa file explorer o finder sa mac at lumikha ng isang text file na pinangalanang wpa_supplicant siguraduhing tanggalin ang.txt extension at magdagdag ng.conf, sa file i-paste ang sumusunod:

bansa = 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}

Kakailanganin mong ipasok ang iyong pangalan ng WiFi at password sa mga kaukulang lugar at bansa kung wala ka sa USA. Tandaan na ang Raspberry Pi ay maaari lamang kumonekta sa isang 2.4Ghz network na nangangahulugang ang iyong pc ay magkonekta din sa network na iyon. Matapos lumikha ng isang walang laman na file ng teksto na walang extension na tinatawag na ssh at pagkatapos ay palabasin ang iyong SD card. Kakailanganin mong i-install ang PuTTY https://www.putty.org/ na kung saan ang gagamitin mo upang paganahin ang ssh. Sa sandaling naka-install ipasok ang IP address ng iyong raspberry pi, maaari mong malaman kung ano ito sa pamamagitan ng pagpunta sa iyong website ng mga router ng pag-log in at pagtingin sa mga konektadong aparato.

Pagkatapos mong makakuha ng pag-access sa Raspberry Pi hihilingin sa iyo na mag-log in, ang default na username ay "pi" at ang password ay "raspberry". I-type ang sudo raspi-config pagkatapos ay pumunta sa mga pagpipilian sa interfacing at paganahin ang camera, ssh, at i2c, pagkatapos ay i-click ang tapusin at i-type ang sudo reboot. Handa ka na ngayong mag -shash sa raspberry pi, magpatuloy at i-install ang Remote Desktop at ipasok ang IP address ng iyong raspberry pi at mahusay ka na ngayong mag-ssh sa raspberry pi.

Hakbang 3: Oras ng Pag-coding

Oras ng Pag-coding!
Oras ng Pag-coding!

Pinili kong i-code ang program na ito sa sawa kaya tiyaking mayroon kang naka-install na python3.7 o 3.8 sa iyong desktop. Gumagana ang code na ito sa pamamagitan ng paggamit ng isang server at isang client, ang sever ay iyong pc. Kukuha ng larawan ang client o raspberry pi at i-upload iyon sa dropbox na nakuha ng server na nagpapatakbo ng pagproseso ng imahe at pagkilala sa teksto sa imahe. Kakailanganin mong makakuha ng isang wolframalpha, dropbox, at openweathermap app-id upang gumana ito, ang kailangan mo lang gawin ay pumunta sa pag-sign up sa mga website at bibigyan ka nito ng isang app-id. at pagkatapos ay i-input ang mga ito sa kaukulang mga lugar na tinutukoy ng mga komento sa code. Tiyaking na-install mo ang pip lahat at na-install ang Tesseract OCR at OpenCV. Lumikha ng isang python file na pinangalanang Server.py sa iyong pc at isang file na pinangalanang client.py sa raspberry pi at pagkatapos ay kopyahin at i-paste ang code. Ngunit alamin na mas matapang ang mga character at maputi ang background ng mas mahusay ang mga resulta, ito ang kaso sa bawat software ng pagkilala sa teksto.

Ang lahat ng mga link upang mag-sign up para sa isang app-id / /

www.wolframalpha.com/

openweathermap.org/api

www.dropbox.com/developers/documentation

Tiyaking na-install mo ang Tesseract OCR at OpenCV / /

github.com/UB-Mannheim/tesseract/wiki

opencv.org/

Server.py:

i-import ang dropbox mula sa PIL import I-import ang imahe cv2 i-import ang pytesseract mula sa pag-import ng pytesseract Output import na numpy bilang isang pag-import ng wolframalpha import socket import time

dbx = dropbox. Dropbox ("dropboxAPIkey")

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

app_id = "App-ID"

host = socket.gethostname ()

port = 60567 print (host) s.bind ((host, port)) s.nakinig (2)

habang Totoo:

c, addr = s.accept () print (f'Got koneksyon mula sa: {addr} ') break

habang Totoo:

habang Totoo: time.s Sleep (13.7) metadata, f = dbx.files_download ("/ dropbox_API / Image.jpg") out = open ("Image.jpg", 'wb') out.write (f.content) out. close () print ("Nai-download ang imahe!") image = cv2.imread ("Image.jpg") Image = cv2.resize (imahe, (640, 480), interpolation = cv2. INTER_AREA) image68 = cv2.rotate (Image, cv2. ROTATE_90_COUNTERCLOCKWISE) grey = cv2.cvtColor (image68, cv2. COLOR_BGR2GRAY)

def alisin_noise (kulay-abo):

return cv2.medianBlur (grey, 5) def threshold (grey): return cv2.threshold (grey, 0, 255, cv2. THRESH_BINARY + cv2. THRESH_OTSU) [1] def dilate (grey): kernel = np.ones ((5, 5), np.uint8) return cv2.dilate (grey, kernel, iterations = 1) d = pytesseract.image_to_data (grey, output_type = Output. DICT)

n_boxes = len (d ['text'])

para sa saklaw (n_boxes): kung int (d ['conf'] )> 60: (x, y, w, h) = (d ['left'] , d ['top'] , d ['lapad'] , d ['taas'] ) grey = cv2.rectangle (grey, (x, y), (x + w, y + h), (0, 255, 0), 2) masira ang pytesseract.pytesseract.tesseract_cmd = r "C: / Program Files / Tesseract-OCR / tesseract.exe" text = pytesseract.image_to_string (grey) print (text) habang Totoo: 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 (query) answer = susunod (res.results).text answer1 = answer.partition ('\ n') [0] print (answer1) c.send (bytes (answer1, "utf-8")) kung len (text) <= 1: c.send (bytes (text2, "utf-8")) time. Sleep (7.5) break

Client.py:

import dropboximport picameraimport oras mula sa luma.core.interface.serial import i2c mula sa luma.core.render import canvas mula sa luma.oled.device import ssd1306, ssd1325, ssd1331, sh1106 import socket import datime mula sa oras na i-import ang sleep import pyowm serial = i2c (port = 1, address = 0x3C) aparato = ssd1306 (serial, paikutin = 1) camera = 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 address ng iyong pc port = 60567 s.connect ((host, port)) msg1 = "" owm = pyowm. OWM ("") # app-id para sa 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. buwan) + "/" + str (cdt.year) obs = owm.weather_at_place ("") # iyong bayan at bansa sa string format na panahon = obs.get_weather () temp2 = str (weather.get_temperature ("fahrenheit") ["te mp_max "]) temp3 = str (weather.get_temperature (" fahrenheit ") [" temp_min "]) habang True: cdt = datime.datetime.now () min1 = str (cdt.minute) hour = str (cdt.hour) may canvas (aparato) bilang gumuhit: draw.text ((0, 0), oras, punan = "puti") draw.text ((11, 0), ":", punan = "puti") draw.text ((15, 0), min1, punan = "puti") gumuhit. Teksto ((0, 9), "_", punan = "puti") gumuhit. Teksto ((0, 9), petsa, punan = "puti ") kung min1 sa num: obs = owm.weather_at_place (" ") # ang iyong bayan at bansa sa format na string muli

panahon = obs.get_weather ()

temp = str (weather.get_temperature ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", fill = "white") draw.text ((40, 0), temp, punan = "puti") kung ang min1 wala sa num: draw.text ((40, 0), temp2, punan = "puti") draw.text ((32, 0), "F", punan = "puti") camera.start_preview () time.s Sleep (2) camera.capture ("/ home / pi / Image.jpg") camera.stop_preview client = dropbox. Dropbox (dropbox_access_token) print (client na "[SUCCESS] dropbox account"). files_upload (bukas (computer_path, "rb"). basahin (), dropbox_path) i-print ("[UPLOADED] {}". format (computer_path)) full_msg = "" time.s Sleep (5) msg = s.recv (100) kung len (msg)> = 2: full_msg + = msg.decode ("utf-8") print (full_msg) cdt = datime.datetime.now () min1 = str (cdt.minute) hour = str (cdt.hour) na may canvas (aparato) bilang draw: draw.text ((0, 19), full_msg, fill = "white") draw.text ((0, 0), hour, fill = "white") draw.text ((11, 0), ":", punan = "puti") gumuhit. Teksto ((15, 0), min1, punan = "puti") gumuhit. Teksto ((0, 9), "_", punan = " puting ") draw.text ((0, 9), petsa, punan = "puti") kung min1 sa num: obs = owm.weather_at_place ("") # ang iyong bayan at bansa sa format na string muli

panahon = obs.get_weather ()

temp = str (weather.get_temperature ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", fill = "white") draw.text ((40, 0), temp, punan = "puti") kung ang min1 wala sa num: draw.text ((40, 0), temp3, punan = "puti") draw.text ((32, 0), "F", punan = "puti") kung len (msg) <= 1: cdt = datetime.datetime.now () min1 = str (cdt.minute) hour = str (cdt.hour) na may canvas (aparato) bilang draw: draw.text ((0, 0), oras, punan = "puti") draw.text ((11, 0), ":", fill = "white") draw.text ((15, 0), min1, fill = "white") draw. teksto ((0, 9), "_", punan = "puti") draw.text ((0, 9), petsa, punan = "puti") kung min1 sa num: obs = owm.weather_at_place ("") # iyong bayan at bansa sa format na string muli

panahon = obs.get_weather ()

temp = str (weather.get_temperature ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", fill = "white") draw.text ((40, 0), temp, punan = "puti") kung ang min1 wala sa num: draw.text ((40, 0), temp3, punan = "puti") draw.text ((32, 0), "F", punan = "puti") time.s Sleep (5.4) full_msg1 = "" msg1 = s.recv (100) kung len (msg1)> = 2: full_msg1 + = msg1.decode ("utf-8") full_msg2 = ("\ n".join (textwrap.wrap (full_msg1, 9))) cdt = datime.datetime.now () min1 = str (cdt.minute) hour = str (cdt.hour) na may canvas (aparato) bilang 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), ":", punan = "puti") gumuhit. Teksto ((15, 0), min1, punan = "puting") gumuhit. Teksto ((0, 9), "_", punan = "puti") draw.text ((0, 9), petsa, punan = "puti") kung min1 sa num: obs = owm.weather_at_place ("") # ang iyong bayan at bansa sa format na string muli

panahon = obs.get_weather ()

temp = str (weather.get_temperature ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", fill = "white") draw.text ((40, 0), temp, punan = "puti") kung min1 wala sa num: obs = owm.weather_at_place ("") # ang iyong bayan at bansa sa format na string muli

panahon = obs.get_weather ()

temp = str (weather.get_temperature ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", fill = "white") draw.text ((40, 0), temp, punan = "puti") kung ang min1 wala sa num: draw.text ((40, 0), temp3, punan = "puti") draw.text ((32, 0), "F", punan = "puti") kung len (msg1) <= 1: cdt = datime.datetime.now () min1 = str (cdt.minute) hour = str (cdt.hour) na may canvas (aparato) bilang draw: draw.text ((0, 0), oras, punan = "puti") draw.text ((11, 0), ":", fill = "white") draw.text ((15, 0), min1, fill = "white") draw. teksto ((0, 9), "_", punan = "puti") draw.text ((0, 9), petsa, punan = "puti") kung min1 sa num: obs = owm.weather_at_place ("") # iyong bayan at bansa sa format na string muli

panahon = obs.get_weather ()

temp = str (weather.get_temperature ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", fill = "white") draw.text ((40, 0), temp, punan = "puti") kung ang min1 wala sa num: draw.text ((40, 0), temp3, punan = "puti") draw.text ((32, 0), "F", punan = "puti") time.s Sleep (7) client.files_delete (dropbox_path) print ("Tinanggal ang mga file")

P. S. Isa akong amateur programmer kaya't mangyaring huwag kuwestiyunin ang aking kakila-kilabot na mga pamamaraan ng pag-program.

Hakbang 4: Pagsasama-sama sa Lahat

Pagsasama-sama ng Lahat!
Pagsasama-sama ng Lahat!

Kapag natapos mo na ang lahat ng iba pa ay praktikal mong nagawa ang lahat ng iyong natitira na gawin ay ilakip ang raspberry pi camera at ipakita sa mga baso. Maaari mo itong gawin sa pamamagitan ng paggamit ng dobleng panig na malagkit na nabanggit sa mga supply o maaari mong gamitin ang anumang mga pamamaraan na sa palagay mo kinakailangan. Maaari mo ring napansin na hindi ko nabanggit ang isang baterya kahit saan sa araling ito na dahil mayroon akong mga pag-upgrade sa hinaharap na binalak para sa mga baso at hindi nais na maglakip ng isa sa ngayon. Ngunit kung nais mong maglakip ng isa kakailanganin mo ang isang li-po charger circuit mula sa amazon

Kung nasiyahan ka dito at nais mong makita ang higit pa, nagsimula ako ng isang channel sa YouTube at sana ay mag-post din ng mga tutorial doon. Nandito ang link:

www.youtube.com/channel/UCGqcWhHXdZf231rLe…

Ang Diyos ay nagse-save!

Juan 3:16 "Sapagkat mahal na mahal ng Diyos ang sanlibutan kung kaya't ibinigay Niya sa Kanyang nag-iisang Anak ang kailanman na naniniwala sa Kanya ay hindi mapahamak ngunit magkakaroon ng buhay na walang hanggan."

Inirerekumendang: