Სარჩევი:

ჭკვიანი სათვალე: 4 ნაბიჯი
ჭკვიანი სათვალე: 4 ნაბიჯი

ვიდეო: ჭკვიანი სათვალე: 4 ნაბიჯი

ვიდეო: ჭკვიანი სათვალე: 4 ნაბიჯი
ვიდეო: ლუკა და მარიამი 2024, ივლისი
Anonim
ჭკვიანი სათვალე
ჭკვიანი სათვალე
ჭკვიანი სათვალე
ჭკვიანი სათვალე

გამარჯობა ყველას დღეს მე ვაჩვენებ როგორ გავაკეთოთ ჭკვიანი სათვალეები სახლში! ჭკვიანი სათვალეების ერთ -ერთი ყველაზე დიდი უპირატესობა არის ის, თუ რამდენად მომგებიანია მსგავსი რამ თანამედროვე ტექნოლოგიების სამყაროში და როგორ არ არსებობს მხოლოდ ერთი ჭკვიანი სათვალის ვერსია, რადგან ყველა მათგანს აქვს საოცარი თვისებები და უსასრულო რაოდენობის პროგრამა, რომელიც შეიძლება ინტეგრირებული იყოს. მომავალში. ამ ჭკვიანი სათვალეების მახასიათებლებია სათქმელი დრო, რომელიც გეუბნებათ ტემპერატურას ყოველ 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.3v 3.3v

GND GND

SDA SDA

SCL SCL

გთხოვთ გაითვალისწინოთ, რომ სუფთა OLED- ს შეუძლია გაუმკლავდეს მხოლოდ 3.3 ვ.

მიკროსქემის დაკავშირების დასრულების შემდეგ, გადაიტანეთ კამერის მოდულის ლენტი საკაბელოში ჟოლოს პიზე ლენტის კაბელის დამჭერში, შავი სამაგრის ამოღებით და უკან გადაწევით მას შემდეგ, რაც ლენტი კაბელი დადგება.

ნაბიჯი 2: Raspberry Pi– ზე წვდომა

Ssh– ის გამოყენებით ჩვენ შეგვიძლია მივიღოთ ჩვენი pi ჩვენი კომპიუტერით დამატებითი გარე კლავიატურის მაუსის და მონიტორის დაკავშირების გარეშე. პირველი რაც თქვენ უნდა გააკეთოთ არის დააკავშიროთ თქვენი SD ბარათი თქვენს კომპიუტერს ადაპტერით ან ჩაშენებული პორტით, შემდეგ თქვენ უნდა მიხვიდეთ ამ ბმულზე https://www.raspberrypi.org/downloads/raspbian/ და ჩამოტვირთოთ Raspbian buster დესკტოპთან ერთად. მეორე თქვენ უნდა დააყენოთ ოპერაციული სისტემა SD ბარათზე BalenaEtcher– ის გამოყენებით შეარჩიეთ თქვენი SD ბარათი და Raspbian OS და დააწკაპუნეთ „flash“- ზე ამ პროცესს შეიძლება გარკვეული დრო დასჭირდეს, ასე რომ დაბრუნებისთანავე დაბრუნდით. მესამე გადადით SD ბარათზე ფაილის მკვლევარში ან მაძიებელზე mac- ზე და შექმენით ტექსტური ფაილი სახელწოდებით wpa_supplicant დარწმუნდით, რომ წაშალეთ.txt გაფართოება და დაამატეთ.conf, ფაილში ჩასვით შემდეგი:

ქვეყანა = აშშ

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}

თქვენ უნდა შეიყვანოთ თქვენი WiFi სახელი და პაროლი შესაბამის ადგილებში და ქვეყანაში, თუ არ ხართ აშშ -ში. გაითვალისწინეთ, რომ Raspberry Pi- ს შეუძლია დაუკავშირდეს მხოლოდ 2.4Ghz ქსელს, რაც იმას ნიშნავს, რომ თქვენს კომპიუტერს ასევე მოუწევს ამ ქსელთან დაკავშირება. შექმენით ცარიელი ტექსტური ფაილი გაფართოების გარეშე, რომელსაც ეწოდება ssh და შემდეგ ამოიღეთ თქვენი SD ბარათი. ამის შემდეგ თქვენ უნდა დააინსტალიროთ PuTTY https://www.putty.org/ რაც თქვენ გამოიყენებთ ssh- ის გასააქტიურებლად. დაინსტალირების შემდეგ შეიყვანეთ თქვენი ჟოლოს პი მისამართის IP მისამართი, შეგიძლიათ გაარკვიოთ რა არის თქვენი როუტერების ვებსაიტზე შესვლით და დაკავშირებული მოწყობილობების დათვალიერებით.

მას შემდეგ რაც მიიღებთ წვდომას Raspberry Pi– ზე, ის მოგთხოვთ სისტემაში შესვლას, ნაგულისხმევი მომხმარებლის სახელი არის „pi“და პაროლი არის „ჟოლო“. ჩაწერეთ sudo raspi-config, შემდეგ გადადით ინტერფეისის პარამეტრებზე და ჩართეთ კამერა, ssh და i2c, შემდეგ დააჭირეთ დასრულებას და ჩაწერეთ sudo გადატვირთვა. ახლა თქვენ მზად ხართ გაეცნოთ ჟოლოს პიში, გააგრძელეთ და დააინსტალირეთ დისტანციური დესკტოპი და შეიყვანეთ თქვენი ჟოლოს პიის IP მისამართი და თქვენ უკვე კარგი ხართ ჟოლოს პიში შესასვლელად.

ნაბიჯი 3: კოდირების დრო

კოდირების დრო!
კოდირების დრო!

მე ავირჩიე ამ პროგრამის კოდირება პითონში, ასე რომ დარწმუნდით, რომ თქვენს სამუშაო მაგიდაზე დაინსტალირებული გაქვთ python3.7 ან 3.8. ეს კოდი მუშაობს სერვერისა და კლიენტის გამოყენებით, რომლის ნაწილიც თქვენი კომპიუტერია. კლიენტი ან ჟოლო პი გადაიღებს სურათს და ატვირთავს მას dropbox– ში, რომელსაც იღებს სერვერი, რომელიც აწარმოებს სურათის დამუშავებას და ტექსტის ამოცნობას სურათზე. თქვენ მოგიწევთ მიიღოთ wolframalpha, dropbox და openweathermap app-id, რომ ეს იმუშაოს, ყველაფერი რაც თქვენ გჭირდებათ არის გადადით ვებგვერდებზე დარეგისტრირდეთ და ეს მოგცემთ აპლიკაციის ID- ს. შემდეგ შეიყვანეთ ისინი შესაბამის ადგილებში, რომლებიც განსაზღვრულია კოდის კომენტარებით. დარწმუნდით, რომ თქვენ დააინსტალირეთ პიპ ყველაფერი და დააინსტალირეთ Tesseract OCR და OpenCV. შექმენით პითონის ფაილი სახელად Server.py თქვენს კომპიუტერზე და ფაილი სახელად client.py ჟოლოს პიზე და შემდეგ დააკოპირეთ და ჩასვით კოდი. მაგრამ იცოდეთ, რომ რაც უფრო თამამია პერსონაჟები და მით უფრო თეთრია ფონი, მით უკეთესი იქნება შედეგები, ეს ასეა ტექსტის ამოცნობის ყველა პროგრამულ უზრუნველყოფაში.

ყველა ბმული აპლიკაციის 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 იმპორტი სურათი იმპორტი cv2 იმპორტი pytesseract pytesseract იმპორტი გამომავალი იმპორტი numpy როგორც np იმპორტი wolframalpha იმპორტი სოკეტი იმპორტი დრო

dbx = dropbox. Dropbox ("dropboxAPIkey")

s = socket.socket (სოკეტი. AF_INET, სოკეტი. SOCK_STREAM)

app_id = "აპლიკაციის ID"

მასპინძელი = socket.gethostname ()

პორტი = 60567 ბეჭდვა (მასპინძელი) s.bind ((მასპინძელი, პორტი)) s. მოსმენა (2)

მართალია:

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

მართალია:

ხოლო True: time.sleep (13.7) მეტამონაცემები, f = dbx.files_download ("/dropbox_API/Image.jpg") out = open ("Image.jpg", 'wb') out.write (f.content) out დახურვა () ბეჭდვა ("სურათი გადმოწერილია!") სურათი = cv2.imread ("Image.jpg") სურათი = cv2.resize (სურათი, (640, 480), ინტერპოლაცია = cv2. INTER_AREA) image68 = cv2.rotate (სურათი, cv2. ROTATE_90_COUNTERCLOCKWISE) ნაცრისფერი = cv2.cvt ფერი (სურათი 68, cv2. COLOR_BGR2GRAY)

def remove_noise (ნაცრისფერი):

დაბრუნება cv2.medianBlur (ნაცრისფერი, 5) def thresholding (ნაცრისფერი): დაბრუნების cv2.threshold (ნაცრისფერი, 0, 255, cv2. THRESH_BINARY + cv2. THRESH_OTSU) [1] def გაფართოება (ნაცრისფერი): ბირთვი = np.ones ((5, 5), ნ.პ. 8

n_boxes = len (d ['text'])

for i დიაპაზონში (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 (ნაცრისფერი) ბეჭდვა (ტექსტი) ხოლო 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 = "" #შენი 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 address your pc port = 60567 s.connect ((host, port)) 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) hour = str (cdt.hour) ტილოთი (მოწყობილობა) როგორც გათამაშება: draw.text ((0, 0), საათი, შევსება = "თეთრი") draw.text ((11, 0), ":", შევსება = "თეთრი") draw.text ((15, 0), min1, fill = "თეთრი") draw.text ((0, 9), "_", fill = "თეთრი") 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 = "white") draw.text ((40, 0), temp, შევსება = "თეთრი") თუ min1 არ არის num: 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) 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 = "white") draw.text ((40, 0), temp, შევსება = "თეთრი") თუ min1 არ არის num: draw.text ((40, 0), temp3, fill = "თეთრი") draw.text ((32, 0), "F", შევსება = "თეთრი") თუ len (msg) <= 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), ":", შევსება = "თეთრი") 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 = "white") draw.text ((40, 0), temp, შევსება = "თეთრი") თუ min1 არ არის num: draw.text ((40, 0), temp3, fill = "თეთრი") draw.text ((32, 0), "F", შევსება = "თეთრი") 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) hour = str (cdt.hour) with canvas (device) as draw: 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 ნომერში: 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 არ არის num: 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 არ არის num: draw.text ((40, 0), temp3, fill = "თეთრი") draw.text ((32, 0), "F", შევსება = "თეთრი") თუ 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), ":", შევსება = "თეთრი") draw.text ((15, 0), min1, fill = "თეთრი") გათამაშება text ((0, 9), "_", fill = "white") draw.text ((0, 9), date, fill = "white") if min1 in num: 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 არ არის num: draw.text ((40, 0), temp3, fill = "თეთრი") draw.text ((32, 0), "F", შევსება = "თეთრი") time.sleep (7) client.files_delete (dropbox_path) print ("ფაილები წაიშალა")

პ.ს. მე ვარ სამოყვარულო პროგრამისტი, ასე რომ გთხოვთ ეჭვქვეშ არ დააყენოთ ჩემი პროგრამირების საშინელი მეთოდები.

ნაბიჯი 4: ყველაფერი ერთად ააწყვეთ

ყველაფერს ერთად ვათავსებთ!
ყველაფერს ერთად ვათავსებთ!

მას შემდეგ რაც დაასრულებთ ყველაფერს თქვენ პრაქტიკულად დაასრულებთ ყველაფერს რაც თქვენ დაგჭირდებათ არის ჟოლოს კამერის მიმაგრება და სათვალეზე ჩვენება. ამის გაკეთება შეგიძლიათ მარაგში ნახსენები ორმხრივი წებოს გამოყენებით, ან შეგიძლიათ გამოიყენოთ ნებისმიერი მეთოდი, რომელიც საჭიროდ მიგაჩნიათ. თქვენ ასევე შეიძლება შეამჩნიეთ, რომ მე არსად მიხსენებია ბატარეა ამ გაკვეთილზე, ეს იმიტომ ხდება, რომ მე მომავალში ვგეგმავ ამ სათვალეებზე განახლებებს და არ მინდა ახლავე დავამატო ის. მაგრამ თუ თქვენ გსურთ ერთის მიმაგრება, თქვენ დაგჭირდებათ li-po დამტენი ჩართვა ამაზონიდან

თუ მოგეწონათ ეს და გინდათ მეტი ნახოთ, მე დავიწყე YouTube არხი და იმედია გამოვაქვეყნებ გაკვეთილებს იქაც. აქ არის ბმული:

www.youtube.com/channel/UCGqcWhHXdZf231rLe…

ღმერთი იხსნის!

იოანე 3:16 "ვინაიდან ღმერთმა ისე შეიყვარა სამყარო, რომ მისცა თავისი ერთადერთი ძე, ვისაც ასე სჯერა მისი, არ დაიღუპება, არამედ ექნება მარადიული სიცოცხლე."

გირჩევთ: