Jeśli jesteś właścicielem tej strony, możesz wyłączyć reklamę poniżej zmieniając pakiet na PRO lub VIP w panelu naszego hostingu już od 4zł!

Wyś›wietlacz widmowy


Przedstawię wam jak zbudować i zaprogramować prosty 10 ledowy wyświetlacz widmowy.
Na początku wydawało mi się, że będzie to trudne ale okazało się, że jest to bardzo
proste (jest to mój pierwszy projekt z arduino).

Potrzebne materiały:

-arduino
-10 diod
-silnik
-odbiornik IR
-10 rezystorów 220 Ω
-coś na czym wszystko zamontujemy
-bateria
-oraz kilka drobiazgów (kabelki itp.)

Krok 1:

Na początku musimy zrobić ramię na którym zamontujemy diody wraz z rezystorami.
Ja zrobiłem je ze starej linijki następnie wywierciłem dziurki i wszystko zmontowałem.
Należy pamiętać o biegunowości diody (dłuższa nóżka to + a krótsza -)
Dodałem również gąbkę aby całość usztywnić a jako masę poprowadziłem jeden długi kabel
do wszytskich diod a następnie do arduino. Rezystory należy przylutować do + diody a następnie
do kabelka który pójdzie do odpowiedniego pinu w arduino ale to później. Kiedy wszystko zlutujemy
przechodzimy do następnego kroku.

ramię wyświetlacza widmowego dół ramienia wyświetlacza

Krok 2:

Teraz zajmiemy się budową płytki na której wszystko zamontjemy. Do tego celu użyłem starej
plastikowej płytki którą znalazłem w piwnicy. Płytkę obciąłem tak aby była w miarę podobna do koła
następnie wywierciłem dziurę aby zamocować silnik a następnie dwie na arduino.
Silnik wymontowałem ze starego helikoptera jedyne co o nim wiem to, że ma 7,2V.
Do przymocowania płytki do silnika użyłem kleju, aby lepiej się trzymało a
jako podstawki pod arduino aby nie zgnieść lutów wykorzystałem słomkę.
Następnie przyczepiłem wcześniej wykonane ramię z diodami oraz baterię i małą
płytkę stykową(aby przyczepić odbiornik IR). Na drugim końcu płytki zamontowałem
ramię, które służy jako przeciwwaga. Całość tymczasowo zacisnołem w imadle aby się trzymało.
Silnik podłączyłem do 4 bateri AA i za pomocą plasteliny próbowałem
wyważyć całość (nie jest to idealne rozwiązanie i z pewnością można lepiej to zrobić
np. rozmieszczając w odpowiedni sposób baterię).

zmontowanie podstawy i ramienia

Krok 3:

Po przykręceniu czy przyklejeniu arduino (jak kto woli) czas na podpięcie diod do arduino.
Należy podpiąć je pokolei (na obrazku poniżej cyferki obok diod odpowiadają pinom w arduino)
do odpowiednich pinów w arduino. Podpinamy również odbiornik IR: VSS do 5v w arduino,
GDN do masy a OUT do pinu 13. Służy on po to abyśmy mogli zmieniać czas wyświetlania
można zamiast tego dać np. czujnik magnetyczny lub optyczny ja takiego nie miałem więc
użyłem pilota z telewizora.
numerki pinów

Krok 4:

Przyszedł czas na zaprogramowanie naszego wyświetlacza poniżej wklejam kod, który trzeba
wgrać do arduino. W komentarzach znajduje się wyjaśnienie całego kodu.
I jeszcze bardzo ważna sprawa musisz wpisać w kod "numerki" jakie wysyła twój
pilot do arduino aby mógł działać. Jak to sprawdzić znajdziesz tu.

/*####################################################
Nikodem Bartnik May 2014
http://www.arduinopolska.cba.pl/
######################################################
*/

//dodanie biblioteki IR
#include <IRremote.h>
#define irPin 13
IRrecv irrecv(irPin);
decode_results results;

//zdefiniowanie tablic dzięki którym będziemy wyświtlać litery, cyfry i znaki
int _[] = {0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0};
int A[] = {1,1,1,1,1,1,1,1,0,0, 0,0,0,1,1,0,0,0,1,1, 0,0,0,1,1,0,0,0,1,1, 1,1,1,1,1,1,1,1,0,0};
int B[] = {1,1,1,1,1,1,1,1,1,1, 1,1,0,0,1,1,0,0,1,1, 0,1,1,0,1,1,0,1,1,0, 0,0,0,1,1,1,1,0,0,0};
int C[] = {0,0,1,1,1,1,1,1,0,0, 0,1,0,0,0,0,0,0,1,0, 1,0,0,0,0,0,0,0,0,1, 0,1,0,0,0,0,0,0,1,0};
int D[] = {1,1,1,1,1,1,1,1,1,1, 1,1,0,0,0,0,0,0,1,1, 0,1,1,0,0,0,0,1,1,1, 0,0,0,1,1,1,1,0,0,0};
int E[] = {1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1, 1,1,0,0,1,1,0,0,1,1, 1,1,0,0,1,1,0,0,1,1};
int F[] = {1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1, 0,0,0,0,1,1,0,0,1,1, 0,0,0,0,1,1,0,0,1,1};
int G[] = {0,0,1,1,1,1,1,1,0,0, 0,1,1,0,0,0,0,1,1,0, 1,1,0,1,0,0,0,0,1,1, 0,1,1,1,0,0,1,1,1,0};
int H[] = {1,1,1,1,1,1,1,1,1,1, 0,0,0,0,1,1,0,0,0,0, 0,0,0,0,1,1,0,0,0,0, 1,1,1,1,1,1,1,1,1,1};
int I[] = {1,1,0,0,0,0,0,0,1,1, 1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1, 1,1,0,0,0,0,0,0,1,1};
int J[] = {0,1,1,1,0,0,0,0,0,0, 1,1,0,0,0,0,0,0,0,0, 1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1};
int K[] = {1,1,1,1,1,1,1,1,1,1, 0,0,0,1,1,1,1,0,0,0, 0,0,1,1,0,0,1,1,0,0, 1,1,0,0,0,0,0,0,1,1};
int L[] = {1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1, 1,1,0,0,0,0,0,0,0,0, 1,1,0,0,0,0,0,0,0,0};
int M[] = {1,1,1,1,1,1,1,1,1,1, 0,0,0,0,0,0,1,1,1,0, 0,0,0,0,0,0,1,1,1,0, 1,1,1,1,1,1,1,1,1,1};
int N[] = {1,1,1,1,1,1,1,1,1,1, 0,1,1,1,0,0,0,0,0,0, 0,0,0,0,0,1,1,1,0,0, 1,1,1,1,1,1,1,1,1,1};
int O[] = {0,0,1,1,1,1,1,1,0,0, 1,1,0,0,0,0,0,0,1,1, 1,1,0,0,0,0,0,0,1,1, 0,0,1,1,1,1,1,1,0,0};
int P[] = {1,1,1,1,1,1,1,1,1,1, 0,0,0,0,0,1,1,0,1,1, 0,0,0,0,1,1,1,0,1,1, 0,0,0,0,0,0,1,1,1,0};
int R[] = {1,1,1,1,1,1,1,1,1,1, 0,0,0,0,1,1,1,0,1,1, 0,0,0,1,0,1,1,0,1,1, 1,1,0,0,0,0,1,1,1,0};
int S[] = {1,1,0,0,0,0,1,0,0,0, 1,0,0,0,0,1,0,0,1,0, 0,1,0,0,0,1,0,0,0,1, 0,0,1,1,1,0,0,1,1,0};
int T[] = {0,0,0,0,0,0,0,0,1,1, 1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1, 0,0,0,0,0,0,0,0,1,1};
int U[] = {1,1,1,1,1,1,1,1,1,1, 1,0,0,0,0,0,0,0,0,0, 1,0,0,0,0,0,0,0,0,0, 1,1,1,1,1,1,1,1,1,1};
int V[] = {0,0,1,1,1,1,1,1,1,1, 1,1,0,0,0,0,0,0,0,0, 1,1,0,0,0,0,0,0,0,0, 0,0,1,1,1,1,1,1,1,1};
int W[] = {1,1,1,1,1,1,1,1,1,1, 0,1,1,0,0,0,0,0,0,0, 0,1,1,0,0,0,0,0,0,0, 1,1,1,1,1,1,1,1,1,1};
int X[] = {1,1,1,0,0,0,0,1,1,1, 0,0,1,1,1,1,1,1,0,0, 0,0,1,1,1,1,1,1,0,0, 1,1,1,0,0,0,0,1,1,1};
int Y[] = {0,0,0,0,0,1,1,1,1,1, 1,1,1,1,1,1,0,0,0,0, 1,1,1,1,1,1,0,0,0,0, 0,0,0,0,0,1,1,1,1,1};
int Z[] = {1,1,1,1,0,0,0,0,0,1, 1,0,0,1,1,1,0,0,0,1, 1,0,0,0,0,1,1,1,0,1, 0,0,0,0,0,0,0,0,1,1};
int pauza[] = {0,0,0,0,1,1,0,0,0,0, 0,0,0,0,1,1,0,0,0,0, 0,0,0,0,1,1,0,0,0,0, 0,0,0,0,1,1,0,0,0,0};
int kropka[] = {1,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0};
int dwukropek[] = {0,0,0,0,0,0,0,0,0,0, 0,0,1,1,0,0,1,1,0,0, 0,0,1,1,0,0,1,1,0,0, 0,0,0,0,0,0,0,0,0,0,};
int nawiasLewy[] = {0,0,1,1,1,1,1,1,0,0, 0,1,1,0,0,0,0,1,1,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0};
int nawiasPrawy[] = {0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,1,1,0,0,0,0,1,1,0, 0,0,1,1,1,1,1,1,0,0};
int jeden[] = {0,0,0,0,0,0,1,1,0,0, 0,0,0,0,0,0,0,1,1,0, 1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,}; 
int dwa[] = {1,1,1,0,0,0,1,1,1,0, 1,0,1,1,1,0,0,0,1,1, 1,0,0,0,1,1,1,0,1,1, 1,0,0,0,0,0,1,1,1,0};
int trzy[] = {0,0,1,1,0,0,0,1,1,0, 1,1,0,0,1,1,0,0,1,1, 1,1,0,0,1,1,0,0,1,0, 0,1,1,1,1,1,1,1,1,0};
int cztery[] = {0,0,0,1,1,1,0,0,0,0, 0,0,0,1,0,1,1,1,0,0, 1,1,1,1,1,0,0,1,1,1, 0,0,0,1,0,0,0,0,0,0};
int piec[] = {1,0,0,1,1,1,1,1,1,1, 1,1,0,1,1,0,0,0,1,1, 1,1,0,1,1,0,0,0,1,1, 0,1,1,1,0,0,0,0,1,1};
int szesc[] = {0,1,1,1,1,1,1,1,1,0, 1,0,0,0,1,0,0,0,1,1, 1,0,0,0,1,0,0,0,1,1, 0,1,1,1,0,0,0,1,1,0};
int siedem[] = {1,1,1,0,0,0,0,0,0,1, 0,0,1,1,1,0,0,0,0,1, 0,0,0,0,1,1,1,0,0,1, 0,0,0,0,0,0,1,1,1,1};
int osiem[] = {0,1,1,1,0,1,1,1,1,0, 1,0,0,0,1,1,0,0,0,1, 1,0,0,0,1,1,0,0,0,1, 0,1,1,1,0,0,1,1,1,0};
int dziewiec[] = {0,1,1,1,1,1,1,1,1,0, 1,1,0,0,0,1,0,0,0,1, 1,1,0,0,0,1,0,0,0,1, 0,1,1,0,0,0,1,1,1,0};
int zero[] = {0,0,1,1,1,1,1,1,0,0, 1,1,0,0,0,0,0,0,1,1, 1,1,0,0,0,0,0,0,1,1, 0,0,1,1,1,1,1,1,0,0};


double Sbl;
double flash;
double time;

void setup(){
  // ustawienie portów na diody
  pinMode(1, OUTPUT);
  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(10, OUTPUT);
  irrecv.enableIRIn();
}

void printLetter(int letter[]){
  
  int y;
  
  // "wydrukowanie" pierwszego rzędu liter
  for (y=0; y<10; y++){
    digitalWrite(y+1, letter[y]);
  }
  delay(flash);
  
  // "wydrukowanie" drugiego rzędu liter
  for (y=0; y<10; y++) {
    
    digitalWrite(y+1, letter[y+10]);
  }
  delay(flash);
  
  // "wydrukowanie" trzeciego rzędu liter
  for (y=0; y<10; y++){
    
    digitalWrite(y+1, letter[y+20]);
  }
  delay(flash);
  
  // "wydrukowanie" czwartego rzędu liter
  for (y=0; y<10; y++){
    
    digitalWrite(y+1, letter[y+30]);
  }
  delay(flash);
  
  // odstęp między literami
  for (y=0; y<10; y++){
    
    digitalWrite(y+1, 0);
  }
  delay(Sbl);
}


void loop(){
  //obsług pilota
  flash = time;
  Sbl =time*2;
  if (irrecv.decode(&results)) {
     
      switch (results.value ) {
        // w tym miejscu zmieniamy 0xF70B na to co wysyła wasz pilot w internecie
       // można znaleźć mnóstwo poradników jak zczytać pilot
         case 0xF70B:
            time=time+0.1;
            break;
        // w tym miejscu zmieniamy 0xF78B na to co wysyła wasz pilot w internecie 
        //można znaleźć mnóstwo poradników jak zczytać pilot
         case 0xF78B:
            time=time-0.1;
            break;
         }
 
   irrecv.resume();
   }
   
  // wyświetlanie liter wpisujemy printLetter(x) a gdzie x litere 
  //bądź znak jaki chcemy wypisać na naszym wyśiwtlaczu
  printLetter(A);
  printLetter(R);
  printLetter(D);
  printLetter(U);
  printLetter(I);
  printLetter(N);
  printLetter(O);

  delay(50);
  }

Krok 5:

Po zmontowaniu całości i wgraniu programu nareszcie możemy uruchomić nasz wyświetlacz.

Uwaga!!!

Podczas uruchamiania uważaj aby obracające się ramie nie uderzyło w ciebie.

Pilotem sterujemy odstępem między wyrazami i długością mignięcia.
Poniżej wklejam link do youtube możesz zobaczyć jak wyszedł mój wyświetlacz widmowy
http://youtu.be/12vkJW-gQyY

Jeśli masz z czymś problem lub jakieś pytania napisz: nikodem.bartnik@gmail.com