תוכן עניינים:

חיישן צבע מדבר המבוסס על ערכת הקול AIY: 4 שלבים
חיישן צבע מדבר המבוסס על ערכת הקול AIY: 4 שלבים

וִידֵאוֹ: חיישן צבע מדבר המבוסס על ערכת הקול AIY: 4 שלבים

וִידֵאוֹ: חיישן צבע מדבר המבוסס על ערכת הקול AIY: 4 שלבים
וִידֵאוֹ: ג'רמי קורבל: קטעים חדשים מ-Lazar & Fravor [חלק 2] 2024, נוֹבֶמבֶּר
Anonim
חיישן צבע מדבר, מבוסס על ערכת הקול AIY
חיישן צבע מדבר, מבוסס על ערכת הקול AIY
חיישן צבע מדבר, מבוסס על ערכת הקול AIY
חיישן צבע מדבר, מבוסס על ערכת הקול AIY
חיישן צבע מדבר, מבוסס על ערכת הקול AIY
חיישן צבע מדבר, מבוסס על ערכת הקול AIY
חיישן צבע מדבר, מבוסס על ערכת הקול AIY
חיישן צבע מדבר, מבוסס על ערכת הקול AIY

לאחר שלמדתי קצת על ברייל לאחרונה, תהיתי אם אוכל לבנות משהו באמצעות ערכת הקול AIY עבור ה- Raspberry Pi, שעשויה להיות בעלת תועלת אמיתית עבור לקויי ראייה. כך שתואר להלן תמצא אב טיפוס של מכשיר לגילוי צבעים פשוט הקורא את ממצאיו בקול רם.

גרסה משוכללת יותר של מערכת זו עשויה להיות שימושית עבור אנשים עם לקות ראייה או עיוורון צבעים.

המערכת משתמשת ב- Raspberry Pi עם כובע קול AIY מצורף. פריצת חיישן RGB TCS34725 מחוברת ליציאת I2C של ה- HAT. הפריצה מכילה LED לבן חם בוהק להארת האובייקט שיש לנתח. הפריצה הונחה בבית כדי לייעל ולתקן את תנאי המדידה.

שלושת חיישן הצבעים מודדים בערך אותם שלושה טווחי תדרים כמו חיישני הצבעים בעיניים שלך. לאחר מכן משתמשים בערכי האדום, הירוק והכחול (RGB) לחישוב הרושם הכללי של הצבע.

הדבר היפה במערכת המיוחדת הזו הוא שהיא מספרת לך כעת את הצבע מילולית, באמצעות הפקודה "אמור" של ערכות הקול של AIY. אנא הביטו בסרטון המצורף.

המכשיר עשוי להיות שימושי גם כדוגמא למכשיר חיישן I2C המחובר ל- HAT הקולי AIY.

שלב 1: חומרים בשימוש

Raspberry Pi 3. ~ 35 US $ או EUR

ערכת קול AIY, עם כותרות מולחמות בכובע. ~ 25 $ או EUR

Adafruit TCS34725 פריצה, עם כותרת מולחמת. ~ 8 דולר ארה ב או אירו

כבלי מגשר.

לוח לחם (לא חובה)

עבור בית החיישנים:- קפסולת קפה "דולצ'ה גוסטו" משומשת- חתיכה עגולה קטנה של 2 מ"מ פורקס (צלחת קצף PVC), בקוטר 37 מ"מ- חומר שחור שאינו משתקף לכיסוי הקירות הפנימיים של הבית. השתמשתי בקצף גומי שחור דביק.

אופציונלי: מתג קטן לעורר את המדידות

כמה טיפות דבק פלסטיק וסכין חותך.

שלב 2: הרכבה ושימוש

הרכבה ושימוש
הרכבה ושימוש
הרכבה ושימוש
הרכבה ושימוש
הרכבה ושימוש
הרכבה ושימוש

ה- Raspberry Pi עם HAT הקול AIY הוגדר כמתואר במדריך AIY. לפני ההרכבה, כותרות מולחמו ליציאות על ה- HAT. עבור בית החיישן, קפסולת קפה "דולסה גוסטו" התרוקנה, ניקה וחלק מהתחתון הוסר בזהירות בעזרת סכין. אתה יכול להשתמש במשהו אחר למטרה זו, לקפסולת הקפה הייתה בדיוק הגודל והצורה הנכונים. חתיכה עגולה של 2 מ"מ פורקס נחתכה מצלחת, הפריצה הונחה אז במרכז הצלחת במט"ח, המיקום מסומן בעט לבד וחריץ לכותרת על הפריצה נחתך במיקום המתאים.

כעת חתיכת המט"ח הודבקה על המארז והתפרצות החיישנים הוצמדה לצלחת המט"ח, באמצעות פס סקוטש. לאחר מכן הקירות הפנימיים היו מכוסים בחומר שחור סופג אור, השתמשתי בקצף גומי דביק. קרטון שחור אמור לעבוד גם כן. כעת, באמצעות כבלי מגשר, יציאת ה- I2C "3.3V" של ה- HAT הייתה מחוברת ל- "V in" בחיישן, Ground to Gnd, sda to sda ו- scl to scl. השתמשתי בלוח לחם לחיבור שני החלקים, אבל זה לא הכרחי.

מקם את סקריפט ה- python AIY_TCS34725 בתיקיית src והפעל את הסקריפט ממסוף ה- dev, והזן "sec/AIY_TCS34752.py". ייתכן שיהיה עליך להפעיל את קובץ ה- script של פייתון תחילה. כשתתבקש, הנח את יחידת החיישנים מעל האובייקט שיש למדוד, לחץ על הכפתור במכשיר AIY והמתן שנייה או שתיים.

לאחר מכן, בהתבסס על ערכי ה- RGB והלבן הנמדדים, המכשיר מחשב תחילה את ערך הגוון המתאים, ולאחר מכן מעריך את הצבע על בסיס ערך זה ומתקשר אותם מילולית באמצעות מערכת הקול AIY, למשל. ז. כ"אדום כהה ", אך גם נותן את ערך הגוון. ערכי RGB, גוון ובהירות (בהירות, ליתר דיוק) מודפסים גם למסך.

כדי לפשט את תהליך ביאור הצבעים, ערכי RGB הופכים לפורמט HSV (גוון, רוויה, ערך). זה מאפשר להוסיף ביאור לצבע לטווח זוויות מסוים (כלומר פרוסת עוגה), ולבחור את הצבע על בסיס ערך הגוון המחושב.

עליך לנרמל את המכשיר שלך מול הפניה לבנה ושחורה. פשוט מדוד את פיסות הנייר הלבנות והשחורות ביותר שברשותך, בצע מדידה כל אחת, והנח את הערכים האלה כערכים מקסימליים ומינימליים בקוד. רק ערכי ייחוס אופטימליים יתנו זיהוי צבעים טוב.

בעיה בסיסית אחת היא השתקפות. אם יש לך אובייקט בעל משטח מבריק או מלוטש הוא ישקף הרבה מהאור הנפלט על ידי הנורית, ונראה בהיר בהרבה מכפי שהוא באמת. ייתכן שתשתמש בדף קרום כדי לפזר את האור, אך ייתכן שיהיה עליך ליישם גורם תיקון.

במקרה של אובייקטים שקופים, אולי כדאי להניח אותם על נייר לבן, אחרת כמות האור המוחזר תהיה קטנה והאובייקט ידווח כ"שחור ".

אם ברצונך למדוד את צבע האובייקטים הפולטים אור, עליך לכבות את הנורית על הפריצה על ידי חיבור יציאת "LED" בפריצה ל"קרקע ". כעת הגדר את ערכי הנורמליזציה בהתאם.

בעיה כללית נוספת היא הארת החפץ. LED הלבן החם בפריצה פולט ספקטרום אור בלתי רציף. לכן צבעים מסוימים עשויים להיות מיוצגים ביתר או בתת-מידה בספקטרום ה- RGB. למידע נוסף בנושא זה, עיין במדריכים הקודמים שלי על צבעים/ פוטומטרים וספקטרומטרים:

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

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

שלב 3: הקוד

הקוד
הקוד

הקוד הוא שילוב של שינוי קוד מהמדריך הקולי של AIY, וקוד החיישן TCS34725 של Bradspi.

ניסיתי גם להשתמש בקוד ה- Python TCS34725 של Adafruit, אך נתקלתי בבעיות בהפעלת קוד זה ועוד כמה קודים המשתמשים בספריות חיצוניות בשילוב עם AIY HAT. כל עזרה תתקבל בברכה.

כפי שהוזכר קודם לכן, ביאור הצבעים מבוסס על טרנספורמציה בערכי RGB לגוון. עליך להגדיר הגדרות נורמליזציה על סמך מדידות ניסיוניות של חומרי יראת כבוד לבנים ושחורים. מלא את הערכים המוחלטים עבור R, G ו- B דקות או מקסימום בהתאם.

התסריט משתמש בגרסה חדשה של הפקודה "לומר" המאפשרת לווסת את עוצמת הקול והגובה. במקרה כזה, ייתכן שיהיה עליך לעדכן את קבצי מנהל ההתקן audio.py ו- tty או למחוק את "חלקי עוצמת הקול והצליל" מהתסריט.

#!/usr/bin/env python3 # סקריפט זה הוא התאמה של הסקריפט servo_demo.py ל- HAT הקול AIY, # מותאם לזיהוי הצבעים באמצעות ייבוא הפריצה Afafruit TCS34725 aiy.audio import aiy.cloudspeech import aiy.voicehat # מנורת ייבוא gpiozero # יכולה להיות מועילה עבור נורית חיצונית בנמל סרוו # מכפתור יבוא gpiozero # יכול להיות מועיל לכפתור חיצוני בזמן ייבוא servo יבוא smbus bus = smbus. SMBus (1) יבוא colorys def hue2color (גוון): פרשנות צבע # המבוססת על ערכי הגוון המחושבים אם ((גוון> 12) ו (גוון 25) ו (גוון 69) ו (גוון 164) ו (גוון 194) ו (גוון 269) ו (גוון 319) או (גוון <20)): 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) # גרסה # צריך להיות 0x44 אם ver == 0x44: הדפס ("התקן נמצא / n") bus.write_byte (0x29, 0x80 | 0x00) # 0x00 = אפשר הרשמה bus.write_byte (0x29, 0x01 | 0x02) # 0x01 = הפעלה, 0x02 חיישני RGB מופעלים bus.write_byte (0x29, 0x80 | 0x14) # תוצאות קריאה מתחילות לרשום 14, LSB ואז נתוני MSB = bus.read_i2c_block_data (0x29, 0) clear = clear = data [1] << 8 | data [0] red = data [3] << 8 | נתונים [2] ירוק = נתונים [5] << 8 | data [4] blue = data [7] << 8 | data [6] crgb = "ספירות מוחלטות: C: %s, R: %s, G: %s, B: %s / n" %(בהיר, אדום, ירוק, כחול) הדפסה (crgb) time.sleep (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_blue) hue = hsv_col [0]* אם rel_bright> 0.9: col = "לבן" # אם בהיר מאוד -> elif לבן rel_bright שחור אחר: col = hue2color (hue) # בחירת צבע לפי ערכי גוון # print ("ערכים יחסית בהירים, אדומים, ירוקים, כחולים:") # הדפסה (rel_bright, rel_red, rel_green, rel_blue) # print ("ערכי HSV (גוון, רוויה, ערך):", hsv_col) # print ("hue in °", hue) חזור [col, rel_bright, rel_red, rel_green, rel_blue, hue]

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) # נפח ומגרש דורשים נובמבר 2017 תיקון הנהג audio.py ו- _tty.py!

aiy.audio.say ("כדי להתחיל, העבר את החיישן מעל האובייקט. לאחר מכן לחץ על הכפתור הכחול",, עוצמת הקול = 50, המגרש = 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] # צבע, שכן גוון טקסט = str (int (תוצאה [5])) # גוון ב- °, כטקסט 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) הדפס (color_text) aiy.audio.say (color_text,, volume = 75, pitch = 100) hue_text = ("ערך הגוון הוא "+ גוון+" מעלות ") הדפס (hue_text) aiy.audio.say (hue_text,, נפח = 75, גובה = 100)

אם _name_ == '_ עיקר_': main ()

שלב 4: כמה קישורים והערות

ניתן למצוא את גליון הנתונים של חיישן TCS34725 כאן:

הקוד לקריאת החיישן בו השתמשתי תואר כאן:

אתה עשוי למצוא מידע נוסף על מדידות צבע עם חיישן זה וחיישן אחר במדריכים הקודמים שלי:

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

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

מוּמלָץ: