Բովանդակություն:

Խելացի ակնոցներ `4 քայլ
Խելացի ակնոցներ `4 քայլ

Video: Խելացի ակնոցներ `4 քայլ

Video: Խելացի ակնոցներ `4 քայլ
Video: Քայլ 4. Ինչպես պլանավորել բիզնեսն ու ինչեր հաշվի առնել| Գևորգ Պողոսյան 2024, Նոյեմբեր
Anonim
Խելացի ակնոցներ
Խելացի ակնոցներ
Խելացի ակնոցներ
Խելացի ակնոցներ

Ողջույն բոլորին, այսօր ես ձեզ ցույց կտամ, թե ինչպես պատրաստել խելացի ակնոցներ տանը: Խելացի ակնոցների ամենամեծ բաներից մեկն այն է, թե որքանով է ձեռնտու նման բան ունենալ այսօրվա տեխնոլոգիական աշխարհում, և ինչպես չկա խելացի ակնոցների միայն մեկ տարբերակ, քանի որ բոլորն ունեն զարմանալի հատկություններ և անսահմանափակ թվով ծրագրեր, որոնք կարող են ինտեգրվել: ապագայում. Այս խելացի ակնոցների առանձնահատկությունները ներառում են պատմելու ժամանակը, ամեն 5 րոպեն մեկ ջերմաստիճանը պատմելը, այդ 5 րոպեների միջև այն փոխվում է այդ օրվա սպասվող բարձր և ցածր ջերմաստիճանի միջև, ինչպես նաև ձեզ է նշում ամսաթիվը: Բայց դրա հիմնական առանձնահատկությունն այն է, որ լուսանկարում է յուրաքանչյուր 10 վայրկյանը մեկ, այնուհետև վերլուծում այդ նկարը տեքստի համար, որում կփոխանցի դրա մասին օգտակար տեղեկությունները, եթե հարց գտնի, ապա կպատասխանի գայլաձևով, կամ եթե գտնի մաթեմատիկական հավասարություն: դա կլուծի!

Պարագաներ:

Այս նախագծի համար անհրաժեշտ պարագաները կներառեն հետևյալը.

1) Ազնվամորի Պի 0 Վտ (vilros.com- ից)

2) 128x64 հստակ OLED էկրան (Sparkfun.com- ից)

3) Raspberry Pi 0 W- ի համար ձևաչափված տեսախցիկի մոդուլ (amazon.com- ից)

4) Ձեր ընտրած ցանկացած բաժակ

5) լարերը

6) oldոդման երկաթ

7) առանց կապարի զոդման (քանի որ դուք չեք ցանկանում մահանալ կապարից)

8) երկկողմանի սոսինձ

9) SD քարտ 8 գբ նվազագույն

10) համակարգիչ և ինտերնետ կապ

Ենթադրելով, որ դուք արդեն ունեք համակարգիչ և ինտերնետ կապ, այս ակնոցների արժեքը կկազմի մոտ $ 130.00

Քայլ 1. Շղթայի միացում:

Շղթայի միացում
Շղթայի միացում

Էկրանին տեքստ ցուցադրելու համար, որը մտադիր եք միացնել OLED- ին I2C կամ SPI- ի միջոցով, ես ընտրում եմ I2C- ը, քանի որ այն ինձ համար ավելի հարմար է օգտագործել, բայց եթե ցանկանում եք SPI- ի միջոցով միանալ դրան, հետևեք այս ձեռնարկին Sparkfun կայքը և վերադառնալ այստեղ, երբ ավարտեք: https://learn.sparkfun.com/tutorials/transparent-g… Եթե դուք ընտրել եք I2C- ն, քանի որ ես միացրել եմ լարերը, ինչպես նշված է հետևյալում.

Pi \/ OLED \/

3.3 վ 3.3 վ

GND GND

SDA SDA

SCL SCL

Խնդրում ենք նկատի ունենալ, որ հստակ OLED- ը կարող է աշխատել միայն 3.3 վ լարման միջոցով:

Շղթայի միացումն ավարտելուց հետո սահեցրեք տեսախցիկի մոդուլի ժապավենը մալուխի ժապավենի ամրացման մեջ `ազնվամորի pi- ի վրա` դուրս հանելով սև սեղմակը և այն հետ սահեցնելով ժապավենի մալուխի տեղում:

Քայլ 2: Մուտք գործեք Raspberry Pi

Ssh- ի միջոցով մենք կարող ենք մուտք գործել մեր pi- ն մեր համակարգչով ՝ առանց լրացուցիչ արտաքին ստեղնաշարի մկնիկ և մոնիտոր միացնելու: Առաջին բանը, որ դուք անում եք, ձեր SD քարտը ձեր համակարգչին միացնելն ադապտեր կամ ներկառուցված նավահանգիստ է, ապա ձեզ հարկավոր է անցնել այս հղումով https://www.raspberrypi.org/downloads/raspbian/ և ներբեռնել Raspbian buster- ը: աշխատասեղանի հետ: Երկրորդ, դուք պետք է OS- ն դնեք SD քարտի վրա ՝ օգտագործելով BalenaEtcher- ը, ընտրեք ձեր SD քարտը և Raspbian OS- ը և կտտացրեք «բռնկում»: Այս գործընթացը կարող է որոշ ժամանակ տևել, ուստի ավարտից հետո վերադառնաք: Երրորդը գնացեք SD քարտ ՝ ֆայլերի որոնիչում կամ որոնիչում Mac- ում և ստեղծեք wpa_supplicant անունով տեքստային ֆայլ, համոզվեք, որ ջնջեք.txt ընդլայնումը և ավելացրեք.conf, ֆայլում տեղադրեք հետևյալը.

երկիր = ԱՄՆ

ctrl_interface = DIR =/var/run/wpa_supplicant GROUP = netdev update_config = 1 ցանց = {ssid = "WIFI_SSID" scan_ssid = 1 psk = "WIFI_PASSWORD" key_mgmt = WPA-PSK}

Դուք ստիպված կլինեք մուտքագրել ձեր WiFi անունը և գաղտնաբառը համապատասխան վայրերում և երկրում, եթե ԱՄՆ -ում չեք: Հիշեք, որ Raspberry Pi- ն կարող է միանալ միայն 2.4 ԳՀց ցանցին, ինչը նշանակում է, որ ձեր համակարգիչը նույնպես պետք է միանա այդ ցանցին: Ստեղծեք դատարկ տեքստային ֆայլ ՝ առանց ssh կոչվող ընդլայնման, այնուհետև հանեք ձեր SD քարտը: Այնուհետև ձեզ հարկավոր կլինի տեղադրել PuTTY https://www.putty.org/, ինչը կօգտագործեք ssh- ը միացնելու համար: Տեղադրվելուց հետո մուտքագրեք ձեր ազնվամորու pi- ի IP հասցեն, կարող եք պարզել, թե ինչ է դա `այցելելով երթուղիչների կայք ՝ մուտք գործելով և դիտելով միացված սարքերը:

Raspberry Pi- ին մուտք գործելուց հետո այն կխնդրի ձեզ մուտք գործել, կանխադրված օգտվողի անունը «pi» է, իսկ գաղտնաբառը ՝ «ազնվամորի»: Մուտքագրեք sudo raspi-config, այնուհետև անցեք միացման տարբերակներ և միացրեք տեսախցիկը, ssh- ը և i2c- ը, այնուհետև կտտացրեք Ավարտել և մուտքագրեք sudo reboot: Այժմ դուք պատրաստ եք ներդնել ազնվամորու pi- ի մեջ, առաջ գնալ և տեղադրել Remote Desktop- ը և մուտքագրել ձեր ազնվամորի pi- ի IP հասցեն:

Քայլ 3: Կոդավորման ժամանակը:

Կոդավորման ժամանակը
Կոդավորման ժամանակը

Ես ընտրել եմ այս ծրագիրը ծածկագրել python- ում, այնպես որ համոզվեք, որ ձեր աշխատասեղանին տեղադրված են python3.7 կամ 3.8: Այս ծածկագիրը գործում է ՝ օգտագործելով սերվեր և հաճախորդ, ընդ որում ՝ ձեր համակարգիչը: Հաճախորդը կամ ազնվամորու pi- ն կնկարեն և այն կբեռնեն dropbox- ում, որը վերցված է սերվերի կողմից, որն այնուհետև գործարկում է պատկերի մշակումը և տեքստի ճանաչումը պատկերի վրա: Որպեսզի դա աշխատի, դուք պետք է ձեռք բերեք wolframalpha, dropbox և openweathermap app-id, այն ամենը, ինչ դուք պետք է անեք, այցելել գրանցման վեբ կայքեր և դա ձեզ կտրամադրի հավելվածի ID: այնուհետև դրանք մուտքագրեք համապատասխան վայրերում, որոնք որոշվում են ծածկագրի մեկնաբանություններում: Համոզվեք, որ դուք տեղադրել եք pip ամեն ինչ և տեղադրել Tesseract OCR և OpenCV: Ստեղծեք Server.py անունով Python ֆայլ ձեր համակարգչի վրա և client.py անունով ազնվամորի pi- ի վրա, այնուհետև պատճենեք և տեղադրեք կոդը: Բայց իմացեք, որ որքան համարձակ կերպարները և ավելի սպիտակ ֆոնն այնքան լավ արդյունքները, դա այդպես է տեքստի ճանաչման յուրաքանչյուր ծրագրաշարի դեպքում:

Appրագրի ID- ի գրանցման բոլոր հղումները \/

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 ներմուծում Image ներմուծում cv2 ներմուծում pytesseract pytesseract ներմուծում Ելքի ներմուծում numpy որպես np ներմուծում wolframalpha ներմուծման վարդակից ներմուծման ժամանակ

dbx = dropbox. Dropbox ("dropboxAPIkey")

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

app_id = "Հավելվածի ID"

հյուրընկալող = socket.gethostname ()

նավահանգիստ = 60567 տպագիր (հյուրընկալող) s.bind ((հյուրընկալող, նավահանգիստ)) s. լսեք (2)

իսկ ճշմարիտ:

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

իսկական True:

while 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 (image, (640, 480), interpolation = cv2. INTER_AREA) image68 = cv2.rotate (Image, cv2. ROTATE_90_COUNTERCLOCKWISE) մոխրագույն = cv2.cvtColor (պատկեր 68, cv2. COLOR_BGR2GRAY)

def remove_noise (մոխրագույն):

վերադարձ cv2.medianBlur (մոխրագույն, 5) def շեմը (մոխրագույն). վերադարձ cv2.threshold (մոխրագույն, 0, 255, cv2. THRESH_BINARY + cv2. THRESH_OTSU) [1] def ընդլայնվել (մոխրագույն). միջուկ = np.ones ((5, 5), np.uint8) վերադարձնել cv2.dilate (մոխրագույն, միջուկ, կրկնություններ = 1) d = pytesseract.image_to_data (մոխրագույն, output_type = Output. DICT)

n_boxes = len (d ['տեքստ'])

համար միջակայքում (n_ արկղեր). եթե 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 (gray) 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 (հարցում) պատասխան = հաջորդ (արդյունքներ).տեքստ պատասխան 1 = պատասխան.բաժանում ('\ n') [0] տպել (պատասխան 1) գ. ուղարկել (բայթ (պատասխան 1, "utf-8")) եթե len (տեքստ) <= 1: գ. Ուղարկել (բայթ (տեքստ 2, "utf-8")) ժամանակ: քուն (7.5) ընդմիջում

Client.py:

ներմուծել dropboximport picamera ներմուծման ժամանակը luma.core.interface.serial ներմուծման i2c- ից luma.core.render ներմուծման կտավ luma.oled.device ներմուծման ssd1306, ssd1325, ssd1331, sh1106 ներմուծման վարդակից ներմուծման ամսաթվից ժամանակից ներմուծում քուն ներմուծում pyowm սերիա = 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 = "" #pc հասցե ձեր համակարգչի նավահանգստի = 60567 s.connect ((հյուրընկալող, նավահանգիստ)) 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) date = 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) ժամ = str (cdt.hour) կտավով (սարք) որպես ոչ ոքի ՝ draw.text ((0, 0), ժամ, լրացում = «սպիտակ») draw.text ((11, 0), ":", լրացնել = "սպիտակ") draw.text ((15, 0), min1, fill = "սպիտակ") draw.text ((0, 9), "_", fill = "white") draw.text ((0, 9), date, fill = "white ") եթե min1 թվով` 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, լրացնել = «սպիտակ»), եթե min1- ը թվով չէ: draw.text ((40, 0), temp2, fill = "սպիտակ") draw.text ((32, 0), "F", fill = "սպիտակ") camera.start_preview () time.sleep (2) camera.capture ("/home/pi/Image.jpg") camera.stop_preview client = dropbox. Dropbox (dropbox_access_token) print ("[SUCCESS] dropbox հաշիվը կապված է") հաճախորդ: 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) ժամ = str (cdt.hour) կտավով (սարք) որպես ոչ ոքի. draw.text ((0, 19), full_msg, fill = "white") draw.text ((0, 0), ժամ, լրացում = "սպիտակ") draw.text ((11, 0), ":", լրացնել = "սպիտակ") draw.text ((15, 0), min1, fill = "white") draw.text ((0, 9), "_", fill = " սպիտակ ») draw.text ((0, 9), ամսաթիվ, լրացնել = «սպիտակ»), եթե min1 թվով ՝ 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, լրացնել = "սպիտակ"), եթե min1- ը թվով չէ: draw.text ((40, 0), temp3, fill = "սպիտակ") draw.text ((32, 0), "F", fill = "սպիտակ") եթե 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), "_", լրացնել = "սպիտակ") draw.text ((0, 9), ամսաթիվ, լրացնել = "սպիտակ"), եթե min1 թվով: 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, լրացնել = "սպիտակ"), եթե min1- ը թվով չէ: draw.text ((40, 0), temp3, fill = "սպիտակ") draw.text ((32, 0), "F", fill = "սպիտակ") time.sleep (5.4) full_msg1 = "" msg1 = s.recv (100) եթե 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), ժամ, լրացում = "սպիտակ") draw.text ((11, 0), ":", լրացնել = "սպիտակ") draw.text ((15, 0), min1, fill = "սպիտակ") draw.text ((0, 9), "_", լրացնել = "սպիտակ") draw.text ((0, 9), ամսաթիվ, լրացնել = "սպիտակ"), եթե min1 թվով ՝ 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, լրացնել = "սպիտակ"), եթե min1- ը թվով չէ: 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, լրացնել = «սպիտակ»), եթե min1- ը թվով չէ: draw.text ((40, 0), temp3, fill = "սպիտակ") draw.text ((32, 0), "F", fill = "սպիտակ") եթե len (msg1) <= 1: cdt = datetime.datetime.now () min1 = str (cdt.minute) hour = str (cdt.hour) with canvas (device) as draw: draw.text ((0, 0), ժամ, լրացնել = "սպիտակ") draw.text ((11, 0), ":", fill = "սպիտակ") draw.text ((15, 0), min1, fill = "white") վիճակահանություն: տեքստ ((0, 9), "_", լրացնել = "սպիտակ") draw.text ((0, 9), ամսաթիվ, լրացնել = "սպիտակ"), եթե min1 թվով: 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, լրացնել = "սպիտակ"), եթե min1- ը թվով չէ: draw.text ((40, 0), temp3, fill = "սպիտակ") draw.text ((32, 0), "F", fill = "սպիտակ") time.sleep (7) client.files_delete (dropbox_path) print («Ֆայլերը ջնջված են»)

Պ. Ս. Ես սիրողական ծրագրավորող եմ, ուստի խնդրում եմ կասկածի տակ չդնել ծրագրավորման իմ սարսափելի մեթոդները:

Քայլ 4: Ամեն ինչ միասին դնել:

Ամեն ինչ միասին դնելը
Ամեն ինչ միասին դնելը

Մնացած ամեն ինչ ավարտելուց հետո գործնականում ավարտված եք, մնում է միայն կապել ազնվամորի պի տեսախցիկը և ցուցադրել ակնոցներին: Դուք կարող եք դա անել ՝ օգտագործելով մատակարարումներում նշված երկկողմանի սոսինձը, կամ կարող եք օգտագործել ցանկացած մեթոդ, որն անհրաժեշտ եք համարում: Դուք կարող եք նաև նկատել, որ այս դասում ես ոչ մի տեղ մարտկոց չեմ նշել, որովհետև այս ակնոցների համար ապագա թարմացումներ եմ նախատեսում և չեմ ուզում այն միացնել հենց հիմա: Բայց եթե իսկապես ցանկանում եք կցել մեկը, ձեզ հարկավոր կլինի Amazon- ից li-po լիցքավորիչի միացում

Եթե ձեզ դուր եկավ սա և ցանկանում եք ավելին տեսնել, ես բացեցի YouTube ալիք և հուսով եմ, որ այնտեղ նույնպես դասընթացներ կտեղադրեմ: Ահա հղումը.

www.youtube.com/channel/UCGqcWhHXdZf231rLe…

Աստված պահապան!

Հովհաննես 3:16 «Որովհետև Աստված այնքան սիրեց աշխարհը, որ Իր միածին Որդուն տվեց, ով որ այդպես հավատում է Նրան, չի կորչի, այլ կունենա հավիտենական կյանք»:

Խորհուրդ ենք տալիս: