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

Разрешающая способность по высоте будет 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; }
В скетче записан массив матриц которые сохраняют отдельные символы. Если подправить нули и единицы - можно запрограммировать другой демо-текст.

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

