Përmbajtje:

Syze të zgjuara: 4 hapa
Syze të zgjuara: 4 hapa

Video: Syze të zgjuara: 4 hapa

Video: Syze të zgjuara: 4 hapa
Video: Stealth - Mesnata 2024, Dhjetor
Anonim
Syze të zgjuara
Syze të zgjuara
Syze të zgjuara
Syze të zgjuara

Përshëndetje të gjithëve sot unë do t'ju tregoj se si të bëni gota të zgjuara në shtëpi! Një nga gjërat më të mëdha në lidhje me syzet inteligjente është sa e dobishme është të kesh diçka të tillë në botën e sotme të teknologjisë dhe sesi nuk ka vetëm një version të syzeve të zgjuar pasi të gjithë kanë veçori të mahnitshme dhe një numër të pafund aplikacionesh që mund të integrohen në të ardhmen. Karakteristikat e këtyre syzeve inteligjente përfshijnë kohën e treguar, duke ju treguar temperaturën çdo 5 minuta, midis atyre 5 minutave shkëmbehet midis temperaturës së lartë dhe të ulët të pritshme për atë ditë, gjithashtu ju tregon datën. Por tipari i tij kryesor është se ajo merr një fotografi çdo 10 sekonda dhe pastaj analizon atë fotografi për tekstin në të cilin do të kthejë informacion të dobishëm rreth tij, nëse gjen një pyetje atëherë do t'i përgjigjet duke përdorur wolfram, ose nëse gjen një ekuacion matematikor do ta zgjidhë!

Furnizimet:

Furnizimet e nevojshme për këtë projekt do të përfshijnë sa vijon:

1) Një mjedër Pi 0 W (Nga vilros.com)

2) Një ekran i qartë 128x64 OLED (Nga Sparkfun.com)

3) Një modul kamera i formatuar për Raspberry Pi 0 W (Nga amazon.com)

4) Çdo gotë sipas dëshirës tuaj

5) Tela

6) Hekur bashkues

7) Lidhës pa plumb (sepse nuk doni të vdisni nga plumbi)

8) ngjitës me 2 drejtime

9) Kartë SD min prej 8 gb

10) lidhje kompjuterike dhe interneti

Duke supozuar që tashmë keni një kompjuter dhe lidhje interneti kostoja e këtyre syzeve do të arrijë në rreth 130,00 dollarë

Hapi 1: Instalimi i qarkut

Instalimi i qarkut!
Instalimi i qarkut!

Për të shfaqur tekstin në ekran që do të lidheni me OLED përmes I2C ose SPI, unë zgjedh I2C pasi është ai që jam më i kënaqur duke përdorur, por nëse ju pëlqen të lidheni me të nëpërmjet SPI, ndiqni këtë tutorial në faqen e internetit të Sparkfun dhe kthehuni këtu kur të keni mbaruar. https://learn.sparkfun.com/tutorials/transparent-g… Nëse keni zgjedhur I2C pasi unë kam bashkuar telat siç tregohet nga sa vijon:

Pi \/ OLED \/

3.3v 3.3v

GND GND

SDA SDA

SCL SCL

Ju lutemi vini re se OLED i qartë mund të trajtojë vetëm 3.3v.

Pasi të keni përfunduar lidhjen e qarkut, rrëshqiteni kabllon e shiritit të modulit të kamerës në mbajtësen e kabllit të shiritit në mjedër pi duke nxjerrë kapësen e zezë dhe duke e rrëshqitur përsëri pasi kablloja e shiritit të jetë vendosur.

Hapi 2: Qasja në Raspberry Pi

Duke përdorur ssh ne mund të hyjmë në pi tonë me kompjuterin tonë pa lidhur një mouse dhe monitor shtesë të tastierës së jashtme. Gjëja e parë që bëni është të lidhni kartën tuaj SD me kompjuterin tuaj me një përshtatës ose një port të integruar, atëherë do t'ju duhet të shkoni në këtë lidhje https://www.raspberrypi.org/downloads/raspbian/ dhe të shkarkoni Raspbian buster me desktop. Së dyti ju duhet të vendosni OS në kartën SD duke përdorur BalenaEtcher zgjidhni kartën tuaj SD dhe Raspbian OS dhe klikoni "flash" ky proces mund të zgjasë ca kohë kështu që kthehuni kur të keni mbaruar. Së treti shkoni te karta SD në eksploruesin e skedarëve ose gjetësin në mac dhe krijoni një skedar teksti të quajtur wpa_supplicant sigurohuni që të fshini shtesën.txt dhe të shtoni.conf, në skedar ngjitni sa vijon:

vendi = SHBA

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}

Ju do të duhet të futni emrin dhe fjalëkalimin tuaj WiFi në vendet dhe vendin përkatës nëse nuk jeni në SHBA. Mbani në mend Raspberry Pi mund të lidhet vetëm me një rrjet 2.4Ghz që do të thotë që kompjuteri juaj gjithashtu do të duhet të lidhet me atë rrjet. Pasi të krijoni një skedar teksti të zbrazët pa shtrirje të quajtur ssh dhe pastaj nxirrni kartën tuaj SD. Atëherë do t'ju duhet të instaloni PuTTY https://www.putty.org/ e cila është ajo që do të përdorni për të aktivizuar ssh. Pasi të jetë instaluar, futni adresën IP të pi mjedrës tuaj, mund të kuptoni se çfarë është duke shkuar në faqen e internetit të ruterëve tuaj duke u regjistruar dhe duke parë pajisjet e lidhura.

Pasi të keni hyrë në Raspberry Pi do t'ju kërkojë të regjistroheni, emri i përdoruesit i paracaktuar është "pi" dhe fjalëkalimi është "mjedër". Shkruani sudo raspi-config pastaj shkoni te opsionet e ndërlidhjes dhe aktivizoni kamerën, ssh dhe i2c, pastaj klikoni finish dhe shkruani sudo reboot. Tani ju jeni gati për të ssh në mjedër pi, shkoni përpara dhe instaloni Remote Desktop dhe futni IP adresën tuaj të mjedrës pi dhe tani jeni mirë të hidhni në pi mjedër.

Hapi 3: Koha e kodimit

Koha e kodimit!
Koha e kodimit!

Unë kam zgjedhur të kodoj këtë program në python, prandaj sigurohuni që të keni të instaluar python3.7 ose 3.8 në desktopin tuaj. Ky kod funksionon duke përdorur një server dhe një klient, ndarja është kompjuteri juaj. Klienti ose mjedra pi do të bëjë një fotografi dhe do ta ngarkojë atë në dropbox e cila merret nga serveri i cili më pas ekzekuton përpunimin e imazhit dhe njohjen e tekstit në imazh. Ju do të duhet të merrni një wolframalpha, dropbox dhe openweathermap-id që kjo të funksionojë, gjithçka që duhet të bëni është të shkoni në regjistrimin e faqeve të internetit dhe do t'ju japë një ID-të aplikacioni. dhe pastaj futini ato në vendet përkatëse të përcaktuara nga komentet në kod. Sigurohuni që keni instaluar pip gjithçka dhe keni instaluar Tesseract OCR dhe OpenCV. Krijoni një skedar python të quajtur Server.py në kompjuterin tuaj dhe një skedar të quajtur client.py në mjedër pi dhe pastaj kopjoni dhe ngjisni kodin. Por dijeni që sa më të guximshëm të jenë personazhet dhe sa më i bardhë të jetë sfondi, aq më të mira janë rezultatet, ky është rasti me çdo softuer të njohjes së tekstit.

Të gjitha lidhjet për t'u regjistruar për një aplikacion-id \/

www.wolframalpha.com/

openweathermap.org/api

www.dropbox.com/developers/documentation

Sigurohuni që të instaloni Tesseract OCR dhe OpenCV \/

github.com/UB-Mannheim/tesseract/wiki

opencv.org/

Server.py:

import dropbox nga PIL import Imazh import cv2 import pytesseract nga pytesseract import Output import numpy as np import wolframalpha import socket import import time

dbx = dropbox. Dropbox ("dropboxAPIkey")

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

app_id = "ID-ja e aplikacionit"

host = socket.gethostname ()

port = 60567 print (host) s.bind ((host, port)) s.dëgjo (2)

ndërsa e vërtetë:

c, addr = s.accept () print (f'Got lidhje nga: {addr} ') pushim

ndërsa e vërtetë:

ndërsa True: metadata e kohës.sleep (13.7), f = dbx.files_download ("/dropbox_API/Image.jpg") out = open ("Image.jpg", 'wb') out.write (f.mbajtja) jashtë mbyll () print ("Imazhi u shkarkua!") image = cv2.imread ("Image.jpg") Image = cv2.resize (imazh, (640, 480), interpolim = cv2. INTER_AREA) image68 = cv2.rotate (Image, cv2. ROTATE_90_COUNTERCLOCKWISE) gri = cv2.cvtColor (imazhi68, cv2. COLOR_BGR2GRAY)

def remove_noise (gri):

kthimi cv2.medianBlur (gri, 5) def pragu (gri): kthimi cv2.th pragu (gri, 0, 255, cv2. THRESH_BINARY + cv2. THRESH_OTSU) [1] def dilate (gri): kernel = np.ones ((5, 5), np.uint8) kthe cv2.dilate (gri, kernel, iterations = 1) d = pytesseract.image_to_data (gri, output_type = Output. DICT)

n_boxes = len (d ['tekst'])

për i në rang (n_kutitë): nëse int (d ['conf'] )> 60: (x, y, w, h) = (d ['majtas'] , d ['lartë'] , d ['gjerësia'] , d ['lartësia'] ) gri = cv2. drejtkëndësh (gri, (x, y), (x + w, y + h), (0, 255, 0), 2) pushim pytesseract.pytesseract.tesseract_cmd = r "C: / Program Files / Tesseract-OCR / tesseract.exe" text = pytesseract.image_to_string (gri) print (tekst) ndërsa True: text2 = " "nëse len (tekst)> = 2: c.snd (bajt (tekst," utf-8 ")) nëse len (tekst) = 2: query = tekst klient = wolframalpha. Klienti (app_id) res = client.query (pyetje) përgjigje = e ardhshme (rez.rritja).teksti përgjigje1 = përgjigje.pjesë ('\ n') [0] print (përgjigje1) c.dërgo (bajt (përgjigje1, "utf-8")) nëse len (tekst) <= 1: c. Dërgoni (bajt (tekst2, "utf-8")) koha. Pushim i gjumit (7.5)

Client.py:

import dropboximport picameraimport kohë nga luma.core.interface.serial import i2c nga luma.core.render kanavacë importi nga luma.oled.device import ssd1306, ssd1325, ssd1331, sh1106 import socket import data data nga koha import gjumë import pyowm serial = i2c (port = 1, adresa = 0x3C) pajisje = ssd1306 (serial, rrotullo = 1) kamera = 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 = ""#adresa e portës së kompjuterit tuaj = 60567 s.connect ((host, port)) msg1 = "" owm = pyowm. OWM ("")#app-id për 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 muaj) + "/" + str (cdt.year) obs = owm.weather_at_place ("")#qytetin dhe vendin tuaj në formatin varg weather = obs.get_weather () temp2 = str (weather.get_temperature ("fahrenheit") ["te mp_max "]) temp3 = str (weather.get_temperature (" fahrenheit ") [" temp_min "]) ndërsa True: cdt = datetime.datetime.now () min1 = str (cdt.minute) orë = str (cdt.hour) me kanavacë (pajisje) si barazim: draw.text ((0, 0), orë, mbush = "bardhë") draw.text ((11, 0), ":", fill = "bardhë") draw.text ((15, 0), min1, mbush = "e bardhë") barazim. Tekst ((0, 9), "_", mbush = "e bardhë") barazim. Tekst ((0, 9), data, mbush = "e bardhë ") nëse min1 në num: obs = owm.weather_at_place (" ")#qytetin dhe vendin tuaj në formatin e vargut përsëri

moti = obs.get_weather ()

temp = str (weather.get_temperature ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", fill = "white") draw.text ((40, 0), temp, mbush = "e bardhë") nëse min1 jo në num: draw.text ((40, 0), temp2, fill = "e bardhë") draw.text ((32, 0), "F", mbush = "e bardhë") camera.start_preview () time.sleep (2) camera.capture ("/home/pi/Image.jpg") camera.stop_preview client = dropbox. Dropbox (dropbox_access_token) print klient ("[SUCCESS] llogaria dropbox e lidhur"). files_upload (open (computer_path, "rb"). read (), dropbox_path) print ("[UPLOADED] {}". format (computer_path)) full_msg = "" time.sleep (5) msg = s.recv (100) nëse len (msg)> = 2: full_msg += msg.decode ("utf-8") print (full_msg) cdt = datetime.datetime.now () min1 = str (cdt.minute) orë = str (cdt.hour) me kanavacë (pajisje) si barazim: draw.text ((0, 19), full_msg, fill = "bardhë") draw.text ((0, 0), orë, mbush = "e bardhë") draw.text ((11, 0), ":", mbush = "e bardhë") barazim. Tekst ((15, 0), min1, mbush = "e bardhë") barazim. Tekst ((0, 9), "_", mbush = " bardhë ") draw.text ((0, 9), data, mbush = "e bardhë") nëse min1 në num: obs = owm.weather_at_place ("")#qytetin dhe vendin tuaj në formatin e vargut përsëri

moti = obs.get_weather ()

temp = str (weather.get_temperature ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", fill = "bardhë") draw.text ((40, 0), temp, mbush = "e bardhë") nëse min1 jo në num: draw.text ((40, 0), temp3, fill = "e bardhë") draw.text ((32, 0), "F", mbush = "e bardhë") nëse len (msg) <= 1: cdt = datetime.datetime.now () min1 = str (cdt.minute) orë = str (cdt.hour) me kanavacë (pajisje) si barazim: draw.text ((0, 0), orë, mbush = "e bardhë") barazim. tekst ((11, 0), ":", mbush = "e bardhë") barazim. tekst ((15, 0), min1, mbush = "e bardhë") barazim. tekst ((0, 9), "_", mbush = "e bardhë") barazim. tekst ((0, 9), data, mbush = "e bardhë") nëse min1 në num: obs = owm.weather_at_place ("") #qyteti dhe vendi juaj në formatin e vargut përsëri

moti = obs.get_weather ()

temp = str (weather.get_temperature ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", fill = "bardhë") draw.text ((40, 0), temp, mbush = "e bardhë") nëse min1 jo në num: draw.text ((40, 0), temp3, fill = "e bardhë") draw.text ((32, 0), "F", mbush = "e bardhë") time.sleep (5.4) full_msg1 = "" msg1 = s.recv (100) nëse len (msg1)> = 2: full_msg1 += msg1.decode ("utf-8") full_msg2 = ("\ n". bashkohuni (textwrap.wrap (full_msg1, 9))) cdt = datetime.datetime.now () min1 = str (cdt.minute) orë = str (cdt.hour) me kanavacë (pajisje) si barazim: draw.text ((0, 19), full_msg, fill = "e bardhë") draw.text ((0, 29), full_msg2, fill = "bardhë") draw.text ((0, 0), orë, mbush = "e bardhë") draw.text ((11, 0), ":", mbush = "e bardhë") barazim. Tekst ((15, 0), min1, mbush = "e bardhë") barazim. Tekst ((0, 9), "_", mbush = "e bardhë") draw.text ((0, 9), data, mbush = "e bardhë") nëse min1 në num: obs = owm.weather_at_place ("")#qytetin dhe vendin tuaj në formatin e vargut përsëri

moti = obs.get_weather ()

temp = str (weather.get_temperature ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", fill = "bardhë") draw.text ((40, 0), temp, mbush = "e bardhë") nëse min1 jo në num: obs = owm.weather_at_place ("")#qytetin dhe vendin tuaj në formatin e vargut përsëri

moti = obs.get_weather ()

temp = str (weather.get_temperature ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", fill = "white") draw.text ((40, 0), temp, mbush = "e bardhë") nëse min1 jo në num: draw.text ((40, 0), temp3, fill = "e bardhë") draw.text ((32, 0), "F", mbush = "e bardhë") nëse len (msg1) <= 1: cdt = datetime.datetime.now () min1 = str (cdt.minute) orë = str (cdt.hour) me kanavacë (pajisje) si barazim: draw.text ((0, 0), orë, mbush = "e bardhë") barazim. tekst ((11, 0), ":", mbush = "e bardhë") barazim. tekst ((15, 0), min1, mbush = "bardhë") barazim. tekst ((0, 9), "_", mbush = "e bardhë") barazim. tekst ((0, 9), data, mbush = "e bardhë") nëse min1 në num: obs = owm.weather_at_place ("") #qyteti dhe vendi juaj në formatin e vargut përsëri

moti = obs.get_weather ()

temp = str (weather.get_temperature ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", fill = "white") draw.text ((40, 0), temp, mbush = "e bardhë") nëse min1 jo në num: draw.text ((40, 0), temp3, fill = "e bardhë") draw.text ((32, 0), "F", mbush = "e bardhë") time.sleep (7) client.files_delete (dropbox_path) print ("Dosjet u fshinë")

P. S. Unë jam një programues amator kështu që ju lutemi mos i vini në dyshim metodat e mia të tmerrshme të programimit.

Hapi 4: Vendosini të gjitha së bashku

Duke i vënë të gjitha së bashku!
Duke i vënë të gjitha së bashku!

Pasi të keni mbaruar gjithçka tjetër praktikisht keni mbaruar gjithçka që ju mbetet të bëni është të lidhni kamerën me mjedër pi dhe ta shfaqni në gota. Ju mund ta bëni këtë duke përdorur ngjitësin e dyanshëm të përmendur në furnizime ose mund të përdorni çdo metodë që mendoni se është e nevojshme. Ju gjithashtu mund të keni vënë re që nuk kam përmendur një bateri askund në këtë mësim, sepse unë kam planifikuar përmirësime të ardhshme për këto syze dhe nuk doja të bashkoja një të tillë tani. Por nëse doni të lidhni një, do t'ju duhet një qark ngarkuesi li-po nga amazon

Nëse ju pëlqeu kjo dhe doni të shihni më shumë, unë kam hapur një kanal në YouTube dhe shpresoj se do të postoj mësime edhe atje. Këtu është lidhja:

www.youtube.com/channel/UCGqcWhHXdZf231rLe…

Zoti ruajt!

Gjoni 3:16 "Sepse Perëndia e deshi aq botën, sa dha Birin e tij të vetëmlindurin, i cili beson gjithnjë në Të, nuk do të humbasë, por do të ketë një jetë të përjetshme."

Recommended: