Mundarija:

Aqlli ko'zoynak: 4 qadam
Aqlli ko'zoynak: 4 qadam

Video: Aqlli ko'zoynak: 4 qadam

Video: Aqlli ko'zoynak: 4 qadam
Video: KO'Z QAMASHISHIGA QARSHI AQLLI KO'ZOYNAK AKSIYA! 30% CHEGIRMA 2024, Iyul
Anonim
Aqlli ko'zoynaklar
Aqlli ko'zoynaklar
Aqlli ko'zoynaklar
Aqlli ko'zoynaklar

Hammaga salom, bugun men sizga uyda aqlli ko'zoynak yasashni ko'rsataman. Aqlli ko'zoynakning eng buyuk jihatlaridan biri shundaki, zamonaviy texnologiya dunyosida bunday narsaga ega bo'lish qanchalik foydali va aqlli ko'zoynakning bitta versiyasi yo'q, chunki hamma ajoyib xususiyatlarga va cheksiz ko'p ilovalarga ega. kelajakda. Bu aqlli ko'zoynakning xususiyatlariga vaqtni aytib berish, har 5 daqiqada haroratni aytib turish, shu 5 daqiqada o'sha kun uchun kutilgan yuqori va past haroratni almashtirish, shuningdek sanani aytib berish kiradi. Ammo uning asosiy xususiyati shundaki, u har 10 soniyada rasm oladi va keyin bu rasmni u uchun foydali ma'lumotlarni qaytaradigan matnni tahlil qiladi, agar u savol topsa volfram yordamida javob beradi yoki matematik tenglamani topadi. buni hal qiladi!

Ta'minot:

Loyiha uchun zarur bo'lgan materiallar quyidagilarni o'z ichiga oladi.

1) Raspberry Pi 0 Vt (vilros.com saytidan)

2) aniq 128x64 OLED displey (Sparkfun.com saytidan)

3) Raspberry Pi 0 W uchun formatlangan kamera moduli (amazon.com saytidan)

4) Siz tanlagan har qanday ko'zoynak

5) simlar

6) lehimlantiruvchi temir

7) Qo'rg'oshinsiz lehim (chunki siz qo'rg'oshindan o'lishni xohlamaysiz)

8) 2 tomonlama yopishtiruvchi

9) 8 gigabaytli SD -karta

10) kompyuter va Internetga ulanish

Agar sizda kompyuter va internet aloqasi mavjud bo'lsa, bu ko'zoynak narxi 130,00 dollarni tashkil qiladi

1 -qadam: O'chirish simini ulash

O'chirish kabeli!
O'chirish kabeli!

OLED -ga I2C yoki SPI orqali ulanishni xohlagan matnni ekranda ko'rsatish uchun men I2C -ni tanlayman, bu men uchun qulayroq, lekin agar siz unga SPI orqali ulanishni xohlasangiz, ushbu qo'llanmani bajaring. Sparkfun veb -saytiga kiring va ishingiz tugagach, bu erga qaytib keling. https://learn.sparkfun.com/tutorials/transparent-g… Agar siz I2C ni tanlagan bo'lsangiz, men simlarni quyida ko'rsatilgan tarzda lehimlaganman:

Pi \/ OLED \/

3.3v 3.3v

GND GND

SDA SDA

SCL SCL

Shuni esda tutingki, aniq OLED faqat 3.3v quvvatga ega.

Zanjirni ulashni tugatgandan so'ng, kamera qisqichining modulining lenta simini qora qisqichni tortib, lenta simi joyiga o'rnatilgandan so'ng, orqaga surib, malina pi ustidagi lenta simi ushlagichiga suring.

2 -qadam: Raspberry Pi -ga kirish

Ssh yordamida biz tashqi kompyuter klaviatura sichqonchasi va monitorni ulamasdan shaxsiy kompyuterimizga kira olamiz. Siz qiladigan birinchi narsa - SD -kartani kompyuterga adapter yoki o'rnatilgan port bilan ulash, keyin siz bu havolaga o'tishingiz kerak: https://www.raspberrypi.org/downloads/raspbian/ va Raspbian buster -ni yuklab oling. ish stoli bilan. Ikkinchidan, BalenaEtcher yordamida SD -kartani va SD -kartani Raspbian -ni tanlang va "flesh" -ni bosing, bu jarayon biroz vaqt talab qilishi mumkin. Uchinchidan, fayllarni qidiruvchi yoki Mac -dagi qidiruvchi SD -kartaga o'ting va wpa_supplicant nomli matnli fayl yarating.txt kengaytmasini o'chirib tashlang va.conf faylini qo'shing, faylga quyidagilarni joylashtiring:

mamlakat = AQSh

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

Agar siz AQShda bo'lmasangiz, Wi -Fi tarmog'ining nomi va parolini tegishli joylarda va mamlakatda kiritishingiz kerak bo'ladi. Shuni yodda tutingki, Raspberry Pi faqat 2.4 Gigagertsli tarmoqqa ulanishi mumkin, demak sizning kompyuteringiz ham ushbu tarmoqqa ulanishi kerak bo'ladi. Ssh deb nomlanmagan bo'sh matnli faylni yarating va SD -kartani chiqarib oling. Keyin PuTTY -ni o'rnatishingiz kerak bo'ladi https://www.putty.org/ bu ssh -ni yoqish uchun ishlatiladi. O'rnatilganidan so'ng, malinali pi -ning IP -manzilini kiriting, siz yo'riqnoma veb -saytiga kirib, ulangan qurilmalarga qarab, bu nima ekanligini aniqlay olasiz.

Raspberry Pi-ga kirganingizdan so'ng, u tizimga kirishingizni so'raydi, standart foydalanuvchi nomi "pi" va parol "malina" dir. Sudo raspi-config yozing, keyin interfeys parametrlariga o'ting va kamera, ssh va i2c-ni yoqing, so'ng tugatish-ni bosing va sudo reboot-ni kiriting. Endi siz malina pi -ga ssh qo'yishga tayyormiz, masofaviy ish stolini o'rnating va malina pi -ning IP -manzilini kiriting va endi malina pi -ga ssh kirgizasiz.

3 -qadam: Kodlash vaqti

Kodlash vaqti!
Kodlash vaqti!

Men ushbu dasturni pythonda kodlashni tanladim, shuning uchun ish stolida python3.7 yoki 3.8 o'rnatilganligiga ishonch hosil qiling. Bu kod server va mijoz yordamida ishlaydi, bu sizning shaxsiy kompyuteringiz. Mijoz yoki malina pi rasm oladi va uni tomchi qutiga yuklaydi, uni server oladi, keyin tasvirni qayta ishlash va rasmda matnni tanib olish bilan shug'ullanadi. Buning uchun sizga wolframalpha, dropbox va openweathermap ilova identifikatori kerak bo'ladi, buning uchun veb-saytlarga ro'yxatdan o'tish kifoya qiladi va u sizga dastur identifikatorini beradi. va keyin ularni koddagi izohlar bilan belgilangan tegishli joylarga kiriting. Pip hamma narsani o'rnatganingizga va Tesseract OCR va OpenCV -ni o'rnatganingizga ishonch hosil qiling. Kompyuteringizda Server.py nomli python faylini va malina pi da client.py nomli faylni yarating, so'ngra kodni nusxa ko'chiring va joylashtiring. Bilingki, belgi qanchalik jasur va fon oq bo'lsa, natija shunchalik yaxshi bo'ladi, bu har bir matnni tanib olish dasturida.

Ilova identifikatoriga ro'yxatdan o'tish uchun barcha havolalar \/

www.wolframalpha.com/

openweathermap.org/api

www.dropbox.com/developers/documentation

Tesseract OCR va OpenCV ni o'rnatganingizga ishonch hosil qiling \/

github.com/UB-Mannheim/tesseract/wiki

opencv.org/

Server.py:

PIL import import qutisi PIL import Image cv2 import pytesseract pytesseract import Chiqish raqami np import wolframalpha import uyasi import vaqti

dbx = dropbox. Dropbox ("dropboxAPIkey")

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

app_id = "Ilova identifikatori"

xost = socket.gethostname ()

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

rost bo'lsa:

c, addr = s.accept () print (f'Bundan ulanish: {addr} ') tanaffus

rost bo'lsa:

while True: time.sleep (13.7) metadata, f = dbx.files_download ("/dropbox_API/Image.jpg") out = open ("Image.jpg", 'wb') out.write (f.content) out. close () print ("Rasm yuklandi!") image = cv2.imread ("Image.jpg") Tasvir = cv2.resize (rasm, (640, 480), interpolatsiya = cv2. INTER_AREA) image68 = cv2.rotate (Rasm), cv2. ROTATE_90_COUNTERCLOCKWISE) kulrang = cv2.cvtColor (image68, cv2. COLOR_BGR2GRAY)

def remove_noise (kulrang):

qaytish cv2.medianBlur (kulrang, 5) def chegarasi (kulrang): qaytish cv2.tosh (kulrang, 0, 255, cv2. THRESH_BINARY + cv2. THRESH_OTSU) [1] def dilate (kulrang): yadro = np.ones ((5, 5), np.uint8) cv2.dilate (kulrang, yadro, takrorlash = 1) d = pytesseract.image_to_data (kulrang, output_type = Chiqish. DICT)

n_boxes = len (d ['matn'])

i uchun (n_boxlar): agar int (d ['conf'] )> 60: (x, y, w, h) = (d ['chap'] , d ['tepa'] , d ['kenglik'] , d ['balandlik'] ) kulrang = cv2. to'rtburchak (kulrang, (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 (kulrang) chop etish (matn), 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 (so'rov) javob = keyingi (res.results).text javob1 = javob.bo'lim ('\ n') [0] chop etish (javob1) c. yuborish (bayt (javob1, "utf-8")) agar len (matn) <= 1: c.yuborish (bayt (matn2, "utf-8")) vaqt. Uyqu (7.5) tanaffus

Client.py:

luma.core.device luma.core.device -dan tuvalni import qilish ssd1306, ssd1325, ssd1331, sh1106 -dan import tualetini luma.core.interface.serial -dan luma.core.interface.serial -dan import qilish port = 1, manzil = 0x3C) qurilma = ssd1306 (ketma-ket, aylantirish = 1) kamera = picamera. PiCamera () dropbox_access_token = "" #Dropbox-idingiz yana computer_path = r "/home/pi/Image.jpg" dropbox_path = f "/dropbox_API/Image.jpg" s = socket.socket (socket. AF_INET, socket. SOCK_STREAM) host = "" kompyuter portining #ip manzili = 60567 s.connect ((host, port)) msg1 = "" owm = pyowm. OWM ("") openweathermap uchun#app-id = ["05", "10", "15", "20", "25", "30", "35", "40", "45", "50", "55", "00"] cdt = datetime.datetime.now () min1 = str (cdt.minute) sana = str (cdt.day) + "/" + str (cdt. oy) + "/" + str (cdt.year) obs = owm.weather_at_place ("")#sizning shahar va mamlakatingiz havo formatida = obs.get_weather () temp2 = str (ob -havo.get_temperaturasi ("fahrenheit")] "te mp_max "]) temp3 = str (weather.get_temperature (" fahrenheit ") [" temp_min "]) rost bo'lsa: cdt = datetime.datetime.now () min1 = str (cdt.minute) soat = str (cdt.soat) tuval bilan (qurilma) chizish sifatida: draw.text ((0, 0), soat, fill = "oq") draw.text ((11, 0), ":", fill = "oq") draw.text ((15, 0), min1, to'ldirish = "oq") draw.text ((0, 9), "_", to'ldirish = "oq") draw.text ((0, 9), sana, to'ldirish = "oq ") agar min1 sonda bo'lsa: obs = owm.weather_at_place (" ")#sizning shahar va mamlakatingiz yana bir qator formatida

ob -havo = obs.get_weather ()

temp = str (weather.get_temperature ("farenheit") ["temp"]) draw.text ((32, 0), "F", fill = "oq") draw.text ((40, 0), temp, to'ldirish = "oq") agar min1 raqamda bo'lmasa: draw.text ((40, 0), temp2, fill = "oq") draw.text ((32, 0), "F", to'ldirish = "oq") camera.start_preview () time.sleep (2) camera.capture ("/home/pi/Image.jpg") camera.stop_preview client = dropbox. Dropbox (dropbox_access_token) chop etish ("[SUCCESS] dropbox hisobi bog'langan") mijozi. files_upload (ochiq (computer_path, "rb"). read (), dropbox_path) chop etish ("[UPLOADED] {}". format (computer_path)) full_msg = "" time.sleep (5) msg = s.recv (100) if len (msg)> = 2: full_msg += msg.decode ("utf-8") chop etish (full_msg) cdt = datetime.datetime.now () min1 = str (cdt.minute) soat = str (cdt.soat)) tuval (qurilma) bilan chizilgan: draw.text ((0, 19), full_msg, fill = "oq") draw.text ((0, 0), soat, to'ldirish = "oq") draw.text ((11, 0), ":", to'ldirish = "oq") draw.text ((15, 0), min1, to'ldirish = "oq") draw.text ((0, 9), "_", to'ldirish = " oq ") draw.text ((0, 9), sana, to'ldirish = "oq") agar min1 sonda bo'lsa: obs = owm.weather_at_place ("")#sizning shahringiz va mamlakatingiz yana satr formatida

ob -havo = obs.get_weather ()

temp = str (weather.get_temperature ("farenheit") ["temp"]) draw.text ((32, 0), "F", fill = "oq") draw.text ((40, 0), temp, to'ldirish = "oq") agar min1 raqamda bo'lmasa: draw.text ((40, 0), temp3, fill = "oq") draw.text ((32, 0), "F", to'ldirish = "oq") if len (msg) <= 1: cdt = datetime.datetime.now () min1 = str (cdt.minute) hour = str (cdt.hour) canvas (device) with draw: draw.text ((0, 0)), soat, to'ldirish = "oq") draw.text ((11, 0), ":", to'ldirish = "oq") draw.text ((15, 0), min1, to'ldirish = "oq") chizish. matn ((0, 9), "_", to'ldirish = "oq") draw.text ((0, 9), sana, to'ldirish = "oq") agar min1 sonda bo'lsa: obs = owm.weather_at_place ("") #sizning shahar va mamlakatingiz yana string formatida

ob -havo = obs.get_weather ()

temp = str (weather.get_temperature ("farenheit") ["temp"]) draw.text ((32, 0), "F", fill = "oq") draw.text ((40, 0), temp, to'ldirish = "oq") agar min1 raqamda bo'lmasa: draw.text ((40, 0), temp3, fill = "oq") draw.text ((32, 0), "F", to'ldirish = "oq") 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) tuval (qurilma) bilan chizilgan: draw.text ((0, 19), full_msg, fill = "oq") draw.text ((0, 29), full_msg2, fill = "oq") draw.text ((0, 0), soat, to'ldirish = "oq") draw.text ((11, 0), ":", to'ldirish = "oq") draw.text ((15, 0), min1, to'ldirish = "oq") draw.text ((0, 9), "_", to'ldirish) = "oq") draw.text ((0, 9), sana, to'ldirish = "oq"), agar min1 sonda bo'lsa: obs = owm.weather_at_place ("")#sizning shahringiz va mamlakatingiz yana string formatida

ob -havo = obs.get_weather ()

temp = str (weather.get_temperature ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", fill = "oq") draw.text ((40, 0), temp, to'ldirish = "oq") agar min1 raqamda bo'lmasa: obs = owm.weather_at_place ("")#sizning shahar va mamlakatingizni yana string formatida

ob -havo = obs.get_weather ()

temp = str (weather.get_temperature ("farenheit") ["temp"]) draw.text ((32, 0), "F", fill = "oq") draw.text ((40, 0), temp, to'ldirish = "oq") agar min1 raqamda bo'lmasa: draw.text ((40, 0), temp3, fill = "oq") draw.text ((32, 0), "F", to'ldirish = "oq") if len (msg1) <= 1: cdt = datetime.datetime.now () min1 = str (cdt.minute) hour = str (cdt.hour) tuval (qurilma) bilan chizilgan: draw.text ((0, 0)), soat, to'ldirish = "oq") draw.text ((11, 0), ":", to'ldirish = "oq") draw.text ((15, 0), min1, to'ldirish = "oq") chizish. matn ((0, 9), "_", to'ldirish = "oq") draw.text ((0, 9), sana, to'ldirish = "oq") agar min1 sonda bo'lsa: obs = owm.weather_at_place ("") #sizning shahar va mamlakatingiz yana string formatida

ob -havo = obs.get_weather ()

temp = str (weather.get_temperature ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", fill = "oq") draw.text ((40, 0), temp, to'ldirish = "oq") agar min1 raqamda bo'lmasa: draw.text ((40, 0), temp3, fill = "oq") draw.text ((32, 0), "F", to'ldirish = "oq") time.sleep (7) client.files_delete (dropbox_path) chop etish ("Fayllar o'chirilgan")

P. S. Men havaskor dasturchiman, shuning uchun mening dahshatli dasturlash usullarimga shubha qilmang.

4 -qadam: Hammasini bir joyga to'plang

Hammasini bir joyga to'plash!
Hammasini bir joyga to'plash!

Qolgan hamma narsani tugatganingizdan so'ng, siz deyarli malina pi kamerasini va ko'zoynakni ekranga qo'yishingiz kerak. Siz buni materiallarda ko'rsatilgan ikki tomonlama yopishtiruvchi yoki kerakli deb hisoblagan har qanday usuldan foydalanishingiz mumkin. Siz bu darsda hech qachon batareyani eslatmaganimni payqagan bo'lishingiz mumkin, chunki men kelajakda bu ko'zoynaklar uchun yangilanishlarni rejalashtirganman va hozir uni qo'shishni xohlamaganman. Ammo, agar siz uni ulashni xohlasangiz, sizga Amazon-dan li-po zaryadlovchi zanjiri kerak bo'ladi

Agar sizga bu yoqqan bo'lsa va ko'proq ko'rishni xohlasangiz, men YouTube kanalini ochdim va umid qilamanki, u erda ham darsliklar joylashtiraman. Mana havola:

www.youtube.com/channel/UCGqcWhHXdZf231rLe…

Xudo saqlasin!

Yuhanno 3:16 "Xudo dunyoni shunchalik sevdiki, U O'zining yagona O'g'lini berdi, shuning uchun Unga ishongan odam o'lmaydi, balki abadiy hayotga ega bo'ladi."

Tavsiya: