Мазмұны:
- 1 -қадам: Электр тізбегін қосу
- 2 -қадам: Raspberry Pi -ге кіру
- 3 -қадам: кодтау уақыты
- 4 -қадам: Барлығын біріктіру
Бейне: Ақылды көзілдірік: 4 қадам
2024 Автор: John Day | [email protected]. Соңғы өзгертілген: 2024-01-30 10:22
Барлығына сәлем бүгін мен сізге үйде ақылды көзілдірік жасауды көрсетемін! Ақылды көзілдіріктің ең үлкен нәрселерінің бірі - қазіргі технологиялар әлемінде осындай нәрсенің болуы қаншалықты пайдалы және ақылды көзілдіріктің бір ғана нұсқасы жоқ, өйткені олардың барлығында таңғажайып мүмкіндіктер мен шексіз қосымшалар бар. болашақта. Бұл смарт көзілдіріктің ерекшеліктеріне уақытты айту, температураны әр 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) екі жақты желім
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 вольтты қабылдай алады.
Схеманы қосуды аяқтағаннан кейін, камера модулінің таспа кабелін қара қысқыштан шығарып алып, таспалы кабель орнатылғаннан кейін оны артқа қарай сырғыту арқылы таңқурай пиіндегі таспалы кабель ұстағышына сырғытыңыз.
2 -қадам: Raspberry Pi -ге кіру
Ssh көмегімен біз сыртқы компьютерлік тышқан мен мониторды қоспай -ақ компьютерге кіре аламыз. Сіз жасай алатын бірінші нәрсе - SD картасын компьютерге адаптермен немесе кіріктірілген портпен қосу, содан кейін мына сілтемеге өтіңіз: https://www.raspberrypi.org/downloads/raspbian/ және Raspbian buster жүктеу. жұмыс үстелімен. Екіншіден, BalenaEtcher көмегімен SD картасына ОЖ қосу керек, SD картасын және Raspbian операциялық жүйені таңдап, «жарқ ету» түймесін басыңыз, бұл процесс біраз уақыт алуы мүмкін, сондықтан аяқтағаннан кейін қайта оралыңыз. Үшіншіден, Mac Explorer файл зерттеушісіндегі немесе іздегішіндегі 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}
Егер сіз АҚШ -та болмасаңыз, Wi -Fi атыңыз бен пароліңізді тиісті орындар мен елдерде енгізуіңіз керек. Есіңізде болсын, Raspberry Pi тек 2.4 ГГц желіге қосыла алады, яғни сіздің компьютеріңіз де осы желіге қосылуға мәжбүр болады. Ssh деп аталатын кеңейтімі жоқ бос мәтіндік файлды жасаңыз, содан кейін SD картасын шығарыңыз. Содан кейін сізге PuTTY https://www.putty.org/ орнату қажет болады, ол ssh қосу үшін қолданылады. Орнатылғаннан кейін сіздің таңқурай пи IP мекенжайын енгізіңіз, сіз маршрутизатордың веб -сайтына кіріп, қосылған құрылғыларды қарап, оның не екенін біле аласыз.
Сіз Raspberry Pi-ге қол жеткізгеннен кейін ол кіруді сұрайды, әдепкі пайдаланушы аты-«pi» және құпия сөз-«таңқурай». Sudo raspi-config теріңіз, содан кейін интерфейс опцияларына өтіп, камераны, ssh және i2c қосыңыз, содан кейін аяқтау түймесін басып, sudo reboot теріңіз. Енді сіз таңқурай пи -ге кіруге дайынсыз, қашықтағы жұмыс үстелін орнатыңыз және таңқурай пи -дің IP -мекен -жайын енгізіңіз, енді сіз таңқурай пи -ге ssh енгізуге дайынсыз.
3 -қадам: кодтау уақыты
Мен бұл бағдарламаны python -да кодтауды таңдадым, сондықтан жұмыс үстелінде python3.7 немесе 3.8 орнатылғанына көз жеткізіңіз. Бұл код сервер мен клиенттің көмегімен жұмыс істейді, бұл сіздің компьютеріңіз. Клиент немесе таңқурай пи суретке түсіреді және оны dropbox -қа жүктейді, оны сервер алады, содан кейін кескінді өңдеуді және мәтінді тануды іске қосады. Бұл жұмыс істеу үшін сізге wolframalpha, dropbox және openweathermap қосымшасының идентификаторы қажет болады, тек веб-сайттарға тіркелу арқылы кіру жеткілікті, ол сізге қолданба идентификаторын береді. содан кейін оларды кодтағы түсініктемелермен анықталған сәйкес орындарға енгізіңіз. Барлығын pip орнатып, Tesseract OCR мен OpenCV орнатқаныңызға көз жеткізіңіз. Компьютерде Server.py деп аталатын python файлын және таңқурай 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 импортынан импорт wpframalpha импорттық розеткаға импорттау
dbx = dropbox. Dropbox («dropboxAPIkey»)
s = socket.socket (socket. AF_INET, socket. SOCK_STREAM)
app_id = «Қолданба идентификаторы»
хост = socket.gethostname ()
port = 60567 print (host) s.bind ((host, port)) s.listen (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 (сурет68, 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): егер 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 (сұр) басып шығару (мәтін), ал 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 = жауап.бөлім ('\ n') [0] басып шығару (жауап1) c.send (байт (жауап1, «utf-8»)) егер len (мәтін) <= 1: c.send (байт (text2, «utf-8»)) time.sleep (7.5) үзіліс
Client.py:
luma.core.device -тен luma.core.rend -тен luma.core.render -дан i2c импорттау dropboximport picameraimport импорттау ssd1306, ssd1325, ssd1331, sh1106 импорттық уақыт импорттық ұйқы импорты pyowm serial = i2c порт = 1, адрес = 0x3C) құрылғы = ssd1306 (сериялық, бұру = 1) камера = 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 = «» компьютер портының адресі = 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 («»)#сіздің қалаңыз бен еліңіз жол форматында ауа райы = obs.get_weather () temp2 = str (ауа райы.get_temperature («fahrenheit»)) «т mp_max «]) temp3 = str (ауа -райы кенеппен (құрылғы) сурет ретінде: draw.text ((0, 0), сағат, fill = «ақ») 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 (ауа райы.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», fill = «ақ») camera.start_preview () time.sleep (2) camera.capture («/home/pi/Image.jpg») camera.stop_preview client = dropbox. Dropbox (dropbox_access_token) басып шығару («[SUCCESS] dropbox есептік жазбасы байланыстырылған») клиенті. files_upload (open (computer_path, «rb»). read (), dropbox_path) басып шығару («[UPLOADED] {}». форматы (computer_path)) full_msg = «» time.sleep (5) msg = s.recv (100) if len (msg)> = 2: full_msg += msg.decode («utf-8») басып шығару (full_msg) cdt = datetime.datetime.now () min1 = str (cdt.minute) сағат = str (cdt.hour) кенеппен (құрылғы) сурет ретінде: draw.text ((0, 19), full_msg, fill = «ақ») 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 (ауа райы.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) кенеппен (құрылғы) сурет: 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 (ауа райы.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».қосылу (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 number: obs = owm.weather_at_place («»)#сіздің қалаңыз бен еліңіз қайтадан жол форматында
ауа райы = obs.get_weather ()
temp = str (ауа райы.get_temperature («fahrenheit») [«temp»]) draw.text ((32, 0), «F», fill = «ақ») draw.text ((40, 0), temp, fill = «ақ») егер min1 санымен болмаса: obs = owm.weather_at_place («»)#сіздің қалаңыз бен еліңіз қайтадан жол форматында
ауа райы = obs.get_weather ()
temp = str (ауа райы.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) кенеппен (құрылғы) сурет: 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 (ауа райы.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 доллардан төмен !!!): Сәлеметсіз бе! Біз бәріміз E.D.I.T.H сияқты ақылды көзілдірікті жақсы білеміз. біздің сүйікті кейіпкеріміз Тони Старк жасаған, ол кейіннен Питер Паркерге берілді. Бүгін мен осындай ақылды әйнектің бірін жасамақпын, бағасы 10 доллардан төмен! Олар мүлде емес
Ақылды үстелдің жарықдиодты шамы - Ақылды жарықтандыру W/ Arduino - Neopixels жұмыс кеңістігі: 10 қадам (суреттермен)
Ақылды үстелдің жарықдиодты шамы | Ақылды жарықтандыру W/ Arduino | Neopixels жұмыс кеңістігі: Қазір біз үйде көп уақыт өткіземіз, виртуалды түрде оқимыз және жұмыс жасаймыз, сондықтан неге Arduino және Ws2812b жарықдиодты жарықдиодты жарықтандыру жүйесімен жұмыс кеңістігін жақсартпау керек. Үстелдің жарықдиодты шамы
Ақылды көзілдірік: 6 қадам
Ақылды көзілдірік: Сәлем баршаға! Бүгін мен сіздермен көптен бері армандаған нәрсені бөліскім келіп отыр. 25 доллар шамасында салынған DIY ақылды көзілдірігі енді өлуге мүмкіндік береді
SONOFF ақылды қосқыштарымен ақылды роликті жалюзи қалай жасауға болады ?: 14 қадам
SONOFF ақылды қосқыштарымен ақылды роликті қалай жасауға болады?: SONOFF ақылды қосқыштарындағы интерлок режимін қолданыңыз, қарапайым роликті/жалюзиді ақылдыға айналдыру және оны кешке түсіріңіз? Қалай болғанда да, мен
Ақылды көзілдірік қорабы: 5 қадам
Ақылды көзілдірік қорабы: жарық диодты көзілдірік қорапшасы таңертең бөлме жарық диодты жолақтармен қараңғы болған кезде көзілдірікті табуға мүмкіндік береді. Сіз оны түнгі лампа ретінде де қолдана аласыз, өйткені көзілдірікті ішке енгізгеннен кейін ультрадыбыстық сенсор іске қосылады. Бұл жоба