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ł! Do you want to support owner of this site? Click here and donate to his account some amount, he will be able to use it to pay for any of our services, including removing this ad.

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.)


Reklama



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