Мазмуну:
- 1 -кадам: Райондун зымдарын тартуу
- 2 -кадам: Raspberry Piге кирүү
- 3 -кадам: коддоо убактысы
- 4 -кадам: Бардыгын бириктирүү
Video: Акылдуу көз айнек: 4 кадам
2024 Автор: John Day | [email protected]. Акыркы өзгөртүү: 2024-01-30 10:36
Баарыңарга салам, мен бүгүн үйдө акылдуу көз айнекти кантип жасоону көрсөтөм! Акылдуу көз айнектин эң сонун нерселеринин бири - азыркы технологиялар дүйнөсүндө ушундай нерсеге ээ болуу канчалык пайдалуу жана акылдуу көз айнектин бир эле версиясы жок, анткени баары укмуштуудай өзгөчөлүктөргө жана чексиз тиркемелерге ээ. келечекте. Бул акылдуу көз айнектин өзгөчөлүктөрүнө убакытты айтуу, температураны ар 5 мүнөт сайын айтып туруу кирет, ошол 5 мүнөттүн ортосунда ал ошол күн үчүн күтүлгөн жогорку жана төмөнкү температуранын ортосунда алмашат, ал ошондой эле датаны айтат. Бирок анын негизги өзгөчөлүгү - бул ар бир 10 секундда сүрөт тартып, анан ал сүрөттү ал үчүн пайдалуу маалыматты кайтарып бере турган текст үчүн анализдейт, эгер суроо табылса, анда вольфрамды колдонуп жооп берет, же математикалык теңдемени тапса. аны чечет!
Берилиштер:
Бул долбоор үчүн керектүү жабдуулар төмөнкүлөрдү камтыйт:
1) Raspberry Pi 0 W (vilros.com сайтынан)
2) Таза 128x64 OLED дисплейи (Sparkfun.com сайтынан)
3) Raspberry Pi 0 W үчүн форматталган камера модулу (amazon.com сайтынан)
4) Каалаган стакандар
5) Зымдар
6) ширетүүчү темир
7) Коргошунсуз акысыз (анткени сиз коргошундан өлгүңүз келбейт)
8) 2 тараптуу клей
9) SD карта 8gb мин
10) компьютер жана интернет байланышы
Сизде компьютер жана интернет байланышы бар деп ойлосок, бул көз айнектин баасы болжол менен $ 130.00гө жетет
1 -кадам: Райондун зымдарын тартуу
Текстти экранда көрсөтүү үчүн I2C же SPI аркылуу OLEDге туташкыңыз келет, мен I2Cди тандап алам, анткени бул мен үчүн ыңгайлуураак, бирок эгер сиз ага SPI аркылуу туташкыңыз келсе, анда бул окуу куралын аткарыңыз Sparkfun веб -сайты жана бүткөндөн кийин бул жерге кайтып келиңиз. https://learn.sparkfun.com/tutorials/transparent-g… Эгерде сиз I2Cди тандап алган болсоңуз, анда мен зымдарды төмөндөгүдөй көрсөтөм:
Pi \/ OLED \/
3.3v 3.3v
GND GND
SDA SDA
SCL SCL
Сураныч, так OLED 3.3v менен гана иштей алат.
Районду туташтырып бүткөндөн кийин, камера модулунун лента кабелин кара кыскычты сууруп алып, лента кабелинин кармагычына лента кабели орногондон кийин кайра жылдырыңыз.
2 -кадам: Raspberry Piге кирүү
Sshти колдонуу менен биз кошумча тышкы клавиатура чычканына жана мониторуна туташпай туруп, компьютерибиз менен piге кире алабыз. Сиз жасай турган биринчи нерсе - SD картаңызды адаптер же орнотулган порт менен компьютериңизге туташтыруу, андан кийин бул шилтемеге өтүшүңүз керек болот https://www.raspberrypi.org/downloads/raspbian/ жана Raspbian busterди жүктөп алыңыз рабочий стол менен. Экинчиден, BalenaEtcherдин жардамы менен ОСти SD картка салып, SD картаны жана Raspbian OSти тандап, "жаркылдатуу" баскычын чыкылдатыңыз, бул процесс бир аз убакытты алышы мүмкүн, андыктан бүткөндөн кийин кайра келиңиз. Үчүнчүсү, Macтын файл изилдөөчүсү же тапкычындагы SD картага өтүңүз жана 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.4Ghz тармагына гана туташа алат, демек сиздин компьютериңиз дагы ошол тармакка туташууга аргасыз болот. Ssh деп аталган эч кандай кеңейтүүсү жок бош текст файлын түзүп, анан SD картты чыгарыңыз. Сиз PuTTY https://www.putty.org/ орнотушуңуз керек, бул сиз sshти иштетүү үчүн колдонулат. Орнотулган соң, малина пиңиздин IP дарегин киргизиңиз, бул эмне экенин маршрутизаторлоруңуздун вебсайтына кирип, туташкан түзмөктөрдү карап чыгуу аркылуу түшүнө аласыз.
Raspberry Pi'ге кирүү мүмкүнчүлүгүнө ээ болгондон кийин, ал сизден кирүүнү суранат, демейки колдонуучу аты "pi" жана сырсөз "малина". Sudo raspi-config териңиз, андан кийин интерфейс параметрлерине өтүңүз жана камераны, ssh жана i2cти иштетиңиз, андан кийин аяктоону чыкылдатыңыз жана sudo reboot териңиз. Эми сиз малина пи -ге кирүүгө даярсыз, улантыңыз жана Remote Desktopту орнотуп, малина пиңиздин IP дарегин киргизиңиз, эми малина пи -ге ssh киргизгениңиз жакшы.
3 -кадам: коддоо убактысы
Мен бул программаны pythonдо коддоону чечтим, андыктан столго python3.7 же 3.8 орнотулганын текшериңиз. Бул код сервер менен кардарды колдонуу менен иштейт, бул сиздин компьютериңиз. Клиент же малина пи сүрөткө тартып, аны түшүрүү кутусуна жүктөйт, ал сервер тарабынан алынат, андан кийин сүрөттү иштетүүнү жана текстти таанууну иштетет. Мунун иштеши үчүн сизге wolframalpha, dropbox жана openweathermap тиркемеси керек болот, болгону веб-сайттарга катталууңуз керек, ал сизге колдонмонун идентификаторун берет. анан аларды коддогу комментарийлер менен аныкталган тиешелүү жерлерге киргизиңиз. Пиптин бардыгын орнотуп, Tesseract OCR жана OpenCV орнотконуңузду текшериңиз. Компьютериңизде Server.py аттуу питон файлын жана малина piде client.py аттуу файлды түзүп, андан кийин кодду көчүрүп чаптаңыз. Бирок билиңиз, каармандар канчалык тайманбас жана фону ак болсо, натыйжалар ошончолук жакшы болот, бул ар бир текстти таануу программасында.
Колдонмонун идентификаторуна катталуу үчүн бардык шилтемелер \/
www.wolframalpha.com/
openweathermap.org/api
www.dropbox.com/developers/documentation
Tesseract OCR жана OpenCV орнотконуңузду текшериңиз \/
github.com/UB-Mannheim/tesseract/wiki
opencv.org/
Server.py:
PIL импорттоо пилот импорттоо cv2 импорт pytesseract pytesseract импорттоо Чыгуу импорт wpramalpha импорт сокет импорт убактысы катары
dbx = dropbox. Dropbox ("dropboxAPIkey")
s = socket.socket (socket. AF_INET, socket. SOCK_STREAM)
app_id = "App-ID"
хост = socket.gethostname ()
порт = 60567 басып чыгаруу (хост) s.bind ((хост, порт)) s. угуу (2)
чын болсо:
c, addr = s.accept () print (f'Байланыш бар: {addr} ') тыныгуу
чын болсо:
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") Сүрөт = cv2.resize (сүрөт, (640, 480), интерполяция = cv2. INTER_AREA) image68 = cv2.rotate (Сүрөт, cv2. ROTATE_90_COUNTERCLOCKWISE) боз = cv2.cvtColor (image68, cv2. COLOR_BGR2GRAY)
def remove_noise (боз):
кайтаруу cv2.medianBlur (боз, 5) def босогосу (боз): кайтаруу cv2. босого (боз, 0, 255, cv2. THRESH_BINARY + cv2. THRESH_OTSU) [1] def dilate (боз): ядро = np.ones ((5, 5), np.uint8) cv2.dilate кайтаруу (боз, ядро, кайталоолор = 1) d = pytesseract.image_to_data (боз, output_type = Output. DICT)
n_boxes = len (d ['текст'])
i үчүн диапазондо (n_boxes): if 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 (grey) print (text) while True: text2 = " "if len (text)> = 2: c.send (байт (текст," utf-8 ")) if len (text) = 2: query = text client = wolframalpha. Client (app_id) res = client.query (суроо) жооп = кийинки (res.results).тексттик жооп1 = answer.partition ('\ n') [0] print (answer1) c.send (байт (answer1, "utf-8")) if len (text) <= 1: c.send (байт (text2, "utf-8")) time.sleep (7.5) тыныгуу
Client.py:
luma.core.device luma.core.device импорттук кенепти luma.oled.device импорттоо svd1306, ssd1325, ssd1331, s1d1331, sh1106 импорт сокет импорттук убактысынан импорттук уйку импорту pyowm serial = i2c (luma.core.interface.serial импорт port = 1, address = 0x3C) device = ssd1306 (serial, rotate = 1) camera = picamera. PiCamera () dropbox_access_token = "" #Сиздин dropbox-id кайра 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 портуңуздун #ip дареги = 60567 s.connect ((хост, порт)) msg1 = "" owm = pyowm. OWM ("")#app-id openweathermap үчүн num = ["05", "10", "15", "20", "25", "30", "35", "40", "45", "50", "55", "00"] cdt = datetime.datetime.now () min1 = str (cdt.minute) дата = str (cdt.day) + "/" + str (cdt. ай) + "/" + str (cdt.year) obs = owm.weather_at_place ("")#шаарыңыз жана өлкөңүз сап форматында аба ырайы = obs.get_weather () temp2 = str (weather.get_temperature ("fahrenheit")] "те mp_max "]) temp3 = str (weather.get_temperature (" fahrenheit ") [" temp_min "]) True, ал эми cdt = datetime.datetime.now () min1 = str (cdt.minute) саат = str (cdt.hour) кенеп менен (түзмөк) тартуу катары: draw.text ((0, 0), саат, толтуруу = "ак") draw.text ((11, 0), ":", fill = "ак") draw.text ((15, 0), мин1, толтуруу = "ак") 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 = "ак") draw.text ((40, 0), temp, толтуруу = "ак") эгерде min1 санда болбосо: draw.text ((40, 0), temp2, fill = "ак") draw.text ((32, 0), "F", толтуруу = "ак") camera.start_preview () time.sleep (2) camera.capture ("/home/pi/Image.jpg") camera.stop_preview client = dropbox. Dropbox (dropbox_access_token) print ("[SUCCESS] dropbox account linked") client. 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) кенеп менен (түзмөк) тартуу катары: draw.text ((0, 19), full_msg, 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 = "ак") draw.text ((40, 0), temp, толтуруу = "ак") эгерде min1 санда болбосо: draw.text ((40, 0), temp3, fill = "ак") draw.text ((32, 0), "F", fill = "ак") if len (msg) <= 1: cdt = datetime.datetime.now () min1 = str (cdt.minute) hour = str (cdt.hour) canvas (device) with draw: draw.text ((0, 0)), саат, толтуруу = "ак") draw.text ((11, 0), ":", fill = "ак") draw.text ((15, 0), min1, fill = "ак") тартуу. текст ((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 = "ак") 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) 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) холст менен (түзмөк) тартуу: draw.text ((0, 19), full_msg, fill = "ак") draw.text ((0, 29), full_msg2, fill = "ак") draw.text ((0, 0), саат, толтуруу = "ак") draw.text ((11, 0), ":", толтуруу = "ак") draw.text ((15, 0), min1, fill = "ак") draw.text ((0, 9), "_", толтуруу = "ак") draw.text ((0, 9), дата, толтуруу = "ак"), эгерде min1 in num: obs = owm.weather_at_place ("")#шаарыңыз менен өлкөңүз дагы сап форматында
аба ырайы = obs.get_weather ()
temp = str (weather.get_temperature ("fahrenheit") ["temp"]) draw.text ((32, 0), "F", fill = "ак") 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 = "ак") draw.text ((40, 0), temp, толтуруу = "ак") эгерде min1 санда болбосо: draw.text ((40, 0), temp3, fill = "ак") draw.text ((32, 0), "F", fill = "ак") if len (msg1) <= 1: cdt = datetime.datetime.now () min1 = str (cdt.minute) hour = str (cdt.hour) canvas (device) with draw: draw.text ((0, 0)), саат, толтуруу = "ак") draw.text ((11, 0), ":", fill = "ак") draw.text ((15, 0), min1, fill = "ак") тартуу. текст ((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 = "ак") 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) басып чыгаруу ("Файлдар жок кылынды")
P. S. Мен үйрөнчүк программистмин, андыктан сураныч, менин коркунучтуу программалоо ыкмаларыма шек келтирбеңиз.
4 -кадам: Бардыгын бириктирүү
Калганын бүтүргөндөн кийин, иш жүзүндө бүткөндөн кийин, малина пи камерасын жана дисплейди стакандарга жабыштыруу гана калды. Сиз муну жабдууларда айтылган эки тараптуу желимди колдонуу менен же керектүү деп эсептеген ар кандай ыкмаларды колдонуп жасай аласыз. Сиз бул сабакта эч качан батарейка жөнүндө айтпаганымды байкагандырсыз, анткени мен келечекте бул көз айнекти жаңыртууну пландап жатам жана азыр аны кошууну каалаган жокмун. Бирок, эгерде сиз тиркөөнү кааласаңыз, анда Amazon үчүн li-po заряддагыч схемасы керек болот
Эгер сизге бул жакты жана дагы көргүңүз келсе, мен YouTube каналын ачтым жана ал жерде үйрөткүчтөрдү жайгаштырам деп үмүттөнөм. Бул жерде шилтеме:
www.youtube.com/channel/UCGqcWhHXdZf231rLe…
Кудай сактасын!
ЖАКАН жазган Жакшы Кабар 3:16 "Кудай дүйнөнү ушунчалык сүйгөндүктөн, Өзүнүн жалгыз Уулун берди, Ага эч качан ишенген адам өлбөйт, бирок түбөлүк өмүргө ээ болот."
Сунушталууда:
Акылдуу көз айнек (10 доллардан төмөн !!!): 8 кадам (Сүрөттөр менен)
Акылдуу көз айнек (10 доллардан төмөн !!!): Саламатсызбы! Биз баарыбыз Smart Glasses менен таанышбыз, E.D.I.T.H. сүйүктүү каарманыбыз Тони Старк тарабынан жасалган, кийинчерээк Питер Паркерге өткөн. Бүгүн мен 10 долларга жетпеген ушундай акылдуу айнек курайын деп жатам! Алар такыр
Көз айнек менен роботтук келишим: 5 кадам
Көз айнек менен роботтук ДЕАЛ: Бул проект сизге роботтор менен келишим түзүүнү көрсөтөт. Бул долбоорго 3D работасы орнотулган, ал арзан робот стойкасы жана тиштүү бөлүктөрү менен айкалышса, сызыктуу кыймылдаткычты түзөт. Бул жерден тоону жүктөп алуу менен баштаңыз: https: //www.th
Акылдуу көз айнек: 6 кадам
Акылдуу көз айнек: Салам баарына !! Бүгүн мен сиздер менен көптөн бери эңсеп жүргөн нерсем менен бөлүшөм
Google картон үчүн түнкү көз айнек: 10 кадам (сүрөттөр менен)
Google Cardboard үчүн Night Vision Goggles: Disclaimer: Бул түзмөктү колдонуу көңүл ачуу, билим берүү жана илимий колдонуу үчүн гана арналган; тыңчылык жана/же байкоо үчүн эмес. &Quot; шпиондук гаджет " өзгөчөлүктөр колдонмого көңүл ачуу үчүн гана кошулган жана эч кандай практикалык максатка кызмат кылбайт
D4E1 - Ийкемдүү инженерия: Тилекке каршы көз айнек 2.4: 4 кадам
D4E1 - ийкемдүү инженерия: ийилүүгө каршы көз айнек 2.4: Саламатсызбы! Кыскача киришүүдөн баштайын. Биз студенттердин индустриалдык продуктылар дизайны Howest, Kortrijk, Бельгия. Биздин CAD-курс үчүн, биз аны массалык өндүрүшкө киргизүү же чакан серияларды сактоо үчүн жардамчы куралды кайра иштеп чыгуу тапшырмасын алдык