Jest kolorowo – OragnePi, ODRIOD…

Nie wiem, czy to powinien być „nius” – bo to dość przenoszone kapcie… Niemniej jednak warto wiedzieć o różnych takich nowościach. Dlatego dołączam wpis o hardwarowych zabawkach.

Orange Pi (rodzina)

Chyba niesłuszne jest nazywać tą maszynkę klonem Raspberry Pi, gdyż jest to po prostu inny komputer jednopłytkowy na bazie procesora ARM. Oczywiście z pinami GPIO do programowania.

orange-pi

Występuje sporo wersji tego komputera: Orange PI PC, Orange Pi Mini 2, Orange Pi 2, Orange Pi Plus… generalnie działają na Linuxie (sporo dystrybucji, warto tu zajrzeć). Parametrami często przewyższa Raspberrego – jednak wsparcie środowiska jest zdecydowanie mniejsze. Trzeba o tym pamiętać! Ach, no i warto zauważyć, że choć dystrybucji Linuxa jest kilka, to żadna z nich nie ma odpowiedniej umowy z Wolframem – brak jest więc Mathematicy! Cena takiej maszynki to coś od 120 zł (w zależności od wersji, można zajrzeć do allegro).

Obszerny (ale nie nudny!) artykuł o tych maszynkach znajdziecie tu: http://www.jarzebski.pl/blog/2016/04/04/orange-pi-rodzina-sbc-z-procesorem-allwinner-h3.html

ODROID (rodzina)

Wrzucam zdjęcie porównujące ODROID-C2 (najnowszy) maszynę do Maliny v3 i już wiadomo o co chodzi:

raspberry-pi-3-odroid-c2-comparison

Kolejny konkurent dla Maliny 😉 Specyfikacja przewyższa nawet Malinę w wersji 3 (ale i cena też, bo ~260 zł), a to za sprawą:

  • 2GHz quad core Cortex A53 processor (Pi3 śmiga na 1.2 GHz)
  • RAM 2GB (Pi3 ma o połowę mniej)
  • sieciówka gigabajtowa (Pi3 to „tylko” 10/100 Mb)
  • eMMC slot(brak w Pi3)

Nie jest jednak tak różowo, bo przyglądamy się bliżej i widać, że

  • ODROID-C2 nie ma wbudowanego modułu Bluetooth ani WiFi (RPi3 ma!)
  • brak też Wolfram Mathematicy!

Warto zajrzeć do Wiki i poczytać pełną specyfikację: http://odroid.com/dokuwiki/doku.php?id=en:odroid-c2

Wydajność – benchmarki

ODROID-C2 wypada zdecydowanie lepiej niż RPi3, zachęcam by przyjrzeć się wykresikom porównawczym: http://www.jeffgeerling.com/blog/2016/review-odroid-c2-compared-raspberry-pi-3-and-orange-pi-plus

Kolejny członek rodziny ODROID-XU4 fajnie prezentuje się nie tylko na wykresach wydajności:

XU4packagem

Obecność sporego radiatora (sporego, jak na gabaryty komputerów jednopłytkowych) świadczy o grzaniu, a więc i o niezłych parametrach wydajnościowych. A i owszem:

benchmark1

Mamy tu zebrane wykresy 4-ech róznych maszyn testowanych pod kątem 6-ciu różnych parametrów: wydajność zmiennoprzecinkowa (im więcej, tym lepiej) w różnych programach testujących. Wyraźnie widać, że rodzina ODROIDa mocno bije Malinę (tutaj w wersji 2). Dla lubiących wykresiki polecam ten artykuł.

Zakończę tak

Warto wiedzieć o tych zabawkach (oraz o innych, nie wspomnianych tutaj przez mnie, jak chocby Intel Edison), ale trzeba się na coś zdecydować i robić swoje – programować, knuć, klecić 😉 Od nadmiaru sprzętu może zaboleć głowa więc polecam prostą zasadę dla inwestujących w swój pierwszy komputerk jednopłytkowy – kupujcie taki, jakie mają Twoi znajomi. W ten sposób będziesz mieć wsparcie zawsze pod ręką 😉 Taka strategia sprawdza się najlepiej. Druga rada z zakupem też jest prosta: trzeba się szybko na coś zdecydować, gdyż czas płynie nieubłagalnie i nie ma co go tracić na zbyt długie zastanawianie się nad konkretnym modelem. Niech przestrogą będzie osiołek z bajki Ezopa, który zdechł z głodu nie mogąc wybrać miski, z której zacznie jeść posiłek.

 

 

Zajęcia nr 5 – sygnały cyfrowe, analogowe…

Sygnały cyfrowe – czujka ruchu PIR

Prosta w obsłudze czujka ruchu. Trzy piny  – zasilanie, masa oraz wyjście. W przypadku wykrycia ruchu wyjście jest w stanie wysokim (5V) przez chwilę (można sterować tym czasem),  a gdy ruchu brak – wyjście przechodzi w stan niski (0V). Aby to odczytać przy pomocy Arduino poznaliśmy dwie nowe rzeczy:

  • pinMode(7, INPUT) – czyli właśnie informujemy Arduino, że będziemy odczytywać wartość napięcia na konkretnym pinie (w tym przypadku: pinie numer 7),
  • digitalRead(7) – funkcja odczytująca napięcie i zwracająca wartość 1 (jedynka) gdy napięcie jest wysokie (2.4 – 5V) oraz 0 (zero) gdy napięcie jest niskie (0 – 0.8V).

Warto pamiętać, że Arduino UNO ma 14 pinów cyfrowych, a inne modele – patrz specyfikacja (kupując płytkę dla siebie weź to pod uwagę).

Sygnały analogowe

Czyli czytanie napięcia z przedziału od zera do 5V z rozdzielczością 10 bitów – a więc 1024 poziomów napięć (bo 2 do potęgi 10-tej to właśnie 1024). Nasze płytki są już lekko zdezelowane i wcale na wyjściu pinu 5V z Arduino nie mamy 5V a np. 4.57V, dlatego warto to mieć na uwadze czytając konkretną wartość napięcia. Poznaliśmy:

  • wejścia analogowe: A0, A1, A2, …, A5 (6 sztuk w UNO)
  • analogRead(A0 – funkcja odczytująca napięcie i zwracająca wartości od 0..1023 w zależności od napięcia na wejściu A0.
  • wejście AREF na płytce Arduino do podawania napięcia referencyjnego z przedziału 0..5V oraz funckję analogReference(EXTERNAL) uruchamiającą tę funkcję. Dzięki temu można wykorzystać całą rozdzielczość 10-ciu bitów na czytanie napięcia w przedziale 0..AREF V – ale tego nie testowaliśmy w praktyce.
  • inne możliwości ustawienia punktu odniesienia w funkcji analogReference, np. INTERNAL1v1 w zależności od płytki Arduino daje to pożliwość wykorzystania całej rozdzielczości 10-ciu bitów w zakresie 0..1V.

Potencjometr liniowy – dzielnik napięć

Bardzo przydatny element elektroniczny – będziemy go wielokrotnie wykorzystywać. Dlatego przypominam, że działanie oparte jest na dzielniku napięć, i należy pamiętać roli 3 nóżkek tego elementu:

  • pierwsza – zasilanie (np. 5V)
  • druga – napięcie na wyjściu, czyli zmodyfikowane konkretnym ustawieniem gałki potencjometru (np. 1.2V)
  • trzecia – masa (0V)

Oczywiście nóżki piersza i trzecia mogą być zamienione rolami. Przy pomocy miernika uniwersalnego sprawdziliśmy w praktyce działanie tego potencjometru, a już po chwili wczytywaliśmy do Arduino to napięcie i pisaliśmy na ekranie – dzięki funkcji  Serial.println().

Ważne: zauważyliśmy, że ustawiony potencjometr w jednej pozycji i nie poruszany daje lekko różne wartości, np. 600, 600, 601, 600, 600, 600, 598, 600, 600, 601, 600… Niby widać, że odczytana wartość wynosi 600, a te drobne odstępstwa nazywamy fluktuacjami. Dzieje się tak gdyż przetwornik DAC w Arduino nie jest doskonały (a niby co jest?!), wrażliwy na szumy i inne rzeczy. Warto o tym pamiętać.

Sygnały PWM – sygnały cyfrowe

Czyli Pulse Width Modulation – sygnały szybkozmienne w czasie (Arduino UNO – 2ms, czyli 500Hz), o dwóch wartościach – 0V i 5V. Mamy możliwość wybrania wypełnienia sygnału 5V – czyli jak długo wartość 5V utrzymuje się w okresie 2ms (a następnie wszystko się powtarza). Mamy 8 bitów do sterowania wypełnieniem – a więc wartości z przedziału 0..255.

Ku pamięci:

  • PWM jest dla sygnałów cyfrowych, oznaczonych tyldą w Arduino (a więc ~3, ~5, ~6, ~9, ~10 – aż 6 takich wyjść!)
  • pinMode(7, OUTPUT)
  • analogWrite(3, 127) – funkcja sterująca wypełnieniem (w tym przykładzie 50%, gdyż podałem 127, a maksymalna wartość to 255)

Przykłady -> 01 Basics -> Fade

Omówienie przykładu, zbudowanie układu i uruchomienie.

Pamiętaj:

wybierając płytkę Arduino dla siebie pamiętaj o jej parametrach: z dzisiejszych zajęć już wiesz, że musisz zwracać uwagę na liczbę pinów cyfrowych, analogowych oraz pinów cyfrowych z możliwością PWM. Zajrzyj na specyfikację Arduino Mega i porównaj z UNO – zobaczysz różnicę. A kolejne istotne parametry poznasz na dalszych zajęciach.

Praca domowa

Proszę zaprogramować w wirtualnym Arduino (przypominam: 123d.circuits.io) układ potencometr 10k + LED sterowany PWM tak, by LED rozjaśniał się wskutek nastwień potencjometu. W tym celu trzeba 1) czytać potencjometr analogowo, 2) sterować jasnością LEDa przez PWM (podobnie do omawianego przykładu Fade).

Podpowiedź: analogRead() zwróci nam wartości od 0..1023, a PWM potrzebuje wartości od 0..255. Jak widać te wartości do siebie nie pasują… rozwiązanie najprostrze to podzielenie przez 4 wczytanej wartości i ustawienie właśnie na tyle PWMa. Lepsze rozwiązania tego „problemu” poznamy na kolejnych zajęciach.

 

XIV Podlaski Festiwal — się działo!

Dziękujemy wszystkim odwiedzającym Koło Naukowe Fi-BOT na Wydziale Fizyki! Mamy nadzieję, że zainteresowaliśmy tematem i pokazaliśmy, że ta cała otaczająca nas elektronika nie jest wcale taka tajemnicza… da się ją okiełznać przy odrobinie chęci!

13220914_10153780417743155_5875256925842735021_n

Cała drużyna Fi-BOTowców w komplecie 😉 A oto oni w akcji plus ich zabawki:

13246405_913443745431035_667158345755222820_o 13243697_913444435430966_8800788880044038664_o 13217281_913444228764320_3602832745414270024_o 13246409_913443225431087_3378527510244600120_o 13243686_913443958764347_1186093791345968823_o 13227508_913443205431089_2566577491681815011_oDSC_1198 DSC_1199 DSC_1200 DSC_1201

No i oczywiście pamiętalismy o naszym sponsorze – Parlamecie Studenckim UwB:DSC_1213

A na koniec krótkie wideo z prostego, choć efektownego układu (Paweł):

Studentom: Pani Noemi, Panom Adrianowi, Kamilowi, Marcinowi i Pawłowi serdecznie dziękuję za wysiłek włożony w przygotowanie ich układów, a także za ich prezentację – K. G.

Zajęcia nr 4 – cyferki, cyferki, komu komu, bo idę do domu

Kto nie był niech żałuje. Prawie zakończyliśmy budowę naszego pojazdu podróżującego w czasie 😉 Pracowaliśmy nad konsoletą do sterowania (programowania daty podróży)

A dokładniej pracowaliśmy nad jednym z elementów:

878-00

A jeszcze dokładniej: nad pojedynczą cyferką!

7 segment display (SSD) – przeczytaj Wikipedię (ale nie całą).


Wszyscy uczestnicy Talenów pracowali wytrwale i już po chwili każdyemu udało się tak sterować LEDami 7-mio segmentowego wyświetlacza, by pokazywał jedynkę, dwójkę i trójkę. Jeden z uczestników kursu okazał się bardzo sprytny i bardzo szybko miał zaprogramowane wszystkie 10 cyfr (gratuluję Jakubowi M. (VIII LO) – nagroda na koniec kursu).

W celu sterowania 7-mio segmentowym wyświetlaczem szlifowaliśmy techniki programowania strukturalnego:

  • tworzyliśmy własne funkcje, w tym funkcje z argumentami
  • wykorzystywaliśmy tablice (do przechowywania numerów pinów z Arduino)
  • wykorzystaliśmy tablice dwuwymiarowe – tzw. tablice tablic, czyli elementami tablicy była… tablica! Okazało się to bardzo użyteczne (z odpowiednim programowaniem funkcji)
  • no i poznaliśmy hardware, czyli 7 segment display ze wspólną anodą (CA – common anode – w naszym przypadku). Musieliśmy troszkę zmienić nasze myślenie – przywykliśmy do schematu: 1=włączone, 0=wyłączone. A tutaj odwrotnie. Włączając napięcie 5V na pinie Arduino powodujemy zgaszenie segmentu, z kolei ustawiając napięcie na 0V włączamy segment! Tak – specjalnie dałem Wam taki właśnie sprzęt, by troszkę wysilić szare komórki!

Niestety – programowanie pojedynczej cyferki wymagało wykorzystania 8 pinów cyfrowych z Arduino. To dość dużo… 2 Takie cyferki wymagają już 16 pinów, a nasze UNO ma ich 14 (tylko? aż?). OK, można ustawić piny analogowe jako cyfrowe, tym samy będziemy mieć ich dodatkowo 6 sztuk – czyli oprogramujemy 2 cyferki. Ale co z naszą konsolą do podróży w czasie?? Pojazd już mamy, tylko ta konsola nas blokuje…

Rejestr przesuwny 74HC595 (ang. shift register)

Jako rozwiązanie powyższego problemu poznaliśmy rejestr przesuwny 74HC595. Cena tego cuda na czarnym rynku to około 1 zł w detalu, a umożliwia ono sterowanie 8 wyjściami (czyli np. jedną cyferką) za pomocą tylko 3 pinów cyfrowych z Arduino! Co więcej, łącząc ze sobą dwa takie układy (za łączną kwotę 2 zł) możemy mieć już oprogramowane 2 cyferki, ciągle wykorzystując tylko 3 piny cyfrowe z Arduino. Układy można łączyć w kolejne szeregi aż do 8 sztuk.

Przy tej okazji poznaliśmy:

  • orientację modułu w kasiecie DIP (pamiętacie tą kropeczkę? wcięcie?)
  • numerację pinów na module (odwrotnie do ruchu wskazówek zegara, gdy patrzę mu w twarz…)
  • nazewnictwo niektórych pinów (GND, Vcc, Qa, Qb…)

No i na koniec okazało się, że aż 3 uczniów zrobiło błąd przepisując mój cudowny kod z tablicy, tym samym rejestr przesuwny nie działał. Trudno powiedzieć o co chodzi w tej plątaninie przewodów,

DSC_0322

ale od kłopotów uratował nas Sylwester K. (ZSH-E) – bezbłędnie przepisując program, uruchamiając i ciesząc oczy działającym układem. Był nawet na tyle szczodry, że po chwili rozsyłał swój (mój?) program kolegom, którzy tylko czerwienieli widząc, że już u nich wszystko gra 😉

Praca domowa – tym razem – dobrowolna!

Proszę zmusić Arduino by odliczało od 9 do 0 z wykorzystaniem rejestru przesuwnego. W tym celu zalogujcie się do 123d.circuits.io i tam przygotujcie hardware (poszukajcie wyświetlacza oraz rejestru – czekają tam na Was, przy czym najpierw sprawdźcie wirtualną bateryjką, czy wyświetlacz jest ze wspólną anodą, czy katodą), a software macie już prawie gotowy. Kto się na to pokusi? Nagroda czeka…

P.S.

Lubicie dobranocki z dreszczykiem? Jeśli tak, i nie lękacie się języka angielskiego to zapraszam do lektury

 

Przygotowania cdn…

  • Pan Paweł atakuje temat wyświetlaczy, ciekawe, czy mu się uda zrealizować grę 😉
  • Pani Noemi zaprzyjaźnia się z bluetoothem i sterownikiem silników…
  • Pan Kamil niedługo stanie się mistrzem Processingu…
  • Pana Marcina nie było 🙁 ciekawe, jak jego serwa?
  • Pan Adrian jest już na ostatniej prostej – pojazd jeździ (prosto!), reaguje na zderzenia, więc… dostał nowe zderzaki do zamontowania + pomysł na modyfikację softu do swojego bolida 😉

Się dzieje 😉

P.S.

Jak na razie zapisało się do nas:

  • na godz. 10:00 – III LO B-stok (~15 osób),  gimnazjum nr I Grajewo (~25 osób)
  • na 11:00 – II LO Grajewo (~16 osób)
  • jak na razie zapisów brak
  • na 13:00 – II LO B-stok (~30 osób !!!)

 

RemoteXY – bardzo fajna obsługa Arduina via smartfon (+Bluetooth)

Dziś tematem naszego spotkania był moduł Bluetooth HC05 – ale nie sam moduł, tylko sposób jego programowania z poziomu Androida. W markecie jest sporo darmowego oprogramowania, ale często nie spełnia naszych oczekiwań – ze względu na brak możliwości pełnej konfiguracji, lub nieatrakcyjność interfejsu. Cóż – nie ma co narzekać jak za darmowe apki, ale… dziś – dzięki uprzejmości Pani Noemi – poznaliśmy płatną apkę RemoteXY do zarządzania Arduinem via moduł Bluetooth (tak, to właśnie Pani Noemi poprowadziła dzisiejsze spotkanie, jako osoba z doświadczeniem z tym programem).

Mowa o RemoteXY, które po zakupie na telefon (tablet, etc) trzeba doinstalować na kompa, gdzie mamy Arduino IDE. Potem wszystko działa według schematu:

i trzeba przyznać, że faktycznie – jest to

  1. proste
  2. intuicyjne
  3. ładne graficznie!

Cóż więcej dodać? Chyba po takiej reklamie już nic nie trzeba 😉

DSC_1104

A tutaj już konkretny przykład Pani Noemi – sterowanie silniczkami oraz LEDami przez smartfon. Dwa przyciski włączają/wyłączają diody, joystik w prawej części ekranu to panel sterowania silniczkami (zmieniamy szybkość i kierunki ruchu oby silników). Na biurku hardware: HC05 oraz Arduino + MotorShiel AdaFruit.

Edit:

stety/niestety znalazłem słaby punkt tej apki. Po jej zakupie tylko my możemy korzystać z przygotowanych layoutów. Nie możemy oddać komuś innemu, nieposiadającemu pełnej wersji naszej zabawki (np. robocika) aby sterował nim z poziomu swego smartfona. Ten ktoś musi posiadać RemoteXY. Cóż.