top of page

touch led table

بداية نحب ان نعرفكم على مشروعنا الطموح وهو عبارة عن طاولة خشبية محاطة بالليدات المضيئة من الداخل والتي تضيئ بجرد لمس الحساس المستخدم في الدائرة 

فريق العمل

About

عبدالله عقيلي 

Services

عبدالرحمن جعوني 

علي يتيم

يحيى جعوني 

اشراف المهندس

ايمن ابراهيم كيفي 

نظرة عامة عن المشروع 

يتكون المشروع من طاولة خشبية محاطة بالليدات المضيئة من الداخل

و التي تتصلmpr121 مع حساس اللمس

مما يجعل الليدات تضيئ بمجرد لمس الحساس و تختلف طريقة الاضاءة في كل فرع من فروع الحساس فبعضها   يضيئ تدريجيا والبعض الاخر يضيئ دفعة واحدة مع مراعاة اختلاف اللون وشدة الاضاءة بالاضافة الى مدة الاضاءة  

القطع المستخدمة في المشروع 

  • An Arduino board    75SR, 

  • A custom PCB, connected to a 5V power supply 20SR

  •  touch sensor MPR121. 100SR

  • Jumper wire .20SR

  • strips led .   120 SR

Jumper Wire

STRIP LED

MPR touch sensor 121 

ARDUINO

للمزيد من المعلومات عن الاردينو

https://www.youtube.com/watch?v=KtA0g-sBBKA&t=1s

schmitic

مرحلة الطباعة

مرحلة الاظهار 

مرحلة التخريم 

 التركيب و اللحام 

code

#include <Wire.h>
#include "Adafruit_MPR121.h"

#include <Adafruit_NeoMatrix.h>
#include <Adafruit_NeoPixel.h>



#define PIXEL_PIN    12    // Digital IO pin connected to the NeoPixels.

  matrix.Color(255, 0, 0), matrix.Color(0, 255, 0), matrix.Color(0, 0, 255) };



  Serial.begin(9600);
 

 

 



  
  if (!cap.begin)) {
    Serial.println("MPR121 not found, check wiring?");
    while (1);
  }
  Serial.println("MPR121 found!");

matrix.begin();
  

 

 

 

 

 




  strip.begin();
  strip.show(); // Initialize all pixels to 'off'

}




 

 

                                                                                                                                                                                        

 



  if (cap.touched() & (1 << 0))

  {

   //////////


   
    /////////////
    colorWipe(strip.Color(255, 0, 0), 50);

    //theaterChaseRainbow(50);
    Serial.println("key 4 touched!");
    //  delay(1000);
    colorWipe(strip.Color(0, 0, 0), 50);    // Black/off
  }

 

 

 


  if (cap.touched() & (1 << 1))

  {

    colorWipe(strip.Color(0, 255, 0), 50);

    //theaterChaseRainbow(50);
    Serial.println("key 4 touched!");
    //  delay(1000);
    colorWipe(strip.Color(0, 0, 0), 50);    // Black/off
  }

  if (cap.touched() & (1 << 2))

  {

    colorWipe(strip.Color(0, 0, 255), 50);

    //theaterChaseRainbow(50);
    Serial.println("key 4 touched!");
    //  delay(1000);
    colorWipe(strip.Color(0, 0, 0), 50);    // Black/off
  }

  if (cap.touched() & (1 << 3))

  {

    theaterChase(strip.Color(127, 127, 127), 50);
    //theaterChaseRainbow(50);
    Serial.println("key 4 touched!");
    //  delay(1000);
    //colorWipe(strip.Color(0, 0, 0), 50);    // Black/off
  }

 

 

 

 


  if (cap.touched() & (1 << 4))

  {
    theaterChase(strip.Color(127,   0,   127), 50);
    //theaterChaseRainbow(50);
    Serial.println("key 4 touched!");
    //  delay(1000);
    //colorWipe(strip.Color(0, 0, 0), 50);    // Black/off
  }

 

 


  if (cap.touched() & (1 << 5))

  {

   theaterChase(strip.Color(115,   0,   0), 50); // Red
    //theaterChaseRainbow(50);
    Serial.println("key 4 touched!");
    //  delay(1000);
    // colorWipe(strip.Color(0, 0, 0), 50);    // Black/off
  }


  if (cap.touched() & (1 << 6))

  {

    rainbow(20);
    //theaterChaseRainbow(50);
    Serial.println("key 4 touched!");
    //  delay(1000);
    colorWipe(strip.Color(0, 0, 0), 50);    // Black/off
  }

 

 

 

 

 

 


  if (cap.touched() & (1 << 7))

  {

    theaterChase(strip.Color(  0,   0, 127), 50); // 
    //theaterChaseRainbow(50);
    Serial.println("key 4 touched!");
    //  delay(1000);
    // colorWipe(strip.Color(0, 0, 0), 50);    // Black/off
  }

 

 

 

 

 


  if (cap.touched() & (1 << 8))

  {

    theaterChase(strip.Color(  0,  200, 127), 50); // Blue
    //theaterChaseRainbow(50);
    Serial.println("key 4 touched!");
    //  delay(1000);
    // colorWipe(strip.Color(0, 0, 0), 50);    // Black/off
  }

 

 

 


  if (cap.touched() & (1 << 9))

  {

    rainbowCycle(20);
    //theaterChaseRainbow(50);
    Serial.println("key 4 touched!");
    //  delay(1000);
    colorWipe(strip.Color(0, 0, 0), 50);    // Black/off
  }

 

 

 

 


  if (cap.touched() & (1 << 10))

  {

    rainbow(20);
    //theaterChaseRainbow(50);
    Serial.println("key 4 touched!");
    //  delay(1000);
    colorWipe(strip.Color(0, 0, 0), 50);    // Black/off
  }

 

 

 


  if (cap.touched() & (1 << 11))

  {

    theaterChaseRainbow(50);
    //theaterChaseRainbow(50);
    Serial.println("key 4 touched!");
    //  delay(1000);
    //  colorWipe(strip.Color(0, 0, 0), 50);    // Black/off
  }











  //lasttouched = currtouched;

 

 

 

 

 

 

 

 


  delay(1000);

  matrix.fillScreen(0);
  matrix.setCursor(x, 0);

  matrix.print(F("CTE JEDDAH"));
 

حدد الرجل 12 لليدات ووصلها للمداخل الرقمية 

في مصفوفة الالوان لدينا اعلى قيمة تساوي 255 و اقل قيمة تساوي الصفر 

معدل سرعة البيانات  9600

اذا لم توجد لمسة على الحساس 

اذا وجدت اللمسة على الحساس 

تبدأ المصفوفة 

في حال وجود اللمسة وكانت اللمسة على الحساس رقم صفر  

نستطيع في البرمجه ان نختصر و نشتق الالوان من ثلاثة الوان رئيسية وهي الاحمر و الاخضر والازرق  وفي الحالة التي يأتي فيها الامر على الصورة التالية ,255,0,0

 يتم تشغيل اللون الاحمر لانه يشغل القيمة الاعلى بينما الاخضر و الازرق صفر  

R  G  B

من ثم يتم التاخير لمدة ثانية واحدة و تعود جميع

الليدات الى اقل قيمة الصفر = الاسود 

off 

في حال وجود اللمسة وكانت على الطرف رقم 1 من الحساس 

ستكون القيمة الاعلى للون الاخضر وبالتالي ستضاء الطاولة باللون الاخضر  

من ثم يتم التاخير لمدة ثانية واحدة و تعود جميع

الليدات الى اقل قيمة الصفر = الاسود 

off 
 

اذا وجدت اللمسة وكانت على الحساس 2 

ستكون القيمة الاعلى للون الازرق و بالتالي ستضيء الطاولة باللون الازرق  

من ثم يتم التاخير لمدة ثانية واحدة و تعود جميع

الليدات الى اقل قيمة الصفر = الاسود 

off 

اذا كانت اللمسة على الحساس الثالث

 

يتم استدعاء الدالة

THATER CHASE

و يتم دمج الالوان الثلاثه بقيمة 127 لكل لون و التي تنتج لنا اللون الابيض الظاهر في الصورة المقابلة 

من ثم يتم التاخير لمدة ثانية واحدة و تعود جميع

الليدات الى اقل قيمة الصفر = الاسود 

off 

اذا وجدت لمسة على الحساس 4 

يتم استدعاء الدالة

THATER CHASE

و يتم دمج اللونين الاحمر و الازرق لنحصل  على اللون الظاهر في الصورة المقابلة  

من ثم يتم التاخير لمدة ثانية واحدة و تعود جميع

الليدات الى اقل قيمة الصفر = الاسود 

off 

اذا وجدت اللمسة وكانت على الحساس 5

يتم استدعاء الدالة

THATER CHASE

و يتم اختيار اللون الاحمر بدرجة 115  لنحصل على اللون الظاهر في الصورة المقابلة  

من ثم يتم التاخير لمدة ثانية واحدة و تعود جميع

الليدات الى اقل قيمة الصفر = الاسود 

off 

اذا وجدت اللمسة وكانت على الحساس 6

يتم استدعاء الدالة 

THEATER CHASE RAINBOW

و التي تظهر اللون المتدرج على هيئة الوان الطيف الظاهر في الصورة المقابلة 

من ثم يتم التاخير لمدة ثانية واحدة و تعود جميع

الليدات الى اقل قيمة الصفر = الاسود 

off 

اذا وجدت اللمسة وكانت على الحساس 7

يتم استدعاء الدالة

THATER CHASE

و يتم دمج اللون الازرق بقيمة 127 و التي تنتج لنا اللون الظاهر في الصورة المقابلة 

من ثم يتم التاخير لمدة ثانية واحدة و تعود جميع

الليدات الى اقل قيمة الصفر = الاسود 

off 

اذا وجدت اللمسة وكانت على الحساس 8

يتم استدعاء الدالة

THATER CHASE

و يتم دمج اللونين الازرق و الاخضر  بقيمة ,200,127 و التي تنتج لنا اللون الظاهر في الصورة  

المقابلة

من ثم يتم التاخير لمدة ثانية واحدة و تعود جميع

الليدات الى اقل قيمة الصفر = الاسود 

off 

اذا وجدت اللمسة

وكانت على الحساس 9

يتم استدعاء الدالة

theater chaser rainbow

والتي تنتج لنا الوان الطيف

من ثم يتم التاخير لمدة ثانية واحدة و تعود جميع

الليدات الى اقل قيمة الصفر = الاسود 

off

 

اذا وجدت اللمسة

وكانت على الحساس 10

يتم استدعاء الدالة

theater chaser rainbow

والتي تنتج لنا الوان الطيف

من ثم يتم التاخير لمدة ثانية واحدة و تعود جميع

الليدات الى اقل قيمة الصفر = الاسود 

off

اذا وجدت اللمسة

وكانت على الحساس 11

يتم استدعاء الدالة

theater chaser rainbow

والتي تعرض لنا جميع الالوان على هيئة صناديق و تتغير درجة  الالوان 

من ثم يتم التاخير لمدة ثانية واحدة و تعود جميع

الليدات الى اقل قيمة الصفر = الاسود 

off

uint16_t
void rainbow(uint8_t wait) {

}
  }
    delay(wait);
    strip.show();
    strip.setPixelColor(i, c);
  for (uint16_t i = 0; i < strip.numPixels(); i++) {
void colorWipe(uint32_t c, uint8_t wait) {
// Fill the dots one after the other with a color


}

  delay(100);
  matrix.show();
  }
    matrix.setTextColor(colors[pass]);
    if(++pass >= 3) pass = 0;
    x = matrix.width();
  if(--x < -65) {
i, j;

  for (j = 0; j < 256; j++) {
    for (i = 0; i < strip.numPixels(); i++) {
      strip.setPixelColor(i, Wheel((i + j) & 255));
    }
    strip.show();
    delay(wait);
  }
}

// Slightly different, this makes the rainbow equally distributed throughout
void rainbowCycle(uint8_t wait) {
  uint16_t
i
, j;

  for (j = 0; j < 256 * 5; j++) { // 5 cycles of all colors on wheel
    for (i = 0; i < strip.numPixels(); i++) {
      strip.setPixelColor(i, Wheel(((i * 256 / strip.numPixels()) + j) & 255));
    }
    strip.show();
    delay(wait);
  }
}

//Theatre-style crawling lights.
void theaterChase(uint32_t c, uint8_t wait) {
  for (int j = 0; j < 40; j++) { //do 10 cycles of chasing
    for (int q = 0; q < 2; q++) {
      for (int i = 0; i < strip.numPixels(); i = i + 2) {
        strip.setPixelColor(i + q, c);  //turn every third pixel on
      }
      strip.show();

      delay(wait);

      for (int i = 0; i < strip.numPixels(); i = i + 2) {
        strip.setPixelColor(i + q, 0);      //turn every third pixel off
      }
    }
  }
}

//Theatre-style crawling lights with rainbow effect
void theaterChaseRainbow(uint8_t wait) {
  for (int j = 0; j < 256; j++) {   // cycle all 256 colors in the wheel
    for (int q = 0; q < 3; q++) {
      for (int i = 0; i < strip.numPixels(); i = i + 3) {
        strip.setPixelColor(i + q, Wheel( (i + j) % 255)); //turn every third pixel on
      }
      strip.show();

      delay(wait);

      for (int i = 0; i < strip.numPixels(); i = i + 3) {
        strip.setPixelColor(i + q, 0);      //turn every third pixel off
      }
    }
  }
}

// Input a value 0 to 255 to get a color value.
// The colours are a transition r - g - b - back to r.

 

 

}

اذا لم يتم ضغط اي حساس لمدة ثانية واحدة سيتم طباعة كلمة

CTE JEDDAH على الشاشة بالكامل

مستدعياً الدالة RAINBOW

لتنفيذ الالوان 

ثم باستدعاء الدالة Matrix.show

يتم عرض الكلمة على الشاشة

 

يمكن ان نطور مشروعنا في المستقبل بشكل واسع جدا فالابمكان اضافة الالعاب التشويقيه واضافة كلمات تصلح للمحلات التجارية ويمكن استخدامها كلوحة تعليمات

 :تطوير المشروع في المستقبل

.

الشكل النهائي للمشروع 

تكلفة المشروع

 

320 sr 

bottom of page