جدول المحتويات:
- الخطوة 1: المواد المستخدمة
- الخطوة 2: التجميع والاستخدام
- الخطوة الثالثة: الكود
- الخطوة الرابعة: بعض الروابط والملاحظات
فيديو: مستشعر ألوان يتحدث ، استنادًا إلى AIY Voice Kit: 4 خطوات
2024 مؤلف: John Day | [email protected]. آخر تعديل: 2024-01-30 07:41
بعد أن تعلمت قليلاً عن طريقة برايل مؤخرًا ، كنت أتساءل عما إذا كان بإمكاني إنشاء شيء باستخدام مجموعة AIY الصوتية لـ Raspberry Pi ، والتي قد يكون لها فائدة حقيقية لضعاف البصر. كما هو موضح في ما يلي ، ستجد نموذجًا أوليًا لجهاز بسيط للكشف عن الألوان يقرأ النتائج التي توصل إليها بصوت عالٍ.
قد يكون إصدار أكثر تفصيلاً من هذا النظام مفيدًا للأشخاص الذين يعانون من ضعف البصر أو عمى الألوان.
يستخدم النظام Raspberry Pi مع مرفق AIY voice HAT. يتم توصيل اختراق مستشعر TCS34725 RGB بمنفذ I2C الخاص بـ HAT. يحتوي الاختراق على مؤشر LED أبيض دافئ ساطع لإضاءة الكائن المراد تحليله. تم وضع الكسر في مبيت لتحسين وتوحيد شروط القياس.
يقيس مستشعر الألوان الثلاثة نفس نطاقات التردد الثلاثة مثل مستشعرات الألوان في عينيك. ثم يتم استخدام قيم الأحمر والأخضر والأزرق (RGB) لحساب انطباع اللون العام.
الشيء الجميل في هذا النظام الخاص هو أنه يخبرك الآن عن اللون شفهيًا ، باستخدام الأمر "say" لمجموعات AIY الصوتية. يرجى إلقاء نظرة على الفيديو المصاحب.
قد يكون الجهاز مفيدًا أيضًا كمثال لجهاز استشعار I2C متصل بـ AIY voice HAT.
الخطوة 1: المواد المستخدمة
Raspberry Pi 3. ~ 35 دولار أمريكي أو يورو
مجموعة الصوت AIY ، مع رؤوس ملحومة في HAT. ~ 25 دولارًا أمريكيًا أو يورو
Adafruit TCS34725 اندلاع ، مع رأس ملحوم. ~ 8 دولارات أمريكية أو يورو
كابلات توصيل.
لوح توصيل (اختياري)
بالنسبة لغلاف المستشعر: - كبسولة قهوة "Dolce Gusto" مستعملة - قطعة دائرية صغيرة من الفوركس 2 مم (لوح فوم PVC) ، قطرها حوالي 37 مم - مادة سوداء غير عاكسة لتغطية الجدران الداخلية للغلاف. لقد استخدمت رغوة مطاطية سوداء ذاتية اللصق.
اختياري: مفتاح صغير لاستحضار القياسات
بضع قطرات من الغراء البلاستيكي وسكين تقطيع.
الخطوة 2: التجميع والاستخدام
تم إعداد Raspberry Pi مع AIY voice HAT كما هو موضح في دليل AIY. قبل التجميع ، تم لحام الرؤوس بالمنافذ الموجودة في HAT. بالنسبة لغطاء المستشعر ، تم تفريغ كبسولة قهوة "دولتشي غوستو" وتنظيفها وإزالة جزء من الجزء السفلي بعناية باستخدام سكين. يمكنك استخدام شيء آخر لهذا الغرض ، كبسولة القهوة بالحجم والشكل المناسبين. تم قطع قطعة مستديرة من الفوركس بحجم 2 مم من لوحة ، ثم تم وضع الاختراق مركزيًا على لوحة الفوركس ، وتم وضع علامة على الموضع بقلم شعر ، وتم قطع فتحة للرأس عند الاختراق في الموضع المناسب.
الآن تم لصق قطعة الفوركس على الغلاف وتم توصيل كسر المستشعر بلوحة Forex ، باستخدام شريط فيلكرو. ثم غُطيت الجدران الداخلية بمادة سوداء ماصة للضوء ، استخدمت رغوة مطاطية ذاتية اللصق. يجب أن يعمل الورق المقوى الأسود أيضًا. الآن ، باستخدام كبلات التوصيل ، تم توصيل منفذ I2C "3.3V" الخاص بـ HAT بـ "V in" على المستشعر ، و Ground to Gnd ، و sda إلى sda و scl إلى scl. لقد استخدمت لوح التجارب لتوصيل كلا الجزأين ، لكن هذا ليس ضروريًا.
ضع البرنامج النصي AIY_TCS34725 python في مجلد src وقم بتشغيل البرنامج النصي من dev terminal ، مع إدخال "sec / AIY_TCS34752.py". قد تضطر إلى جعل نص Python قابلاً للتنفيذ أولاً. عندما يُطلب منك ذلك ، ضع وحدة الاستشعار فوق الكائن المراد قياسه ، واضغط على الزر في جهاز AIY وانتظر ثانية أو ثانيتين.
بعد ذلك ، بناءً على قيم RGB والقيم البيضاء المقاسة ، يحسب الجهاز أولاً قيمة تدرج اللون المقابلة ، ثم يقدر اللون بناءً على هذه القيمة وينقلها شفهيًا عبر نظام الصوت AIY ، على سبيل المثال. ز. كـ "أحمر غامق" ، ولكنه يعطي أيضًا قيمة تدرج اللون. تتم أيضًا طباعة قيم RGB وتدرج الألوان والسطوع (الإضاءة ، على وجه الدقة) على الشاشة.
لتبسيط عملية التعليقات التوضيحية الملونة ، يتم تحويل قيم RGB إلى تنسيق HSV (تدرج اللون ، والتشبع ، والقيمة). يسمح هذا بوضع تعليق توضيحي على لون في نطاق معين من الزوايا (أي شريحة دائرية) ، واختيار اللون بناءً على قيمة تدرج اللون المحسوبة.
تحتاج إلى تطبيع جهازك بمرجع أبيض وأسود. فقط قم بقياس أكثر قطع الورق المتوفرة لديك بياضًا وسوادًا ، وقم بقياس كل منها ، ثم ضع هذه القيم كقيم قصوى ودنيا في الكود. فقط القيم المرجعية المثلى ستمنح تمييزًا جيدًا للألوان.
مشكلة أساسية واحدة هي التفكير. إذا كان لديك جسم ذو سطح لامع أو مصقول ، فسوف يعكس الكثير من الضوء المنبعث من LED ، ويظهر أخف بكثير مما هو عليه بالفعل. يمكنك استخدام ورقة من الغشاء لتشتيت الضوء ، ولكن قد تحتاج إلى تطبيق عامل تصحيح.
في حالة الأجسام شبه الشفافة ، قد يكون من السهل وضعها على ورقة بيضاء ، وإلا فإن كمية الضوء المنعكس ستكون صغيرة وسيتم الإبلاغ عن الكائن على أنه "أسود".
إذا كنت ترغب في قياس لون الأشياء التي ينبعث منها الضوء ، فيجب عليك إيقاف تشغيل مؤشر LED عند الاختراق عن طريق توصيل منفذ "LED" الموجود على الاختراق بـ "Ground". الآن قم بتعيين قيم التطبيع وفقًا لذلك.
مشكلة عامة أخرى هي إضاءة الكائن. يصدر مصباح LED الأبيض الدافئ عند الاختراق طيفًا غير مستمر من الضوء. لذلك قد يتم تمثيل بعض الألوان بشكل زائد أو ناقص في طيف RGB. لمزيد من المعلومات حول هذا الموضوع ، يرجى إلقاء نظرة على إرشاداتي السابقة على مقاييس الألوان / مقاييس الضوء ومقاييس الطيف:
www.instructables.com/id/An-Inexpensive-Ph…
www.instructables.com/id/A-Mimimal-Six-Col…
الخطوة الثالثة: الكود
الكود عبارة عن مزيج من تعديل كود من دليل الصوت AIY ، ورمز مستشعر TCS34725 بواسطة Bradspi.
لقد حاولت أيضًا استخدام كود TCS34725 python من Adafruit ، لكنني واجهت مشاكل في تشغيل هذا وبعض الرموز الأخرى التي تستخدم مكتبات خارجية مع AIY HAT. نرحب بأي مساعدة.
كما ذكرنا سابقًا ، يعتمد التعليق التوضيحي على اللون على تحويل قيم RGB إلى تدرج اللون. يجب عليك ضبط إعدادات التطبيع بناءً على القياسات التجريبية لمواد الخشوع باللونين الأبيض والأسود. املأ القيم المطلقة لـ R و G و B min أو max وفقًا لذلك.
يستخدم البرنامج النصي إصدارًا جديدًا من الأمر "say" يسمح بتنظيم مستوى الصوت ودرجة الصوت. في هذه الحالة ، قد تضطر إلى تحديث ملفات برنامج التشغيل audio.py و tty أو حذف "أجزاء الصوت ودرجة الصوت" من البرنامج النصي.
#! / usr / bin / env python3 # هذا البرنامج النصي هو تعديل للنص servo_demo.py لـ AIY voice HAT ، # مُحسّن للتعرف على اللون باستخدام اندلاع Afafruit TCS34725 استيراد aiy.audio import aiy.cloudspeech import aiy.voicehat # من gpiozero import LED # يمكن أن يكون مفيدًا لمؤشر LED خارجي على منفذ مؤازر # من زر استيراد gpiozero # يمكن أن يكون مفيدًا لزر خارجي في استيراد وقت استيراد منفذ مؤازر smbus bus = smbus. SMBus (1) استيراد colorys def hue2color (hue): # تفسير اللون استنادًا إلى قيم تدرج اللون المحسوبة إذا ((hue> 12) و (hue 25) و (hue 69) و (hue 164) و (hue 194) و (hue 269) و (hue 319) أو (hue <20)): color = "red" إرجاع اللون 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 = ENABLE تسجيل 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 | البيانات [0] أحمر = بيانات [3] << 8 | البيانات [2] أخضر = بيانات [5] << 8 | البيانات [4] الأزرق = البيانات [7] << 8 | البيانات [6] crgb = "الأعداد المطلقة: C:٪ s ، R:٪ s ، G:٪ s ، B:٪ s / n"٪ (واضح ، أحمر ، أخضر ، أزرق) طباعة (crgb) time.sleep (1) وإلا: print ("لم يتم العثور على الجهاز / 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 = ((clear - min_bright) / (max_bright - min_bright)) rel_red = ((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 = coloursys.rgb_to_hsv (rel_red، rel_green، rel_blue) hue = 0] *_col if rel_bright> 0.9: col = "white" # if very bright -> أبيض elif rel_bright أسود آخر: col = hue2color (hue) # تحديد اللون بواسطة قيم تدرج اللون # print ("القيم النسبية ساطعة ، أحمر ، أخضر ، أزرق:") # print (rel_bright، rel_red، rel_green، rel_blue) # print ("قيم HSV (تدرج اللون ، التشبع ، القيمة):" ، hsv_col) # print ("hue in °" ، hue) return [col، rel_bright، rel_red، rel_green، rel_blue، hue]
def main ():
button = aiy.voicehat.get_button () # تغيير حالة الزر led = aiy.voicehat.get_led () # تغيير حالة Button-LED aiy.audio.get_recorder (). start () # buttoni = Button (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] # لون ، كنص hue = str (int (نتيجة [5])) # hue في ° ، كنص 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 == "أبيض "or col ==" black ": bright =" "elif (النتيجة [1]> 0.69): # سطوع / إضاءة سطوع اللون =" light "elif (النتيجة [1] <0.25): bright =" dark "else: مشرق = "متوسط" # التواصل t ينتج color_text = ("لون الكائن هو" + Bright + "" + col) print (color_text) aiy.audio.say (color_text، الحجم = 75، درجة الصوت = 100) hue_text = ("قيمة الصبغة هي "+ hue +" degrees ") print (hue_text) aiy.audio.say (hue_text، الحجم = 75، درجة الصوت = 100)
if _name_ == '_main_': main ()
الخطوة الرابعة: بعض الروابط والملاحظات
يمكن العثور على ورقة بيانات جهاز الاستشعار TCS34725 هنا:
تم وصف الكود الخاص بقراءة المستشعر الذي استخدمته هنا:
قد تجد بعض المعلومات الإضافية حول قياسات الألوان باستخدام هذا ومستشعر آخر في إرشاداتي السابقة:
www.instructables.com/id/An-Inexpensive-Ph…
www.instructables.com/id/A-Mimimal-Six-Col…
موصى به:
MQTT استنادًا إلى MicroPython ESP32: 5 خطوات
MQTT استنادًا إلى MicroPython ESP32: أحب الاحتفاظ بالقطط الأليفة. بعد يوم من العمل المكثف ، يمكن للقط أن يريحني عندما أصل إلى المنزل. بعد تدريب شاق ، اعتاد هذا القط على تناول الطعام بانتظام في & quot؛ المطعم & quot؛ كل يوم. لكن في الآونة الأخيرة أضطر إلى السفر لبضعة أيام و
بوابة UDP / IP التسلسلية لـ Arduino استنادًا إلى ESP8266 Shield: 8 خطوات
بوابة UDP / IP التسلسلية لـ Arduino استنادًا إلى ESP8266 Shield: لقد نشرت بالفعل في عام 2016 هذه التعليمات & quot؛ كيفية إنشاء بوابة Wifi الخاصة بك لتوصيل Arduino بشبكة IP & quot ؛. منذ أن أجريت بعض التحسينات على الكود وما زلت أستخدم هذا الحل. ومع ذلك ، هناك الآن بعض دروع ESP8266 t
[15 دقيقة] Weasley Clock / Who Is Home Indicator - استنادًا إلى TR-064 (تجريبي): 4 خطوات (بالصور)
[15 دقيقة] Weasley Clock / Who Is Home Indicator - استنادًا إلى TR-064 (تجريبي): التحديث: راجع الخطوة 3. القصة الطويلة (TL ؛ DR أدناه): منذ بعض الوقت كتبت نصًا صغيرًا من bash-script على جهاز الكمبيوتر الخاص بي افحص الشبكة بحثًا عن الأجهزة المسجلة وقارن أسماء المضيفين بقائمة بالأسماء المرتبطة. في كل مرة يسجل فيها الجهاز
قم بإنشاء تطبيق IPhone الذي يتحدث إلى Particle Mesh: 4 خطوات
قم بإنشاء تطبيق IPhone الذي يتحدث إلى Particle Mesh: في هذا المشروع ، ستتعلم كيفية تحميل تطبيق على جهاز iPhone الخاص بك والذي يتحدث مباشرة إلى لوحة Particle Mesh من الجيل الثالث. سيستغرق الأمر أقل من 20 دقيقة من وقتك. بالإضافة إلى ذلك ، يمكنك البدء في الترقيع على الفور !! هيا نبدأ. الأشياء التي سوف
أضف صوت بدء تشغيل إلى Google AIY Voice Kit: 6 خطوات (بالصور)
أضف Trigger Start Sound إلى Google AIY Voice Kit: هذا البرنامج التعليمي بسيط جدًا. لقد كنت أستمتع حقًا بـ Google AIY Voice Kit ، لكنني أحب حقًا في جهاز Google Home العادي الخاص بي الضوضاء التي يصدرونها لتأكيد أنهم يستمعون بنشاط. لم يتم الإعداد افتراضيًا في أي من الأمثلة التي