Archiwa autora: netmaniac

Jak poradzić sobie z czasem na Arduino

Zmagania z czasem na Arduino potrafią uprzykrzyć życie, zwłaszcza początkującym. O czym piszę? O działaniach które mają być wykonywane przez jakiś czas albo dopiero po upłynięciu jakiegoś czasu.

Pierwsze podejście, kogoś kto rozpoczął swoją przygodę z Arduino będzie pewnie próba użycia delay. Hej, kto z nas tego nie próbował… Problem pojawia się wtedy gdy nasze Arduino musi coś robić w czasie czekania. A delay… no cóż, czekanie z delay to jest jedyna rzecz jaką może robić Arduino  na raz.

Jak sobie poradzić z oczekiwaniem gdy musimy robić kilka rzeczy na raz?

By nie gadać po próżnicy, omówmy to na konkretnym przykładzie. Niedawno dla klienta robiliśmy urządzenie, które miało zliczać dane z czujników odległości. A konkretnie, chodziło o określenie ile osób przyłożyło głowę do urządzenia. Jeśli czujnik przez określoną liczbę sekund wskazywał dostatecznie mały odczyt, wówczas mieliśmy zliczyć osobę, która podeszła do czujnika. Podobnie, dopiero gdy na określoną ilość sekund oddaliła się od czujnika dopiero wtedy miało być zwolnione miejsce i czujnik miał być gotowy do zarejestrowania kolejnej osoby. Na dodatek – były dwa czujniki, które miały być obsługiwane jednocześnie.

Próba zbudowania tego na ifach jest raczej skazana na porażkę. Nie, że to nie da się tak zrobić, ale… zmiana wymagań, jak np dodanie jakiegoś kryterium czy nawet drobna zmiana zachowania urządzenia może oznaczać długie i mozolne grzebanie w kodzie.

Wybrnąć z takiej sytuacji pozwala zwykle model matematyczny określany nazwą maszyną stanów (lub automat skończony). W prostych słowach – mamy skończony zbiór stanów w których może znaleźć się nasz system. Do tego potrzebujemy określić warunki w jakich następują przejścia pomiędzy stanami.

Czytaj dalej

[Tip] Fritzing – wstawianie dedykowanych płytek

W poprzednim poście użyty został taki schemat połączeń. Jest tam moduł konwertera I2C dla LCD znakowych:

Podłączenie LCD do RPi

Podłączenie LCD do RPi

Schemat został wygenerowany w programie Fritzing. Ma on dość bogatą bibliotekę z gotowymi modułami (Arduino, Raspberry i inne od Adafruit, Seeed czy Sparkfun).

Jeśli programu jeszcze nie znasz, to warto poznać, bo świetnie nadaje się do dokumentowania własnych prac. Ale nie tylko, również proste PCB w nim zrobisz.

Mimo, że biblioteka jest dość bogata to nie wszystkie elementy tam są. Nie ma też tego konwertera I2C/LCD. Jest  za to możliwość tworzenia własnych modułów. Dodajesz grafikę, do tego definiujesz gdzie są piny i taki element zachowuje się tak jak moduły dostępne po zainstalowaniu Fritzinga.

Możesz je przeciągać na widoku płytki, a przyczepione przewody przesuną się razem z nim. Możesz zdefiniować jego widok na PCB czy w schemacie. Wszystko pięknie, ale definicja takiego modułu to jednak trochę pracy. Dlatego jest możliwość szybkiego wstawienia obrazka, tak jak właśnie zostało zrobione na powyższym schemacie z konwerterem I2C do LCD znakowych (to czarne coś)

Zaletą jest prostota operacji i szybkość. Wadą – że nie jest to pełnoprawny moduł w rozumieniu Fritzinga, także nie wie on gdzie ma nasz moduł np złącza. Przez to nie jest w stanie przesuwać np przewodów gdy przeciągniemy moduł. Ale jeżeli chcesz jakiś swój projekt udokumentować – świetnie poprawia widok i czytelność schematu.

Jak wstawić taki moduł w trybie ad-hoc?

Czytaj dalej

Raspberry Pi i LCD na I2C

Znakowy LCD na I2C i Raspberry

Znakowy LCD na I2C i Raspberry

No cóż o Arduino było, teraz czas na Raspberry. Ten sam konwerter I2C do znakowych LCD może być użyty też z Raspberry Pi. Jednak tutaj pojawia się potencjalny problem – poziomy napięć.

Większość LCD znakowych wymaga napięcia zasilającego 5V. O ile jeszcze logika (czyli sam kontroler wyświetlacza) będzie działał przy zasilaniu 3.3V to podświetlenie już niekoniecznie. LCD zasilany jest z konwertera, jeśli tego zasilimy napięciem 5V, to takie zasilanie też dostanie LCD. Rasperry Pi ma wyjście na GPIO z napięciem 5V, więc w czym problem?

Ano, Raspberry nie znosi jeśli dostanie napięcie większe niż 3.3V na pin GPIO. A jeśli konwerter I2C LCD zasilimy 5V, każda odpowiedź odesłana przez niego będzie wysłana tak, że stan logiczny wysoki będzie symbolizowany napięciem równym napięciu zasilania. Czyli 5V, co zniszczy port GPIO. Ba! Nawet brak komunikacji będzie zagrożeniem – I2C wymaga by obydwa sygnały (SDA i SCL) były ‚podciągnięte’ do zasilania poprzez rezystory. Takie rezystory są na konwerterze i przy zasilaniu 5V, gdy nikt nie nadaje na obu liniach jest cały czas 5V…

Dlatego albo potrzebujesz LCD znakowego, które jest przystosowane do pracy z zasilaniem 3.3V (a zdecydowana większość LCD znakowych nie jest przystosowana) albo skorzystasz z konwertera poziomów logicznych.

Polecamy niewielką wersję 4-ro kanałową lub 8-mio kanałową (już nieco większą). Jak działa taki konwerter? Podłączamy masy i zasilanie obu układów, z jednej strony (tzw niskiej) napięcie 3.3V a z drugiej (wysokiej) 5V. Teraz każdy kanał ze strony niskiej możemy podłączyć do układów w logice 3.3V a z wysokiej w logice 5V. Dzięki temu każdy z układów ma zagwarantowane, że stan wysoki będzie reprezentowany właściwym napięciem.

Jak podłączyć LCD do Raspberry?

Czytaj dalej

Wyświetlacz LCD i Arduino

Daaawno temu pisaliśmy tutaj jak podłączyć LCD znakowe do Arduino. To było 6 lat temu… Metoda dalej działa, ale teraz można zrobić to zdecydowanie prościej. Jak? Korzystając z konwertera I2C do takich wyświetlaczy.

Taki konwerter to nic innego jak dobrze znany nam PCF8574 i dodatkowa biblioteka. Zacznijmy od niej. Najprostsza droga to zainstalowanie biblioteki LiquidCrystal_PCF8574. Wybierz menu Sketch/Include Library/Manage Libraries a następnie w pole wyszukiwania wpisz nazwę biblioteki. Kliknij szare pole z nazwą i opisem i pojawi się przycisk Install. Gotowe!

Przetestuj całość – w menu Files/Examples/LiquidCrystal_PCF8574/LiquidCrystal_PCF8574_Test masz gotowy szkic pokazujący wszystkie możliwości. Po otwarciu tego szkicu, pozostaje podłączyć wyświetlacz. May dwie opcje – można użyć płytki stykowej – konwerter ma fabrycznie wlutowane goldpiny, wtedy LCD też potrzebuje takowe i można wtedy połączyć całość tymczasowo. Na stałe można połączyć lutując cały konwerter na plecach LCD:

Konwerter I2C wlutowany z tyłu wyświetlacza

Bez dwóch zdań opcja z lutowaniem jest trwalsza i wygodniejsza w większości wypadków.

Podłączenie do Arduino

Prosta sprawa. Dwa przewody do zasilania (5V i GND na Arduino) podłączamy do VCC i GND na konwerterze. Port A4 na Arduino do SDA na konwerterze, A5 na UNO do SCL na konwerterze. W wypadku UNO R3 możesz skorzystać z portów SDA i SCL łącząc je z odpowiednikiem na konwerterze.

LCD 2×16 z konwerterem I2C podłączony po Arduino. Prościej się nie da!

Wgrać szkic i cieszyć się wyświetlanym obrazem. No dobra, pewnie kontrast trzeba będzie poprawić (niebieski potencjometr na konwerterze).  Proste, nie?

A żeby było jeszcze prościej w ofercie Nettigo znajdziesz także fabrycznie zlutowane wyświetlacze z konwerterami w kolorze zielonym i niebieskim.

Zielony wyświetlacz LCD z fabrycznie przylutowanym konwerterem I2C na PCF8574A

Linux Magazine 152

lm152

Dotarła do nas informacja od wydawcy o kolejnym numerze Linux Magazine:

Artykuły wiodące październikowego wydania „Linux Magazine” poświęcone są Raspberry Pi i opisują porównanie z alternatywnymi szybkimi i mocnymi płytkami Banana Pi M3 i LeMaker HiKey, samodzielną budowę optymalnego klastra HPC oraz czujnik temperatury i wilgotności z Arduino, Raspberry Pi i programem w Pythonie.

Na dołączonym DVD znajduje się elastyczny i łatwy w użytkowaniu Arch Linux 2016.09.03.

Wewnątrz wydania również: mniej znane alternatywne menedżery plików na Linuksa, którym warto przyjrzeć się bliżej: XFE, Sunflower, Vifm oraz Double Commander, monitorowanie linuksowego systemu serwerowego w klasycznym interfejsie zarządzania Webmin, alternatywy dla HipChata i Slacka do rozmów sieciowych: InspIRCd, Mattermost i Rocket.Chat, bezpieczny dostęp do serwerów przy użyciu Magic URL, tworzenie aplikacji do przechowywania metadanych w plikach z Python XMP Toolkitem, szybki test Htopa 2.0.1, Metastore’a 1.1.0, Fgallery 1.8.1, UniversalCodeGrepa 0.2.1, Hpinga 3.0.0 oraz NitroShare’a 0.3.1, bezpieczna komunikacja cyfrowa z dystrybucją Mofo Linux zawierającą narzędzia wymagane do obejścia zapór sieciowych, Open365 – webowy LibreOffice połączony z Kontactem i Jitsi, edycja obrazów i retusz cyfrowy z dopracowanym i przyjaznym interfejsem Pixeluvo oraz inne tematy: http://linuxmagazine.pl/index.php/issues/152

Wydanie jest na allegro (bezpłatna dostawa): http://allegro.pl/show_item.php?item=6533633572

e-wydanie „Linux Magazine” 9/2016 na allegro (poprzedni numer, bez płyty DVD): http://allegro.pl/show_item.php?item=6530446190

pakiety Linux Magazine na allegro: http://allegro.pl/show_item.php?item=6368163954

NOWOŚĆ

megapakiety Linux Magazine na allegro: http://allegro.pl/megapakiet-wydan-linux-magazine-z-dvd-i6404755490.html i http://allegro.pl/megapakiet-e-wydan-linux-magazine-i6403798011.html

TMP006 – bezdotykowy czujnik temperatury

Moduł adaptera z TMP006

Moduł adaptera z TMP006

Od długiego już czasu w naszej ofercie mamy moduł z układem TMP006, który to jest czujnikiem temperatury, ale działającym na podczerwień. Znaczy to, że nie jest wymagany fizyczny kontakt z mierzonym obiektem.

Niewielki rozmiar, zasilanie do 3.3V do 5V, mały pobór prądu podłączenie po I2C (tylko dwa kabelki) – wszystko to sprawia, że można znaleźć kilka scenariuszy użycia. Jeśli przeszukasz fora Arduino pod kątem tego modułu, wówczas możesz znaleźć opisy sytuacji w której czujnik zwraca zawsze 2.39 stopnia Celsjusza. Skąd się to wzięło?

Zdarza się to korzystającym z opisu podłączenia umieszczonego na SparkFun Learn. Przykładowy kod, który tam jest do ściągnięcia jest mocno przykładowy i nie zakłada problemów z komunikacją z czujnikiem. Jeżeli coś jest nie tak i nie zostanie nawiązana komunikacja, kod próbuje i tak obliczać temperaturę. I stąd pewnie się bierze wartość 2.39.

Wystarczy zmienić kod na przykład udostępniony przez Adafruit by przekonać się czy problem nie leży po stronie komunikacji z modułem. W tym celu zainstaluj w Arduino IDE odpowiednią bibliotekę. W menu Sketch/Include Library/Manage Libararies, w search wpisać TMP006 i zainstalować bibliotekę od Adafruit.

Jeśli to pierwsza biblioteka do sensorów do Adafruit nie masz jeszcze zainstalowanej Adafruit Unified Sensor. Biblioteki zawierającej wspólny kod dla wielu z bibliotek od Adafruit. W search wpisz ‚adafruit unified’ i powinien to  być ostatni wynik – zainstaluj jeśli jeszcze nie masz biblioteki.

Podłącz moduł do Arduino – zasilanie, masa i SDA/SCL. Jak na tym zdjęciu:

TMP006 podłączony do Arduino

TMP006 podłączony do Arduino

Użyte tutaj zostały chwytaki IC Hooks, przydatne gdy nie chcesz lutować nic do modułu. Mają czasem problemy z łapaniem dużych otworów pod goldpiny, ale na modułach SF/Adafruit zwykle dają radę (domyślnie sa przeznaczone do łapania nóżek układów scalonych a te mają mniejsze średnice).

Po instalacji biblioteki w menu File/Examples/Adaftuit TMP006 pojawia się szkic tmp006. Otwórz go, wgraj na Arduino i obserwuj wynik działania. Jeśli napisze o braku komunikacji to możesz być pewnym, że to raczej błąd w kabelkologii niż niezwykły pomiar.

LinuxMagazine nr 151

LinuxMagazineCover_XXLDotarła do nas informacja o wydaniu 151 numeru LinuxMagazine:

Artykuły na temat Raspberry Pi we wrześniowym wydaniu miesięcznika „Linux Magazine” przedstawiają zarządzanie stronami internetowymi przy użyciu WordPressa na Raspberry Pi oraz płytkę Intel NUC – alternatywę dla Raspberry Pi.

Artykuły wiodące poświęcone systemom plików opisują rewolucyjny profesjonalizm ZFS, przyszłościowy Btrfs oraz dzieje klasycznego Ext. Na dołączonym DVD znajduje się bijącą rekordy popularności wśród użytkowników dystrybucja Linux Mint 18 w wersji 32-bitowej z pulpitem Mate.

Wewnątrz wydania również: przywracanie plików Btrfsa z migawek jednym przyciskiem dzięki Snapperowi, sprzątanie po katastrofie z Relax-and-Recoverem, który generuje obrazy ratunkowe, dba o wykonywanie kopii zapasowych i pomaga w migracji komputerów na nowy sprzęt lub konwersji na maszyny wirtualne, wirtualizacja aplikacji przy użyciu popularnego ostatnio Dockera, szybkie filtrowanie danych z ICgrepem – nowoczesną alternatywą klasycznego Grepa z obsługą Unicode’u, piaskownica z Firejailem w wierszu poleceń, krótkie testy narzędzi DK Tools 4.2.2, Midnight Commander 4.8.15, Datamash 1.1.0, F3 6.0, Sauvegarde 0.0.7 i WackoWiki 5.4.3 i bliższa analiza zdecentralizowanego programu do komunikacji online Matrix, przegląd aplikacji do zdalnej kontroli pulpitu: RealVNC, TightVNC, TeamViewer, AnyDesk, NX i jego darmowej pochodnej X2Go, uruchamianie Linuksa na smartfonie z Maru OS-em, cyfrowa rachunkowość dla małych firm i wolnych strzelców, czyli YaBS, tworzenie elektronicznego zbioru materiałów drukowanych ze Scan Tailorem i Paperworkiem.

Wydanie na allegro (bezpłatna dostawa): http://allegro.pl/show_item.php?item=6457442677 e-wydanie „Linux Magazine” 8/2016 (poprzedni numer) na allegro (bez płyty DVD): http://allegro.pl/show_item.php?item=6448282732

pakiety Linux Magazine na allegro: http://allegro.pl/show_item.php?item=6368163954

megapakiety Linux Magazine na allegro: http://allegro.pl/megapakiet-wydan-linux-magazine-z-dvd-i6404755490.html i http://allegro.pl/megapakiet-e-wydan-linux-magazine-i6403798011.html

 

tinyBrd zasilane z USB

TinyBrd 2.0 dzięki regulatorowi napięcia może być zasilane np 5V. Jest to napięcie jakie jest dostarczane w ramach standardu USB, co za tym idzie, każdy powerbank do zasilania komórki zapewnia nam duuużo energii dla tinyBrd. Jak podłączyć zasilanie z power banku?

Bierzemy wtyczkę USB oraz jakieś przewody typu F-M i lutujemy:

Lutowanie lini zasilającychLutowanie przewodów do wtyczki

Zwróć uwagę na polaryzację, czyli gdzie jest plus a gdzie masa. Na zdjęciu czerwony przewód to plus. Przyjrzyj się wtyczce, położona jest tak, że widoczne otwory na metalowym złączu są zaślepione plastikiem. A najlepiej – podłącz wtyczkę do powerbanku i zmierz miernikiem gdzie jest 5V a gdzie GND :)  Pozostaje podłączyć zasilanie do tinyBrd:

s20160712_124810Oczywiście – to tylko z tinyBrd 2.0, wersja 1.x nie ma regulatora i takie podłączenie uszkodzi modem NRF.

Teensy 3 vs Arduino – o ile szybsze?

Początkujący użytkownicy Arduino, jeżeli postawią sobie ambitne zadanie często docierają do ściany możliwości Arduino. Wydaje się za wolne, zbyt mało zasobów. Prawda jest taka, że często wystarczy napisać program w sposób bardziej efektywny i nagle Arduino może jeszcze całkiem sporo.

Jednak jak zawsze jest pokusa – zmieńmy Arduino na coś szybszego/większego. Nie pochwalam podejścia polegającego na „rzucaniu więcej MHz na problem”, ale czasem może warto? Każda sytuacja jest inna i  na etapie potwierdzenia wykonywalności projektu, czasem warto po prostu użyć czegoś szybszego.  Potem, jeśli będziemy realizować projekt docelowy to wtedy pisać jak należy? Wszystko zależy od priorytetów – jeśli czas jest najważniejszy to może warto?

teensy

OK, w tym kontekście pomówmy o czymś większym co może zastąpić Arduino. Paradoksalnie Teensy 3.2 jest mniejszy pod względami rozmiarów od Arduino, ale procesor ARM 72 MHz wygląda obiecująco :)Dla uściślenia – nie mam zamiaru porównywać wydajności procesora, bo to jest bez sensu, wiadomo, że przewaga jest po stronie ARM. Chcę zastanowić się o ile szybsze będzie Teensy użyte jak Arduino. A jak się używa Arduino? Jako maszynki do Blinka :) Blink jako taki nie ma sensu jako materiał porównawczy, ale jeśli postawimy sobie pytanie o ile szybciej Teensy jest w stanie zmieniać stan wyjścia niż Arduino, to będzie to już jakieś wartościowe porównanie.Kod jest bardzo prosty:

void loop() {
  while (1) {
    digitalWrite(led, HIGH);   // turn the LED on (HIGH is the voltage level)
    digitalWrite(led, LOW);    // turn the LED off by making the voltage LOW
  };
}

Ładujemy kod na Arduino i Teensy, podłączamy oscyloskop no i jaki mamy rezultat?

DS1Z_QuickPrint6Jak widać Teensy (żółty) jest dużo szybszy niż Arduino (niebieski). Oscyloskop wyliczył, że sygnał wygenerowany przez Teensy ma częstotliwość 1.47 MHz a z Arduino 134 kHz. Wynika z tego, że Teensy jest 11 razy szybsze niż Arduino. Czemu aż tyle, skoro 72 MHz/16 MHz to tylko 4.5? Najwyraźniej digitalWrite jest o wiele efektywniej napisane w wersji dla ARM (albo po prostu mniej operacji wymaga) stąd nie dość że każda instrukcja (w kodzie maszynowym) na Teensy wykonuje się szybciej, to jeszcze mniej ich potrzeba niż na Arduino – dlatego mamy aż 11 krotną przewagę Teensy nad Arduino.

Ale to nie koniec. Teensy oferuje domyślnie opcję overclockingu, można wybrać prędkość pracy procesora przez opcję w menu Tools/CPU Speed. Zamiast 72 MHz optimized wystarczy wybrać 96 MHz optimized (overclock) i:

DS1Z_QuickPrint4

Tak, wiem trochę inne nastawy tego screenshota, ale już schowałem swój zestaw, a nie zauważyłem że ten ma inną podstawę czasową. Jednak jak widać w przy 96 MHz zegara oscyloskop wyliczył nam sygnał wygenerowany przez Teensy ma 2 MHz.

Jednak nie zawsze zmiana Arduino na Teensy przyniesie przyspieszenie. Zwróciłeś uwagę że w kodzie użyliśmy pętli while by zmieniać cały czas stan wyjścia. Jednak jeżeli użyjemy takiego kodu:

void loop() {
  digitalWrite(led, HIGH);   // turn the LED on (HIGH is the voltage level)
  digitalWrite(led, LOW);    // turn the LED off by making the voltage LOW
}

Przebieg obu sygnałów (z Arduino i Teensy) będzie wyglądać tak:

DS1Z_QuickPrint1

Coś dziwnego dzieje się w kodzie Teensy. Co? Odpowiedź kryje się w tym kodzie (funkcja main dla Teensy3). W części wywołującej loop po tej funkcji wywołuje się jeszcze funkcja yield. W Arduino jej nie ma, dlatego po zakończeniu loop, wraca natychmiast do jej wykonywania. W Teensy3 yield zajmuje chwilę – sprawdza czy są dostępne dane portach szeregowych. Ponieważ Teensy ma ich więcej niż Arduino UNO, chwilę to trwa.

W takim użyciu okazuje się, że Teensy jest ok 2-3 razy szybszy od Arduino. Jeśli nie zależy Ci na SerialEvent to po prostu nie wychodź z loop na Teensy :).

LinuxMagazine nr 150

LM150Dotarła do nas informacja o 150 wydaniu LinuxMagazine:

W sierpniowym, 150 wydaniu miesięcznika „Linux Magazine” – z odświeżoną grafiką – znajdziemy projekty samodzielnej budowy żaglówki Arduino sterowanej przy użyciu taniego pilota oraz łazika złożonego littleBits, Raspberry Pi i Lego.

Materiał wiodący dotyczy scentralizowanego zarządzania plikami dziennika systemowego: opisuje, jak skonfigurować monitorowanie sieci bazujące na serwerze logów Graylog. Na dołączonym DVD po raz pierwszy znajduje się Manjaro, w wersji 16.06.

Wewnątrz wydania również: trwałe Iptables, czyli automatyczne przywracanie reguł zapory sieciowej, skuteczne zarządzanie protokołami w nowoczesnych sieciach – sprawdzamy, jak zachować wiarygodne monitorowanie i analizę w sieci, nawet przy wirtualizacji, wirtualizacja sieci i struktura OpenDaylighta, szyfrowanie w oparciu o wiarygodne zaprzeczenie przy użyciu VeraCrypta, analizatory statyczne kodu JavaScriptu, PHP, Pythona i powłoki Linuksa, krótkie testy narzędzi Tiny Applications 20130215, CertMgr 0.2.49, Difftree 0.5.8, Scriptform 1.0, Duply 1.11.1 oraz Xplico 1.1.1, Bogofilter czy SpamAssassin: działanie i wybór filtra antyspamowego, zarządzanie wieloma systemami równocześnie z SaltStackiem, wady i zalety narzędzi do lokalnego szyfrowania danych przechowywanych w chmurze, synchronizacja plików z Osyncem i Freeholdem, które zużywają mało zasobów, są łatwe do wdrożenia i proste w użyciu, AnyDesk kontra TeamViewer, szybka edycja filmów i dodawanie efektów w małych projektach przy użyciu Lightworksa, korzystanie z sieci bez ujawniania tożsamości, czyli system operacyjny Whonix, konfiguracja zbioru aplikacji do pracy biurowej z systemem wideokonferencji, funkcją poczty i sklepem internetowym Google Apps for Work do użytku w firmie.

Wydanie jest na allegro (bezpłatna dostawa). Poprzednie e-wydanie „Linux Magazine” 7/2016 na allegro (bez płyty DVD).  Archiwalne numery Linux Magazine dostępne są w pakietach po 2 nr na allegro: