Arduino UNO - běžící světlo

V GME jsem zakoupil vývojový modul Arduino UNO, který je osazen procesorem ATMEGA 328P.  Arduino Uno je vývojová deska s mikroprocesorem ATMega328 určená, jak pro úplné začátečníky tak pro pokročilé. Tato deska je nástupce Arduina Duemilanove pro rok 2011. Lze se s ní naučit práci s mikroprocesory za použití speciálního jednoduchého jazyku Wiring.

arduino

 

Můžete tak vyrobit blikající LEDku, vlastního robota či zavlažování skleníku. Arduino je určeno pro kutily, bastlíře, umělce a designéry - zkrátka pro každého, koho zajímá vytváření interaktivních hraček a výrobků vytvořených podle vlastních představ.

 

 

 

Specifikace
Mikroprocesor: Atmel ATMega328, 16MHz takt, 32kB flash paměť, 2kB SRAM paměť, 1kB EEPROM paměť, Architektura, Atmel AVR.

 

Připojitelnost k PC: USB-RS-232 za použití převodníku úrovní.

 

Napájení: 5V USB (nebo 7-12V adaptér).

 

I/O piny: 14 digitálních, 0,1 - sériová linka, 2,3 - externí přerušení, 3,5,6,9,10,11 - PWM, 10,11,12,13 - SPI (s knihovnou SPI library), 4,5 - I2C (s knihovnou Wire library), 6 vstupních analogových.

 

Programovací jazyk: Wiring s Processing IDE (reference).

 

Multiplatformní vývojové prostředí (Win/Linux/Mac/...)
Byl jsem kolegou požádán o sestrojení obvodu simulující pohyb žaluzie pro potřebu výuky. Vstupem řízení bude 2x kontakt relé a výstupem bude 9 LED diod. V klidu jsou LED vypnuté (vstupy = 0V), vstup a=+5V LED běží rychlostí 200ms jedním směrem, vstup b=+5V LED běží rychlostí 200ms druhým směrem...

 

Program pro prostředí IDE:
 
/*
Martin Pihrt 28.6.2012
Blikání pásku led diod pro rolety
Arduino UNO program V1.0.1
Tento kód je šířen v licenci public domain.
*/

// Arduino UNO piny
// Pin 13 - 4 výstup pro LED1 - LED9.
// Pin 3 vstup na GND/+5V světlo běží vlevo +5V aktivuje funkci.
// Pin 2 vstup na GND/+5V světlo běží vpravo +5V aktivuje funkci.
// Pokud Pin 2+3 = GND LED jsou vypnuté.

// přiřazení vývodů na arduino:
int led1 = 13;
int led2 = 12;
int led3 = 11;
int led4 = 10;
int led5 = 9;
int led6 = 8;
int led7 = 7;
int led8 = 6;
int led9 = 5;
int led10 = 4;
int leftbutton = 3; //vstup tlačítka vlevo
int rightbutton = 2; //vstup tlačítka vpravo
int timer = 100; // 100ms smyčka

// proměnná vstupu tlačítek:
int buttonleftState = 0;         
int buttonrightState = 0;

// rutina, která se spustí po resetu:
void setup() {                
// přiřazení digitalních pinů jako výstup.
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
pinMode(led5, OUTPUT);
pinMode(led6, OUTPUT);
pinMode(led7, OUTPUT);
pinMode(led8, OUTPUT);
pinMode(led9, OUTPUT);
// přiřazení digitalních pinů jako vstup.
pinMode(leftbutton, INPUT);
pinMode(rightbutton, INPUT);
}

// smyčka programu - běží neustále dokola:
void loop() {

// čtení vstupu tlačítka na pinu 3 - left:

buttonleftState = digitalRead(leftbutton);   
if (buttonleftState == HIGH) { goto leftout; } // je tlačítko stisklé tj. +5V potom skoč na leftout.

else {                                      // tlačítko na pinu 3 = 0V - všechny LED vypnuté:
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
digitalWrite(led5, LOW);
digitalWrite(led6, LOW);
digitalWrite(led7, LOW);
digitalWrite(led8, LOW);
digitalWrite(led9, LOW);
}  

// čtení vstupu tlačítka na pinu 2 - right:

buttonrightState = digitalRead(rightbutton);   
if (buttonrightState == HIGH) { goto rightout; } // je tlačítko stisklé tj. +5V potom skoč na rightout.

else {                                      // tlačítko na pinu 2 = 0V - všechny LED vypnuté:
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
digitalWrite(led5, LOW);
digitalWrite(led6, LOW);
digitalWrite(led7, LOW);
digitalWrite(led8, LOW);
digitalWrite(led9, LOW);
}


return;

leftout:
digitalWrite(led1, HIGH);  
delay (timer);              
digitalWrite(led1, LOW);    
digitalWrite(led2, HIGH);   
delay (timer);             
digitalWrite(led2, LOW);    
digitalWrite(led3, HIGH);   
delay (timer);              
digitalWrite(led3, LOW);    
digitalWrite(led4, HIGH);   
delay (timer);               
digitalWrite(led4, LOW);    
digitalWrite(led5, HIGH);  
delay (timer);             
digitalWrite(led5, LOW);   
digitalWrite(led6, HIGH);   
delay (timer);              
digitalWrite(led6, LOW);    
digitalWrite(led7, HIGH);   
delay (timer);               
digitalWrite(led7, LOW);    
digitalWrite(led8, HIGH);   
delay (timer);            
digitalWrite(led8, LOW);   
digitalWrite(led9, HIGH);  
delay (timer);             
digitalWrite(led9, LOW);    

return;

rightout:

digitalWrite(led9, HIGH);  
delay (timer);              
digitalWrite(led9, LOW);    
digitalWrite(led8, HIGH);   
delay (timer);             
digitalWrite(led8, LOW);    
digitalWrite(led7, HIGH);   
delay (timer);              
digitalWrite(led7, LOW);    
digitalWrite(led6, HIGH);   
delay (timer);               
digitalWrite(led6, LOW);    
digitalWrite(led5, HIGH);  
delay (timer);             
digitalWrite(led5, LOW);   
digitalWrite(led4, HIGH);   
delay (timer);              
digitalWrite(led4, LOW);    
digitalWrite(led3, HIGH);   
delay (timer);               
digitalWrite(led3, LOW);    
digitalWrite(led2, HIGH);   
delay (timer);            
digitalWrite(led2, LOW);   
digitalWrite(led1, HIGH);  
delay (timer);             
digitalWrite(led1, LOW);    

return;

}

 

 

Připojení vstupů a výstupů k Arduinu:

schema

 

Video - nepájivé pole

 

 

 

Nepájivé pole:

board