Scratch – proste programowanie niczym Minecraft

Znajomy niedawno był w Krakowie na Nocy Naukowców 2014. Z ciekawostek najbardziej spodobał mu się program Scratch. Służy on do nauki programowania, przez układanie programów z klocków. Mówiąc językiem współczesnych robi się w nim crafting programów.

Ponieważ wiele osób chciałoby wykorzystać swoje kontrolery w prosty sposób, postanowiłem się przyjrzeć jego wersji dla Arduino o nazwie S4A.

Najpierw ściągnąłem program ze strony twórców:

Program jest w wersjach na Windows, Mac, Linux i Raspberry PI.

Następnie trzeba wgrać przez Arduino IDE do Arduino szkic komunikujący się z S4A.

Niestety szkic wykorzystuje sprzętowe sztuczki kontrolerów ATmega168/328 i działa tylko na Arduino UNO lub Duemilanove.

Po podłączeniu Arduino do komputera i uruchomieniu S4A widzisz to:

image

Po prawej znajduje się narysowana płytka Arduino, a obok niej podgląd działania pinów analogowych 0..5 i cyfrowych 2, 3. To chyba ułatwia zrozumienie niektórych rzeczy.

Po lewej stronie jest tabelka zawierająca wszystkie klocki z których możesz craftować program. Klocki pookładane są w kategorie, żeby łatwiej było szukać.

Na środku jest pole do którego zrzucasz klocki i układasz program.

Zacznę od typowego przykładu mrugania wbudowaną w Arduino pomarańczową lampką LED. Ma ona oznaczenie na płytce L lub L13 i jest podłączona do pinu cyfrowego 13.

Program wygląda tak:

image

Ułożyłem go w ten sposób:

  1. W polu kontrola wybrałem klocek “Kiedy kliknięto [zielona flaga]”.
    Ten klocek oznacza uruchomienie programu. Uruchamia się on jak naciśniesz zieloną flagę w prawym górnym rogu okna. Czerwone kółko zatrzymuje program.
  2. Potem podłączyłem do tego klocka – klocek o nazwie “Zawsze”.
    Wszystko co będzie w środku tego klocka będzie się wykonywało bez końca w kółko.
  3. Potem w kategorii “Ruch” wybrałem klocek “digital 10 on” i włożyłem do środka klocka “Zawsze”. Potem przestawiłem mu numer pinu na 13.
    Klocek ten odpowiada za włączenie pinu – będzie z niego wychodziło 5 V i zasilało lampkę L.
  4. Następnie w kategorii wybrałem klocek “czekaj 1 s”. Klocek ten blokuje działanie programu na jakiś czas.
  5. Za nim dołączyłem klocek “digital 13 off” z kategorii “Ruch”.
    Wyłącza on napięcie na pinie 13 i tym samym lampkę L.
  6. Dalej dodałem znowu klocek “czekaj 1 s”.

W te sposób napisałem program, który ciągle zapala i gasi lampkę L co sekunda.

Teraz czas na trudniejszy program. Chciałbym, podłączyć do Arduino przekaźnik sterujący światłem. Po pierwszym wciśnięciu na klawiaturze spacji przekaźnik się włączy a po drugim wciśnięciu spacji się wyłączy.

image

Do pinu cyfrowego 10 podłączyłem przekaźnik Nettigo.

Program wyszedł mi taki:

image

W programie potrzebna jest zmienna, która będzie pamiętała czy wciśniecie ostatnio spacji włączało, czy wyłączało przekaźnik.

Zmienną utworzyłem w sekcji “Zmienne” i nazwałem “czy było włączone”. Jeżeli ma ona wartość 0 to znaczy, że przekaźnik trzeba włączyć i ustawić zmienną na 1. Jeśli ma wartość 1 to przekaźnik trzeba wyłączyć i ustawić zmienną na 0.

Pierwszy klocek w programie to “kiedy klawisz spacja to” z sekcji “Kontrola”. Można w nim ustawić reakcję na różne klawisze.

W klocku “jeżeli” jest zielony klocek “=” z sekcji “Wyrażenia”. Porównuje on wartość zmiennej z liczbą 0.

Nauka takiego programowania jest bardzo prosta. Teraz możesz łatwo stworzyć własne sterowane programem urządzenia oraz łatwo i przyjemnie nauczyć się programować.

Arduino UNO kupisz w sklepie Nettigo.

sprae

Dokładniejsze wejścia analogowe w Arduino UNO

Jeśli używasz Arduino to pewnie wiesz co robi funkcja analogRead(x);. Odczytuje napięcie z wejścia analogowego. Jeśli funkcja zwraca 0, to na wejściu jest 0 V. Jeśli funkcja zwraca 1023 to na wejściu jest maksymalne napięcie, przyjmuje się że wynosi około 5 V.

No właśnie “około”. Czasem przydaje się większa dokładność. Można ją uzyskać małym kosztem. Na stronie Thinkerit znajduje się fajny program:

long readVcc() {
  long result;
  // Read 1.1V reference against AVcc
  ADMUX = _BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
  delay(2); // Wait for Vref to settle
  ADCSRA |= _BV(ADSC); // Convert
  while (bit_is_set(ADCSRA,ADSC));
  result = ADCL;
  result |= ADCH<<8;
  result = 1126400L / result; // Back-calculate AVcc in mV
  return result;
}

void setup() {
  Serial.begin(9600);
}

void loop() {
  Serial.println( readVcc(), DEC );
  delay(1000);
}

Funkcja readVcc(); odczytuje dokładne napięcie zasilania Arduino. Jest to też napięcie, które jest na wejściu analogowym, gdy funkcja analogRead zwraca wartość 1023(*). Napięcie jest zwracane w mili-voltach. Czyli jeśli funkcja zwróci 5123 mV to napięcie zasilania wynosi 5,123 V.
Okazuje się, że napięcie zasilania może być niestabilne, więc warto odczytywać je za każdym razem gdy odczytujesz wejście analogowe i przeliczać jego wartość.

Jeśli masz Arduino Leonardo, to potrzebujesz lekko zmienionej funkcji, będzie ona opublikowana już wkrótce.

Jeśli interesujesz się tym jak działa funkcja readVcc możesz się dowiedzieć z dokumentacji procesora Arduino na stronie 262, lub pytając mnie w komciach:

Dokumentacja kontrolera Atmega 328p

Wpis o funkcji readVcc na stronie Thinkerit

Arduino UNO R3 w sklepie Nettigo

*Tak wiem, że jest analogReference i po nim funkcja zwraca napięcie ARef 😉

sprae

Arduino UNO R3 nadchodzi

Gdy Arduino Team zapowiedział Arduino Due i Leonardo, te dwie wiadomości przyćmiły trochę zapowiedziane zmiany w Arduino UNO. Nowa wersja oznaczona R3 ma się wkrótce pojawić. Nie wiadomo dokładnie kiedy to się stanie, ale poprzednia wersja Arduino UNO (R2) nie jest już produkowana i zapas się już kończy.

Dlatego od dziś w naszej ofercie pojawia się Arduino UNO SMD (ATmega328 zamiast w obudowie DIP na podstawce jest w obudowie do montażu powierzchniowego). Funkcjonalnie nie różni się od zwykłego UNO, jedynie nie da się go użyć jako konwerter USB/Serial np do komunikacji z niektórymi shieldami (w UNO R2 po wyjęciu ATmegi z podstawki można korzystać z Arduino jak z konwerter USB/Serial)

Arduino SMD jest tańsze, cena brutto to 84 zł. Starter Kit sprzedawany od dziś jest z Arduino UNO SMD – nowa (niższa) cena Starter Kitu to 124 zł. Jeżeli ktoś potrzebuje Starter Kitu z Arduino w wersji nie SMD może kupić oddzielnie Arduino UNO (R2) i Starter Kit bez Arduino.

Jednocześnie wysoki i nadal rosnący kurs euro zmusił nas do podniesienia ceny UNO R2 – od dziś kosztuje ono 104 zł.

R3, na które czekamy (nie ma jeszcze daty kiedy będą dostępne) ma złącza rozszerzone o dwa piny w rzędzie wyjściami cyfrowymi oraz o dwa w rzędzie z zasilaniem. W pierwszych jest wyciągnięte I2C (aka TWI) a w dolnym jeden pin jest wolny, może w przyszłości coś się pojawi oraz pin ułatwiający konfigurację shieldów.

Arduino UNO R2

Jak się okazuje już od jakiegoś czasu sprzedawane Arduino UNO są to tzw UNO R2. Zaszły drobne zmiany w układzie płytki. I tak, ATmega8u2 (odpowiedzialna za komunikację z USB) posiada przylutowane złącze ICSP (6 pinów w okolicy pinu AREF). Ułatwia wgranie nowego firmware bez podłączenia do USB. Ponadto nie trzeba już dolutowywać rezystora 10k jeżeli trzeba wgrać nowy fw na 8u2 (przez dfu programmer).

Ponadto wygląda na to, że są inne układy stabilizacji napięcia – zarówno 5V jak i 3.3V. Oficjalna specyfikacja się nie zmieniła, więc podejrzewam, że nic się nie zmieniło z punktu widzenia użytkownika.

Czemu tylko podejrzewam? Od jakiegoś czasu uaktualnienia/dokumentacja do Arduino ukazują się z pewnym opóźnieniem. Najpierw nowy produkt, potem, po jakimś czasie dokumentacja. Jak na razie nie ma nowych schematów na arduino.cc więc czy to już wszystkie zmiany nie można być pewnym…