Ożywiamy nasze Arduino

      3 komentarze do Ożywiamy nasze Arduino

Ożywiamy nasze Arduino Uno.

Przed rozpoczęciem pracy musimy zadbać o podstawowe elementy i źródło zasilania:

Arduino Uno, port USB w komputerze jako zasilanie lub zasilacz 5-12 V –  tu należy zaznaczyć, że wskazany jest jednak zasilacz 6-7 V z wydajnością prądową około 1,5-2 A. Dlaczego ?  Logika w arduino pracuje przy napięciu 5V, wyższe napięcie będzie wymagało wydajniejszej pracy stabilizatora na płytce arduino, co wiąże się z wyższą temperaturą pracy układu. 

Pierwszym projektem jaki wykonamy jest Blink, krótki programik, który pozwoli włączać i wyłączać z określona częstotliwością diodę led, która jest wbudowana w twoje Arduino.

Aby uruchomić ten program, połącz twoje Arduino Uno z portem USB komputera, sprawdź na jakim porcie com pracuje twoje urządzenie i skonfiguruj odpowiednio Arduino IDE, a następnie rozpocznij pracę. Nie wiesz jak sprawdzić na jakim porcie pracuje twoje Arduino ? Nic prostszego, uruchom Arduino IDE bez podłączonej płytki, wybierz z górnego menu Tools, następnie Board, wskaż w nim Arduino Uno, jeśli takie masz, następnie wskaż poniższą opcję Port. Nie powinno się nic pojawić, ponieważ płytka nie jest podpięta. Jeśli zdarzyłoby się tak, że będą wskazane jakieś porty COM, zapisz je, następnie podłącz do portu USB twoje Arduino i ponowienie wybierz opcje Port z menu górnego Tools. Powinien pojawić się numer portu komunikacyjnego, wskaż go i od tej pory twoje Arduino będzie pracować na tym porcie (chyba, że przepniesz je do innego wolnego portu USB, wtedy musisz ponownie sprawdzić na jakim porcie będzie pracować twoja nowa zabawka). W tym momencie Arduino już jest gotowe, by przyjmować twoje rozkazy. Nowa wersja Arduino IDE automatycznie wybiera prędkość transmisji dla Arduino Uno (9600), nie jest tak w przypadku płytek Wemos D1 i NodeMcu, które z reguły pracują z prędkością 115000. O tym dowiesz się w dalszych częściach naszego poradnika.

Po podpięciu Arduino Uno do portu USB powinna zapalić się czerwona (zielona, niebieska dioda LED Power – PWD, zależne od producenta oznaczenia i kolor diody może być różny) oraz powinna zacząć migać inna dioda sygnalizacyjna, która mówi nam, że nasze nowe Arduino działa poprawnie. Dzieje się tak, ponieważ w pamięci naszej płytki firmowo jest wgrany program Blink.

Program ten jest wbudowany w bazę kodów Arduino IDE, aby go wywołać wybierz menu File, a następnie Examples, z wyświetlonej listy wybierz 01.Basics a następnie Blink, poniżej wyświetli ci się kod programu Blink. Z pewnością zauważyłeś, że jest tam cała masa różnych innych kodów, o czym napisze później.

/*

Blink

Turns on an LED on for one second, then off for one second, repeatedly.

Most Arduinos have an on-board LED you can control. On the UNO, MEGA and ZERO

it is attached to digital pin 13, on MKR1000 on pin 6. LED_BUILTIN is set to

the correct LED pin independent of which board is used.

If you want to know what pin the on-board LED is connected to on your Arduino model, check

the Technical Specs of your board  at https://www.arduino.cc/en/Main/Products

This example code is in the public domain.

modified 8 May 2014

by Scott Fitzgerald

modified 2 Sep 2016

by Arturo Guadalupi

modified 8 Sep 2016

by Colby Newman

*/





// the setup function runs once when you press reset or power the board

void setup() {

// initialize digital pin LED_BUILTIN as an output.

pinMode(LED_BUILTIN, OUTPUT);

}



// the loop function runs over and over again forever

void loop() {

digitalWrite(LED_BUILTIN, HIGH);   // turn the LED on (HIGH is the voltage level)

delay(1000);                       // wait for a second

digitalWrite(LED_BUILTIN, LOW);    // turn the LED off by making the voltage LOW

delay(1000);                       // wait for a second

}
blink

 

Między znakami /* */ zawsze znajduje się komentarz, który oznaczyłem na czerwono, abyś mógł go łatwiej odróżnić  od kodu.

Autor pisze w nim o programie, do czego służy, daje krótkie uwagi, nazwisko autora, wersję etc.

Znak // również oznacza komentarz, ale używamy go tylko wtedy, jeśli chcemy krótko skomentować co program robi w danej linii kodu. Wszystko napisane po znaku // jest odczytywane jako komentarz i nie ma wpływu na kod, taki komentarz może być zawarty tylko w jednej linii, w przeciwieństwie do komentarzy zawartych między znakami /* */

 

// Rozpoczynamy funkcje programu, ktora rozpocznie sie po wcisnieciu przycisku restet na plytce

void setup() {

//uruchamiamy pin LED_BUILTIN, OUTPUT jako wyjscie

pinMode(LED_BUILTIN, OUTPUT);

}

// Uruchamiamy petle ktora bedzie ciagle wykonywana

void loop() {

digitalWrite(LED_BUILTIN, HIGH);   // wlacz na cyfrowym wyjscu stan wysoki (HIGH oznacza wlaczone 5V)

delay(1000);                       // czekaj 1000 ms (1 sekunde)

digitalWrite(LED_BUILTIN, LOW);    // wlacz na cyfrowym wyjsciu stan niski (LOW oznacza wylaczone napiecie, stan 0V)

delay(1000);                       // czekaj 1000 ms (1 sekunde)

}

 

WAŻNE !!! po każdej linii kodu sprawdź czy jest znak ; oraz czy każdy znak { jest zamknięty znakiem}, czyt. Czy klamra jest zamknięta, są to najczęstsze błędy popełniane przy pisaniu kodów.

Void setup (){  — otwieramy jedną klamrą, wpisujemy parametry pinMode(); i zamykamy klamrę} Nie ma znaczenia czy znak } jest bezpośrednio po znaku ; czy w nowej linii. Aby kod był czytelniejszy, przyjęło się, że klamry zamykamy w następnej linii.  Podobnie jest z void loop, funkcja delay (1000) mówi ile czasu program ma czekać, by przejść do kolejnej linii programu. Po sekundzie przechodzi do kolejnego wiersza aż do znaku } po czym przeskakuje do pierwszej funkcji zawartej w pętli, czyli do digitalWrite(LED_BUILTIN, HIGH); i tak w nieskończoność.

 

Zadanie dla ciebie.

Zmień parametry  delay(1000); w taki, by dioda led zapalała się na 3 sekundy, a wyłączała się po 1,5 s.

Poniżej przedstawiam kod podobny, którego efekt jest identyczny, lecz jest realizowany w inny sposób. Kod ten jest pozbawiony funkcji delay, ponieważ (jak powiedział mi jeden z twórców learnduino) cyt.”używaj blink z millis, bo blink z delay jest złą formą nauki, w sensie dobrze wiedzieć że tak się da, ale nie używać „. Dlaczego? Tak jest dlatego, ponieważ funkcja delay zatrzymuje cały program na określony czas, niejednokrotnie spotkamy się z tym, że nie jest to wskazane. Prawdą jest, że funkcje delay jest dużo prościej umieścić w kodzie, ale w przypadku większego projektu funkcje delay, niestety, mogą sprawić spore problemy.

Porównaj powyższy przykład z przykładem znajdującym się poniżej, przeanalizuj go oraz postaraj się zrozumieć poszczególne części kodu.

// Blink bez delay

const int ledPin = 10; // podajemy numer pinu do którego podielimy diode

// Ustawiamy zmienne:
int ledState = LOW; // ustawiamy stan diody led po wlaczeniu arduino
long previousMillis = 0; // podajemy czas od któego licznik zaczyna liczenie

//licznik
long interval = 1000; // przedzial jaki ma zliczac licznik (milisekundy)

void setup() {
// ustawiamu pin jako wyjsciowy:
pinMode(ledPin, OUTPUT);
}

void loop()
{
// czesc odliczajaca

// parametry funkcji:
unsigned long currentMillis = millis();

if(currentMillis - previousMillis > interval) {
// zapisz czas w jakim ma migac dioda
previousMillis = currentMillis;

// jesli dioda jest wlaczaona to ja wylacz lub jestli jest wylaczaona to ja wlacz:
if (ledState == LOW)
ledState = HIGH;
else
ledState = LOW;

// wyslij wynik ledState na pin ledPin wyjsciowy:
digitalWrite(ledPin, ledState);
}
}
Blink bez delay

Poniżej przedstawiam kolejny prosty kod, który pomoże ci zrozumieć jak działa program wykonywany przez Arduino.

Przed rozpoczęciem pracy musimy zadbać o podstawowe elementy i źródło zasilania:

Arduino Uno, port USB w komputerze jako zasilanie lub zasilacz 5-15, trzy diody led, trzy rezystory 560 ohm, kilka przewodów, pytka stykowa

Na początku jest komentarz,

/*

  Miganie  LEDs – uruchomienie migania  3 diod led

*/

W poniższych liniach podajemy zmienne za pomocą funkcji int . W moim przypadku nazywa się ona aled i podłączona będzie do wyjścia nr 10 arduino z diodą led, analogicznie jest ze zmienna bled i cled, które wskazują programowi, że na złączu nr 11 i 12 również podłączone są diody led.

int aled = 10;

int bled = 11;

int cled = 12;

 

// ustawiamy stan po wcisnieciu przycisku reset

 

Funkcja setup programu

void setup() {               

  // ustawiamy wyjscia

Funkcja pinMode(aled, OUTPUT), mówi, że zmienna aled,bled I cled są wyjsciami.

pinMode(aled, OUTPUT);  

pinMode(bled, OUTPUT); 

pinMode(cled, OUTPUT);   

}

 

Nie zapominamy o zamknięciu klamry }

 

// funkcja petli, która ma być wykonywana zawsze przez program

void loop() {

  digitalWrite(aled, HIGH);   // wlacz diode aled (HIGH 5V)

  delay(1000);                      // czekaj sekunde

  digitalWrite(aled, LOW);    // wylacz diode aled (LOW 0V)

  digitalWrite(bled, HIGH);    // wlacz diode bled (HIGH 5V)

  delay(1000);                      // czekaj sekunde

  digitalWrite(bled, LOW);     // wylacz diode aled (LOW 0V)

  digitalWrite(cled, HIGH);     // wlacz diode bled (HIGH 5V)

  delay(1000);                      // czekaj sekunde

  digitalWrite(cled, LOW);      // wylacz diode aled (LOW 0V)

  delay(500);                     // czekaj pol sekundy

}

 

digitalWrite(aled,HIGH); wyślij na cyfrowe wyjście przypisane dla zmiennej aled stan 5V czyli stan HIGH – wysoki, następnie delay(1000); czekaj 1000 milisekund, czyli jedną sekundę, a następnie digitalWrite(aled,LOW); wyślij na pin przypisany dla aled, LOW – stan 0V niski, wyłącz diodę. Kolejny skok jest analogiczny dla diody ze zmienna bled i cled. Po wykonaniu wszystkich kroków jest dodana funkcja delay(500); mówi ona, że po wykonaniu wszystkich, w naszym wypadku 6, operacji włączania i wyłączania diod, program ma czekać pół sekundy, zakończyć się, a następnie skoczyć ponownie do funkcji void loop, czyli ponownie zacząć ta funkcję i tak w nieskończoność do wyłączenia Arduino z sieci lub wciśnięcia przycisku reset na naszej płytce.

 

Poniżej przedstawiam gotowy kod, zapraszam do zapoznania się z nim.

 

 

/*

Miganie  LEDs - uruchomienie migania  3 diod led

*/

int aled = 10;

int bled = 11;

int cled = 12;

// ustawiamy stan po wcisnieciu przycisku reset

void setup() {

// ustawiamy wyjscia .

pinMode(aled, OUTPUT);

pinMode(bled, OUTPUT);

pinMode(cled, OUTPUT);

}

// funkcja petli, co ma wykonywa zawsze program

void loop() {

digitalWrite(aled, HIGH);   // wlacz diode aled (HIGH 5V)

delay(1000);                      // czekaj sekunde

digitalWrite(aled, LOW);    // wylacz diode aled (LOW 0V)

digitalWrite(bled, HIGH);    // wlacz diode bled (HIGH 5V)

delay(1000);                      // czekaj sekunde

digitalWrite(bled, LOW);     // wylacz diode aled (LOW 0V)

digitalWrite(cled, HIGH);     // wlacz diode bled (HIGH 5V)

delay(1000);                      // czekaj sekunde

digitalWrite(cled, LOW);      // wylacz diode aled (LOW 0V)

delay(500);                     // czekaj pol sekundy

}
blink bez delay

 

Zadanie dla Ciebie. Zmień dane w zmiennych aled, bled, cled, tak by podłączyć piny 6,7,8 do diod led, zmień czas świecenia i wyłączenia diod na pół sekundy. Nie zapomnij zmienić pinów w twoim pierwszym projekcie w sposób o jakim mówi funkcja int .

Kolejny przykład, jaki chcę wam przedstawić, jest oparty na 3 diodach led oraz przycisku.

Przed rozpoczęciem pracy musimy zadbać o podstawowe elementy i źródło zasilania:

Arduino Uno, port USB w komputerze jako zasilanie lub zasilacz 5-15, trzy diody led, trzy rezystory 560 ohm oraz jeden 10 Kohm, kilka przewodów, pytka stykowa, przycisk montażowy

Tym razem nie będę już rozpisywał co robi program, ponieważ zrobiłem to już w samym kodzie. Zawarłem w nim komentarze, które już powinieneś umieć odczytać i wiedzieć co dana funkcja robi w programie, do czego służy i jaki jest efekt jej działania.

 

Proszę, przeanalizuj poniższy kod, porównaj go z poprzednim i zobacz co się zmieniło i jaki to ma wpływ na efekt końcowy.

 

/*

Miganie  LEDs - uruchomienie migania  3 diod led przyciskiem

*/



int przycisk = 2;

int aled = 10;

int bled = 11;

int cled = 12;



void setup(){

// definiujemy piny ktore sa wyjsciami i podpiete do nich mamy diody led

pinMode(aled, OUTPUT);

pinMode(bled, OUTPUT);

pinMode(cled, OUTPUT);



// deklarujemy pin 2 jako wejscie

pinMode(2, INPUT);

}



void loop(){

// petla ktora jest wykonywana przez program

// digitalRead() funkcja ta sprawdza czy na pinie cyfrowym (2)

// mamy napiecie czy nie

przycisk = digitalRead(2);



// jesli przycisk nie jest wcisniety (LOW - 0V) to zapalamy tylko diode aled

if (przycisk == LOW) {

digitalWrite(aled, HIGH);

digitalWrite(bled, LOW);

digitalWrite(cled, LOW);

}

// jesli jest inaczej jak wyzej (na pinie 2 pojawi się napięcie) zapal diode aled, wylacz blec, cled, delay(50) czekaj 50 ms

// nastepnie wylacz diode aled, wlacz bled, wylac cled, delay(50) czekaj 50 ms

// nastepnie wylacz diode aled, wylacz diode bled, wlacz diode cled, delay(50) czekaj 50 ms

// zmaknij program i wroc do funkcji void loop

else {

digitalWrite(aled, HIGH);

digitalWrite(bled, LOW);

digitalWrite(cled, LOW);

delay(50);

digitalWrite(aled, LOW);

digitalWrite(bled, HIGH);

digitalWrite(cled, LOW);

delay(50);

digitalWrite(aled, LOW);

digitalWrite(bled, LOW);

digitalWrite(cled, HIGH);

delay(50);

}

}
miganie 3 diodami z przyciskiem

Zadanie dla Ciebie.

Zbuduj układ wg wytycznych zawartych w programie, dobierz parametry w taki sposób, by po włączeniu arduino diody migały, a po wciśnięciu przycisku przestały działać, a świeciła tylko dioda podpięta do pinu 12.

No, i doszliśmy do kolejnego przykładu niezależnego migania trzema diodami led.

 

// Blink 3 led bez delay

const int ledPin =  10;      // podajemy numer pinu do którego podpielismy diode
const int ledPin1 =  11; 
const int ledPin2 =  12; 
// Ustawiamy zmienne:
int ledState = LOW;  // ustawiamy stan diody led po wlaczeniu arduino
int ledState1 = LOW;
int ledState2 = HIGH;
long previousMillis = 0;        // podajemy czas od któego licznik zaczyna liczenie
long previousMillis1 = 0; 
long previousMillis2 = 0;
//licznik
long interval = 175;           // przedzial jaki ma zliczac licznik  (milisekundy)
long interval1 = 220; 
long interval2 = 357;
void setup() {
  // ustawiamu pin jako wyjsciowy:
  pinMode(ledPin, OUTPUT); 
  pinMode(ledPin1, OUTPUT); 
  pinMode(ledPin2, OUTPUT);    
}
 
void loop()
{
  // czesc odliczajaca
   // parametry funkcji:
  unsigned long currentMillis = millis();
  
  if(currentMillis - previousMillis > interval) {
    // zapisz czas w jakim ma migac dioda 
    previousMillis = currentMillis;   
     // jesli dioda jest wlaczaona to ja wylacz lub jestli jest wylaczaona to ja wlacz:
    if (ledState == LOW)
      ledState = HIGH;
    else
      ledState = LOW;
     // wyslij wynik ledState na pin ledPin wyjsciowy:
    digitalWrite(ledPin, ledState);
  }
unsigned long currentMillis1 = millis();
 
 if(currentMillis - previousMillis1 > interval1) {
    // zapisz czas w jakim ma migac dioda 
    previousMillis1 = currentMillis;   
 
    // jesli dioda jest wlaczaona to ja wylacz lub jestli jest wylaczaona to ja wlacz:
    if (ledState1 == LOW)
      ledState1 = HIGH;
    else
      ledState1 = LOW;
 
    // wyslij wynik ledState na pin ledPin wyjsciowy:
    digitalWrite(ledPin1, ledState1);}

unsigned long currentMillis2 = millis();
if(currentMillis - previousMillis2 > interval2) {
    // zapisz czas w jakim ma migac dioda 
    previousMillis2 = currentMillis;   
 
    // jesli dioda jest wlaczaona to ja wylacz lub jestli jest wylaczaona to ja wlacz:
    if (ledState2 == HIGH)
      ledState2 = LOW;
    else
      ledState2 = HIGH;
 
    // wyslij wynik ledState na pin ledPin wyjsciowy:
    digitalWrite(ledPin2, ledState2);}
}
blink 3 led bez delay

Zachęcam was jeszcze do zapoznania się z powyższym kodem, który zadziała w trochę inny sposób niż poprzednie. Proszę przeanalizuj ten program i postaraj się go zrozumieć, zastanów się również nad tym, która funkcja jest odpowiedzialna za częstotliwość migania diody. Zachęcam Was do zmian parametrów i obserwacji jak wasze  arduino reaguje na nowe ustawienia. Metoda prób i błędów jest najlepszą formą nauki.

Już niebawem przedstawię Wam kolejny biuletyn poświęcony diodom led, tym razem będą to diody dwu i trój kolorowe (rgb), pokazę wam proste programy, które pozwolą na zbudowanie bardzo ciekawych projektów. Diody programowalne i sterowanie nimi opisze w osobnym felietonie. Zapraszam was do komentowania wpisu, odwiedzin naszej grupy facebookowej oraz fanpage.