Miesięczne archiwum: Październik 2016

Teensy Audio Board – Halloweenowy straszak

Pumpkiny nie są nawet w połowie tak straszne jak nasz straszak!

Pumpkiny nie są nawet w połowie tak straszne jak nasz straszak!

Halloween już tuż tuż, zróbmy więc z tej okazji szybki projekt z wykorzystaniem Teensy oraz płytki Audio Board. Ciekawym pomysłem wpisującym się w klimaty święta jest straszak oparty o czujkę ruchu. Kiedy ktoś pojawi się w obszarze widzenia naszego „straszaka” zostanie zupełnie znienacka potraktowany jakimś strasznym dźwiękiem. Bierzmy się więc do pracy!

Czytaj dalej

Teensy Audio Board – pierwsze kroki

Teensy Audio Board

Teensy Audio Board

Niewielkich rozmiarów płytka developerska Teensy 3.2 oferuje ogromne możliwości, szczególnie jeśli połączymy ją z różnego rodzaju płytkami rozszerzającymi możliwości. Taką płytką jest Audio Board, którą weźmiemy dziś na warsztat :) Niedawno pisaliśmy o niej, ale tylko teoretycznie. Teraz czas na trochę praktyki.

Myślę, że warto zacząć od krótkiego opisu narzędzia, które producent przygotował w celu łatwiejszego projektowania zależności pomiędzy wejściami, wyjściami, generatorami audio itp. Jest to bardzo dobry sposób dla początkujących na zapoznanie się z funkcjami do obsługi dźwięku. Interfejs jest bardzo intuicyjny i można sobie wszystko bez problemu „wyklikać”.

Czytaj dalej

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

Teensy 3.2 i audio – tego się nie spodziewasz

To co robi twórca Teensy ze swoją społecznością jest niesamowite. Jego mikra płytka z procesorem ARM to dowód na to, że produkcje niezależne dalej mogą szokować pomysłami i możliwościami przy stosunkowo niskiej cenie.

Teensy 3.2

Teensy 3.2

Właśnie odkryłem bibliotekę Audio.h. Służy do przetwarzania dźwięków w czasie rzeczywistym i jak się potem przekonasz jest bajecznie prosta.

Wszystko opiera się na klockach. Każdy klocek robi coś z dźwiękiem, odbiera z wejścia, filtruje, analizuje widmo, wzmacnia, odtwarza z pamięci i dużo dużo więcej.

Na specjalnej stronie WWW łączysz te klocki wirtualnymi przewodami, naciskasz Export i masz gotowy kawałek programu, który robi to co chcesz z dźwiękiem. Jak to nie jest super, to nie wiem co jest.

audio

Na razie moje pomysły ograniczają się do zrobienia syreny alarmowej, efektu do gitary elektrycznej (rock!!!), wyświetlacza widma do wzmacniacza, odtwarzacza dźwięków z popularnych gier jako sygnał otwarcia drzwi do sklepu. Ale ty wymyślisz pewnie jeszcze bardziej niesamowite rzeczy. Np. dzwonek do drzwi z dźwiękiem karabinu plazmowego ;-D

Ponieważ najtrudniej jest zacząć, pokażę ci jak zrobić syrenę alarmową.

Wchodzisz na stronę edytora klocków Audio System Design Tool for Teensy Audio Library 

Syrena składa się z generatora sinusa – klocek “sine” i wyjścia audio – klocek “dac”.

klocki

Jeśli zaznaczysz któryś z klocków, z prawej strony okna pokaże się krótka dokumentacja z opisem jego działania, funkcji programu lub gdzie jest jego wyjście na płytce. Z niej dowiadujesz się jak zmieniać częstotliwość generatora sine1 i gdzie będzie wyjście dźwięku z przetwornika dac1.

Naciskasz przycisk “Export” i masz gotowy fragment programu do wklejenia w Teensyduino (o instalacji Teensy też napiszę).

#include <Audio.h>
#include <Wire.h>
#include <SPI.h>
#include <SD.h>
AudioSynthWaveformSine   sine1;          //xy=448,203
AudioOutputAnalog        dac1;           //xy=597,203
AudioConnection          patchCord1(sine1, dac1);
// GUItool: end automatically generated code
// GUItool: begin automatically generated code

W funkcjach setup i loop trzeba dopisać co twój program będzie robił z tymi klockami.

void setup() {
  AudioMemory(10);
  sine1.amplitude(1.0);
}

Funkcja “AudioMemory” ustala wielkość bufora audio. Im mniejsza wartość, tym mniej zajętej pamięci i mniejsze opóźnienia audio, ale większe obciążenie procesora i mniej czasu na twój program w funkcji “loop”.

Metoda “sine1.amplitude” ustala głośność generowanego sygnału. 1.0 oznacza maksymalną głośność.

void loop() {
  for (word freq=100; freq<1000; freq++)
  {
    sine1.frequency(freq);
    delay(2);
  }

 for (word freq=1000; freq>100; freq–)
  {
    sine1.frequency(freq);
    delay(2);
  }
}

Syrena działa tak, że płynnie obniża i podwyższa częstotliwość sygnału. Częstotliwość ustala się za pomocą metody “sine1.frequency”. Wstawiłem ją w dwie pętle “for”. Jedna podwyższa częstotliwość od 100 do 1000 Hz, a druga ją płynnie zmniejsza. W funkcji “delay” ustala się szybkość tych zmian.

Teraz wystarczy podłączyć wzmacniacz do wyjścia DAC w Teensy 3.1 przez kondensator 10 uF.

audio1

Jeśli chcesz sobie ułatwić podłączenie urządzeń audio, mam też świetne rozszerzenie Teensy Audio Board. Jest to płytka wyposażona w wejście i wyjście audio oraz czytnik kart SD. Dzięki specjalistycznemu układowi zapewnia lepszą jakość przetwarzanego dźwięku. Na karcie SD można przechowywać sample do odtwarzania przez Teensy.

Teensy Audio Board

Teensy Audio Board

 

To jest nasz starszy wpis przeniesiony z innego bloga: źródło

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.