جدول المحتويات:

ضوء ليلي متغير اللون باستخدام Ardruino 101: 4 خطوات (بالصور)
ضوء ليلي متغير اللون باستخدام Ardruino 101: 4 خطوات (بالصور)

فيديو: ضوء ليلي متغير اللون باستخدام Ardruino 101: 4 خطوات (بالصور)

فيديو: ضوء ليلي متغير اللون باستخدام Ardruino 101: 4 خطوات (بالصور)
فيديو: شيخ يحطم طائرة حربية 2024, شهر نوفمبر
Anonim
Image
Image
ضوء ليلي متغير اللون باستخدام Ardruino 101
ضوء ليلي متغير اللون باستخدام Ardruino 101

في هذا المشروع ، ستصنع مصباحًا ليليًا باستخدام ardruino و Adafruit neo rgb Strips وطابعة ثلاثية الأبعاد.

لاحظ أن هذا التطفل مخصص فقط لمشروع مدرستي. رمز هذا المشروع يستند إلى مشروع آخر. مع ذلك ، فأنا لست خبيرًا عندما يتعلق الأمر بـ Ardruino.

الخطوة 1: المتطلبات

متطلبات
متطلبات
متطلبات
متطلبات
متطلبات
متطلبات

لهذا المشروع سوف تحتاج إلى الأجهزة والأدوات التالية

المعدات:

1 - a ardruino101 (في الولايات المتحدة) أو Genuino101 (خارج الولايات المتحدة).

2 - شرائح ليد نيوبكسل rgb من ادافروت (5 فولت).

3 - موصل usb ardruino (موصل من النوع B إلى A).

4 - برنامج من Ardruino ، Ardruino IDE في هذا البرنامج التعليمي سنستخدم الإصدار 1.8.5. متطلبات مكتبة البرمجيات هي: 101 ، Adafruit NeoPixel و Madgwick.

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

6 - مجموعة اللحام الأساسية.

الخطوة 2: فهم الأجهزة والبرامج

أردروين / جينوينو 101

فقط لتوضيح Ardruino101 و genuino101 هي نفسها تمامًا بجانب الأسماء. كلاهما لهما نفس المواصفات ويستخدمان نفس البرنامج.

تمتلك Ardruino101 المواصفات الأساسية مثل ardruino UNO والمزيد. الميزة الرئيسية لـ ardruino101 هي مقياس التسارع والجيروسكوب اللذين سنستخدمهما في مشروعنا. كما يحتوي هذا النوع من ardruino على مكتبة رموز فريدة تسمى CurrieIMU (وحدات القياس الداخلية) والتي يتم تضمينها في ملحق المكتبة 101.

مع ذلك دعنا نتحدث عن البرنامج.

البرامج والمكتبات

يستخدم Ardruino IDE بيثون باعتباره كود المصدر الرئيسي. إنها أيضًا منصة الشفرة الرئيسية حيث يعمل معظم ardruino. هناك الكثير من البرامج التعليمية عبر الإنترنت حول كيفية استخدام هذا البرنامج ، لذا أوصيك بالبحث عنها أولاً إذا كنت جديدًا في هذا البرنامج.

مع ذلك ، فإن المكتبات التي نستخدمها هي التالية:

من قائمة Sketch ،> Include Library> Manage Libraries… في مربع إدخال النص ، اكتب

- 101 في الستاندارت ، لا يتم تضمين ardruino 101 تلقائيًا في ardruino IDE. نحتاج إلى ملحق المكتبة هذا من أجل كتابة نوع ardruino الخاص بنا.

-Adafruit NeoPixel من أجل ترميز شرائط Neo pixel الخاصة بنا.

-مادجويك من أجل قراءة البيانات الأولية ولحساب هذه البيانات إلى خام ، وقلب وتدحرج.

شرائط نيو RGB

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

فيما يلي بعض النصائح التي تحتاج إلى معرفتها قبل البدء في هذه الشرائط.

ستحتاج أولاً إلى شرائط LED Neodigital RGB من adafruit. هذا النوع من الشرائط يمكن التحكم فيه باستخدام الرموز. بعد ذلك ، عليك أن تعرف أن هناك جانبًا خلفيًا وجانبًا أماميًا على هذه الشرائط. هذا الجانب الخلفي والأمامي مهم للحام. تأكد من لحام الجانب الأمامي حيث يشير مفتاح السهم بعيدًا عن الطرف.

هنا دليل حول كيفية استخدامها.

هناك 3 نقاط لحام يجب أن تضعها في اعتبارك الاتصال الأرضي (GND) واتصال الجهد (V) ووصلة Pin (DIN).

الخطوة 3: إعداد المكونات

إعداد المكونات
إعداد المكونات
إعداد المكونات
إعداد المكونات
إعداد المكونات
إعداد المكونات

ستحتاج أولاً إلى طباعة ثلاثية الأبعاد للمكون الذي يمكنك العثور عليه في المتطلبات. في هذه الحالة سأستخدم جيش التحرير الشعبى الصينى. تأكد من أن قطر الجسم العلوي 11 سم × 11 سم. هذا يضمن أن ardruino والشرائط سوف تتناسب مع shpere. لاحظ أن كل طابعة ثلاثية الأبعاد تستخدم برامج مختلفة لحساب عملية الطباعة. مع ذلك ، قد يتم تغيير حجم الملف الذي تستخدمه بشكل مختلف ، لذا ضع ذلك في الاعتبار.

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

ثالثًا ، فإن skematichs لـ ardruino والشرائط سهلة إلى حد ما. ستستخدم 3 أسلاك لتوصيل الشرائط بأردروينو. لاحظ أن الأماكن الوحيدة التي جندى فيها هي على الشرائط. ليس على Ardruino نفسها.

يذهب GND إلى GND

يذهب DIN إلى Pin (في حالتنا pin6 على ardruino)

5V يذهب إلى 5V

تأكد من أن كمية شرائط LED التي تستخدمها هي الحد الأقصى 30. بعد ذلك ، ستفشل في تنفيذ الكود بشكل صحيح. يمكنك ببساطة قص أي شرائط غير ضرورية معروضة بعلامة مقص.

يجب أن يتناسب كل شيء بشكل جيد في المجال الرابع. يمكنك كما لو أنني قمت بعمل تقاطع بين 1 من الطباعة ثلاثية الأبعاد لرؤية الحوض الصغير ووضع بلاستيك شفاف في الأعلى.

الخطوة 4: التشفير

لذا يجب أن يكون لديك الآن جميع المكونات المطلوبة في مكتبتك.

إليك الكود الذي ستحتاجه لتشغيل المشروع. يجب أن تبدو النتيجة مثل رابط الفيديو الذي أرسله في هذه الصفحة.

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

# تضمين # تضمين # تضمين # تضمين

#define PIN 6 // 11 pixels NeoPixel Strip

#define PIN1 7 // 1 pixel NeoPixel Strip #define NUMPIXELS 30 // Numer of píxels #define SAMPLE_RATE 25 // معدل أخذ العينات لمقياس التسارع والجيروسكوب

// تكوين مادجويك

مرشح مادجويك microsPerReading طويلة بدون توقيع ، ميكروسابق تعويم AccelScale ، gyroScale ؛

// تكوين NeoPixel

Adafruit_NeoPixel pixels = Adafruit_NeoPixel (NUMPIXELS، PIN، NEO_GRB + NEO_KHZ800) ؛ Adafruit_NeoPixel pixelsStatus = Adafruit_NeoPixel (1 ، 7 ، NEO_GRB + NEO_KHZ800) ؛

// فضاءات اللون

RGBConverter rgbConverter ؛ ح مزدوج = 1 ؛ مزدوج s = 1 ؛ مزدوج الخامس = 1 ؛ بايت rgb [3] ؛

// مصباح حركة الحالة

// الحالة 0 -> حدد Hue - Pitch // State 1 -> حدد Saturation - Roll // State 2 -> حدد القيمة - Yaw // State 3 -> Fix color volables int statusLamp = 0 ؛

الإعداد باطل() {

Serial.begin (9600) ؛

// بدء تشغيل IMU والتصفية

CurieIMU.begin () ، CurieIMU.setGyroRate (SAMPLE_RATE) ، CurieIMU.setAccelerometerRate (SAMPLE_RATE) ، filter.begin (SAMPLE_RATE) ،

// اضبط نطاق مقياس التسارع على 2G

CurieIMU.setAccelerometerRange (2) ، // اضبط نطاق الجيروسكوب على 250 درجة / ثانية CurieIMU.setGyroRange (250) ؛

CurieIMU.autoCalibrateAccelerometerOffset (X_AXIS، 0) ؛

CurieIMU.autoCalibrateAccelerometerOffset (Y_AXIS، 0) ؛ CurieIMU.autoCalibrateAccelerometerOffset (Z_AXIS، 1) ؛ CurieIMU.autoCalibrateGyroOffset () ،

CurieIMU.attachInterrupt (eventCallback) ،

CurieIMU.setDetectionThreshold (CURIE_IMU_TAP ، 950) ، CurieIMU.interrupts (CURIE_IMU_TAP) ،

// تهيئة المتغيرات لتسريع التحديثات لتصحيح المعدل

microsPerReading = 1000000 / SAMPLE_RATE ، microsPrevious = ميكرو () ،

// التهيئة NeoPixel 11

pixels.begin () ، pixels.show () ،

// التهيئة NeoPixel 1

بكسلStatus.begin () ، pixels.show () ،

// إظهار الحالة بالبكسل

setStatusPixel (statusLamp) ؛ }

حلقة فارغة() {

int aix، aiy، aiz؛ // مقياس التسارع int gix، giy، giz؛ الفأس العائم ، ay ، az ؛ تعويم gx ، gy ، gz ؛ لفة تعويم ، الملعب ، الانعراج ؛ الميكرو الطويل الثابت غير الموقعة الآن ؛

// تحقق مما إذا كان الوقت قد حان لقراءة البيانات وتحديث عامل التصفية

microsNow = ميكرو () ، إذا (microsNow - microsPrevious> = microsPerReading) {

// قراءة البيانات الأولية من CurieIMU

CurieIMU.readMotionSensor (aix، aiy، aiz، gix، giy، giz) ؛

// التحويل من البيانات الأولية إلى الجاذبية والدرجات / الوحدات الثانية

الفأس = convertRawAcceleration (aix) ؛ ay = convertRawAcceleration (aiy) ؛ az = convertRawAcceleration (aiz) ؛ gx = convertRawGyro (gix) ؛ gy = convertRawGyro (giy) ؛ gz = convertRawGyro (giz) ؛

// تحديث عامل التصفية ، الذي يحسب الاتجاه

filter.updateIMU (gx، gy، gz، ax، ay، az) ؛

// طباعة العنوان والخطوة واللف

roll = filter.getRoll () ، الملعب = filter.getPitch () ، ياو = filter.getYaw () ،

// زيادة الوقت السابق ، لذلك نحافظ على وتيرة مناسبة

السابق = microsPrevious + microsPerReading ؛

// فقط في حالة تغيير تدرج اللون أو التشبع أو القيمة

if (statusLamp حدد Hue if (درجة الصوت> = -90 && الملعب <= 90 && statusLamp == 0) {// Transform زاوية درجة = الملعب + 90 ؛ // يحصل على إحداثيات اللون من الزوايا h = درجة الصوت / 180.0 ؛}

// قيود الزوايا

// roll only -90º to 90º = 180º // State 1 -> حدد Saturation if (roll> = -90 && roll <= 90 && statusLamp == 1) {// Transform angle roll = roll + 90؛ // يحصل على حبال ملونة من الزوايا s = roll / 180.0 ؛ }

// الحالة 2 -> حدد القيمة

إذا (statusLamp == 2) {// yaw 0º to 360º v = yaw / 360.0 ؛ }

// تحويل إلى rgb

rgbConverter.hsvToRgb (h، s، v، rgb) ؛ / * Serial.print ("Color:") ؛ Serial.print (ح) ؛ Serial.print ("-") ؛ المسلسل المطبوع (ق) ؛ Serial.print ("-") ؛ Serial.print (v) ؛ Serial.println ("") ؛

Serial.print ("الاتجاه:") ؛

Serial.print (ياو) ؛ Serial.print ("") ؛ Serial.print (الملعب) ؛ Serial.print ("") ؛ Serial.println (لفة) ؛ * /

// تغيير لون البكسل

لـ (int px = 0؛ px <NUMPIXELS؛ px ++) {pixels.setPixelColor (px، pixels. Color (rgb [0]، rgb [1]، rgb [2])) ؛ pixels.show () ، }}

// إظهار الحالة بالبكسل

setStatusPixel (statusLamp) ؛ }}

تعويم convertRawAcceleration (int aRaw) {

// نظرًا لأننا نستخدم نطاق 2G // -2g خرائط لقيمة أولية تبلغ -32768 // + 2g خرائط لقيمة أولية تبلغ 32767

تعويم a = (aRaw * 2.0) / 32768.0 ؛

العودة أ ؛ }

تعويم convertRawGyro (int gRaw) {

// نظرًا لأننا نستخدم نطاق 250 درجة / ثانية // -250 خريطة لقيمة أولية تبلغ -32768 // +250 خريطة إلى قيمة أولية 32767

تعويم g = (gRaw * 250.0) / 32768.0 ؛

العودة ز ؛ }

حدث الفراغ الثابت

{// اكتشف الضغط في كل المحاور إذا (CurieIMU.getInterruptStatus (CURIE_IMU_TAP)) {Serial.print ("Tap اكتشاف statusLamp:") ؛ Serial.println (statusLamp) ؛

// دولة التغيير

الحالة مصباح ++ ؛

// الحالة الأولية

إذا (statusLamp> 3) {statusLamp = 0 ؛ }}}

مجموعة باطلة

{switch (statusPx) {case 0: pixelsStatus.setPixelColor (0، pixelsStatus. Color (150، 0، 0)) ؛ pixelsStatus.show () ، استراحة؛ الحالة 1: pixelsStatus.setPixelColor (0 ، pixelsStatus. Color (0 ، 150 ، 0)) ؛ pixelsStatus.show () ، استراحة؛ الحالة 2: pixelsStatus.setPixelColor (0، pixelsStatus. Color (0، 0، 150)) ؛ pixelsStatus.show () ، استراحة؛ الحالة 3: pixelsStatus.setPixelColor (0 ، pixelsStatus. Color (0 ، 0 ، 0)) ؛ pixelsStatus.show () ، استراحة؛

}

}

موصى به: