Programování | Pojďme programovat elektroniku | Arduino

Pojďme programovat elektroniku: Digitální štěkající hlídací pes

  • Na každého to zuřivě štěká
  • Nepotřebuje to vodu a granule
  • Je to Arduino Uno se zvukovou kartou

Dnes si vyrobíme psa. Bude zuřivý, bude štěkat od rána do večera na každou návštěvu a místo misky granulí mu bude stačit pár desítek miliampérů elektrického proudu.

Po krátké přestávce je tu pokračování našeho seriálu o programování elektroniky. Dnes si vyzkoušíme další rozšiřující shield pro základní desku Arduino Uno. Po tom bateriovém a motorovém totiž přišla řada na zvukovou kartu.

6b538665-5b35-4b92-9eb0-190ee6a853d7
Rozšiřující zvuková deska pro Arduino Uno s čipem VS1053B

K dispozici je v mnoha provedeních a klonech a zpravidla ji pohání čip VS1053B od VLSI Solutions z finského Tampere. Já jsem destičku objednal z Aliexpressu, kde ji pořídíte zhruba za stokorunu. Pokud se vám nechce čekat několik týdnů, v nabídce ji má i český Arduino-shop.cz.

Přehrává MP3 i AAC a umí nahrávat muziku

Čip zvládne dekódovat MP3, Ogg Vorbis, AAC, WMA a FLAC a poradí si i s generováním MIDI. Hudební signál poté posílá na piny pro stereo reproduktor – na desce je k tomu vyhrazený klasický 3,5mm jack.

a7998f10-ff67-48b9-9a02-e94416949ec8
Detail zvukového čipu VS1053B od finského výrobce VLSI Solutions. Lze jej dodatečně patchovat a vylepšovat o pluginy, které se budou načítat z micro SD.

Vedle dekódování zvuku je k dispozici samozřejmě i kódování, tedy převod analogového zvukového signálu do tří formátů 16bit PCM, IMA ADPCM a především Ogg Vorbis. K poslednímu jmenovanému je třeba z webu výrobce stáhnout speciální binární balíček, který poté využije DSP jednotka samotného čipu. Architektura VS1053 totiž umožňuje jeho patchování/rozšiřování funkcí pomocí pluginů.

3b4e1be8-ed7e-4634-ab86-471b4b6c2afdfe43f457-9126-459a-9331-84e4cf48adf566763690-356f-41b8-a0eb-a1f73d2006d7
Zvuková karta s Arduino Uno komunikuje pomocí sběrnice SPI a je vybavená mikrofonem a vstupem/výstupem pro analogový zvuk ve formě 3,5mm jacků

V každém případě, pro nahrávání zvuku je na desce připájený primitivní mikrofon a k dispozici je vedle sluchátkového konektoru také 3,5mm jack pro zvukový vstup.

Nechybí slot na micro SD

Na shieldu zvukové karty ale především nechybí pouzdro pro kartu micro SD, která slouží jako zdroj hudebních souborů a případně i úložiště do kterého zvukový čip nahraje hudební data. Zároveň odtud při svém startu může načítat zmíněné patche a pluginy, které rozšiřují jeho funkce.

0a5962cd-7d0f-452d-b328-e69acf430f4b
Slot na micro SD může sloužit jako zdroj MP3 souborů a úložiště pro nahrávanou muziku, pomocí knihoven pro práci s SD (SD, SdFat) je nicméně dostupný i pro Arduino jako takové

SD karta i zvukový čip komunikují s Arduino Uno pomocí směrnice SPI, její piny si tedy vyhrazují pro vlastní potřebu a jsou vyznačené i na samotné desce, aby je zelenáč omylem nepoužil pro něco jiného. Dohromady se jedná o sedm pinů, což není žádná katastrofa – tedy pokud usoudíme, že na desce máme hned dvě samostatná zařízení: hudební čip a SD kartu.

O muziku i SD se postará knihovna

Samotné ovládání hudebního čipu je věda a téma na dlouhé večery při pročítání jeho dokumentace, umí toho totiž opravdu mnoho včetně hromady nízkoúrovňových funkcí.

Začátečník nicméně udělá nejlépe, když si nainstaluje některou z dostupných knihoven. Třeba (byť už starší) VS1053 for use with SdFat, kterou dohledáte i v manažeru knihoven vývojového prostředí Arduino. Společně s ní budete muset nainstalovat ještě knihovnu SdFat (také v manažeru knihoven) pro práci se souborovými systémy FAT16/32 a SD/SDHC kartami.

Práci s knihovnou nejlépe vysvětli její příklad demo a autoři napsali i dokumentaci jednotlivých funkcí. Stručně řečeno, knihovna umí přehrávat soubory, číst ID3 tagy, zvyšovat hlasitost L/R kanálu, měnit tempo přehrávání, basy a vše ostatní, co lze očekávat od kapesního hudebního přehrávače.

Zvukový čip bude na náš povel štěkat

My dnes využijeme jen naprostý zlomek jejích možností, zvukový čip totiž použijeme k tomu, aby při detekci vetřelce začal z microSD přehrávat náhodnou MP3 stopu s nahrávkou štěkotu.

e5d81b59-49d6-46f7-bd05-3fcf698861c6
Reproduktor s vlastním zesilovačem (napájený tužkovými bateriemi) bude dostatečně hlasitý, aby štěkot každého překvapil

K detekci pohybu bychom mohli použít celý zástup senzorů. Mohl by to být třeba akcelerometr, který zachytí sebemenší otřes a v našem seriálu jsme si jej už podrobně představili.

Když by tedy byla naše destička připevněná na gauč, ve kterém se smíme válet pouze my a nikdo jiný, jakmile se na něj posadí nepovolená osoba, akcelerometr zachytí otřes, zvukový čip začne štěkat a hříšník si půjde sednout raději na tu tvrdou židli opodál. Otestováno v praxi!

PIR, nebo mikrovlny?

Další možností je dálková detekce pohybu pomocí PIRu nebo mikrovlnného radaru. PIR, tedy pasivní infračervené čidlo (Passive IR), je dnes zdaleka nejpoužívanější a nejlevnější řešení. Jedná se o fotosenzor, který neustále měří dopadající infračervené světlo.

d0cccc90-0de8-464c-bd7e-39bff51b68f8
Jak detekovat pohyb? Pomocí IR nebo třeba mikrovln.

Pokud se charakter tohoto záření náhle změní, PIR upraví logickou hodnotu na svém signálním vodiči. PIR je nastavený na infračervené záření lidského těla, když tedy před jeho hledím někdo projde, změní se charakter dopadajícího IR světla a PIR detekuje pohyb.

Ve světě bastlířů patří k nejrozšířenějším a nejlacinějším PIR čidlům model HC-SR501. Sice jej může občas zmást odraz slunečních paprsků (nefunguje dobře na přímém Slunci) a dokonce i jiné elektromagnetické záření, ale je laciný a v interiéru funguje docela dobře.

dfbc4ca0-8ff9-446b-9828-526c644b3a3c7fe12cc5-9863-4800-aa59-071148fa674e2caf8418-7901-42a6-8fa0-a0c58564ff42
Oblíbený laciný PIR pro bastlíře HC-SR501 s ručním nastavením citlivosti a časové prodlevy, po kterou bude po detekci pohybu nastavovat na signálním vodiči logickou jedničku.

Do třetice bychom mohli vyzkoušet ještě mikrovlnný detektor, který zjišťuje pohyb sledováním deformací elektromagnetického pole, když v jeho blízkosti někdo projde. Zpravidla pracuje na některém z kmitočtů okolo 5 GHz a výše.

b024b15d-8c87-4c81-8ada-04621c7cba90
Všesměrový mikrovlnný detektor pohybu

I tomuto exotickému detektoru pohybu jsme se v našem seriálu už věnovali, a tak jen připomenu jeho úskalí. Hodí se především do větších bytů a hlavně rodinných domů. V malé panelákové buňce totiž snadno nahlásí pohyb i vaší sousedky za železobetonovou příčkou. Pokud mezi byty prochází signál Bluetooth a Wi-Fi, s rádiovým detektorem pohybu to bude stejné.

Digitální hlídací pes v akci

Zůstaneme tedy u klasického PIR detektoru, který připojíme k Arduino Uno skrze rozšiřující desku zvukového čipu. Do ní nakonec zapojíme i reproduktor s vlastním zesilovačem, aby byl dostatečně hlasitý. Já nakonec použil drobný stereo reproduktor ve formě válce, který je napájený několika tužkovými bateriemi.

Celé zařízení jsem umístil na chodbu mezi našimi redakcemi. Jak to dopadlo, se můžete podívat ve videu níže.

Jakmile PIR zachytí pohyb, změní hodnotu na signálním vodiči na logickou 1, kterou neustále kontrolujeme ve smyčce loop (mohli bychom také použít funkci externího přerušení/interrupt).

Na SD kartě je devět souborů pojmenovaných stek01.mp3stek09.mp3. Jako zdroj podobných zvukových efektů poslouží třeba webový katalog freesound.org.

Pomocí funkce random si necháme vygenerovat náhodné číslo z tohoto rozpětí a zvukovému čipu pošleme binární data konkrétního souboru. Tedy, ve skutečnosti to vše za nás udělá naše knihovna a její funkce playMP3.

f6ae7e6d-be2f-4d82-b532-9922416e7b68
Dnes jsme díky kompaktní rozšiřující desce pro Arduino Uno potřebovali minimum kabelů – jen pro připojení infračerveného detektoru pohybu

Z reproduktoru se ozve hlasitý štěkot a nevítaný vetřelec se dá na útěk. Pokud bychom namísto základního Arduino Uno použili jeho vylepšenou verzi s Wi-Fi, mohla by základní deska zároveň skrze internet odeslat varování – třeba e-mail nebo push notifikaci až do telefonu.

A to je protentokrát vše. Takže nečekanému štěkotu zdar!

Zdrojový kód našeho štěkacího detektoru pohybu:

// Knihovny pro praci se sbernici SPI, SD kartou a zvukovym cipem
#include <SPI.h>
#include <SdFat.h>
#include <vs1053_SdFat.h>

// Objekty SD karty, zvukoveho cipu a pomocne promenne
SdFat sd;
vs1053 prehravac;

// Hlavni funkce setup se spustí po startu
void setup() {
  // Pin detektoru pohybu PIR
  pinMode(A0, INPUT);
  // Nastartovani SD karty
  if (!sd.begin(SD_SEL, SPI_FULL_SPEED)) {
    sd.initErrorHalt("Nelze nastartovat microSD!");
  }
  if (!sd.chdir("/")) {
    sd.errorHalt("Nelze zmenit adresar na SD");
  }
  // Nastartovani zvukoveho cipu
  uint8_t kod = prehravac.begin();
  if (kod > 0) {
    if (kod == 6) {
      // VOLITELNE: Na SD chybi patch pro zvukovy cip
      // Navratovy kod 6 tedy neni chyba a cip bude fungovat i bez patche
      // Patch najdete na GitHubu autoru knihovny vcetne nastroje pro jeho sestaveni
      // ze stazenych souboru z webu vyrobce (skript v Perlu)
      Serial.println("Na SD karte chybi patch soubor patches.053 pro DSP procesor VS1053");
    }
    else {
      Serial.print(F("Chyba inicializace zvukove karty: "));
      Serial.println(kod);
    }
  }

  // Nastaveni hlasitosti na maximum
  // Hlasitost 0-255 pro kazdy z kanalu
  // 0 ... maximalni hlasitost
  // 255 ... minimalni hlasitost
  prehravac.setVolume(0, 0);

  // Prehraj uvodni zaknuceni jako test, ze vse funguje
  prehravac.playMP3("knuceni.mp3");

  // Pockej pet sekund a aktivuj alarm
  delay(5000);
}

// Smycka loop se opakuje stale dokola
// a spusti se po zpracovani funkce setup
void loop() {
  // Pokud PIR vraci logickou jednicku (detekuje pohyb)
  if (digitalRead(A0) == HIGH) {
    // Pokud prehravac nic neprehrava
    if (!prehravac.isPlaying()) {
      // Vytvor textovy retezec nahodneho nazvu MP3 souboru stekXX.mp3
      char nazev[11];
      sprintf(nazev, "stek0%d.mp3", random(1, 9));
      // Prehraj MP3 soubor ulozeny v korenovem adresari micro SD
      prehravac.playMP3(nazev);
    }
  }
}
Váš názor Další článek: Sezóna premiér nekončí, květen bude našlapaný novinkami. Kdo odhalí karty?

Témata článku: , , , , , , , , , , , , , , , , , , , , , , , ,