Სარჩევი:

მოლაპარაკე ფერის სენსორი, AIY ხმის ნაკრების საფუძველზე: 4 ნაბიჯი
მოლაპარაკე ფერის სენსორი, AIY ხმის ნაკრების საფუძველზე: 4 ნაბიჯი

ვიდეო: მოლაპარაკე ფერის სენსორი, AIY ხმის ნაკრების საფუძველზე: 4 ნაბიჯი

ვიდეო: მოლაპარაკე ფერის სენსორი, AIY ხმის ნაკრების საფუძველზე: 4 ნაბიჯი
ვიდეო: Рокстар в своём репертуаре... ► 6 Прохождение Red Dead Redemption 2 2024, ნოემბერი
Anonim
მოლაპარაკე ფერის სენსორი, AIY ხმის ნაკრების საფუძველზე
მოლაპარაკე ფერის სენსორი, AIY ხმის ნაკრების საფუძველზე
მოლაპარაკე ფერის სენსორი, AIY ხმის ნაკრების საფუძველზე
მოლაპარაკე ფერის სენსორი, AIY ხმის ნაკრების საფუძველზე
მოლაპარაკე ფერის სენსორი, AIY ხმის ნაკრების საფუძველზე
მოლაპარაკე ფერის სენსორი, AIY ხმის ნაკრების საფუძველზე
მოლაპარაკე ფერის სენსორი, AIY ხმის ნაკრების საფუძველზე
მოლაპარაკე ფერის სენსორი, AIY ხმის ნაკრების საფუძველზე

ბრაილის შრიფტის შესახებ ცოტა ხნის წინ შესწავლისას, მაინტერესებდა, შემეძლო თუ არა რაიმე შემექმნა AIY ხმოვანი ნაკრების გამოყენებით Raspberry Pi– სთვის, რომელსაც შესაძლოა რეალური სარგებელი მოჰყოლოდა მხედველობადაქვეითებულთათვის. შემდეგნაირად აღწერილი თქვენ იხილავთ პროტოტიპს უბრალო ფერის გამოვლენის მოწყობილობისა, რომელიც ხმამაღლა კითხულობს მის დასკვნებს.

ამ სისტემის უფრო დახვეწილი ვერსია შეიძლება გამოსადეგი იყოს მხედველობის და ფერის დარღვევის მქონე ადამიანებისთვის.

სისტემა იყენებს Raspberry Pi- ს, რომელსაც თან ერთვის AIY ხმის ქუდი. TCS34725 RGB სენსორის გარღვევა დაკავშირებულია HAT– ის I2C პორტთან. გარღვევა შეიცავს ნათელ თბილ თეთრ LED- ს, რათა გაანალიზდეს გასაანალიზებელი ობიექტი. გარღვევა მოთავსდა კორპუსში გაზომვის პირობების ოპტიმიზაციისა და სტანდარტიზაციისათვის.

სამი ფერის სენსორი ზომავს დაახლოებით იგივე სიხშირის დიაპაზონს, როგორც ფერის სენსორები თქვენს თვალებში. შემდეგ წითელი, მწვანე და ლურჯი (RGB) მნიშვნელობები გამოიყენება მთლიანი ფერის შთაბეჭდილების გამოსათვლელად.

ამ განსაკუთრებულ სისტემაში სასიამოვნოა ის, რომ ის ახლა გეუბნებათ ფერს სიტყვიერად, AIY ხმოვანი ნაკრების "თქვით" ბრძანების გამოყენებით. გთხოვთ გადახედოთ თანდართულ ვიდეოს.

მოწყობილობა ასევე შეიძლება სასარგებლო იყოს როგორც მაგალითი I2C სენსორული მოწყობილობისთვის, რომელიც დაკავშირებულია AIY voice HAT– თან.

ნაბიჯი 1: გამოყენებული მასალები

Raspberry Pi 3. ~ 35 აშშ დოლარი ან ევრო

AIY ხმის ნაკრები, სათაურებით შეკრული HAT– ზე. US 25 აშშ დოლარი ან ევრო

Adafruit TCS34725 გარღვევა, სათაურით შედუღებული. US 8 აშშ დოლარი ან ევრო

ჯუმბერის კაბელები.

პურის დაფა (სურვილისამებრ)

სენსორის კორპუსისთვის:- გამოყენებული ყავის კაფსულა "დოლჩე გუსტო"- პატარა მრგვალი ნაჭერი 2 მმ ფორექსიდან (PVC ქაფის ფირფიტა), დაახლოებით 37 მმ დიამეტრით- შუქის არ ამრეკლავი მასალა, რომელიც დაფარავს კორპუსის შიდა კედლებს. მე გამოვიყენე თვითწებვადი შავი რეზინის ქაფი.

სურვილისამებრ: მცირე ზომის შეცვლა გაზომვების გასაწვევად

რამდენიმე წვეთი პლასტიკური წებო და საჭრელი დანა.

ნაბიჯი 2: შეკრება და გამოყენება

შეკრება და გამოყენება
შეკრება და გამოყენება
შეკრება და გამოყენება
შეკრება და გამოყენება
შეკრება და გამოყენება
შეკრება და გამოყენება

Raspberry Pi AIY ხმის ქუდით იყო დაყენებული როგორც აღწერილია AIY სახელმძღვანელოში. შეკრების წინ სათაურები გადაიტანეს HAT– ის პორტებზე. სენსორის კორპუსისთვის ყავის კაფსულა "Dulce Gusto" დაიცალა, გაიწმინდა და ფსკერის ნაწილი ფრთხილად ამოიღო დანით. თქვენ შეგიძლიათ გამოიყენოთ სხვა რამ ამ მიზნით, ყავის კაფსულას უბრალოდ ჰქონდა სწორი ზომა და ფორმა. 2 მმ ფორექსის მრგვალი ნაჭერი მოჭრილი იყო ფირფიტიდან, გარღვევა მაშინ მოთავსდა ცენტრალურად ფორექსის ფირფიტაზე, პოზიცია აღინიშნა თექის კალმით, ხოლო გარღვევის სათაურისთვის განკუთვნილი სლოტი მოჭრილია შესაბამის პოზიციაზე.

ახლა ფორექსის ნაჭერი იყო გადაკრული საცხოვრებელზე და სენსორის გარღვევა მიმაგრებულია ფორექსის ფირფიტაზე, Velcro ზოლის გამოყენებით. შემდეგ შიდა კედლები დაფარული იყო შთამნთქმელი შავი მასალით, გამოვიყენე თვითწებვადი რეზინის ქაფი. შავი მუყაო ასევე უნდა მუშაობდეს. ახლა, ჯუმბერის კაბელების გამოყენებით, HAT- ის I2C "3.3V" პორტი დაკავშირებული იყო სენსორზე "V in", Ground to Gnd, sda to sda და scl to scl. მე გამოვიყენე breadboard ორივე ნაწილის დასაკავშირებლად, მაგრამ ეს არ არის აუცილებელი.

მოათავსეთ AIY_TCS34725 პითონის სკრიპტი src საქაღალდეში და გაუშვით სკრიპტი dev ტერმინალიდან, შეიყვანეთ "sec/AIY_TCS34752.py". თქვენ შეიძლება დაგჭირდეთ პითონის სკრიპტის შესრულება ჯერ. როდესაც გკითხავთ, მოათავსეთ სენსორული ერთეული გაზომვის ობიექტზე, დააჭირეთ ღილაკს AIY მოწყობილობაში და დაელოდეთ წამს ან ორს.

შემდეგ, გაზომილი RGB და თეთრი ღირებულებების საფუძველზე, მოწყობილობა ჯერ ითვლის შესაბამის შეფერილობის მნიშვნელობას, შემდეგ აფასებს ფერს ამ მნიშვნელობიდან გამომდინარე და მათ სიტყვიერად გადასცემს AIY ხმოვანი სისტემის საშუალებით, ე. ზ როგორც "მუქი წითელი", მაგრამ ასევე აძლევს ელფერით მნიშვნელობას. RGB, ელფერი და სიკაშკაშე (სიმსუბუქე, უფრო ზუსტად) მნიშვნელობები ასევე იბეჭდება ეკრანზე.

ფერის ანოტირების პროცესის გასამარტივებლად, RGB მნიშვნელობები გარდაიქმნება HSV (ელფერი, გაჯერება, მნიშვნელობა) ფორმატში. ეს იძლევა ფერის ანოტირებას კუთხეების გარკვეულ დიაპაზონში (ანუ ტორტის ნაჭერი) და ფერის შერჩევა გათვლილი ელფერით.

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

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

გამჭვირვალე ობიექტების შემთხვევაში, შეიძლება მოსახერხებელი იყოს მათი განთავსება თეთრ ქაღალდზე, წინააღმდეგ შემთხვევაში ასახული შუქის რაოდენობა იქნება მცირე და ობიექტი მოხსენებული როგორც "შავი".

თუ გსურთ გაზომოთ საგნების ფერი, რომლებიც ასხივებენ შუქს, თქვენ უნდა გამორთოთ შუქდიოდური გარღვევისას, LED- ის პორტთან დაკავშირებისას "Ground" - თან. ახლა დააყენეთ ნორმალიზაციის მნიშვნელობები შესაბამისად.

კიდევ ერთი ზოგადი პრობლემაა ობიექტის განათება. გარუჯვისას თბილი თეთრი LED ასხივებს სინათლის უწყვეტ სპექტრს. ამრიგად, ზოგიერთი ფერი შეიძლება იყოს ზედმეტად ან ნაკლებად წარმოდგენილი RGB სპექტრში. ამ თემაზე მეტი ინფორმაციისთვის გთხოვთ გადახედოთ ჩემს წინა ინსტრუქციებს კოლორიმეტრებზე/ ფოტომეტრებსა და სპექტრომეტრებზე:

www.instructables.com/id/An-Inexpensive-Ph…

www.instructables.com/id/A-Mimimal-Six-Col…

ნაბიჯი 3: კოდი

Კოდი
Კოდი

კოდი არის AIY ხმოვანი სახელმძღვანელოდან კოდის მოდიფიკაციისა და ბრედსპის მიერ TCS34725 სენსორული კოდის ერთობლიობა.

მე ასევე შევეცადე გამომეყენებინა TCS34725 პითონის კოდი ადაფრუტიდან, მაგრამ მქონდა პრობლემები ამ და სხვა კოდების გაშვებისას, რომლებიც იყენებენ გარე ბიბლიოთეკებს AIY HAT– თან ერთად. ნებისმიერი დახმარება მისასალმებელია.

როგორც უკვე აღვნიშნეთ, ფერის ანოტაცია ემყარება RGB- ის ტრანსფორმაციას ფერთა მნიშვნელობებში. თქვენ უნდა დააყენოთ ნორმალიზაციის პარამეტრები თეთრი და შავი საპატიო მასალების ექსპერიმენტული გაზომვების საფუძველზე. შეავსეთ აბსოლუტური მნიშვნელობები R, G და B min ან max შესაბამისად.

სკრიპტი იყენებს "ვთქვა" ბრძანების ახალ ვერსიას, რომელიც საშუალებას გაძლევთ დაარეგულიროთ მოცულობა და სიმაღლე. იმ შემთხვევაში, შეიძლება დაგჭირდეთ audio.py და tty დრაივერის ფაილების განახლება ან სკრიპტიდან "მოცულობისა და სიმაღლის ნაწილების" წაშლა.

#!/usr/bin/env python3 # ეს სკრიპტი არის servo_demo.py სკრიპტის ადაპტაცია AIY voice HAT, # ოპტიმიზირებულია ფერის ამოცნობისთვის Afafruit TCS34725 breakout import aiy.audio import aiy.cloudspeech import aiy.voicehat # gpiozero იმპორტის LED # შეიძლება იყოს დამხმარე გარე LED სერვო პორტზე # gpiozero იმპორტის ღილაკიდან # შეიძლება გამოსადეგი იყოს გარე ღილაკზე servo-port იმპორტის დრო იმპორტი smbus bus = smbus. SMBus (1) colors import def hue2color (შეფერილობა): # ფერის ინტერპრეტაცია, რომელიც ეფუძნება გამოთვლილ შეფერილობის მნიშვნელობებს, თუ ((შეფერილობა> 12) და (ელფერი 25) და (ელფერი 69) და (ელფერი 164) და (ელფერი 194) და (ელფერი 269) და (ელფერი 319) ან (ელფერი <20)): ფერი = "წითელი" დააბრუნე ფერი სხვა: ბეჭდვა ("რაღაც არასწორია")

def tcs34725 (): # გაზომვა და ინტერპრეტაცია.

# გაზომვა ხორციელდება Bradspi TCS34725 სკრიპტით: # https://bradsrpi.blogspot.com/2013/05/tcs34725-rg… bus.write_byte (0x29, 0x80 | 0x12) ver = bus.read_byte (0x29) # ვერსია # უნდა იყოს 0x44 თუ ver == 0x44: ბეჭდვა ("მოწყობილობა ნაპოვნია / n") bus.write_byte (0x29, 0x80 | 0x00) # 0x00 = ჩართვა რეგისტრაციის ავტობუსს.წერეთ_ბიტე (0x29, 0x01 | 0x02) # 0x01 = ჩართეთ, 0x02 RGB სენსორები ჩართულია bus.write_byte (0x29, 0x80 | 0x14) # კითხვის შედეგები იწყებს რეგისტრაციას 14, LSB შემდეგ MSB მონაცემები = bus.read_i2c_block_data (0x29, 0) გასაგები = გასაგები = მონაცემები [1] << 8 | მონაცემები [0] წითელი = მონაცემები [3] << 8 | მონაცემები [2] მწვანე = მონაცემები [5] << 8 | მონაცემები [4] ლურჯი = მონაცემები [7] << 8 | მონაცემები [6] crgb = "აბსოლუტური რაოდენობა: C: %s, R: %s, G: %s, B: %s / n" %(ნათელი, წითელი, მწვანე, ლურჯი) ბეჭდვა (crgb) დრო. ძილი (1) სხვა: დაბეჭდვა ("მოწყობილობა ვერ მოიძებნა / n") # გაზომილი RGBW მნიშვნელობების ნორმალიზაცია და ტრანსფორმაცია col = "" # მაქსიმალური მნიშვნელობები ნორმალიზაციის ფაქტორები, უნდა განისაზღვროს ექსპერიმენტულად # მაგ. თეთრი ფურცლის წინააღმდეგ. დროდადრო შეამოწმეთ და გაასწორეთ. max_bright = 5750 max_red = 1930 max_green = 2095 max_blue = 1980 # ფონი/მინიმალური მნიშვნელობების ნორმალიზების ფაქტორები, უნდა განისაზღვროს ექსპერიმენტულად # მაგ. შავი ფურცლის წინააღმდეგ. დროდადრო შეამოწმეთ და გაასწორეთ. min_bright = 750 min_red = 340 min_green = 245 min_blue = 225 # ნორმალიზებული მნიშვნელობები, 0 -დან 1 rel_bright = ((წმინდა - min_bright)/(max_bright - min_bright)) rel_red = ((წითელი - min_red)/(max_red - min_red)) rel_green = ((მწვანე - min_green)/(max_green - min_green)) rel_blue = ((ლურჯი - min_blue)/(max_blue - min_blue)) hsv_col = colorsys.rgb_to_hsv (rel_red, rel_green, rel_blv) 35 = 9 [hol] თუ rel_bright> 0.9: col = "თეთრი" # თუ ძალიან კაშკაშაა -> თეთრი elif rel_bright შავი სხვა: col = hue2color (ტონი) # ფერის შერჩევა შეფერილობის მნიშვნელობებით # ბეჭდვა ("ნათესავი მნიშვნელობები ნათელი, წითელი, მწვანე, ლურჯი:") # ბეჭდვა (rel_bright, rel_red, rel_green, rel_blue) # print ("HSV ღირებულებები (ელფერი, გაჯერება, მნიშვნელობა):", hsv_col) # print ("შეფერილობა °", შეფერილობა) დაბრუნება [col, rel_bright, rel_red, rel_green, rel_blue, ტონი]

def main ():

ღილაკი = aiy.voicehat.get_button () # შეცვლა ღილაკის სტატუსი led = aiy.voicehat.get_led () # შეცვლა ღილაკი-LED სტატუსი aiy.audio.get_recorder (). დაწყება () # buttoni = ღილაკი (5) # მანძილის სენსორი ან სხვა გარე ღილაკი, დაკავშირებულია servo3/GPIO 05 -თან

aiy.audio.say ("გამარჯობა!",, მოცულობა = 50, მოედანი = 100) # ტომი და მოედანი მოითხოვს audio.py და _tty.py დრაივერის 2017 წლის ნოემბრის გადახედვას!

aiy.audio.say ("დასაწყებად, გადაადგილეთ სენსორი ობიექტის ზემოთ. შემდეგ დააჭირეთ ლურჯ ღილაკს",, მოცულობა = 50, ნაბიჯი = 100) ბეჭდვა ("ფერის გაზომვის გასააქტიურებლად მოათავსეთ სენსორი ობიექტის ზემოთ, შემდეგ დააჭირეთ ლურჯ ღილაკს ") while True: led.set_state (aiy.voicehat. LED. ON) button.wait_for_press () # გარე ღილაკისთვის, შეცვალეთ ღილაკი buttoni led.set_state (aiy.voicehat. LED. BLINK) aiy.audio.say (" გაზომვა ",, მოცულობა = 50, ნაბიჯი = 100) შედეგი = tcs34725 () # იწვევს გაზომვას და ინტერპრეტაციას col = შედეგი [0] # ფერი, როგორც ტექსტის ტონი = str (int (შედეგი [5])) # ტონი in °, როგორც ტექსტი r_red = str (int (შედეგი [2]*255)) # R მნიშვნელობა, როგორც ტექსტი r_green = str (int (შედეგი [3]*255)) # G მნიშვნელობა, როგორც ტექსტი r_blue = str (int (შედეგი [4]*255)) # B მნიშვნელობა, როგორც ტექსტი r_bright = str (int (შედეგი [1]*100)) # W მნიშვნელობა, როგორც ტექსტი led.set_state (aiy.voicehat. LED. OFF) თუ col == "თეთრი "ან col ==" black ": bright =" "elif (შედეგი [1]> 0.69): #სიკაშკაშე/სინათლის ფერი bright =" light "elif (შედეგი [1] <0.25): bright =" მუქი "სხვა: bright = "საშუალო" # კომუნიკაცია t ის აჩვენებს color_text = ("ობიექტის ფერი არის" + ნათელი + "" + col) ბეჭდვა (ფერი_ტექსტი) aiy.audio.say (ფერი_ტექსტი,, მოცულობა = 75, მოედანი = 100) hue_text = ("შეფერილობის მნიშვნელობა არის "+ ტონი+" გრადუსი ") ამობეჭდვა (ტონი_ტექსტი) aiy.audio.say (ელფერი_ტექსტი,, მოცულობა = 75, მოედანი = 100)

თუ _name_ == '_ მთავარი_': მთავარი ()

ნაბიჯი 4: რამდენიმე ბმული და შენიშვნა

TCS34725 სენსორის მონაცემთა ფურცელი შეგიძლიათ იხილოთ აქ:

ჩემს მიერ გამოყენებული სენსორის წაკითხვის კოდი აღწერილია აქ:

თქვენ შეგიძლიათ იპოვოთ დამატებითი ინფორმაცია ფერის გაზომვების შესახებ ამ და სხვა სენსორთან ერთად ჩემს წინა ინსტრუქციებში:

www.instructables.com/id/An-Inexpensive-Ph…

www.instructables.com/id/A-Mimimal-Six-Col…

გირჩევთ: