Ротационный дисплей

Публикация 04.04.2017

Этот проект создает в воздухе удивительный эффект светящихся букв. Главное - не попасть под лопасти))

Светодиоды могут очень быстро зажигаться и гаснуть без временного лага как у ламп накаливания. Это их свойство я использовала для создания ротационного дисплея. Ряд светодиодов подключен к микроконтроллеру. Он точно определяет согласно программе время в которое нужно зажечь или потушить тот или иной светодиод. Сама же плата с диодами закреплена подвижно на оси электродвигателя. Двигатель обеспечивает стабильное вращение, а датчик (геркон или холла) отсчитывает конец полного оборота и передает эти данные в контроллер. Контроллер, зная когда оборот завершен, может вычислить время полного оборота и пропорционально посчитать все задержки перед вспышками.

Фууууу. Ну все просто, вы поняли?))

Комплект для сборки выглядит так:

Ротационный дисплей

Разрешающая способность по высоте будет 7 точек - диодов. Подключены к портам 1-7 через резисторы 430 Ом. К ножке 0 будет подключен датчик оборота (геркон).

Все наше хозяйство надо хорошенько закрепить и отбалансировать, что бы не случилась эта наша ситуация. Когда веселье превращается в сплошной травматизм и прощай маникюр))

Ротационный дисплей

Если для крепления макетной платы хаватало пары стяжек, то для закрепления коллекторного мотора потребуется еще деревянное дерево и струбцина.
Как бы не была хороша балансировака, но стяжки не обеспечивают супер жесткость и любые смещения дают заметную вибрацию, которая норовит превратить все это в вертолет.

Ротационный дисплей

Питание схемы от двух 9-и вольтовых батареек типа "крона". Вторая нужна исключительно для баланса.

Ротационный дисплей

Как прошивать скетч описывать наверное не нужно))

int timer = 1;                  // The higher the number, the slower the timing.
int pinCount = 7;           // the number of pins (i.e. the number of leds)
int arryMax = 727;          // Number of total bits in the whole string
 
int ltr8c1[] = {                //Decleration of the array - one long array of all the string
                                             // Writing "instructables"
// letter "i"  (4)                  //Looking at the matrix, top to bottom, you receive the F letter.
 
1,1,1,1,1,0,1 ,
0,0,0,0,0,0,0 ,  
0,0,0,0,0,0,0 ,                  //This line of zeroz separates the letter just completed fromt he next letter - by turning all the leds off.
0,0,0,0,0,0,0 ,  
// letter "n"   (8)
 
1,1,1,1,1,1,1  ,
0,0,0,0,1,1,0 ,
0,0,0,0,0,1,1 ,
0,0,0,0,0,0,1 ,
0,0,0,0,1,1,0 ,
1,1,1,1,1,0,0  ,
0,0,0,0,0,0,0  ,     
0,0,0,0,0,0,0 ,  
// letter "s"   (9)
 
0,1,0,0,1,1,0,
1,1,0,0,1,1,0,
1,0,0,1,0,0,1,
1,0,0,1,0,0,1,
1,0,0,1,0,0,1,
1,1,1,0,0,1,0,
0,1,1,0,0,1,0,
0,0,0,0,0,0,0 ,  
0,0,0,0,0,0,0,  
 
// letter "t"   (9)
 
0,0,0,0,0,1,0,
0,0,0,0,0,1,0,
0,0,0,0,0,1,0,
0,1,1,1,1,1,1,
1,0,0,0,0,1,0,
1,0,0,0,0,1,0,
0,1,0,0,0,1,0,
0,0,0,0,0,0,0 ,  
0,0,0,0,0,0,0,  
 
// letter "r"    (9)
 
1,1,1,1,1,1,1,
0,0,0,0,1,1,0,
0,0,0,0,0,1,1,
0,0,0,0,0,0,1,
0,0,0,0,0,0,1,
0,0,0,0,0,1,0,
0,0,0,0,1,1,0,
0,0,0,0,0,0,0 ,  
0,0,0,0,0,0,0,  
 
// letter "u"    (8)
 
0,1,1,1,1,1,1  ,
1,1,0,0,0,0,0 ,
1,0,0,0,0,0,0 ,
1,0,0,0,0,0,0 ,
1,1,0,0,0,0,0 ,
0,1,1,1,1,1,1  ,
0,0,0,0,0,0,0  ,     
0,0,0,0,0,0,0 ,  
// letter "c"    (9)
 
0,0,1,1,1,0,0,
0,1,1,0,1,1,0,
1,1,0,0,0,1,1,
1,0,0,0,0,0,1,
1,0,0,0,0,0,1,
0,1,0,0,0,1,0,
0,1,0,0,0,1,0,
0,0,0,0,0,0,0 ,  
0,0,0,0,0,0,0,  
 
// letter "t"    (9)
 
0,0,0,0,0,1,0,
0,0,0,0,0,1,0,
0,0,0,0,0,1,0,
0,1,1,1,1,1,1,
1,0,0,0,0,1,0,
1,0,0,0,0,1,0,
0,1,0,0,0,1,0,
0,0,0,0,0,0,0,  
0,0,0,0,0,0,0 ,  
// letter "a"    (9)
 
0,0,1,0,0,1,0,
0,1,0,1,0,0,1,
1,0,0,0,1,0,1,
1,0,0,0,1,0,1,
0,1,0,0,1,0,1,
0,1,1,0,1,0,1,
1,1,1,1,1,1,0,
0,0,0,0,0,0,0 ,  
0,0,0,0,0,0,0,    
 
// letter "b"    (9)
 
1,1,1,1,1,1,1,
0,1,0,1,0,0,0,
1,0,0,0,1,0,0,
1,0,0,0,0,1,0,
1,0,0,0,0,1,0,
0,1,0,0,1,0,0,
0,0,1,1,0,0,0,
0,0,0,0,0,0,0 ,  
0,0,0,0,0,0,0,   
 
// letter "l"   (4)
 
1,1,1,1,1,1,1 ,
0,0,0,0,0,0,0,  
0,0,0,0,0,0,0,   
0,0,0,0,0,0,0 ,  
// letter "e"    (9)
 
0,0,1,1,1,0,0,
0,1,0,1,0,1,0,
1,0,0,1,0,0,1,
1,0,0,1,0,0,1,
1,0,0,1,0,0,1,
1,0,0,1,0,1,0,
0,0,0,1,1,0,0,
0,0,0,0,0,0,0 ,  
0,0,0,0,0,0,0,  
 
// letter "s"   (8)
 
0,1,0,0,1,1,0,
1,1,0,0,1,1,0,
1,0,0,1,0,0,1,
1,0,0,1,0,0,1,
1,0,0,1,0,0,1,
1,1,1,0,0,1,0,
0,1,1,0,0,1,0,
0,0,0,0,0,0,0   };
 
 
 
int add = 0;
int inPin = 0;
 
int state = HIGH;         // the current state of the output pin
int reading;                  // the current reading from the input pin
int previous = LOW;    // the previous reading from the input pin
 
long time = 0;               // the last time the output pin was toggled
long safedelay = 50;   // A safety delay to avoid flickering due to multi triggering.
 
 
void setup() {                                                                                                   // Program for writing INSTRUCTABLES
  int thisPin;
 
  for (int thisPin = 0; thisPin < pinCount; thisPin++)  {                                          // use a for loop to initialize each pin as an output. The array elements are numbered from 0 to (pinCount - 1).
    pinMode(thisPin+1, OUTPUT);
   }
  pinMode(inPin, INPUT);                                                                                                          // initializesinitializes pin "0" as an input pin - used for the trigger pin.
}
 
void loop() {                                                                                                                                //Here starts the loop of the actual sequance
  reading = digitalRead(inPin);
  if (reading == HIGH && previous == LOW && millis() - time > safedelay) {      // Checking if there was a trigger. If yes and teh safety delay from the last trigger has passed, it starts the sequance.
    time = millis();                                                                                                                    // A time counter (miliseconds) - coults the safety delay time.
    for (int add = 0; add < arryMax; add=add+7) {                                                             //The "add" varible points at the relevant row - untill reaching the end of the matrix.
      for (int thisPin = 0; thisPin <= pinCount; thisPin++) {                                  //The varible "this pin"  points at the relevant column
        if (ltr8c1 [thisPin+add] ) {digitalWrite(thisPin+1, HIGH); } else {digitalWrite(thisPin+1,LOW);}  //if the relevant cell of the matix equals to 1, turn on the relevalnt led. Otherwise (if equals 0) - turn off led.
        }
     delay(timer);                                                                                                                       // Keep the current state for a while.
     for (int thisPin = 0; thisPin <= pinCount; thisPin++) {
       digitalWrite(thisPin+1,LOW);
       }
     }
  
   }
   previous = reading;
}

В скетче записан массив матриц которые сохраняют отдельные символы. Если подправить нули и единицы - можно запрограммировать другой демо-текст.

Ротационный дисплей

Тадам! Результат.

Ротационный дисплейРотационный дисплей
* комментарии публикуются после модерации
Нет комментариев