جدول المحتويات:
2025 مؤلف: John Day | [email protected]. آخر تعديل: 2025-01-13 06:56
كنت أرغب في بناء نوع من مصابيح الفناء التفاعلية للفناء الخلفي. كانت الفكرة ، عندما يسير شخص ما في اتجاه ما ، فإنه يؤدي إلى رسم متحرك في الاتجاه الذي تمشي فيه. لقد بدأت بمصابيح شمسية Dollar General بقيمة 1.00 دولار
الخطوة 1: أحصل على أضواء Solor
كانت الخطوة الأولى هي إحراق الأضواء لإفساح المجال لمزيد من الأشياء الممتعة. لقد بدأت بقطع المصباح الأصلي والبطارية. تأكد من حفظ هذه الأجزاء لأنها ستكون مفيدة في مشروع آخر ، كما قمت بإزالة قبة الكروم التي كانت في الجزء السفلي من الضوء الشمسي ولصقها في الأعلى كما هو موضح في الصور
الخطوة الثانية: تركيب مصابيح أفضل
بالنسبة إلى المصباح ، استخدمت ws2811b المقاوم للماء والذي يمكن العثور عليه هنا
www.ebay.com/itm/50-X-12mm-LED-Module-RGB-…
لقد خططت في الأصل لوضع مستشعرات PIR داخل المصابيح الشمسية. ولكن ثبت أن هذا يمثل مشكلة لأن المستشعر لا يمكنه رؤية ما وراء البلاستيك. يجب أن يكون لديه نوع من أهلية ترشيح الأشعة فوق البنفسجية. لذلك اخترت شيئًا مثل هذا
www.thingiverse.com/thing:2590216
الخطوة الثالثة: البرمجة
إذا كنت تريد أن تجعل الأضواء لا تستخدم المستشعر أو تعمل فقط طوال الوقت ، فابحث فقط عن المكان الذي تم التعليق عليه كـ "تغيير حالة العلم" واضبطه على الأثير 1 أو 0 ، وسأضيف المزيد من الصور عندما أكمل هذا بنفسي. لا يزال هذا العمل قيد التقدم ولكن أعتقد أنه من الرائع جدًا عدم مشاركته على الفور. شكرا للبحث
الإعداد باطل() {
// ضع رمز الإعداد هنا ، للتشغيل مرة واحدة: FastLED.addLeds (المصابيح ، NUM_LEDS) ؛ Serial.begin (9600) ؛ pinMode (buttonPin1 ، الإدخال) ؛ pinMode (buttonPin2 ، الإدخال) ؛ }
حلقة فارغة() {
Serial.println (FlagState) ؛
إذا (FlagState == 0) {ForwardLeds () ؛ } إذا (FlagState == 1) {RevLeds () ؛ } إذا (FlagState == 2) {Waiting () ؛ }}
ForwardLeds باطلة () {
فيرستليد = -1 ؛ LastLed = 16 ؛ لـ (int i = 0 ؛ i <8 ؛ i ++) {LastLed-- ؛ فيرستليد ++ المصابيح [LastLed] = CRGB:: أبيض ؛ المصابيح [FirstLed] = CRGB:: أبيض ؛ تأخير (750) ؛ FastLED.show () ، Serial.print ("ممر أبيض") ؛ Serial.print (i) ؛ Serial.println ("من 8") ؛ } FirstLed = -1 ؛ LastLed = 16 ؛ لـ (int i = 0 ؛ i <8 ؛ i ++) {LastLed-- ؛ فيرستليد ++ المصابيح [LastLed] = CRGB:: أزرق ؛ المصابيح [FirstLed] = CRGB:: أزرق ؛ تأخير (250) ؛ FastLED.show () ، Serial.print ("Blue Pass") ؛ Serial.print (i) ؛ Serial.println ("من 8") ؛ } FirstLed = -1 ؛ LastLed = 16 ؛ لـ (int i = 0 ؛ i <8 ؛ i ++) {LastLed-- ؛ فيرستليد ++ المصابيح [LastLed] = CRGB:: أرجواني ؛ المصابيح [FirstLed] = CRGB:: أرجواني ؛ تأخير (250) ؛ FastLED.show () ، Serial.print ("ممر أحمر") ؛ Serial.print (i) ؛ Serial.println ("من 8") ؛ } FirstLed = -1 ؛ LastLed = 16 ؛ لـ (int i = 0 ؛ i <8 ؛ i ++) {LastLed-- ؛ فيرستليد ++ المصابيح [LastLed] = CRGB:: أسود ؛ المصابيح [FirstLed] = CRGB:: أسود ؛ تأخير (250) ؛ FastLED.show () ، Serial.print ("إيقاف تشغيل الصمام") ؛ Serial.print (i) ؛ Serial.println ("من 8") ؛ } FlagState = 2 ؛ // change flag state} void RevLeds () {Serial.println ("in reverse")؛ فيرستليد = 8 ؛ LastLed = 7 ؛ لـ (int i = 0 ؛ i <8 ؛ i ++) {LastLed ++ ؛ FirstLed-- ؛ المصابيح [LastLed] = CRGB:: أبيض ؛ المصابيح [FirstLed] = CRGB:: أبيض ؛ تأخير (750) ؛ FastLED.show () ، Serial.print ("ممر أبيض") ؛ Serial.print (i) ؛ Serial.println ("من 8") ؛ } FirstLed = 8 ؛ LastLed = 7 ؛ لـ (int i = 0 ؛ i <8 ؛ i ++) {LastLed ++ ؛ FirstLed-- ؛ المصابيح [LastLed] = CRGB:: أزرق ؛ المصابيح [FirstLed] = CRGB:: أزرق ؛ تأخير (250) ؛ FastLED.show () ، Serial.print ("الممر الأزرق") ؛ Serial.print (i) ؛ Serial.println ("من 8") ؛ } FirstLed = 8 ؛ LastLed = 7 ؛ لـ (int i = 0 ؛ i <8 ؛ i ++) {LastLed ++ ؛ FirstLed-- ؛ المصابيح [LastLed] = CRGB:: أرجواني ؛ المصابيح [FirstLed] = CRGB:: أرجواني ؛ تأخير (250) ؛ FastLED.show () ، Serial.print ("ممر أحمر") ؛ Serial.print (i) ؛ Serial.println ("من 8") ؛ }
فيرستليد = 8 ؛
LastLed = 7 ؛ لـ (int i = 0 ؛ i <8 ؛ i ++) {LastLed ++ ؛ FirstLed-- ؛ المصابيح [LastLed] = CRGB:: أسود ؛ المصابيح [FirstLed] = CRGB:: أسود ؛ تأخير (250) ؛ FastLED.show () ، Serial.print ("إيقاف تشغيل Led") ؛ Serial.print (i) ؛ Serial.println ("من 8") ؛ } FlagState = 2 ؛ // تغيير حالة العلم} void Waiting () {buttonState1 = digitalRead (buttonPin1) ؛ buttonState2 = digitalRead (buttonPin2) ، if (buttonState1 == HIGH) {Serial.println ("تم تشغيل الأمام") ؛ FlagState = 0 ؛ } else if (buttonState2 == HIGH) {Serial.println ("Rev triggered") ؛ FlagState = 1 ؛ } Serial.println ("حلقة منتهية الانتظار")؛ }