Początki z Starter kitem rozszerzonym (Arduino Uno)

Początki z Starter kitem rozszerzonym (Arduino Uno)

Witajcie Majsterkowicze ! Jest to mój pierwszy post na Majsterkowie, do tej pory byłem tylko czytelnikiem lecz postanowiłem pomóc początkującym w sferze Arduino i napisać post skierowany dla początkujących. W poście wykorzystuje rzeczy kupione w sklepie Botland.com.pl głównie jest to Starter kit rozszerzony z Arduino Uno i parę inny elementów. W tym poście chciałbym pokazać wszystkim początkującym że Arduino jest bardzo proste i nie trzeba znać zawiłych języków programowania tylko uproszczony język C. Aby czytelnik mógł zapoznać się z językiem Arduino wiele części programu będę tłumaczył pod kodem lub w komentarzach programu. Na początek zbudujemy sobie prosty układ którego celem jest zapalanie i zgaszanie diody (lub innego elementu zasilanego przez 5V o poborze prądu nie większym niż 50mAm) przez wciśnięcie przycisku (tak zwany tact-switch) a później zmienianie stanu diody poprzez jednorazowe wciśnięcie przycisku i zatrzymanie tego stanu ( po wciśnięciu przycisku dioda się zapala, gdy naciśniemy drugi raz zgaśnie). Zaczniemy może od rysunku płytki i połączeń pomiędzy Arduino a innymi elementami

Untitled Sketch_bb

Rezystor obok diody led ma wartość 220 Ohm a obok przycisku 10 K Ohm. Gdy zbudowaliście układ możemy przejść do programu.

 

 

Szkic możemy przerzucić do Arduino IDE, wgrać na płytkę i cieszyć się działającym układem, bazując na tym samym schemacie możemy sprawić by przy jednym wciśnięciu przycisku dioda się zapaliła a przy drugim zgasła, wystarczy tylko trochę zmienić kod by wyglądał tak :

 

Gdy mamy już opanowane świecenie, zapalanie i zgaszanie jednokolorowej diody led możemy zabrać się za sterowanie diodą RGB. Tym razem nie użyjemy diody dołączonej do Starter Kitu lecz diody RGB ze wspólną katodą. Jak zwykle zaczniemy od schematu :

Rgb

Diodę musimy włożyć w ten sposób by najkrótsza nóżka była w miejscu bez rezystora, rezystory przy diodzie mają wartość 220 Ohm a przy przyciskach 10 K Ohm. Tym razem postanowiłem nie dodawać komentarzy do programu gdyż ten program jest bardzo podobny do pierwszego tylko że dodaliśmy dwa przyciski i dwa wyjścia, jeśli mamy złożony układ możemy brać się za program :

Program działa w ten sposób ,że po wciśnięciu jednego z przycisków zapali się jeden segment diody RGB. A gdy puścimy przycisk dioda nie będzie się paliła. W zestawie startowym mamy także silnik DC oraz sterownik silników zwany mostkiem H sterownik ten może sterować 2 silnikami DC, steruje prędkością oraz kierunkiem kręcenia się silników, w zestawie mamy także tranzystory NPN i zdecydowałem  że lepiej będzie nauczyć się z nich korzystać gdyż na pewno będą bardziej przydatne w życiu elektronika niż mostek h ( przynajmniej jeżeli chodzi o naukę i proste projekty). A więc do dzieła zacznijmy klasycznie od schematu :

Tranzystor

Tranzystory używamy często gdy pobór prądu jest większy niż może uciągnąć arduino. Uwaga przez ten tranzystor sterujemy GND a nie 5 V rysunek pod spodem wyjaśni do czego służą poszczególne nóżki tranzystora. Rezystory na schemacie to : 220 Ohm przy tranzystorze i 10 K Ohm przy przycisku.

mps2222a 1 to emiter do niego podłączamy GND  2 to Baza do pinu Arduino podłączamy przez rezystor 220 Ohm  3 to kolektor który jest wyjściem Gnd.

Teraz przejdźmy do programu który jest bardzo podobny do poprzednich

Aby urozmaicić trochę program wykorzystamy PWM  wtedy szkic wyglądał by tak :

Oprócz dodanej funkcji PWM w programie zostały zmienione piny by można było sterować PWM gdyż nie wszystkie piny obsługują tą funkcje. Gdy zadowoleni z kręcącego się silniczka oraz umiejętnością sterowania jego prędkością stwierdzimy iż chcemy zmierzyć temperaturę w naszym pokoju a następnie wyświetlić te dane na wyświetlaczu. Więc zajmiemy się najpierw obsługą wyświetlacza, samego czujnika temperatury a później złożymy to w jedną całość. Tradycyjnie zaczniemy od schematu.

Wyświetlacz

Schemat jest bardzo czytelny więc raczej nie ma potrzeby tłumaczenia, ten czarny guziczek to potencjometr  czarne kabelki to GND a czerwone to Vcc. Teraz przejdziemy do programu który umożliwi nam sterowanie wyświetlaczem, tak na wszelki wypadek potencjometr służy do ustawienia kontrastu wyświetlanego tekstu. Program który wgramy na wyświetlacz ma za zadanie wyświetlić napis Hello, world oraz liczyć czas od ostatniego resetu Arduino.

W komentarzach opisane jest wszystko co potrzebujemy wiedzieć do najprostszego używania wyświetlacza w razie czego możemy zajrzeć tu lub tu. Gdy potrafimy podłączyć wyświetlacz możemy zabrać się za obsługę czujnika temperatury który pozwoli zmierzyć nam temperaturę, z Arduino komunikuje się przez pin analogowy 1. Czujnik jest bardzo prosty w obsłudze i nie zabiera nam cennych pinów cyfrowych. Zabierzmy do składania układu :

LM35

Połączenie jest wręcz banalne, pierwszą nóżkę od lewej podłączmy do Vcc, drugą do A1 a trzecią do Gnd.

Po wykonaniu tego przykładu nie dość że będziemy umieli korzystać z czujnika LM35 to jeszcze będziemy umieli korzystać z wejść analogowych i posługiwać się serial monitorem. Gdy umiemy podłączać już wyświetlacz i czujnik osobno to możemy połączyć czujnik i wyświetlacz w jedno i sprawić by temperatura pokazywała się na wyświetlaczu. Tradycyjnie zaczniemy od schematu który pokarze jak połączyć całość na płytce stykowej :

Stacja Pogodowa

Schemat jest po prostu połączeniem dwóch poprzednich więc wystarczy spojrzeć na podpowiedzi do poprzednich i złożenie całości będzie proste. Zmieni się trochę program :

Program ten jest połączeniem kilku poprzednich więc poszczególnych części kodu nie trzeba tłumaczyć gdyż po przeczytaniu i nabyciu wiedzy z poprzednich programów jesteśmy w stanie bez problemu odczytać jak działa program. Gdy złożymy całość i zaprogramujemy Arduino naszym oczom ukaże się elegancki termometr z którego możemy być dumni  i gdy przyjdą znajomi pochwalić się, że zrobiliśmy to sami. Mam nadzieje że post pomoże wielu początkującym którzy szukają fajnych projektów na początek i nie chcą zaczynać od blinka.

Ocena: 4.51/5 (głosów: 68)

Podobne posty

32 komentarzy do “Początki z Starter kitem rozszerzonym (Arduino Uno)

  • Mam taką uwagę do autorów – czy można prosić o dodatkowe schematy połączeń w wersji “klasycznej”. Jak po raz n-ty widzę schematy w fritzingu gdzie widzę 15 kolorowych przewodów krzyżujących się pod różnymi kątami plus dziwaczne przejściówki to zaprawdę powiadam – nie ogarniam tego.

    Odpowiedz
  • Świetny post pokazuje to co ma pokazywać na początek zabawy z arduino, bez zawracania głowy blinkami i innymi podstawami które nic nie wnoszą… Po prostu świetne 5 gwiazdek leci :-)

    Odpowiedz
  • Nie znam zbytnio składni tego uproszczonego C występującego w Arduino, ale jako programista mam jedną dużą uwagę do twojego kodu. Stosuj wcięcia, one na prawdę ułatwiają czytanie kodu. Plus uwaga do warunków: jeśli po if dajesz kod w następnej linijce to po else także tak rób.

    Odpowiedz
  • Bardzo fajny poradnik pokazujący, jak obsłużyć podstawowe kilka podstawowych komponentów przez Arduino. Jeśli mógłbym coś zasugerować, to warto dodać diodę zaporowo podłączoną równolegle do silnika. Ochroni ona tranzystor przed prądami błądzącymi. Życzę dalszych udanych poradników :)

    Odpowiedz
  • Serdecznie witam
    Właśnie zacząłem moją przygodę z Arduino i wpadłem na tą stronkę. Czy jest możliwym uzyskanie przykładu Współpracy Arduino UNO + wyświetlacz + DHT11 zamiast LM35? Będę bardzo wdzięczny. Z góry dziękuję.

    Odpowiedz
  • Witam, chciałbym poprosić o poprawne komendy do projektu numer 2 ponieważ wpisuję w arduino, wgrywam i wyskakuje błąd kopiowania :

    sketch_apr07a.ino: In function ‘void loop()’:
    sketch_apr07a.ino:13:1: error: ‘else’ without a previous ‘if’
    sketch_apr07a.ino:18:1: error: ‘else’ without a previous ‘if’
    sketch_apr07a.ino:23:1: error: ‘else’ without a previous ‘if’
    Błąd kompilacji.

    Proszę o szybką odpowiedź :(

    Odpowiedz
        • Tak. Też zwrociłem na to uwagę, ale dołożenie zasilania do listwy powoduje zapalenie diody na zielpno po wciśnięciu środkowego przycisku. Czyli nadal jest tutaj coś nie tak.

          Nie miałem czasu dłużej posiedzieć, więc może wreszcie autor się zainteresuje tematem?

          Odpowiedz
        • W drugim projekcie trzeba też zmienić biegunowość napięcia (5 V z masą). Czyli w całości trzeba poprawić:
          – dwa razy średnik (w lini 19 i 24)
          – dołożyć połączenie 5V tam gdzie jest anoda diody
          – podłączyć GND na inną linię niż masa
          W opisie autor pomylił się ponieważ anoda to “najdłuższa” nóżka w diodzie.
          Teraz wszystko buja się, aż miło patrzeć!

          Odpowiedz
  • Witam,

    termometr wskazuje poprawną temperaturę w konsoli ale nie wyświetla jej na LCD (wyświetla jedynie 0.00). Co jest nie tak? Kod poniżej:

    #include
    LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
    float temp;
    int temperatura = 1;
    void setup()
    {
    Serial.begin(9600);
    lcd.begin(16, 2);
    lcd.print(“Temperatura “);
    lcd.setCursor(0,1);
    lcd.print(temp);
    }

    void loop()
    {
    temp = analogRead(temperatura);
    temp = temp * 0.48828125;
    Serial.print(“Temperatura = “);
    Serial.print(temp);
    Serial.print(“*C”);
    Serial.println();
    delay(1000);
    }

    Odpowiedz
    • Jaki ja głupiutki….

      Oto poprawiony kod, gdyż ten w tekście jest błędny – temperatura wyświetlana na LCD musi być przecież w loopie a nie setupie.

      Proszę:

      #include
      LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
      float temp;
      int temperatura = 1;
      void setup()
      {
      Serial.begin(9600);
      lcd.begin(16, 2);
      lcd.print(“Temperatura “);
      }

      void loop()
      {
      temp = analogRead(temperatura);
      temp = temp * 0.48828125;
      Serial.print(“Temperatura = “);
      Serial.print(temp);
      Serial.print(“*C”);
      Serial.println();
      lcd.setCursor(0,1);
      lcd.print(temp);
      lcd.print(“*C”);
      delay(1000);
      }

      Odpowiedz
    • Doszedłem szybciutko.

      Naturalnie temperatura powinna być w loop a nie setup – jak inaczej ma się odświeżać?

      Oto poprawiony kod:
      #include
      LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
      float temp;
      int temperatura = 1;
      void setup()
      {
      Serial.begin(9600);
      lcd.begin(16, 2);
      lcd.print(“Temperatura “);
      }

      void loop()
      {
      temp = analogRead(temperatura);
      temp = temp * 0.48828125;
      Serial.print(“Temperatura = “);
      Serial.print(temp);
      Serial.print(“*C”);
      Serial.println();
      lcd.setCursor(0,1);
      lcd.print(temp);
      lcd.print(“*C”);
      delay(1000);
      }

      Odpowiedz
  • Witam. Od jakiegoś czasu próbuje podłączyć dwa czujniki dht11 do arduino i wyświetlić wyniki na lcd. Z jednym nie mam problemu, ale z dwoma nie mogę sobie poradzić. Macie jakiś pomysł?

    Odpowiedz

Odpowiedz

anuluj

Masz uwagi?