เซ็นเซอร์สีพูดได้โดยใช้ชุดเสียง AIY: 4 ขั้นตอน
เซ็นเซอร์สีพูดได้โดยใช้ชุดเสียง AIY: 4 ขั้นตอน
Anonim
เซ็นเซอร์สีพูดได้ อิงจากชุดเสียง AIY
เซ็นเซอร์สีพูดได้ อิงจากชุดเสียง AIY
เซ็นเซอร์สีพูดได้โดยใช้ชุดเสียง AIY
เซ็นเซอร์สีพูดได้โดยใช้ชุดเสียง AIY
เซ็นเซอร์สีพูดได้ อิงจากชุดเสียง AIY
เซ็นเซอร์สีพูดได้ อิงจากชุดเสียง AIY
เซ็นเซอร์สีพูดได้ อิงจากชุดเสียง AIY
เซ็นเซอร์สีพูดได้ อิงจากชุดเสียง AIY

เมื่อได้เรียนรู้เกี่ยวกับอักษรเบรลล์เล็กน้อยเมื่อเร็วๆ นี้ ฉันสงสัยว่าฉันสามารถสร้างบางอย่างโดยใช้ชุดเสียง AIY สำหรับ Raspberry Pi ได้หรือไม่ ซึ่งอาจมีประโยชน์จริงสำหรับผู้พิการทางสายตา ดังที่อธิบายไว้ในสิ่งต่อไปนี้ คุณจะพบกับต้นแบบของอุปกรณ์ตรวจจับสีอย่างง่ายที่อ่านผลการค้นพบออกมาดัง ๆ

ระบบนี้อาจมีประโยชน์สำหรับผู้ที่มีความบกพร่องทางสายตาหรือตาบอดสี

ระบบกำลังใช้ Raspberry Pi โดยแนบ AIY voice HAT เบรกเอาต์เซ็นเซอร์ TCS34725 RGB เชื่อมต่อกับพอร์ต I2C ของ HAT จุดฝ่าวงล้อมมีไฟ LED สีขาวอบอุ่นสว่างเพื่อส่องวัตถุที่จะวิเคราะห์ การฝ่าวงล้อมถูกวางไว้ในตัวเรือนเพื่อปรับเงื่อนไขการวัดให้เหมาะสมและเป็นมาตรฐาน

เซ็นเซอร์สีสามสีวัดช่วงความถี่สามช่วงเดียวกันกับเซ็นเซอร์สีในดวงตาของคุณ จากนั้นจะใช้ค่าสีแดง สีเขียว และสีน้ำเงิน (RGB) เพื่อคำนวณการแสดงผลสีโดยรวม

สิ่งที่ดีเกี่ยวกับระบบพิเศษนี้คือตอนนี้มันบอกสีให้คุณทราบด้วยวาจาโดยใช้คำสั่ง "พูด" ของชุดเสียง AIY โปรดดูในวิดีโอประกอบ

อุปกรณ์อาจมีประโยชน์เป็นตัวอย่างสำหรับอุปกรณ์เซ็นเซอร์ I2C ที่เชื่อมต่อกับ AIY voice HAT

ขั้นตอนที่ 1: วัสดุที่ใช้

Raspberry Pi 3 ~ 35 US$ หรือ EUR

ชุดเสียง AIY พร้อมหัวต่อกับ HAT ~ 25US$ หรือ EUR

Adafruit TCS34725 ฝ่าวงล้อมด้วยการบัดกรีส่วนหัว ~ 8 US$ หรือ EUR

สายจัมเปอร์.

เขียงหั่นขนม (ไม่จำเป็น)

สำหรับตัวเรือนเซ็นเซอร์:- แคปซูลกาแฟ "Dolce Gusto" ที่ใช้แล้ว- ชิ้นกลมขนาดเล็ก 2 มม. Forex (แผ่นโฟม PVC) เส้นผ่านศูนย์กลางประมาณ 37 มม.- วัสดุสีดำที่ไม่สะท้อนแสงเพื่อปิดผนังด้านในของตัวเรือน ฉันใช้โฟมยางสีดำแบบมีกาวในตัว

ทางเลือก: สวิตช์ขนาดเล็กเพื่อกระตุ้นการวัด

กาวพลาสติกสองสามหยดและมีดคัตเตอร์

ขั้นตอนที่ 2: การประกอบและการใช้งาน

การประกอบและการใช้งาน
การประกอบและการใช้งาน
การประกอบและการใช้งาน
การประกอบและการใช้งาน
การประกอบและการใช้งาน
การประกอบและการใช้งาน

Raspberry Pi พร้อม AIY voice HAT ได้รับการตั้งค่าตามที่อธิบายไว้ในคู่มือ AIY ก่อนการประกอบ ส่วนหัวจะถูกบัดกรีเข้ากับพอร์ตบน HAT สำหรับตัวเรือนของเซ็นเซอร์ แคปซูลกาแฟ "Dulce Gusto" ถูกล้าง ทำความสะอาด และส่วนหนึ่งของด้านล่างถูกดึงออกอย่างระมัดระวังด้วยมีด คุณอาจใช้อย่างอื่นเพื่อจุดประสงค์นี้ แคปซูลกาแฟมีขนาดและรูปร่างที่เหมาะสม Forex ทรงกลมขนาด 2 มม. ถูกตัดออกจากเพลต จากนั้นจึงวางฝ่าวงล้อมไว้ตรงกลางบนเพลต Forex ตำแหน่งที่ทำเครื่องหมายด้วยปากกาสักหลาด และช่องสำหรับส่วนหัวบนฝ่าวงล้อมถูกตัดที่ตำแหน่งที่เหมาะสม

ตอนนี้ชิ้นส่วน Forex ติดกาวบนตัวเรือนและเซ็นเซอร์ที่ฝ่าวงล้อมติดกับแผ่น Forex โดยใช้แถบเวลโคร จากนั้นผนังด้านในก็คลุมด้วยวัสดุสีดำดูดซับแสง ฉันใช้โฟมยางแบบมีกาวในตัว กระดาษแข็งสีดำก็ควรใช้งานได้เช่นกัน ตอนนี้ โดยใช้สายจัมเปอร์ พอร์ต I2C "3.3V" ของ HAT เชื่อมต่อกับ "V in" บนเซนเซอร์, กราวด์ถึง Gnd, sda ถึง sda และ scl ถึง scl ฉันเคยใช้เขียงหั่นขนมเพื่อเชื่อมต่อทั้งสองส่วน แต่นั่นไม่จำเป็น

วางสคริปต์หลาม AIY_TCS34725 ในโฟลเดอร์ src และเรียกใช้สคริปต์จากเทอร์มินัล dev โดยป้อน "sec/AIY_TCS34752.py" คุณอาจต้องทำให้สคริปต์ python ทำงานได้ก่อน เมื่อระบบถาม ให้วางชุดเซนเซอร์ไว้เหนือวัตถุที่จะวัด กดปุ่มในอุปกรณ์ AIY แล้วรอหนึ่งหรือสองวินาที

จากนั้น ตามค่า RGB และสีขาวที่วัดได้ อุปกรณ์จะคำนวณค่าฮิวที่สอดคล้องกันก่อน จากนั้นจึงประเมินสีตามค่านี้และสื่อสารด้วยวาจาผ่านระบบเสียง AIY เช่น NS. เป็น "สีแดงเข้ม" แต่ยังให้ค่าฮิว ค่า RGB, ฮิว และความสว่าง (ความสว่าง ให้ถูกต้อง) จะถูกพิมพ์ไปยังหน้าจอด้วย

เพื่อลดความซับซ้อนของกระบวนการใส่คำอธิบายประกอบสี ค่า RGB จะถูกแปลงเป็นรูปแบบ HSV (ฮิว ความอิ่มตัวของสี ค่า) ซึ่งช่วยให้สามารถใส่คำอธิบายประกอบสีให้กับช่วงมุมที่กำหนดได้ (เช่น ชิ้นวงกลม) และเลือกสีตามค่าเฉดสีที่คำนวณได้

คุณต้องทำให้อุปกรณ์ของคุณเป็นปกติเมื่อเทียบกับการอ้างอิงสีขาวและสีดำ เพียงวัดกระดาษที่ขาวที่สุดและดำที่สุดที่คุณมี ทำการวัดแต่ละชิ้น แล้วใส่ค่าเหล่านี้เป็นค่าสูงสุดและต่ำสุดลงในโค้ด เฉพาะค่าอ้างอิงที่เหมาะสมเท่านั้นที่จะให้การจดจำสีที่ดี

ปัญหาพื้นฐานอย่างหนึ่งคือการไตร่ตรอง หากคุณมีวัตถุที่มีพื้นผิวมันวาวหรือขัดมัน มันจะสะท้อนแสงจำนวนมากที่ปล่อยออกมาจาก LED ซึ่งดูสว่างกว่าที่เป็นจริงมาก คุณอาจใช้แผ่นเมมเบรนเพื่อกระจายแสง แต่คุณอาจต้องใช้ตัวประกอบการแก้ไข

ในกรณีของวัตถุโปร่งแสง การวางบนกระดาษสีขาวอาจสะดวก มิฉะนั้น แสงสะท้อนจะเหลือน้อยและวัตถุรายงานว่าเป็น "สีดำ"

หากคุณต้องการวัดสีของวัตถุที่เปล่งแสง คุณควรปิด LED บน breakout โดยเชื่อมต่อพอร์ต "LED" บน breakout กับ "Ground" ตอนนี้ตั้งค่าการทำให้เป็นมาตรฐานตามนั้น

ปัญหาทั่วไปอีกประการหนึ่งคือการส่องสว่างของวัตถุ ไฟ LED สีขาวอบอุ่นบนฝ่าวงล้อมจะปล่อยสเปกตรัมแสงที่ไม่ต่อเนื่อง ดังนั้นสีบางสีอาจมีสีมากเกินไปหรือน้อยเกินไปในสเปกตรัม RGB สำหรับข้อมูลเพิ่มเติมในหัวข้อนี้ โปรดดูคำแนะนำก่อนหน้าของฉันเกี่ยวกับคัลเลอริมิเตอร์/ โฟโตมิเตอร์และสเปกโตรมิเตอร์:

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

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

ขั้นตอนที่ 3: รหัส

รหัส
รหัส

รหัสนี้เป็นการผสมผสานระหว่างการแก้ไขโค้ดจากคู่มือเสียง AIY และรหัสเซ็นเซอร์ TCS34725 โดย Bradspi

ฉันได้ลองใช้โค้ดหลาม TCS34725 จาก Adafruit แล้ว แต่มีปัญหาในการเรียกใช้โค้ดนี้และโค้ดอื่นๆ ที่ใช้ไลบรารีภายนอกร่วมกับ AIY HAT ความช่วยเหลือใด ๆ ยินดีต้อนรับ

ดังที่ได้กล่าวไว้ก่อนหน้านี้ หมายเหตุเกี่ยวกับสีจะขึ้นอยู่กับการแปลงค่า RGB เป็นค่าฮิว คุณต้องตั้งค่าการทำให้เป็นมาตรฐานตามการวัดผลการทดลองของวัสดุแสดงความเคารพสีขาวและดำ กรอกค่าสัมบูรณ์สำหรับ R, G และ B นาทีหรือสูงสุดตามลำดับ

สคริปต์ใช้เวอร์ชันใหม่ของคำสั่ง "say" ที่อนุญาตให้ควบคุมระดับเสียงและระดับเสียง ในกรณีที่คุณอาจต้องอัปเดตไฟล์ไดรเวอร์ audio.py และ tty หรือลบ "volume and pitch parts" ออกจากสคริปต์

#!/usr/bin/env python3# สคริปต์นี้เป็นการดัดแปลงของสคริปต์ servo_demo.py สำหรับ AIY voice HAT # ปรับให้เหมาะสมสำหรับการจดจำสีโดยใช้ Afafruit TCS34725 breakout import aiy.audio import aiy.cloudspeech import aiy.voicehat #จาก LED นำเข้า gpiozero # อาจมีประโยชน์สำหรับ LED ภายนอกบนพอร์ตเซอร์โว # จากปุ่มนำเข้า gpiozero # อาจมีประโยชน์สำหรับปุ่มภายนอกบนเวลานำเข้าของพอร์ตเซอร์โว นำเข้า smbus บัส = smbus. SMBus(1) นำเข้า colorsys def hue2color (hue): # การตีความสีตามค่าเฉดสีที่คำนวณได้ ถ้า ((hue> 12) และ (hue 25) และ (hue 69) และ (hue 164) และ (hue 194) และ (hue 269) และ (hue 319) or (hue< 20)): color="red" return color else: print ("มีบางอย่างผิดพลาด")

def tcs34725(): # การวัดและการตีความ

# การวัดดำเนินการโดยสคริปต์ Bradspi TCS34725: # https://bradsrpi.blogspot.com/2013/05/tcs34725-rg… bus.write_byte(0x29, 0x80|0x12) ver = bus.read_byte(0x29) # version # ควรเป็น 0x44 ถ้าเวอร์ชัน == 0x44: พิมพ์ ("พบอุปกรณ์\n") bus.write_byte(0x29, 0x80|0x00) # 0x00 = เปิดใช้งานการลงทะเบียน bus.write_byte(0x29, 0x01|0x02) # 0x01 = เปิดเครื่อง เปิดใช้งานเซ็นเซอร์ RGB 0x02 bus.write_byte(0x29, 0x80|0x14) # ผลการอ่านเริ่มต้นการลงทะเบียน 14, LSB จากนั้นข้อมูล MSB = bus.read_i2c_block_data(0x29, 0) clear = clear = data[1] << 8 | data[0] สีแดง = data[3] << 8 | ข้อมูล[2] สีเขียว = ข้อมูล[5] << 8 | ข้อมูล[4] สีน้ำเงิน = ข้อมูล[7] << 8 | data[6] crgb = "จำนวนที่แน่นอน: C: %s, R: %s, G: %s, B: %s\n" % (ชัดเจน, แดง, เขียว, น้ำเงิน) พิมพ์ (crgb) time.sleep(1) อื่น ๆ: พิมพ์ ("ไม่พบอุปกรณ์\n") # การทำให้เป็นมาตรฐานและการแปลงค่า RGBW ที่วัดได้ # ค่าสูงสุด ปัจจัยการทำให้เป็นมาตรฐาน ต้องกำหนดโดยการทดลอง # เช่น เทียบกับกระดาษขาว ตรวจสอบและแก้ไขเป็นระยะๆ 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_blue) hue = hsv_col[0]*359 if rel_bright > 0.9: col = "white" # if very bright -> white elif rel_bright black else: col = hue2color(hue) # การเลือกสีตามค่าฮิว # print("ค่าสัมพัทธ์ สว่าง แดง เขียว น้ำเงิน:") # พิมพ์ (rel_bright, rel_red, rel_green, rel_blue) # พิมพ์ ("ค่า HSV (สี, ความอิ่มตัว, ค่า):", hsv_col) # พิมพ์ ("ฮิวใน° ", ฮิว) ส่งคืน [col, rel_bright, rel_red, rel_green, rel_blue, สีสัน]

def หลัก ():

ปุ่ม = aiy.voicehat.get_button () # เปลี่ยนสถานะปุ่ม led = aiy.voicehat.get_led () # เปลี่ยนสถานะปุ่ม - LED aiy.audio.get_recorder ().start () # buttoni = ปุ่ม (5) # เซ็นเซอร์ระยะทางหรือ ปุ่มภายนอกอื่น ๆ เชื่อมต่อกับ servo3/GPIO 05

aiy.audio.say("สวัสดี!",, volume=50, pitch=100) # ระดับเสียงและระดับเสียงต้องมีการแก้ไขไดรเวอร์ audio.py และ _tty.py ในเดือนพฤศจิกายน 2017!

aiy.audio.say("ในการเริ่มต้น ให้ย้ายเซ็นเซอร์ไปไว้เหนือวัตถุ จากนั้นกดปุ่มสีน้ำเงิน",, volume=50, pitch = 100) พิมพ์ ("หากต้องการเปิดใช้งานการวัดตำแหน่งสีเซ็นเซอร์ตำแหน่งเหนือวัตถุ จากนั้นกดปุ่มสีน้ำเงิน ") ในขณะที่ 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] # สี เนื่องจากข้อความ hue = str(int(ผลลัพธ์[5])) # ฮิวใน°, เป็นข้อความ r_red = str(int(result[2]*255)) # R value, as text r_green = str(int(result[3]*255)) # G value, as text r_blue = str(int(result[4]*255)) # ค่า B เป็นข้อความ r_bright = str(int(ผลลัพธ์[1]*100)) # W ค่า เป็นข้อความ led.set_state(aiy.voicehat. LED. OFF) ถ้า col == "สีขาว " or col=="black": bright = "" elif (result[1] >0.69): #brightness/lightness of color bright ="light" elif (result[1] <0.25): bright ="dark" else: bright ="medium" # กำลังสื่อสาร t ผลลัพธ์ color_text =("สีของวัตถุคือ " + สว่าง + " " + col) พิมพ์ (color_text) aiy.audio.say(color_text,, volume=75, pitch=100) hue_text = ("ค่าฮิวคือ "+ hue+ " องศา") พิมพ์ (hue_text) aiy.audio.say(hue_text,, volume=75, pitch = 100)

ถ้า _name_ == '_main_': main()

ขั้นตอนที่ 4: ลิงค์และข้อสังเกตบางส่วน

เอกสารข้อมูลเซ็นเซอร์ TCS34725 สามารถพบได้ที่นี่:

รหัสสำหรับอ่านเซ็นเซอร์ที่ฉันใช้อธิบายไว้ที่นี่:

คุณอาจพบข้อมูลเพิ่มเติมเกี่ยวกับการวัดสีด้วยเซ็นเซอร์นี้และเซ็นเซอร์อื่นในคำแนะนำก่อนหน้าของฉัน:

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

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