التحكم في مصابيح LED بجهد 12 فولت مع 4 دبابيس GPIO

 Charlieplexing هي تقنية للتحكم في العديد من مصابيح LED باستخدام عدد قليل من دبابيس الإدخال / الإخراج. Charlieplexing هو نفسه تعدد الإرسال ، لكنه يستخدم منطق ثلاثي الحالة (مدخلات عالية ومنخفضة) لتقليل عدد المسامير بشكل كبير واكتساب الكفاءة عبر مضاعفة الإرسال. تم تسمية تقنية Charlieplexing على اسم مخترعها ، Charlie Allen ، الذي اخترع هذه التقنية في عام 1995.في هدا المشروع سوف نتحكم  في مصابيح LED بجهد 12 فولت مع 4 دبابيس GPIO

 

مخطط الرسم البياني

 

في الأساس ، في مخطط الدائرة هذا ، يتم توصيل 12 مصباحًا LED مع 4 دبابيس Arduino من خلال مقاومات كما تلاحظون في الصورة اعلاه. كل دبوس من Arduino متصل بثلاثة مصابيح LED. توجد ست مجموعات من مصابيح LED ، وفي كل مجموعة ، يتم توصيل 2 LED ، وكلا الصمامين متوازيان مع بعضهما البعض ولكن بقطبية متعاكسة بحيث يتم تشغيل مؤشر LED واحد فقط في كل مرة. لذلك وفقًا لمخطط الدائرة لتشغيل المصباح 1 ، يجب أن تكون هناك إشارة عالية على الدبوس A وإشارة منخفضة على الدبوس B ، ويجب فصل الدبوس C و D.

كود المشروع

//tech-hme.com
#define A 8
#define B 9
#define C 10
#define D 11

#define PIN_CONFIG 0
#define PIN_STATE 1

#define LED_Num 12

int matrix[LED_Num][2][4] = {
// PIN_CONFIG PIN_STATE
// A B C D A B C D
{ { OUTPUT, OUTPUT, INPUT, INPUT }, { HIGH, LOW, LOW, LOW } },
{ { OUTPUT, OUTPUT, INPUT, INPUT }, { LOW, HIGH, LOW, LOW } },
{ { INPUT, OUTPUT, OUTPUT, INPUT }, { LOW, HIGH, LOW, LOW } },
{ { INPUT, OUTPUT, OUTPUT, INPUT }, { LOW, LOW, HIGH, LOW } },
{ { OUTPUT, INPUT, OUTPUT, INPUT }, { HIGH, LOW, LOW, LOW } },
{ { OUTPUT, INPUT, OUTPUT, INPUT }, { LOW, LOW, HIGH, LOW } },
{ { OUTPUT, INPUT, INPUT, OUTPUT }, { HIGH, LOW, LOW, LOW } },
{ { OUTPUT, INPUT, INPUT, OUTPUT }, { LOW, LOW, LOW, HIGH } },
{ { INPUT, OUTPUT, INPUT, OUTPUT }, { LOW, HIGH, LOW, LOW } },
{ { INPUT, OUTPUT, INPUT, OUTPUT }, { LOW, LOW, LOW, HIGH } },
{ { INPUT, INPUT, OUTPUT, OUTPUT }, { LOW, LOW, HIGH, LOW } },
{ { INPUT, INPUT, OUTPUT, OUTPUT }, { LOW, LOW, LOW, HIGH } }
};

void lightOn( int led ) {
pinMode( A, matrix[led][PIN_CONFIG][0] );
pinMode( B, matrix[led][PIN_CONFIG][1] );
pinMode( C, matrix[led][PIN_CONFIG][2] );
pinMode( D, matrix[led][PIN_CONFIG][3] );
digitalWrite( A, matrix[led][PIN_STATE][0] );
digitalWrite( B, matrix[led][PIN_STATE][1] );
digitalWrite( C, matrix[led][PIN_STATE][2] );
digitalWrite( D, matrix[led][PIN_STATE][3] );
}

void setup() {}

void loop() {
for( int l = 0; l < LED_Num; l++ ) {
lightOn( l );
delay( 1000 / LED_Num );
}
}

 

 


 

 

إرسال تعليق

أحدث أقدم