الموظفين لسانتا كلوز



كل عام في 31 كانون الأول (ديسمبر) ، في زي سانتا كلوز ، وزوجتي ، في دور Snow Maiden ، أتجول في المدينة لأصدقائي مع التهاني. منذ أن اقتربت السنة الجديدة قريبًا ، قررت أن أتحقق مما إذا كان كل شيء جاهزًا بالنسبة لي وأخرجت الموظفين التابعين لي منذ فترة طويلة من الطابق السفلي. لدهشتي ، بعد الكذب في الطابق السفلي لمدة عام ، كان يعمل بشكل صحيح حتى الآن! لا يزال يتم شحن بطاريته بطريقة أو بأخرى! الموظفين ليس مشرقا للغاية ، لكنه يضيء. بالطبع ، سأضطر إلى إعادة الشحن ، وأنا أشاهد مصباح LED يتوقف عن العمل ، ولكن هذا قابل للتثبيت - سنصلحه.

لقد عدت إلى هذا الفريق عام 2012 ، ومنذ ذلك الحين خدمتني بإخلاص. الأمر بسيط للغاية ، لكنه فعال للغاية ، خاصة أن الأطفال يفرحون به. إنه يشبه سيف Jedi تقريبًا - فقط طاقم عمل ، وبالنسبة لسانتا كلوز الحقيقي - هذا شيء ضروري. قررت أن أكتب عنه هنا على حبري - فجأة سوف يستلهم شخص ما الفكرة ويجعلها لنفسه بحلول العام الجديد ، لا يزال هناك وقت.

لتكوين فريق عمل ، ستحتاج:

  • قطعة من أنابيب المياه البلاستيكية 1.3 متر ؛
  • قليلا لامعة ذاتية اللصق للزينة.
  • قطعة من كابل شبكة UTP-5 أو أي كابل مناسب آخر ؛
  • المصابيح الزرقاء ، على الأقل 24 قطعة ؛
  • البطارية؛
  • زر الطاقة ؛
  • أي متحكم صغير أو لوحة FPGA تحتوي على شيء يمكنك البرمجة ؛
  • لعبة شجرة عيد الميلاد الكبيرة التي يمكن تقسيمها إلى نصفين بحيث يمكن إخفاء كل من اللوحة والبطارية.

الأجزاء اللازمة مرئية في هذه الصورة:



جهاز الموظفين بسيط جدا. لا يوجد شيء خاص للكتابة عنه. نأخذ أنبوبًا من البلاستيك الأبيض ونحفر العديد من الثقوب على نفس المسافة من 200 ملم. حصلت على 6 ثقوب.

نذوب كابل UTP-5 في عدة أزواج ملتوية. هناك حاجة إلى ستة أزواج من الأسلاك. نطلقها في الثقوب ونخرج من طرف واحد من الأنبوب ، حيث ستكون الكرة السحرية للموظفين. عندما تدخل أزواج من الأسلاك في فتحات الأنبوب ، نقوم بتنظيفها ونلفها بإحكام حول الأنبوب على مسافة معينة من بعضها البعض. نحن جندى إلى "الحافلة" الناتجة في دائرة من جندى الموظفين بأربعة لمبات LED زرقاء:



في الجزء العلوي من الأنبوب ، تحتاج إلى حفر حفرة أكبر ولصق زر طاقة لوحة التحكم هناك:



لدي وشاح روفر المريخ كوحة تحكم. هنا FPGA من Altera MAX II ، وبما أن اللوحة كانت تهدف في الأصل إلى توصيل محركات الألعاب منخفضة الطاقة ، يتم دمج مخرجات الرقاقات على اللوحة في 10 قطع لإعطاء المزيد من التيار. لا يوجد سوى 6 من هذه المسامير المدمجة على اللوحة - هذه هي "إشارات" اللوحة f0 ، f1 ، f2 ، f3 ، f4 ، f5. لذلك يمكنني تشغيل مصابيح LED مباشرة من هذه الاستنتاجات دون خوف من حرق ناتج FPGA. يوجد أيضًا على اللوحة نفسها 8 مصابيح LED صفراء - يمكن إشعالها أيضًا. إذا كانت الكرة الموجودة على أعلى الموظفين شفافة ، فإن هذا سيضيف أيضًا مؤثرًا بصريًا.

إذا كنت تستخدم Arduino ، على سبيل المثال ، في أحد الموظفين ، فقد تضطر إلى لحام وشاح صغير مع مفاتيح الترانزستور للتحكم في العديد من المصابيح ، لأنه من الأفضل عدم أخذ أكثر من 10-15mA من دبوس واحد من متحكم ، لكننا بحاجة إلى المزيد من أجل LEDs.

يحتاج المجلس إلى وميض مع برنامج التحكم. والفكرة هي أنه عند الضغط على الزر الموجود على الموظفين ، يتم تشغيل اللوحة ويبدأ على الفور في إضاءة الأضواء على الموظفين. ثم من لديه ما الخيال. أضيء أولاً بدوره جميع مصابيح LED من الصف الأول إلى السادس ، ثم أطفئ المنعطفات من الصف السادس إلى الأول.

ربما يفسر رمز فيريلوج HDL بشكل أفضل ما أقصده:

module effect( input wire clk, input wire mclk, output wire [7:0]leds, output wire f0, output wire f1, output wire f2, output wire f3, output wire f4, output wire f5 ); reg [3:0]cnt; reg [5:0]bits; initial begin bits= 6'h00; cnt = 4'h0; end always @(posedge clk) if(cnt==11) cnt<=0; else cnt <= cnt + 1'b1; always @* begin case(cnt) 4'h0: bits = 6'b000001; 4'h1: bits = 6'b000011; 4'h2: bits = 6'b000111; 4'h3: bits = 6'b001111; 4'h4: bits = 6'b011111; 4'h5: bits = 6'b111111; 4'h6: bits = 6'b011111; 4'h7: bits = 6'b001111; 4'h8: bits = 6'b000111; 4'h9: bits = 6'b000011; 4'ha: bits = 6'b000001; default: bits = 6'b000000; endcase end assign f0 = bits[0] & mclk; assign f1 = bits[1] & mclk; assign f2 = bits[2] & mclk; assign f3 = bits[3] & mclk; assign f4 = bits[4] & mclk; assign f5 = bits[5] & mclk; assign leds = {bits[5],bits[5],bits[4],bits[3],bits[2],bits[1],bits[0],bits[0]}; endmodule 

هذه ليست وحدة نمطية من المستوى الأعلى ، بل هي وحدة تأثير. من الوحدة العليا ، يتم توفير ترددين على مدار الساعة من clk ~ 40Hz هنا - يحدد هذا التردد سرعة التأثير والتردد الثاني mclk ~ 320Hz ، أعلى ثماني مرات. تعمل إشارة mclk أيضًا على تعديل النواتج مرة أخرى ، بحيث لا يتم تشغيلها دائمًا ، بحيث لا تضيء مصابيح LED بشكل مشرق ولا تتسخ الرقاقة.

لا أعرف ما إذا كنت بحاجة إلى حفظ هذه المقالة. ولكن فقط في حالة ، سأكتب أنه يمكن محاكاة رمز Verilog أعلاه تمامًا باستخدام مثل testbench:

 `timescale 1ms / 1us module tb; reg clock = 1'b0; always #10 clock = ~clock; reg [3:0]counter=0; always @(posedge clock) counter <= counter+1; wire [7:0]wleds; wire wf0,wf1,wf2,wf3,wf4,wf5; effect inst( .clk( counter[2] ), .mclk( clock ), .leds( wleds ), .f0( wf0 ), .f1( wf1 ), .f2( wf2 ), .f3( wf3 ), .f4( wf4 ), .f5( wf5 ) ); initial begin $dumpfile("out.vcd"); $dumpvars(0,tb); #10000; $finish(); end endmodule 

كيف بالضبط محاكاة المشاريع يمكن قراءتها ، على سبيل المثال ، هنا .

حسنًا ، وفقًا لنتائج المحاكاة ، يمكنك الحصول على مخططات توقيت الإشارات:



إذا كنت تخطط للقيام بهذا المشروع على Arduin - هذا ممكن أيضًا. أنا في الحقيقة لست خبيرًا كبيرًا في Arduina ، لكن يبدو لي أن الكود قد يبدو مثل هذا:

 int start_pin = 2; int end_pin = 8; void setup() { for (int i = start_pin; i< end_pin; i++ ) pinMode(i, OUTPUT); } void loop() { for (int i = start_pin; i< end_pin; i++ ) { digitalWrite(i, HIGH); delay(250); } for (int i = start_pin; i< end_pin; i++ ) { digitalWrite(i, LOW); delay(250); } } 

يجب أن تكون النتيجة شيء مثل هذا:


على الرغم من أن المشروع ككل بسيط للغاية ، إلا أن المتفرجين والمارة غير الرسمية يوم 31 ديسمبر متحمسون دائمًا. خاصة عندما تخرج من السيارة مرتدية حلة سانتا كلوز في أحد الشوارع الثلجية ، تصعد إلى أحد المارة غير العاديين وتضيء الطريق مع أحد الموظفين وتقدم بطة الماندرين.

Source: https://habr.com/ru/post/ar479404/


All Articles