Quantcast
Channel: Bastlírna HWKITCHEN
Viewing all 537 articles
Browse latest View live

Arduino automat na sladkosti

$
0
0

Pro některé jsou tyto automaty jen něčím, co bez zastavení přejdou, jiným zase můžou připadat jako magnet. Vždyť to musí být snadné pomocí chapadla chytit plyšáka či jinou odměnu a donést ji na patřičné místo. I tak by bylo lepší mít tohle zařízení doma, aby člověk mohl trénovat. Nejen proto Ryan Bates z Retro Built Games postavil zmenšeninu tohoto automatu a nazval ji Super Claw – „super klepeto“.

Projekt je již ve čtvrté verzi, a i když se stále nedá koupit jako celek, nabízí autor desku pro ovládání krokových motorů, kterou připojíte na Arduino Mega pomocí jednoho plochého kabelu (tzv. kšandy). Díky tomu je zapojení velice přehledné.

Desku si můžete zakoupit zde a například tady můžete najít inspiraci pro potřebné robotické chapadlo. Více informací o projektu najdete na retrobuildgames.com.

Přeloženo z https://blog.arduino.cc/2017/05/24/try-to-grab-some-candy-with-this-arduino-claw-machine/ a mírně upraveno.


TinyLab: Potenciometr

$
0
0

V minulém dílu jsme si ukázali, co všechno deska TinyLab umí a jaké součástky na ní nalezneme. V dalších dílech si postupně jednotlivé součástky představíme. Dnes se budeme zabývat potenciometrem.

Trocha teorie

Potenciometr je součástka, kterou je možné použít jako regulovatelný napěťový dělič. Co to znamená? Nepůjdeme moc do hloubky a budeme se zabývat hlavně důsledkem, který je pro nás nejdůležitější.

Autor: Iainf – Fotografie je vlastním dílem, CC BY 2.5, https://commons.wikimedia.org/w/index.php?curid=1407612

Autor: Iainf – Fotografie je vlastním dílem, CC BY 2.5, https://commons.wikimedia.org/w/index.php?curid=1407612

Na jednu krajní nožičku zapojíme zemi (GND), na druhou plus (v našem případě +5V) a čteme napětí na prostřední nožičce. To se může pohybovat mezi 0V a 5V v závislosti na otočení prostředního kolíku. Jako snad všechny elektrotechnické součástky, i potenciometr má vlastní schématickou značku. Nejčastěji se setkáme se dvěma typy značení, které se liší podle použité normy schématických značek.

Schématické značky potenciometru. Zdroj: https://startingelectronics.org/beginners/components/potentiometer/

Schématické značky potenciometru. Zdroj: https://startingelectronics.org/beginners/components/potentiometer/

Potenciometr na TinyLab

Na desce TinyLab naleznete potenciometr v pravém dolním rohu a je připojený na analogovém pinu A0.

Potenciometr na Arduino desce TinyLab

Potenciometr

Jednotlivé součástky se k hlavnímu čipu připojují řadou přepínačů kolem pinů na desce Leonardo. Přepneme si proto přepínač označený číslem 6 na levé straně desky Leonardo. Ten připojuje právě analogový pin A0.

Zapnutí analogového pinu A0 na desce TinyLab

Zapnutí analogového pinu A0 na desce TinyLab

Posílání naměřených hodnot z potenciometru

V tomto příkladu si necháme každých 10ms posílat hodnotu z potenciometru. Když si v nabídce Tools (Nástroje) otevřeme Serial Monitor (Sériový monitor), bude nám závratnou rychlostí vypisovat čísla. Pokud vypisuje nesmyslné hodnoty, zkontrolujte, že máte v pravém dolním rohu monitoru vybranou správnou rychlost – v našem případě 9600.

Vypisování hodnot je zajímavé, zajímavější je ale si otevřít ve stejné nabídce Serial Plotter (Sériový plotter), který přijaté hodnoty zobrazí do grafu.

void setup() {
  // zahájíme sériovou komunikaci s rychlostí 9600
  Serial.begin(9600);
}

void loop() {
  // přečteme hodnotu z analogového pinu A0 a uložíme ji do proměnné s názvem hodnota
  int hodnota = analogRead(A0);

  // odešleme naměřenou hodnotu po sériové lince
  Serial.println(hodnota);

  // počkáme 10 milisekund před dalším opakováním
  delay(10);
}

Změna rychlosti blikání LED

Ještě si dnes vyzkoušíme jiný příklad, ve kterém budeme pomocí potenciometru měnit rychlost blikání LED na pinu 13. Pokud si nepamatujete, jak se LEDkou bliká, podívejte se na závěr minulého článku.

byte ledPin = 13;

void setup() {
  // nastavíme pin 13 jako výstup
  pinMode(ledPin, OUTPUT);
}

void loop() {
  int hodnota = analogRead(A0);
  
  digitalWrite(ledPin, HIGH); // zapneme LED
  delay(hodnota); // počkáme tolik ms, kolik je měřená hodnota
  digitalWrite(ledPin, LOW); // vypneme LED
  delay(hodnota); // opět čekáme
}

Když nyní budeme otáčet potenciometrem, bude se měnit rychlost blikání LED.

To by bylo pro dnešek vše. Další v řadě komponent si představíme v příštím dílu.

Postavte si balanční vozítko

$
0
0

Asi znáte různá vozítka typu Segway či Hoverboard, která pracují na principu obráceného kyvadla. Základní myšlenka jejich stabilizace je sice poměrně jednoduchá, ale její provedení už vyžaduje pár výpočtů. Díky tomu se může zdát poměrně komplikovaná.

Pro ty, kteří by si chtěli podobné vozítko sestavit, ale správné sestavení a naprogramování je pro ně příliš náročné, sepsal Joop Brokking podrobný návod. V něm postupně prochází principy řízení, popisuje použitou elektroniku a také software.

Součástky vyjdou na asi 2000 Kč (80 dolarů). Na vozítku naleznete dva krokové motory, díky kterým je možné dosáhnout větší přesnosti, než s DC motory. Dále také desku Arduino Pro Mini, a modul MPU-6050 s akcelerometrem a gyroskopem. Ovládání vozítka je možné ovladačem podobným Wii Nunchucku, který je připojený k Arduinu a s vozítkem komunikuje prostřednictvím rádiových modulů vysílajících na frekvenci 2.4 GHz.

Více informací o projektu naleznete na autorově webu brokking.net, nebo ve videu níže.

A pokud se vám zrovna dnes bastlit vůbec nechce, můžete si podobné balanční vozítko prostě jen sestavit například se stavebnicí Makeblock mBot Ranger a začít hned jezdit!

Přeloženo z https://blog.arduino.cc/2017/05/25/build-your-own-arduino-balancing-robot/ a mírně upraveno.

Logger pro křečkovo kolečko

$
0
0

Snad každý už viděl křečka, jak ve své kleci zběsile běhá bez zřejmého smyslu v kolečku. Některé může napadnout jistá paralela mezi křečkovým kolečkem a například fitness běžícím pásem. Ten má ale, na rozdíl od křečkova kolečka, možnost zobrazit si uběhnutou vzdálenost, spálené kalorie a další veličiny.

John Mueller se po naléhání jeho dcery rozhodl, že takový tracker přidá i ke kolečku jejího křečka. V projektu použil Arduino UNO a jazýčkový magnetický spínač, který snímá otáčky kolečka, k němuž je připevněný magnet. Pokaždé, když magnet přejde přes magnetický spínač, dojde k ohybu jazýčku a sepnutí kontaktu. Tyto pulzy potom detekuje Arduino, které zároveň měří i čas mezi pulzy. Díky tomu je možné spočítat průměrnou rychlost i uběhnutou vzdálenost. Ta je vskutku úctyhodná – až 5.5 km v jednom kuse.

Použitý princip měření rychlosti je možné použít i při jiných projektech – například tachometru pro kolo, nebo při měření otáček motoru.

Více informací o projektu naleznete na serveru Hackaday, nebo na blogu autora.

Přeloženo z https://blog.arduino.cc/2017/05/25/log-your-hamsters-runs-with-arduino/ a mírně upraveno.

Osminohý Arduino robot

$
0
0

Dám vám hádanku. Má to osm nohou a je to poháněné deskou Arduino Mega. Víte? … Je to projekt Clear Walker!

Tento chodící robot je poháněný dvěma motory, které jsou ovládané h-můstkem složeným z relátek. Díky tomu je možné řídit nejenom směr otáčení motorů, ale také jejich rychlost (za použití PWM). Ve videu níže se můžete podívat, jak jsou k sobě jednotlivé komponenty zapojeny a také na to, jak se robot pohybuje.

Osminohý Arduino robot

Osminohý Arduino robot

Pokud byste si chtěli podobného robota postavit, nebo vás zajímá, jak je možné ovládat libovolné motorové vozítko pomocí Arduina a chytrého telefonu, naleznete více informací na stránce projektu. Na YouTube kanálu autora také naleznete videa, která dokumentují stavbu jednotlivých částí robota.

Přeloženo z https://blog.arduino.cc/2017/05/30/the-clearwalker-is-an-8-legged-arduino-powered-strandbeest/ a mírně upraveno.

 

Stavba přijímací jednotky meteo stanice WeatherDuino Pro2 PLUS

$
0
0

Přinášíme vám další článek o stavbě meteostanice WeatherDuino Pro2, kterou staví náš čtenář pan Zdeněk Hornych. Za článek děkujeme.


Před časem jsem slíbil, že se ke stavbě meteo stanice WeatherDuino ještě vrátím v seriálu detailnějšího popisu stavby samotných jednotek. Tímto se tedy hlásím k plnění svého slibu v prvním dílu seriálu – budeme se zabývat stavbou nejsložitější části systému – tedy přijímací jednotkou.

Pro čtenáře, kteří nezachytili některý z úvodních článků, popisujících systém WeatherDuino Pro2, jenom v rychlosti připomeňme, že celá meteo stanice se skládá z několika hlavních částí:

  • TX = vysílací jednotka (až 4 v systému)
  • RX = přijímací jednotka (počet bez omezení, typicky 1 ks)
  • Volitelná komponenta:
    • WD = wireless displej pro místní zobrazení hlavních měřených údajů (počet bez omezení)
  • Další volitelné komponenty:
    • CumulusMX = meteo aplikace, obvykle běžící na Raspberry Pi
    • Web = webové sídlo aplikace CumulusMX, rozšířené vlastní tvorbou webových stránek
    • Sítě meteo stanic = data lze předávat do řady různých sítí, např. Weather Underground apod.
    • EI2C = extender sběrnice I2C pro vzdálené sensory (např. teplota a vlhkost země a listů)
    • Sensory = celá řada dalších „nezávislých“ sensorů, např. BIOS, Auriol, PM2.5, …

Pro detailnější popis odkazuji čtenáře na dříve publikované zdroje – viz seznam zdrojů v závěru článku.

Přijímací jednotka WeatherDuino Pro2 PLUS

Noví zájemci o stavbu stanice zhotovují od počátku roku 2017 především tuto velmi vyspělou variantu RX jednotky.

Arduino meteostanice WeatherDuino

Nové WeatherDuino

Úvodem

Co pravděpodobně zaujme na první pohled, je využití modulu Meduino Mega 2560 Pro-Mini. Definitivně tak dochází k přechodu od Arduino Nano k výkonnějšímu mikrokontroléru. Nyní máme k dispozici RAM 256 KB a SRAM 8 KB. Nová deska má nyní k dispozici 2 GPIO porty plus 1 GPO port s proudovým výstupem až 50 mA. Můžeme tedy řídit různá externí zařízení, jako např. vytápění, zavlažovací systémy, žaluzie, markýzy, případně další podle požadavků uživatele. Systém umožňuje pomocí jednoduchého scriptování tato zařízení ovládat na základě velikosti vnitřních proměnných, získaných z meteo sensorů.

Výchozí displej, zobrazení grafů

Výchozí displej této jednotky byl změněn z původního LCD 20×4 na barevný grafický TFT displej 320×240 s dotykovým ovládáním. Layout obrazovky byl designován tak, aby měl téměř totožný vzhled s už existující WD jednotkou.

Naopak software WD byl upgradován tak, aby dokázal využít novou funkcionalitu, poskytovanou RX Pro2 PLUS.

I zpětná kompatibilita s existujícím hardware byla opět vzata v úvahu velmi seriózně. Díky tomu všechny existující TX jednotky budou s jednotkou RX Pro2 PLUS pracovat, dokonce i bez jakéhokoliv softwarového upgradu.

Arduino meteostanice WeatherDuino - Displej

Graf rychlosti větru

Arduino meteostanice WeatherDuino - Displej

Zobrazené hodnoty

Je tu i více: dvojitý stisk tlačítka zobrazí grafy z posledních 12 hodin – pro tlak, teplotu, vlhkost, déšť, rychlost a nárazy větru. (V posledních verzích sw lze i tuto funkci ovládat dotykem.)

Extra senzory

Plný počet 7 extra senzorů, podporovaných systémy DAVIS, může být nyní zobrazen na displeji najednou. Dotykem vpravo nebo vlevo na displeji můžeme přepnout na další obrazovku.

Arduino meteostanice WeatherDuino - Zobrazení dat ze senzorů

Zobrazení dat ze senzorů

Arduino meteostanice WeatherDuino - Zobrazení dat ze senzorů

Zobrazení dat ze senzorů

Nyní lze také zobrazit všechny informace z až 4 senzorů teploty a vlhkosti půdy a listů. Displej zobrazuje i koeficient AQI, tj. hodnocení kvality ovzduší, naměřenou hodnotu PM2.5 a další naměřené hodnoty v oblasti zkoumání kvality ovzduší z hlediska zdraví – dle vlastního výběru, typicky např. CO2, NH4 apod.

Screen saver

Funkcionalita nového displeje zahrnuje i screen saver – buď po nastavitelném timeoutu nebo po dotyku vpravo nahoře. Šetřič zobrazuje aktuální čas a datum.

Dalším dotykem lze displej zcela zhasnout.

Arduino meteostanice WeatherDuino - spořič obrazovky

Spořič obrazovky

NTP, Summer Time

Jednotka RX Pro2 PLUS automaticky nastavuje a udržuje přesný čas, včetně lokálního letního. Využit je NTP protokol přes WiFi připojení k internetu.

WiFi, napojení na WUnderground

WiFi však neslouží pouze pro synchronizaci času. Pokud si přejete zaznamenávat svá meteo data a nepotřebujete nebo nechcete používat PC nebo Raspberry, pak může RX Pro2 PLUS pracovat jako autonomní jednotka s možností uploadu dat přímo na WUnderground. Přitom však není plná funkcionalita případně využívané aplikace Cumulus nebo CumulusMX nijak dotčena (např. vlastní web).

WiFi rozhraní jednotky umožnilo i spuštění jednoduchého webového rozhraní se souhrnem nejdůležitějších parametrů.

Arduino meteostanice WeatherDuino - Jednoduché webové rozhraní

Jednoduché webové rozhraní

Měření PM2.5

Ještě poslední poznámka k funkcionalitě – existující „šeptanda“, že tým vývojářů pracuje na vývoji Air Quality Monitor pro systém WeatherDuino Pro2 PLUS, se zjevně – jak vidno výše – potvrdila.

WeatherDuino Pro2 PLUS přijala riziko stát se první meteo stanicí s integrovanou podporou pro měření Air Quality Index (AQI) – 2.5 ppm.

Na vývoji se trvale intenzivně pracuje, ale už v tuto chvíli jsou výsledky velmi povzbudivé a v praxi použitelné – viz odstavec „Extra senzory“.

Deska plošného spoje

Pro jednotku RX Pro2 PLUS byla vyvinuta zcela nová deska plošných spojů o rozměrech 99×86 mm. V době psaní článku je již deska běžně k dostání u svého autora.

Arduino meteostanice WeatherDuino - Deska plošného spoje

Deska plošného spoje

Deska je dodávána tak, jak je zobrazeno na obrázku, tzn., všechny SMD součástky jsou již osazeny. Díky tomu patří nová deska k nejrychleji osaditelným deskám celého systému WeatherDuino. Současně se dramaticky zvýšila snadnost osazení a bezchybnost výsledku.

Uživatel se nyní musí pouze rozhodnout mezi různými variantami konektorů, jedno nebo dvouřadými lištami 2,54 mm pro připojení displeje, lokálních senzorů a mikrokontroléru.

RX Pro2 PLUS užívá desku Meduino Mega 2560 Pro-mini, která obsahuje ATMEL Mega2560 mikroprocesor a robustní USB port. Deska může být přímo vpájena do main boardu, nebo instalována v socketu (to je autorem článku preferovaná varianta). Je dostupná ve dvou variantách: s dvouřadými kolíky, nebo dvouřadým female socketem. Nákup je asi nejlevnější na eBay apod., hledejte Meduino.

Arduino deska Meduino

Deska Meduino

I v oblasti senzorů jsou zde novinky – RX Pro2 PLUS nyní podporuje integrovaný senzor prostředí BOSCH BME280, který kombinuje vše v jedné jednotce s vysokou linearitou i přesností (tlak, vlhkost a teplota).

Současně Pro2 PLUS pokračuje v podpoře užití separátních senzorů.

Seznam: ATM: BME280, BMP280, BMP180, BMP085

Teplota/vlhkost:SHT31, SHT21, HTU21D

Seznam součástek

Pro detailní a rozsáhlý popis použitých součástek, foto desky plošných spojů a výkres zapojení celé jednotky odkazuji zájemce na původní zdroj informací. I když je hardware i software licencován jako open source, informace podléhají autorským právům.

Navíc i zde platí, že nejlepší je získávat informace z přímého zdroje.

Poznámky ke stavbě

Co bylo možná vhodné uvést už na začátku článku, je důležitá informace o obrovské variabilitě vlastního konečného řešení celé jednotky. Před rozhodnutím o stavbě si musíme ujasnit celou řadu klíčových otázek:

  • Kde bude jednotka umístěna (soulad vzhledu a prostředí, výběr antén)
  • Co se stane při výpadku el. energie (UPS?)
  • Chci používat aplikaci Cumulus/CumulusMX?
  • Mám v daném místě dostatečnou úroveň WiFi signálu? (ESP modul má extrémně malou anténu)
  • Pokud použiji Cumulus/CumulusMX, mám k dispozici i Ethernet?
  • Poběží v případě použití CumulusMX z SD karty, nebo chci přidat HDD?
  • A jak budu případný Raspbian (nebo jiný OS) ovládat (obrazovka, klávesnice, myš)?
  • Atd., atd.

Autor článku si klade za cíl ukázat, jak se pokusil na tyto otázky odpovědět on sám a jak realizoval jednotku RX Pro2 PLUS ve svých podmínkách. Přitom ale znovu opakuje, že jeho řešení je pouze jedním z mnoha možných řešení a není tedy a ani nemůže být žádnou šablonou. Avšak rád by, aby se jeho řešení stalo inspirací pro následování vlastní cestou.

Řešení stavby RX unit WeatherDuino Pro2 PLUS autorem článku

Při mé stavbě byla řada odpovědí na výše uvedené otázky jasná od samého počátku. Už i na základě předchozích zkušeností ze stavby dvou jednotek RX systému Pro2:

  • Přijímací jednotka je umístěna na stole v pracovně autora článku, musí umožňovat trvalé sledování bez jakéhokoliv otáčení se kamkoliv. Jediné přijatelné místo je „v řadě“ s ostatními PC monitory, s nimiž autor článku pracuje. Její vzhled musí být dostatečně přijatelný v daném prostředí.
  • Vzdálenost od 5 vysílacích jednotek (3x TX unit, 1x BIOS teploměr, 1x AQM) není velká, max 15 m, ale vždy přes alespoň jednu zeď (ale také až 3), případně signál ze střechy. Navíc v cestě ruší signál kovové žaluzie.
  • Jednotka musí obsahovat vlastní zdroj energie pro případ výpadu (při posledním výpadku – pád sloupu vysokého napětí – pracovala bez proudu ze sítě 9 hodin)
  • WiFi signál jsem v pracovně neměl, AP jsem tedy realizoval pomocí jednotky MikroTik RB941-2nD-TC hAP lite tower case (v ČR asi 550,- Kč)
  • Volba pro CumulusMX byla jasná – již existující vlastní webové sídlo s rozsáhlou investovanou vlastní prací, snaha snížit spotřebu energie na minimum (místo PC pouze Raspberry), vyšší spolehlivost Linuxu oproti kombinaci PC+Windows
  • Snaha eliminovat nespolehlivost SD karty jednoznačně implikuje nutnost použití HDD
  • Zkušenosti z předchozích projektů ukázaly na vhodnost použití „většího“ displeje pro Raspbian – 7“, dotykový. Pohodlná je i dostatečně velká vypínatelná bezdrátová klávesnice s integrovaným touchpadem. Žádný externí zdroj, vše uvnitř.
  • Vše vestavět do jediné skříňky, současně však zachovat možnost častého upgradu firmware (autor článku je součástí týmu vývojářů) bez jejího rozebírání.

To byla tedy hlavní východiska realizace mého projektu, který si nyní ukážeme.

Popis stavby a montáže

Paradoxně – ale někdo možná řekne „samozřejmě jako vždy“ – se největším problémem stavby ukázalo pořízení vhodné přístrojové skříňky. Autor měl sice ve svých zásobách skvělou skříňku s perfektním vzhledem, rozměry, konstrukčními možnostmi atd., ale s jedním zásadním problémem: byla celokovová. To je pro použití ESP modulu pro WiFi s jeho miniaturní anténkou problém naprosto zásadní. Po téměř půlročním hledání se mi podařilo nalézt vhodnou skříňku na eBayi:

Arduino meteostanice WeatherDuino - skříňka

Skříňka

Rozměry 345x258x145 mm se ukázaly jako ideální – přitom kritická je především výška (145 mm) kvůli možnosti použití 7“ displeje. (Cena cca 990,- Kč)

Zvolený půdorys vestavby celé RX jednotky ukáže asi nejlépe následující obrázek. Popisky jsou pravděpodobně dostatečně vysvětlující, nicméně ještě na doplnění:

Arduino meteostanice WeatherDuino - Rozmístění součástek

Rozmístění součástek

  • Největší „hmotou“ ve skříňce je samozřejmě Pb akumulátor, byl použit z výroby APC pro UPS, označení RBC, tj. 12V/7Ah. Samozřejmě stejně vyhoví jakýkoliv ekvivalent.
  • Vlevo za akumulátorem v zadním panelu je namontován vstupní napájecí konektor s vestavěnou pojistkou a  vypínačem. (Cena cca 45,- Kč)
    Arduino meteostanice WeatherDuino
  • Napájení 230 V je pak připojeno na síťový zdroj s UPS vlastnostmi – použil jsem OEM produkt, typ SCP-35-12. Tento zdroj je kupodivu distribuován i v ČR za stejné peníze, jako jej seženete na internetu (od společnosti Mean Well za cca 400,- Kč). Parametry zdroje jsou obsaženy v jeho názvu: 35 W, výstup 12 V – samozřejmě ve skutečnosti 13,8 V

    Arduino meteostanice WeatherDuino - Zdroj napájení

    Zdroj napájení

  • Protože je RX jednotka pomocí akumulátoru napájena trvale, tedy i když je odpojen síťový napájecí kabel nebo vypnut síťový vypínač, vestavěl jsem na přední panel ještě samostatný miniaturní vypínač, který teprve odpojuje výstup 13 V z akumulátoru pro jednotlivé napájecí moduly.
  • Signalizace zapnutí tohoto mini spínače je vpravo nahoře na předním panelu pod označením Power.
  • Naopak signalizace přítomnosti napájení ze sítě je vyvedena přímo z napájecího zdroje do integrované LED v pravém tlačítku na předním panelu s označením PB3 (to má nyní funkci RESET pro samotný modul RX+).
  • Stabilizace napájení pro jednotlivé moduly přístroje je provedena 3 samostatnými napájecími moduly typu „DC-DC step down“, s výkonností 75W/5A, vybavenými LED displejem. (Cena cca 63,- Kč) Displej lze s výhodou (po kalibraci) využít pro seřízení, když není potřeba, lze jej vypnout. Jak vyplývá z obrázku, dva moduly jsou nastaveny na výstup 5 V, jeden pro napájení Raspberry RPi, druhý pro napájení USB hubu. Třetí modul ja nastaven pro výstup 9 V pro napájení desky samotné RX jednotky WeatherDuino.

    Arduino meteostanice WeatherDuino - DC-DC step down

    DC-DC step down

  • Teplota okolního prostředí (tzv. vnitřní teplota) je v mém případě měřena sensorem HTU21D, umístěným zvenku na zadním panelu. S výhodou lze však využít autorem jednotky doporučeného sensoru BOSCH BME280.
  • Vlevo vzadu je vidět umístění reléové desky pro případné ovládání externího zařízení (zalévání, markýza, …).
  • Možnost nahrávání nového firmware pro WeatherDuino jsem vyřešil tak, že jsem vyvedl USB port desky WeatherDuino na zadní panel a současně jsem zde vyvedl i jeden z portů USB hubu. Za normální činnosti jsou oba porty propojeny kratičkým 10 cm USB kablíkem, v případě programování je pak do horního portu (od desky WeatherDuino) zapojen USB kabel z počítače – současně je přepnut přepínač „Programming“ do horní polohy.
    Arduino meteostanice WeatherDuino
  • Na předním panelu jsou tři tlačítka v provedení „antivandal“ s podsvětlením LED pro 12 V. Jejich funkce je: levé – připojeno na piny PB1, pravé – připojeno na RST, prostřední – pro budoucí využití. (Cena – v GME – cca 110,- Kč.)
    Arduino meteostanice WeatherDuino
  • Antény pro příjem a vysílání v pásmu 433 MHz jsou upevněny na zadním panelu, použil jsem s uváděným ziskem 6 dBi. Pro uchycení jsou použity pigtaily s konektory SMA (5 ks cca 135,- Kč). Pokud budete řešit podobnou věc, vždy si pečlivě zkontrolujte napárování konektorů ve všech spojovacích místech.
    Arduino meteostanice WeatherDuino

Seznam ostatních „standardních“ součástek je uveden v původním zdroji od svého autora, nechci se zde tedy opakovat.

Co je však pravděpodobně důležité zmínit, je úprava desky Meduino Mega 2560 Pro-Mini. Zde je nezbytné odpájet jednu diodu, abychom zabránili situaci, že RX+ deska nebude napájena 9 V ze zdroje, ale pouze 5 V z USB hubu. Taková situace by mohla vést ke zničení modulu – viz původní zdroj.

Arduino meteostanice WeatherDuino - Dioda k odpájení

Dioda k odpájení

Samotná stavba nemá v podstatě žádné záludnosti, díky tomu, že základní deska jednotky RX+ má všechny SMD součástky již osazeny, zbývá na nás jen minimum práce. Celé osazení trvá méně než 2 hodiny.

Pro úplnost ještě některé orientační ceny nákupů:

  • Deska plošných spojů RX Pro2 PLUS včetně poštovného – cca 1.560,- Kč
  • Geekcreit 7“ 1024×600 HDMI capacitive IPS LCD display 5 point touch – cca 1.180,- Kč
  • 2.8“ 240×320 SPI TFT touch panel ILI9341 – cca 250,- Kč
  • Raspberry Pi3 B – cca 950,- Kč
  • HDD 2.5“ 250 GB USB externí – cca 950,- Kč
  • Bezdrátová klávesnice s touchpadem – cca 1.000,- Kč
  • + řada drobných dílů

Téměř všechny uvedené ceny vychází z předpokladu nákupu na asijských eshopech, případně eBay (ovšem i zde většinou čínští dodavatelé). Oproti nákupu v maloobchodech v ČR tak můžete ušetřit několikanásobek ceny, ovšem za cenu dlouhého čekání na dodávku (obvykle kolem 3 týdnů). Při nákupu v zahraničí mimo EU také nezapomeňte na stanovené limity pro platbu DPH, případně i cla (vyplatí se rozdělit větší objednávku na řadu malých – poštovné se stejně neplatí a lze se tak snadno dostat pod limity).

Základová deska

Autorovi článku se osvědčilo vyříznout z desky plexiskla tl. cca 5-7 mm základní montážní desku, která pokrývá celé dno skříňky mimo prostor olověného akumulátoru. Na tuto desku lze pak snadno uchytit jednotlivé moduly pomocí distančních sloupků se šroubením právě do základové desky. Na přední a zadní panel je tak nutné uchytit pouze displeje, ovládací prvky a konektory, vše ostatní lze smontovat mimo skříňku „na stole“ a vsadit do skříňky najednou.

Arduino meteostanice WeatherDuino - Zapojení

Zapojení

Akumulátor je velmi těžký, proto jeho uchycení dimenzujte řádně tak, aby se nemohl utrhnout ani při případném přenášení, obracení skříňky vzhůru nohama apod.

Přední panel

Oba displeje lze na přední panel připevnit pomocí distančních sloupků vždy se 4 děrami v panelu. Tyto díry pak zakryjeme vytištěným předním panelem z laserové tiskárny (základní barva by měla být v barvě skříňky), který podlepíme oboustrannou samolepicí fólií pro přístrojové panely. Tento „sendvič“ nalepíme na přední panel a pro dokonalejší vzhled ještě přelepíme krycí samolepicí panelovou fólií. Při dobrém návrhu a čisté práci se výsledek blíží profesionálnímu a přitom za velmi nízkých nákladů.

Arduino meteostanice WeatherDuino - Přístrojová deska

Přístrojová deska

Pro úplnost:

  • Pro nákres panelu používám software Front Panel Designer od společnosti Schaffer AG (freeware)
  • Samolepicí fólie dodává zásilkový obchod Conrad
Arduino meteostanice WeatherDuino - Přístrojová deska při stavbě

Přístrojová deska při stavbě

Zadní panel

Pro jeho jednoduchost jsem se s ním „nijak nepáral“, v mém případě je prost jakýchkoliv popisků. V lepším případě však můžeme použít stejný postup výroby jako u předního panelu.

Arduino meteostanice WeatherDuino - Zadní panel

Zadní panel

Zapojení

V propojení jednotlivých desek/modulů mezi sebou snad ani nelze udělat chybu. Naopak se mnohdy chybuje v zapojení displeje 2.8“ (časté dotazy v podpůrném fóru). Pro úplnost tedy uvádím správné propojení desky RX Pro2 PLUS a dotykového displeje ILI9341 2,8“:

Displej 2,8“ Deska RX Pro2 PLUS
T-IRQ T-IRQ
T-DO T-MOSI
T-DIN T-MISO
T-CS T-CS
T-CLK T-SCK
SDO(MISO) nezapojovat
LED LED+
SCK SCK
SDI(MOSI) MOSI
D/C DC
RESET RST
CS CS
GND GND
VCC 5V
—– 3.3V – nechte nezapojené

CumulusMX

Aplikace Cumulus ve verzi 3 je označena CumulusMX a v zásadě je připravena pro běh na mikropočítači Raspberry Pi. Nejběžněji použitým operačním systémem je Raspbian, v němž je pro spouštění .exe programů použito prostředí Mono.

Pro zájemce o stavbu uvádím několik důležitých poznámek:

  • Program Cumulus pro „velké“ počítače ukončil svůj vývoj, doporučuji neinstalovat
  • Program CumulusMX už více méně není svým původním autorem vyvíjen, stále jsou však opravovány chyby a je dost možné, že dalšího vývoje se chopí komunita – ale to je zatím pouhá spekulace
  • Z těchto důvodů je dobré se na danou aplikaci zcela nespoléhat, ale využít schopností RX Pro2 PLUS v uploadu dat přímo na WUnderground. Pro výstavbu vlastního webového sídla je naopak využití dané aplikace více než účelné.
  • Pokud tedy instalovat CumulusMX (a to doporučuji), pak rozhodně připojte k Raspberry i pevný disk, např. HDD 2,5“ USB 250 GB, nebo něco podobného. Budete mít jednak mnohem více místa na data, upgrady, úpravy apod., jednak získáte výrazně vyšší spolehlivost celé sestavy.

Popis instalace a konfigurace aplikace se již vymyká obsahu tohoto článku, na druhou stranu bylo o ní dost napsáno i v českém jazyce. (Pokud by však byl větší zájem, nevylučuji i pokračování tohoto seriálu článků daným tématem, samozřejmě, pokud bude mít zájem i vydavatel.)

Kompletace

Arduino meteostanice WeatherDuino - Hotová stanice

Arduino meteostanice WeatherDuino - Hotová stanice

Hotová stanice

Upozornění: Některé z výše uvedených názvů mohou být chráněnými značkami svých majitelů, aniž je to v textu výslovně uvedeno.

Odkazy a zdroje

Spouštíme nové Arduino fórum

$
0
0

Než začnete brblat a říkat si „no konečně“ a „to to trvalo“, tak prosím čtěte.

Na doméně arduino-forum.cz (jde i bez pomlčky) jsme spustili nové fórum, které by mělo pomalu nahradit to naše staré. To brzy zamkneme pro přidávání nových příspěvků a uděláme z něj jen takovou read-only galerii řešených a vyřešených problémů.

www.arduino-forum.cz

Na tomto místě bych se rád omluvil všem, kterým jsme čekáním způsobili psychickou újmu. Vždycky se totiž našel úkol, který hořel více, než nahození nového fóra (znáte to – bug hoří víc, než feature request 🙂 ). Nebudu se vymlouvat, mělo to být hotové už dávno, ale snad vás to od používání nového fóra neodradí. I já se na nové fórum těším, protože původní systém bbPress, který se ze začátku zdál jako výtečná volba, poslední dobou spíše škodil, než pomáhal při hledání řešení.

Dovolte mi tedy otevřít pomyslnou láhev šampaňského a pokřtít náš nový přírůstek do Arduino rodiny 🙂

Arduinu a bastlení ZDAR!

Ovládejte počítač gesty s Arduinem

$
0
0

Různé dotykové plochy jsou super, ale nebylo by přecejen lepší pouze mávnout rukou před počítačem, který by pak na základě gesta provedl požadovaný úkol? Tento nápad stál za projektem inspirovaným mimo jiné i Iron Manem. Autorem projektu je B. Aswinth Raj.

Systém využívá Arduino Nano, které je připevněné na plastové rukavici. K Arduinu je připojený Bluetooth modul a také hallovy sensory. Ty najdeme na ukazováčku a prostředníčku a snímají magnetické pole magnetu, který je připevněný na palci. Ukazováček a prostředníček slouží jako pravé a levé tlačítko myši. Rukavice obsahuje také modrý terčík umístěný uprostřed dlaně, který slouží ke snazšímu zjištění polohy ruky a snímání gest.

Zjištění polohy ruky je možné díky webkameře a programu běžícím v prostředí Processing, který obraz zpracovává, vyhodnocuje polohu ruky a také generuje pohyby kurzoru dle polohy ruky.

Ovládání počítače gesty pomocí Arduina a webkamery - Rukavice

Rukavice

Na videu níže vidíte projekt v akci – rukavice je použitá ke kreslení rukou ve vzduchu a také k ovládání LED na Arduino Nano. Pokud vás projekt zaujal, přečtěte si více na webu autora.

Přeloženo z https://blog.arduino.cc/2017/05/31/computer-gesture-control-via-webcam-and-arduino/ a mírně upraveno.


Arduino binární hodiny

$
0
0

Kutilové z týmu La Fabrique postavili binární hodiny ve tvaru domu, který je inspirovaný domy kolem řeky Sény v Paříži. Hodiny nazvané „City Clock“ se od ostatních liší tím, že nezobrazují čas na ciferníku, ani jako desítkové číslice, ale zobrazují ho v binárním tvaru pomocí rozsvěcování jednotlivých oken domu.

Elektronika je velice jednoduchá – skládá se z desky Arduino UNO a šestnácti připojených LED (s rezistory).  Více informací o zapojení se můžete dočíst zde. Hodiny bylo navíc možné zakoupit v Kickstarter kampani, v tomto případě byl ale dostupný shield s LED, ke kterému je možné připojit Arduino Nano.

Arduino binární hodiny - Způsob čtení

Způsob čtení

Čas se z hodin odečítá vertikálně – každý sloupec odpovídá jedné číslici v e tvaru hh:mm. Pokud znáte binární soustavu je princip jasný. Pro připomenutí: První podlaží značí 1, druhé 2, třetí 4 a čtvrté 8. Výsledná číslice se získá jako součet svítících oken. Princip je také zřejmý z obrázku výše.

Arduino binární hodiny - Pohled dovnitř

Pohled dovnitř

Hodiny jsou k dostání v různých verzích kitu- buďto jenom jako elektronika, či dřevěná kostra domu, pokud byste si chtěli vytvořit vlastní elektroniku, nebo jako kompletní set.

Přeloženo z https://blog.arduino.cc/2017/06/06/a-paris-inspired-arduino-powered-binary-clock/ a mírně upraveno.

TinyLab: Nezbytný základ

$
0
0

Už jsme tu měli několik článků, které se věnovaly Arduino kitu TinyLab. Ty ale většinou předpokládaly alespoň základní znalost platformy Arduino, vývojového prostředí apod. Dnešní článek bude věnován těm uživatelům, kteří nemají s programováním žádnou zkušenost a TinyLab si pořídili, protože s programováním chtějí teprve začít. Stručně si kit představíme, ukážeme si, jak se do něj nahrávají programy a také se odkážeme na zdroje k dalšímu studiu.

Co je TinyLab

Popisu TinyLab se věnoval samostatný článek, představíme si proto tuto desku jen ve stručnosti. Jedná se o Arduino Leonardo, ke kterému je ale „přilepeno“ spoustu dalších komponent. Deska Leonardo je na TinyLab symbolicky naznačená bílou linií. Zachované jsou také patice pro zasunutí různých rozšíření – takzvaných shieldů. Zajímavý je také prostor určený pro vložení a nalepení malého nepájivého kontaktního pole pro rychlé prototypování, což se občas dost hodí.

Z komponent na desce můžeme jmenovat například LED, LCD displej, sedmisegmentový displej, potenciometr, snímač teploty nebo osvětlení a další. Aby nebylo Arduino připojenými komponentami „přehlceno“, popřípadě aby tyto komponenty nenarušovaly komunikaci s případnými připojenými shieldy, je možné komponenty pomocí spínačů na desce podle potřeby připojovat a odpojovat (na obrázku jsou spínače červené). Jednotlivé spínače jsou umístěny naproti příslušného signálu. Pokud je daný spínač rozepnut, tak je možné signál využít pro vlastní potřebu (např. pro připojený Arduino Shieldu). Pokud ale chcete využít určitý prvek na desce TinyLab, tak musíte dát daný spínač do polohy ON.

Napájení Arduino desky a všech periferií zajišťuje výkonný spínaný zdroj, který je schopen na napájecím napětí 5 V dodat až 3 A. Desku TinyLab můžete použít i pro napájení dalších periferií nebo hardware. Navíc je zdroj vybaven ochranou proti zkratu, což se pro různé bastlení hodí.

Arduino kit TinyLab komponenty

Komponenty

Kam jsou všechny ty periferie připojeny je dobře vidět z blokového diagramu Tinylab. Podrobnosti ohledně zapojení desky TinyLab naleznete ve schématu zapojení.

Příprava prostředí

Arduino se běžně programuje v prostředí Arduino IDE. To je sice některými pokročilejšími uživateli opovrhované řešení, ale pro začátek naprosto dostačující. Arduino IDE je možné stáhnout zde. Poměrně novou možností je online vývojové prostředí. Programování pak probíhá prostřednictvím prohlížeče. Tuto možnost ale nyní nevyužijeme a stáhneme si aplikaci do počítače. Zde nás čeká nepříjemná komplikace, protože některé programy, které TinyLab využívá, nejsou kompatibilní s nejnovější verzí Arduino IDE. Proto zde stáhneme starší verzi IDE 1.6.8. Zvolte verzi podle vašeho operačního systému a stáhněte ji. Poté Arduino IDE spusťte. Mělo by se vám objevit okno, jaké vidíte níže. Hlavní část okna je určená pro psaní kódu. Ve spodní černé části, se zobrazují různé hlášky, například při nahrávání programu do Arduina apod.

Arduino IDE

Arduino IDE

První připojení

Vezmeme USB kabel, který je v balení, a propojíme jím desku s počítačem. Měla by se rozsvítit žlutá kontrolka vedle USB konektoru na desce.

TinyLab - Indikátor napájení

Indikátor napájení

Nyní v Arduino IDE otevřeme nabídku Tools a v ní menu Boards, ve kterém vybereme desku Arduino Leonardo. V nabídce Tools/Port potom zvolíme port, ke kterému je Arudino připojeno – poznáme ho mimo jiné podle toho, že po odpojení Arduina od USB konektoru port z nabídky zmizí.

Nyní je vše připravené pro nahrání prvního testovacího programu. V něm si zablikáme LEDkou.

Blikáme LEDkou

Arduino IDE obsahuje při stažení řadu ukázkových příkladů. V menu File/Examples/01.Basics vybereme příklad Blink, který slouží právě k blikání LED. Program vypadá následovně:

void setup() {
  pinMode(LED_BUILTIN, OUTPUT);
}

void loop() {
  digitalWrite(LED_BUILTIN, HIGH);
  delay(1000);                    
  digitalWrite(LED_BUILTIN, LOW);
  delay(1000);                    
}

Nebudeme si ho podrobně rozebírat. Pokud chcete vědět, co která část znamená, odkáži vás na své články o programování Arduina.

TinyLab - Příklad Blink - blikání LED

Příklad Blink – blikání LED

Před nahráním ještě přepneme přepínač u pinu 13, který je na desce TinyLab označený číslem 5, do polohy ON. Také přepneme všechny tři spínače, které nalezneme pod sedmisegmentovým displejem do polohy To Control LEDs.

Arduino TinyLab - Přepínač pro pin 13

Přepínač pro pin 13

Nyní stiskneme tlačítko upload a program se nahraje do desky.

Arduino IDE - Tlačítko Upload

Tlačítko Upload

LED v levém dolním rohu by nyní měla blikat.

Přidání potřebných knihoven

Abychom mohli využít celý potenciál desky TinyLab, musíme nyní prostředí „naučit“ používat různé komponenty.

Například ovládání LCD displeje by nebylo úplně jednoduché. Zároveň se ale jedná o poměrně často využívanou komponentu. Co s tím? Pro takovéto komponenty proto vznikají tzv. knihovny – balíky kódu, které slouží pro jejich snadné ovládání. Některé knihovny jsou již součástí Arduino IDE, ale ne všechny. Ty chybějící si proto nyní doplníme.

TinyLab GitHub

GitHub je zjednodušeně řečeno server, který slouží ke sdílení kódu mezi uživateli. Na něm nalezneme všechen potřebný software pro ovládání komponent na desce TinyLab a také ukázkové příklady. Na GitHub klikněte na tlačítko Clone or download a poté na Download ZIP. Stáhne se ZIP archiv, který obsahuje několik složek. Nyní nás bude zajímat složka libraries. Ta obsahuje další složky, například RF24Time a další. Tyto složky přesuneme do složky Libraries v místě, které jsme zvolili pro ukládání Arduino programů při instalaci IDE. Tato složka se dá najít také v nastavení Arduino IDE v položce Soubor/Vlastnosti/Nastavení/Umístění projektů. Typicky například C:\Users\ArduinoBastlir\Documents\Arduino. Knihovny TinyLab tedy kopírujeme do složky Libraries ve složce Arduino.

Do složky Arduino můžeme nahrát také příklady pro Tinylab, tedy služku example_codes. Tyto Arduino příklady slouží pro podrobnější demonstraci práce s jednotlivými periferiemi a jsou rozděleny podle zkušenosti bastlíře na tři další podadresáře (Basic, Medium, Advanced). Dalšími příklady a Arduino programováním se budeme zabývat v pokračování seriálu o Arduino kitu TinyLab.

Testovací program

ZIP archiv obsahuje také složku test_code, ve které nalezneme programy sloužící pro otestování jednotlivých komponent TinyLab. Tento program je také standardně nahrán v nové desce TinyLab. Složku test_code můžete také zkopírovat do složky Arduino. Otevřeme si nyní program test_code/tinylab_test_code a nahrajeme ho do desky (testovací program najdete v položce Soubor/Projekty). Všechny spínače přepneme do polohy ON a desku restartujeme tlačítkem Reset vedle USB portu. Nyní by se měl rozsvítit LCD displej a na něm zobrazit nápis „LCD -> OK“ a „-> S1“.

Pokud nápis nevidíte, je to pravděpodobně způsobeno nevhodně nastaveným kontrastem LCD. Ten je možné upravit pomocí trimru pod LCD displejem, který je označený LCD contrast. Pomocí malého křížového šroubováku zkuste opatrně potenciometrem otáčet a uvidíte, jak se jas mění.

Pokud se vám již nápis zobrazil správně, můžete tlačítkem S1 přepínat mezi testováním jednotlivých komponent a podle pokynů na displeji provádět jednotlivé testy. U SD karty, ESP8266 a NRF se na displeji zobrazí FAILED. To je v pořádku, pokud tyto komponenty nemáte připojené.

Závěr

To by bylo do začátku vše. Pokud se chcete o TinyLab dozvědět více, podívejte se na seriál článků o něm. Pokud vás zajímá programování Arduina, podívejte se sem.

Děda pro vnuky postavil vláček řízený Arduinem

$
0
0

Pokud chcete zapůsobit na své děti či vnoučata a také se u toho pobavit, nabízí se více možností, co vyrobit. Stavba vláčku v měřítku 1:4 je ale na seznamu těchto možností jistě velmi vysoko. Tento konkrétní model je inspirovaný článkem z časopisu Popular Mechanics z roku 1965 a zahrnuje krásný barevný vláček, 80 m kolejí a strojovnu pro garážování lokomotivy a údržbu.

Arduino vláček - Elektronika

Elektronika přejezdu

Lokomotivu pohání dva 24V motory o výkonu 350W, které je možné ovládat potenciometrem na palubě, ale také bezdrátově. O řízení se stará deska Arduino UNO. Krom toho autor vytvořil i přejezd (pro sekačku) s varovným signálem. Přejezd je řízený dalším Arduinem s ultrazvukovým senzorem.

Více informací se můžete dočíst na serveru Imgur a také na autorově blogu.

Přeloženo z https://blog.arduino.cc/2017/06/07/grandfather-builds-a-backyard-railroad-with-arduino/ a mírně upraveno.

TinyLab: Používáme LED

$
0
0

V minulém dílu jsme se zabývali potenciometrem, který nalezneme na desce TinyLab. Dnes se budeme věnovat čtveřici LED ve spodním rohu desky.

Nastavení přepínačů

LED jsou připojené k pinům (zleva) 13, 12, 11, 10. Proto musíme přepnout spínače u těchto pinů na desce Leonardo do polohy ON. Jedná se o přepínače označené čísly 5, 6, 7 a 8. Také přepneme trojici spínačů pod sedmisegmentovým displejem do polohy To Control LEDs.

Nyní už si můžeme ledkami zablikat, třeba pomocí následujícího kódu.

void setup() {
  pinMode(13, OUTPUT);
  pinMode(12, OUTPUT);
  pinMode(11, OUTPUT);
  pinMode(10, OUTPUT);
}

void loop() {
  digitalWrite(13, HIGH);
  digitalWrite(12, HIGH);
  digitalWrite(11, HIGH);
  digitalWrite(10, HIGH);

  delay(500);
  
  digitalWrite(13, LOW);
  digitalWrite(12, LOW);
  digitalWrite(11, LOW);
  digitalWrite(10, LOW);

  delay(500);
}

Zkrácení pomocí pole

Nyní si celý příklad přepíšeme pomocí pole a cyklů. Čísla pinů LED si uložíme do pole, kterým pak budeme v cyklech procházet.

byte leds[] = {10, 11, 12, 13};

void setup() {
  for(byte i = 0; i < 4; i++){
    pinMode(leds[i], OUTPUT);  
  }
}

void loop() {
  for(byte i = 0; i < 4; i++){
    digitalWrite(leds[i], HIGH);
  }

  delay(500);

  for(byte i = 0; i < 4; i++){
    digitalWrite(leds[i], LOW);
  }

  delay(500);
}

Blikající had

Když už máme piny LED v jednom poli, můžeme jednoduše vytvořit program, který bude pořád dokola diodami blikat jednou po druhé.

byte leds[] = {10, 11, 12, 13};

void setup() {
  for(byte i = 0; i < 4; i++){
    pinMode(leds[i], OUTPUT);  
  }
}

void loop() {
  for(byte i = 0; i < 4; i++){
    digitalWrite(leds[i], HIGH);
    delay(500);
    digitalWrite(leds[i], LOW);
    delay(500);
  }
}

Měníme rychlost pohybu

Budeme dále pokračovat v úpravách předchozího kódu a umožníme měnit rychlost pohybu LED při běhu programu. Využijeme k tomu komponentu z minulého dílu – potenciometr. Nezapomeňte přepnout přepínač u analogového pinu A0 do polohy ON (je označený pouze nulou, jen na levé straně desky Leonardo).

byte leds[] = {10, 11, 12, 13};

void setup() {
  for(byte i = 0; i < 4; i++){
    pinMode(leds[i], OUTPUT);  
  }
}

void loop() {
  for(byte i = 0; i < 4; i++){
    int pot = analogRead(A0);
    
    digitalWrite(leds[i], HIGH);
    delay(pot);
    digitalWrite(leds[i], LOW);
    delay(pot);
  }
}

Dnes to bylo jednoduché, že? Napadne vás další úprava blikání? Podělte se v komentářích, nebo na našem novém fóru arduino-forum.cz.

Tak zase příště u představení další komponenty.

POV 3D holografický displej

$
0
0

Zařízení označovaná jako POV (point of view = úhel pohledu) využívají při své činnosti nedokonalosti lidského oka. Když například rychle pohybujeme svítící LED, může se nám zdát, že před sebou ve vzduchu vidíme jasnou křivku. Díky této setrvačnosti lidského oka je možné vytvářet i daleko důmyslnější obrazce. O jednom takovém projektu je i dnešní článek.

Většinou POV zařízení zobrazují něco, co připomíná 2D objekty, nebo maximálně evokují tvar válce či koule. Kutil Gelstronic se ale rozhodl, že přidá ještě pocit hloubky. Jeho výsledek – projekt PropHelix – je opravdu povedený.

Arduino POV 3D holografický displej - Konstrukce

Konstrukce

Základ tvoří LED pásky, které jsou uspořádané do tvaru připomínající vrtuli či lodní šroub. Rozsvěcováním a zhasínáním LED vzniká dojem 3D obrazu. Diody řídí deska Propeller, která je součástí rotující části. Nabíjení probíhá bezdrátově pomocí technologie, kterou známe z chytrých telefonů. Deska Arduino Pro Mini se stará o řízení motoru, který „vrtulí“ otáčí. Nastavení správné rychlosti je možné pomocí enkodéru, který zjišťuje aktuální polohu a měří otáčky.

Více informací se můžete dočíst na serveru Instructables, nebo ve videu níže.

Přeloženo z https://blog.arduino.cc/2017/06/09/prophelix-is-an-amazing-3d-pov-holographic-display/ a mírně upraveno.

Dotykové klávesy s netradičním rozložením

$
0
0

Klavír či klávesy jste už určitě viděli – řada dlouhých bílých kláves, které jsou proloženy černými. Toto rozložení je nejčastěji rozšířeným standardem klaviatury. Na druhou stranu jste pravděpodobně nevěděli, že kromě této tradiční klaviatury existují i další alternativní způsoby rozložení kláves. Jednou z nich je i rozložení Jankó, které mělo zjednodušit hraní na jinak široké klaviatuře hráčům s menšíma rukama. Pro rozložení Jankó se Ben Bredley rozhodl i při stavbě jeho elektronických kláves.

Nástroj sestrojil při příležitosti Moog Hackathon 2017 na Georgia Institute of Technology a popsal jej ve článku. Použitou deskou je Arduino Mega, ke kterému jsou připojené moduly MPR121 sloužící ke snímání náboje na kovových „klávesách“. Autor uvádí, že je možné na nástroj obstojně hrát už po jednom dni tréninku.

Více informací o stavbě a komponentách naleznete v autorově článku a také na serveru Hackaday.

Přeloženo z https://blog.arduino.cc/2017/06/12/a-capacitive-touch-janko-keyboard/ a mírně upraveno.

Hrátky s NeoPixel RGB LED páskem

$
0
0

Arduino s NeoPixel jedou v barvách!

Ukažte se, co ve vás je, a vybarvěte svůj Arduino projekt použitím barevného LED pásku! V dnešním článku si ukážeme pár možností využití tohoto barevného LED hada.

Práce s NeoPixel LED pásky je jednoduchá a intuitivní díky dobře zpracovaným knihovnám a nenáročnému zapojení. Po přečtení tohoto článku vám asi bude doma všechno hrát barvami! 🙂

NeoPixel LED pásek s adresovatelnými RGB svítivými diodami je napájený přímo z Arduina pěti volty. Není tak potřeba napětí 12V, jako u běžných LED pásků. Hlavní výhodou řešení s NeoPixel je ale to, že můžete ovládat barvu a jas u každé LED zvlášť a přitom pro připojení potřebujete jen 3 vodiče! Dva vodiče pro napájení pásku a jeden pro data. Pásky můžete navíc spojovat za sebe (vyžaduje pájení) a vytvořit delšího svítícího hada.

Co je potřeba, aby to svítilo a blikalo?

ZDE ke stažení

Schéma zapojení

Adresovatelné diody LED pásku se ovládají přes I2C rozhraní. LED pásek připojte k Arduinu na +5V, GND a na Arduino pin č. 6. Můžete připojit také Bluetooth modul HC-06 nebo HC-05 a akumulátor pro mobilní použití – třeba při nošení pod tričkem :).

Pokud se vám nechce hledat, kde co připojit, můžete využít pro připojení RJ25 Adaptér a Arduino desku mCore. Adaptér zajistí pohodlné připojení pásku s možností připojení ještě dalšího pásku. Deska mCore zase umožní jednoduché připojení dalších modulů, například pohybového čidla PIR, snímače zvuku, světelného senzoru apod. Na desce mCore je navíc integrovaný měnič napětí, a tak váš Arduino projekt bude z akumulátoru fungovat i pokud klesne jeho napětí pod 3,5V. Napadá vás, co by se s tím vším dalo vytvořit za projekt? 😉

Schéma zapojení LED pásku s Arduinem

Schéma zapojení LED pásku s Arduinem

Vložení knihovny

Stáhněte si a nainstalujte knihovny (Neo_pixel a GFX). Otevřete Arduino IDE – záložka projekt, přidat zip knihovnu a hotovo.

Příklad ovládání z mobilu si ukážeme později. Teď tady mám něco opravdu speciálního!

NeoPixel pásek jako efektní doplněk obrazovky

Tento příklad využití LED pásku ukazuje potenciál propojení s PC a prostředím Processing3. LED pásek v tomto projektu tvoří efektní doplnění monitoru a osvětluje prostor za ním. Rozložení barev je vytvořeno podle toho, co je zrovna na monitoru. Cool!

S využitím prostředí Processing3 jsem vytvořil jednoduchý sketch, který si načte printscreen monitoru a uloží si ho jako image. Poté se používá jen šířka obrazovky a 200 pixelů výšky. Ty se rozdělí na šestnáct stejných okýnek a vypočítá se průměrná hodnota barvy jednoho okýnka v RGB. Ta se uloží do pole pixelcolor [číslo NeoPixel diody][barva 0=červená, 1=zelená, 2=modrá]. Celé pole pixelcolor[][] se odešle po sériové lince do Arduina. To jen načte pixelcolor[][] a pod for() cyklem doplní dle pořadí na výstup k pásku. Stáhni si prostředí Processing 3.

Rychlokurz Processing3 zde:

Processing3 stáhnout:

Nejprve si nainstalujte knihovny, pak nahrajte program do Arduina. Nastartujte Processing3, otevřete program „pasek_za_televizi“ a spusťte. Najděte v programu šestnáctý řádek:

String portName = Serial.list()[ číslo portu ];

V konzoli dole v okně vidíte názvy COM portů a jejich index. Bude vás zajímat index. To je to první číslo v hranaté závorce. Zkontrolujte v Arduino IDE, jaký COM port používá připojené Arduino s již nahraným kódem, u mě je to COM27. V konzoli processingu najdu COM27, podívám se na index, u mě je to [0] a do řádku dám nulu takhle

String portName = Serial.list()[0];

V Arduino IDE nesmíte mít otevřený Sériový monitor, pak Procesing háže chybu Serail port „COM27“  port busy!  Oba zdrojové kódy jsou odkomentovány, co která funkce dělá.

Kód pro Arduino s komentářem:

int inByte = 0;         // příchozí data
#include <Adafruit_NeoPixel.h> //knihovna pro Neopixel
#ifdef __AVR__         // ověření co provádí knihovna
#include <avr/power.h>
#endif
int pixelcolor[16][3]; // pole pro číslo LED a její barvu v RGB
int i,o,kontakt; // klopné proměnné
#define PIN            6 // DIN pin od pásku
#define NUMPIXELS      16 // počet LED na pásku
// (počet diod, DIN pin, typ barevného schématu + rychlost sběrnice)
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
void setup()
{
  // kontrola v knihovně
  #if defined (__AVR_ATtiny85__)
  if (F_CPU == 16000000) clock_prescale_set(clock_div_1);
  #endif
  Serial.begin(9600); // start sériového portu s rychlostí 9600
   pixels.begin(); // inicializace pásku
  pixels.setBrightness(150); // nastavení svítivosti pásku 0 až 255 je max
  establishContact(); // makro pro navázání sériového spojení
}
void loop()
{
  if (Serial.available() > 45) { // pokud jsou přijatá data rovná počtu 45 hodnot
    if(Serial.read()==11) // pokud je první hodnota 11 začni ukládat do pole (kontrolní 11 co jsme si poslali z processingu)
    {
   pixelcolor[0][0]=Serial.read();
   pixelcolor[0][1]=Serial.read();
   pixelcolor[0][2]=Serial.read();
   pixelcolor[1][0]=Serial.read();
   pixelcolor[1][1]=Serial.read();
   pixelcolor[1][2]=Serial.read();
   pixelcolor[2][0]=Serial.read();
   pixelcolor[2][1]=Serial.read();
   pixelcolor[2][2]=Serial.read();
   pixelcolor[3][0]=Serial.read();
   pixelcolor[3][1]=Serial.read();
   pixelcolor[3][2]=Serial.read();
   pixelcolor[4][0]=Serial.read();
   pixelcolor[4][1]=Serial.read();
   pixelcolor[4][2]=Serial.read();
   pixelcolor[5][0]=Serial.read();
   pixelcolor[5][1]=Serial.read();
   pixelcolor[5][2]=Serial.read();
   pixelcolor[6][0]=Serial.read();
   pixelcolor[6][1]=Serial.read();
   pixelcolor[6][2]=Serial.read();
   pixelcolor[7][0]=Serial.read();
   pixelcolor[7][1]=Serial.read();
   pixelcolor[7][2]=Serial.read();
   pixelcolor[8][0]=Serial.read();
   pixelcolor[8][1]=Serial.read();
   pixelcolor[8][2]=Serial.read();
   pixelcolor[9][0]=Serial.read();
   pixelcolor[9][1]=Serial.read();
   pixelcolor[9][2]=Serial.read();
   pixelcolor[10][0]=Serial.read();
   pixelcolor[10][1]=Serial.read();
   pixelcolor[10][2]=Serial.read();
   pixelcolor[11][0]=Serial.read();
   pixelcolor[11][1]=Serial.read();
   pixelcolor[11][2]=Serial.read();
   pixelcolor[12][0]=Serial.read();
   pixelcolor[12][1]=Serial.read();
   pixelcolor[12][2]=Serial.read();
   pixelcolor[13][0]=Serial.read();
   pixelcolor[13][1]=Serial.read();
   pixelcolor[13][2]=Serial.read();
   pixelcolor[14][0]=Serial.read();
   pixelcolor[14][1]=Serial.read();
   pixelcolor[14][2]=Serial.read();
   }
    Serial.write( pixelcolor[0][0]);
    Serial.write( pixelcolor[0][1]);
    Serial.write( pixelcolor[0][2]);               
for(int e=0;e<16;e++) // for cyklus pro nastavení čísel diod a hodnotu barvy
    {// pixels.setPixelColor(číslo diody,červená,zelená,modrá)
    pixels.setPixelColor(e, pixels.Color(pixelcolor[e][0],pixelcolor[e][1],pixelcolor[e][2]));
    }
    pixels.show(); // odeslání do pásku
  }
}
void establishContact() {   // makro pro navázání kontaktu
 while (Serial.available() <= 0) { //když nejsou přijatá žádná data
      Serial.write('A');   // pošli po sériové lince A
  }
}

Kód pro Processing3

   import java.awt.*;
    import processing.serial.*;   // nainportování knihoven
Serial port;  // iniciazizace proměné pro sériovou linku
PImage screenshot; // proměnná pro screenshot
int R, G,B; // proměnné pro ověření spojení ukládá se hodnota prvního okýnka
int[] serialInArray = new int[3];  // proměnná pro načtení COM portů
int r,g,b,index,pozicex=0;   // proměnné pro vypočet průměrné barvy okýnek
int pixelcolor[][]= new int[16][3]; // [počet diod][RGB] pro uložení RGB hodnot Arduinu
boolean firstContact = false; // pro ověrění spojení
int serialCount = 0; // pro ověrění spojení
void setup() {
    size(640,320); // nastaví okno programu na size(výška, šířka)
    printArray(Serial.list());  // zobrazí dostupné com porty
    String portName = Serial.list()[0];    // nastaví COM port, který se bude používat
    port = new Serial(this, portName, 9600); // nastavení rychlosti komunikace
}
void draw() {
    screenshot();           // makro pro vyfocení obrazovky
    if (screenshot != null) image(screenshot, 0, 0, width, height); //zobrazení vyfocené obrazovky v pozadí
loadPixels();  // načtení pixelů pozadí a jejich barvi
    for (int o=0;o<16;o++) // for cyklus pro vypočítání průměrné hodnoty 16ti okýnek to odpovídá počtu diod na pásku
    { 
    for(int i=0;i<height;i++)
    {
    for(int e=pozicex;e<pozicex+width/16;e++)
    {
    r+=(int(red(pixels[i*width+e]))); // uložení průměrné hodnoty barev v jedné diodě
    g+=(int(green(pixels[i*width+e])));
    b+=(int(blue(pixels[i*width+e])));
    index++;
     }
     pixelcolor[o][0]=r/index; // uložení barvy okýnka/diody pro odeslání po sériové lince
     pixelcolor[o][1]=g/index;
     pixelcolor[o][2]=b/index;
}
pozicex+=width/16;  // posunutí výpočtu o další okýnko
index=0;
r=0; // vynulování dočasné proměnné pro barvy
g=0;
b=0;
}
pozicex=0;
   for(int i=0;i<16;i++)     // zobrazení vypočítaných barev na pozadí programu 16 okýnek 50x50 pixelů
   {
   fill(  pixelcolor[i][0], pixelcolor[i][1], pixelcolor[i][2]);
   rect(pozicex,0,width/16,50);
   pozicex+=width/16;
   }
pozicex=0; // vynulování počátečního bodu
}
  void screenshot() {       // makro pro zachycení obrázku plochy
    try {
     screenshot = new PImage(new Robot().createScreenCapture(new Rectangle(0, 0, displayWidth,200)));
    } catch (AWTException e) { }
}
   void serialEvent(Serial myPort) {        // makro pro sériovou komunikaci
     int inByte = myPort.read();       // načtení kontaktního symbolu používáme 'A' 
      if (firstContact == false)
      {
       if (inByte == 'A') {
       println("kontakt");
       myPort.clear();          // vyčištění bufferu portu 
       firstContact = true;     // první kontakt proběhl
       myPort.write('A');       // dotaz na další
      } 
      } 
        else {             // Přidá nejnovější bajt ze sériového portu do pole:
         serialInArray[serialCount] = inByte;
         serialCount++;
         //když máme 3 bytes:
     if (serialCount > 2 ) {      // Arduino posílá nazpět hodnotu v RGB o prvním okýnku jako ověrění že se přenos povedl
      R = serialInArray[0];
      G = serialInArray[1];
      B = serialInArray[2];
      // vypíše hodnotu v RGB o prvním okýnku načtenou zpětně z Arduina (pouze ověření spojení);
      println(R + "   \t" +G+ "\t  " +B);
    myPort.write(11); // pošleme číslo 11 aby arduino vědělo, že má začít ukládat proměnné pro pásek
     for(int i=0;i<15;i++) // for cyklus odesílající 16 hodnot pole, které má 3 podpole R=0 G=1 B=2 
     {
      myPort.write(pixelcolor[i][0]); // pošli R
      myPort.write(pixelcolor[i][1]); // pošli G
      myPort.write(pixelcolor[i][2]); // pošli B
     }
      serialCount = 0; // vynulovaní poroměnné pro další příjem dat
     }
     }
}

RGB led ovládané ze smartphonu

A nyní si ukážeme slíbené ovládání LED pásku ze smartphonu. Teď už je potřeba připojit Bluetooth přijímač HC-06 nebo HC-05 dle výše uvedeného schématu. Stáhněte si aplikaci „Color Led Controller“, nainstalujte a spárujte se svým Bluetooth přijímačem. Zkopírujte si kód pod videem, vložte do Arduino IDE a nahrajte. Pozor na správné zapojení RX a TX pinů. Je to tak že TX z BT jde na RX Arduina a naopak RX z BT jde na TX Arduina. A tady je výsledek. Teď si můžete nastavit barvy podle svých představ.

Kód pro Arduino programování

#include <Adafruit_NeoPixel.h> // naimportování knihoven
#ifdef __AVR__
#include <avr/power.h>
#endif
#define PIN 6
#include <SoftwareSerial.h>            // softwareserial knihovna
                                        // (počet diod, DIN pin, pořadí barev, kmitočet)
Adafruit_NeoPixel strip = Adafruit_NeoPixel(16, PIN, NEO_GRB + NEO_KHZ800);
SoftwareSerial BT(2,3);  // port softwareserial na pinech (2RX 3TX)
String RGB = ""; //řetězec příjímající data z Bluetooth 
String RGB_Previous = "255.255.255)"; //řetězec předposledních dat z BT
String ON = "ON"; // zapni  
String OFF = "OFF"; //vypni
boolean RGB_Completed = false;// ověření přijímaných dat
#define PIN            6 // DIN pin
int svetlost=100;     // světlost pásku 0-255;
void setup() {
#if defined (__AVR_ATtiny85__)
if (F_CPU == 16000000) clock_prescale_set(clock_div_1);
#endif
strip.begin(); // start pásku
strip.setBrightness(svetlost);
  BT.begin(9600);  // start portu pro BT na 9600
  RGB.reserve(30);
 Serial.begin(9600); // start sériového portu na 9600
}
void loop() {
  while(BT.available()){   //pokud je BT přijal data
    char ReadChar = (char)BT.read();   // uloží se do ReadChar
    if(ReadChar == ')'){ // když řetězec obsahuje ")"
      RGB_Completed = true; // byl přenos dat uspěšný
    }else{                  // pokud ne načte se zpět poslední hodnota  
       RGB += ReadChar;
    }
  }
  if(RGB_Completed){              //vypíše hodnotu RGB
      Serial.print("RGB:");
      Serial.print(RGB);
      Serial.print("     PreRGB:");
      Serial.println(RGB_Previous);
  if(RGB==ON){                          // zapni
          digitalWrite(13,HIGH);
          RGB = RGB_Previous;
          Light_RGB_LED();          
      }else if(RGB==OFF){                 //vypni
          digitalWrite(13,LOW);
          RGB = "0.0.0)";
          Light_RGB_LED();
      }else{
          Light_RGB_LED();   
          RGB_Previous = RGB;     
      }
      RGB = "";           // reset proměnné pro příjem dat
      RGB_Completed = false;    
  }     
  }  //konec loopu
void Light_RGB_LED(){         // dekódování přijatých dat
 if(RGB.length()>4 && RGB.length()<11) // omezení čtení v rozsahu min a max délky správně načtených dat
 {
  RGB_Previous=RGB;
  int SP1 = RGB.indexOf('.');          //uložení délky indexu pro hodnotu
  int SP2 = RGB.indexOf('.', SP1+1);               //(SP1).(SP2).(SP3)  
  int SP3 = RGB.indexOf('.', SP2+1);   // když je RGB 255.  45 . 3  tak SP1=3 SP2=2 a SP3=1
  String R = RGB.substring(0, SP1);          // převedení na jednotlivé hodnoty RGB
  String G = RGB.substring(SP1+1, SP2);      
  String B = RGB.substring(SP2+1, SP3);
  Serial.print("R=");                // vypíše samostatné hodnoty v  RGB
  Serial.println( constrain(R.toInt(),0,255));
  Serial.print("G=");
  Serial.println(constrain(G.toInt(),0,255));
  Serial.print("B=");
  Serial.println( constrain(B.toInt(),0,255));
 for(int i=0;i<16;i++)              // for cyklus pro poslání dat do pásku 
 {                                    // máme 16 diod takže i=16
strip.setPixelColor(i,R.toInt(),G.toInt(),B.toInt());
 }
strip.show();// inicializace pásku po které začne svítit
 }
}

A to je z dnešního hraní s NeoPixel LED pásky vše. Doufám, že se vám podařilo uvedené příklady zrealizovat a už blikáte. Pokud ne, pište do komentářů a podíváme se na to.


Arduino plotter z pravítek

$
0
0

Pravítka se dají využít všelijak, ale jako součást CNC plotteru jste je pravděpodobně ještě neviděli. Kutil s přezdívkou lingib se rozhodl, že pravítka využije jako ramena jeho nového plotteru. Mozkem plotteru je Arduino UNO, které pomocí modulů EasyDriver ovládá krokové motory NEMA 17, které pohybují rameny.

Otáčením motorů dochází k rozevírání a svírání pravítek, čímž v konečném důsledku dochází i k pohybu pera. Aby pero nekreslilo neustále, je na konci ramen umístěný servomotor, který nadzvednutím pravítek oddálí pero od papíru.

Arduino plotter ze starých pravítek

Komponenty

Pokud se chcete o projektu dozvědět více, podívejte se na server Instructables. Tam najdete také zdrojový kód a pár geometrických rovnic, které slouží k řízení plotteru.

Přeloženo z https://blog.arduino.cc/2017/06/21/arduino-uno-driven-plotter-uses-rulers-for-arms/ a mírně upraveno.

Jak se programuje na psacím stroji?

$
0
0

Mechanické psací stroje jsou pro většinu z nás pouhým výjevem z minulosti. Velký zdvih kláves a schopnost psát rovnou na papír jsou sice zajímavé vlastnosti, stroje ale postrádají jednu celkem důležitou schopnost – není jejich prostřednictvím možné zadávat text to počítače. Konstantin Schauwecker se rozhodl, že jeden takový starý stroj – německý kousek Olympia Monica – použije jako vstupní zařízení pro jeho počítač.

Pro tento účel sestavil plošný spoj s fototranzistory, které snímají, když dojde ke stisku kláves. Stisknuté klávesy odesílá pomocí desky Arduino Leonardo, které se umí vydávat za klávesnici, do počítače. Kromě zmíněných komponent jsou v projektu použité také multiplexory a dekodéry, které umožňují k Arduinu připojit tak velký počet fototranzistorů.

Více informací se dočtete na webu autora.

Přeloženo z https://blog.arduino.cc/2017/07/05/hack-an-old-typewriter-with-arduino-for-digital-input/ a mírně upraveno.

DIY Arduino exoskeleton

$
0
0

Exoskeletony mohou najít různá uplatnění. Buďto ke zvětšení síly člověka, nebo například jako náhrada ochrnutých svalů. Jejich tvorba zatím byla hlavně na velkých společnostech a různých laboratořích. Kristijan Berce se ale rozhodl, že si s exoskeletony také užije trochu legrace. Sestrojil zařízení, které zesiluje sílu paže.

Zařízení, které autor nazval ExoArm, je poháněné deskou Arduino UNO. To pomocí senzorů snímá pohyby paže a ovládá motory.

Na videu níže vidíte, jak s pomocí ExoArm zvedá jeho kolo. Vypadá to snadně, ale zařízení má stále své mouchy. Autor například právě pracuje na software, který by mu umožnil lépe vyvažovat zvedané předměty.

Ptáte se, kolik takováto hračka stojí? Celkem vyjde asi na 100 dolarů. Návod na stavbu naleznete zde.

Přeloženo z https://blog.arduino.cc/2017/07/06/exoarm-an-arduino-powered-assistive-exoskeleton-arm/ a mírně upraveno.

DIY Arduino scanner

$
0
0

Barevné senzory, jako je například TCS34725 jste možná viděli. Někteří je třeba i využili v projektu, ve kterém snímali barvu jednoho pixelu. Ještě zajímavější by ale bylo tento senzor vzít a kontrolovaným způsobem s ním pohybovat do stran a scanovat tak přesně barvu podkladu. Na tomto principu funguje i projekt jednopixelového scanneru.

Kerry D. Wong využil starý plotter HP 7044A, ve kterém na místo kreslicího pera připevnil právě senzor TCS34725. Plotter senzorem pohybuje ve dvou osách a vytváří tak obrázek o rozlišení 128 x 128 pixelů. O zpracování dat se stará deska Arduino DUE, která naměřené hodnoty odesílá do počítače, kde dochází ke skládání obrazu.

Více o projektu (včetně zdrojového kódu) naleznete na blogu autora.

Přeloženo z https://blog.arduino.cc/2017/07/12/building-an-arduino-controlled-single-pixel-scanner/ a mírně upraveno.

TinyLab: Piezo bzučák

$
0
0

V dalším dílu seriálu věnovaného desce TinyLab si ukážeme, jak se dá využít Piezzo bzučák dostupný na desce.

Co je piezo bzučák

Označení „piezo“ nesou různé součástky, které pro svoji činnost využívají piezzoelektrický jev. O něm Wikipedie uvádí:

Piezoelektrický jev (z řeckého piezein (πιέζειν) – tlačit) je schopnost krystalu generovat elektrické napětí při jeho deformování.

Tedy, že některé krystaly mají speciální vlastnost, že když je zmáčkneme, generují elektrické napětí. Toho se využívá například v zapalovačích, kdy krystal generuje elektrickou jiskru. Piezo články nalezneme také v některých snímačích v kytarách.

Tento jev ale funguje i opačně. V tomto případě se nazývá nepřímý piezoelektrický jev. Přivedeme-li na krystal napětí, dochází k jeho deformaci.  A toho se využívá právě v piezo bzučácích. Přivedením měnícího se napětí na  krystal dochází k jeho střídavému smršťování a rozpínání. Krystal svým pohybem rozpohybovává i okolní částice a vzniká tak zvuková vlna, kterou slyšíme.

Z našeho pohledu to znamená, že musíme pin, ke kterému je bzučák připojen rychle vypínat a zapínat.

Zvuk

Zvuk se prostředím šíří jako kmitání částic. Bzučák svým pohybem částice rozpohybovává, tento pohyb se postupně šíří prostředím, až narazí na bubínek našeho ucha, který je tímto pohybem rozkmitán. A my tyto kmity vnímáme jako zvuk.

U zvuku rozlišujeme několik vlastností. Jsou to například barva, amplituda (hlasitost), frekvence (výška tónu) a další. U piezzo bzučáku na naší desce jsme schopni ovlivnit pouze frekvenci.

Frekvence

Frekvence říká, kolikrát za sekundu dojde ke kmitnutí částic. V našem případě tedy kolikrát za sekundu bzučák zapneme a vypneme.

Jednotkou frekvence je Hz (hertz). Pokud má tón frekvenci 50Hz, znamená to, že se krystal v bzučáku 50x za sekundu roztáhne a smrští.

Právě frekvence od sebe odlišuje různé tóny. Například pro komorní A je stanovena frekvence 440Hz. Tabulku tónů a jejich frekvencí nalezneme například zde.

Generování zvuku na Arduinu

Našim cílem bude přehrát na bzučáku komorní A, tedy tón s frekvencí 440Hz. Prvně musíme zjistit, jak rychle musíme bzučák zapínat a vypínat. Víme, že k zapnutí a vypnutí musí dojít 440x za sekundu. Bzučák stráví v zapnutém a vypnutém stavu vždy stejnou dobu. Dobu mezi jednotlivými zapnutími nazýváme perioda. Tu vypočítáme pomocí následujícího vzorce:

perioda = 1 / frekvence

Nebo také zapsáno fyzikálně:

T = 1 / f

Víme tedy, že v našem případě bude jedna perioda mít přibližně délku

1 / 440  = 0,002272 sekundy = 2272 mikrosekund

Kód bude vypadat tak, že bzučák zapneme, počkáme polovinu periody, bzučák vypneme a počkáme další polovinu periody. A tak pořád dokola.

Velice jednoduchý kód pro generování komorního A by mohl vypadat takto:

#define BZUCAK A1

unsigned int pulPeriody = 1134;

void setup() {
  pinMode(BZUCAK, OUTPUT);
}

void loop() {
  digitalWrite(BZUCAK, HIGH);
  delayMicroseconds(pulPeriody);
  digitalWrite(BZUCAK, LOW);
  delayMicroseconds(pulPeriody);
}

Na TinyLabu je bzučák připojený k pinu A1 (analogový pin 1), takže nesmíme zapomenout zapnout vypínač u tohoto pinu (označený číslem 5).

Popřípadě pokud chceme periodu dopočítávat až v kódu, bude vypadat takto:

#define BZUCAK A1

unsigned int frekvence = 440;
unsigned int perioda = 1000000 / frekvence;    // není v sekundách, ale mikrosekundách, proto 1000000 místo 1

unsigned int pulPeriody = perioda / 2;

void setup() {
  pinMode(BZUCAK, OUTPUT);
}

void loop() {
  digitalWrite(BZUCAK, HIGH);
  delayMicroseconds(pulPeriody);
  digitalWrite(BZUCAK, LOW);
  delayMicroseconds(pulPeriody);
}

Arduino funkce tone

Zapínání a vypínání pinu ručně, jak jsme si předvedli v předchozím příkladu má jednu nevýhodu. Pokud do funkce loop něco přidáme, dojde k jejímu zdržení, perioda se protáhne a místo tónu A máme jiný tón, popřípadě podivný šum.

Naštěstí existuje funkce tone, která za nás generování tónu obstará. Navíc je vytvořena „chytřeji“, než jsme si předvedli, takže ji dlouhotrvající kód v loop nerozhodí.

Funkci tone můžeme použít dvěma způsoby:

  • tone(pin, frekvence)
    • hraje tón na pinu o dané frekvenci, dokud jej funkcí noTone(pin) nevypneme
  • tone(pin, frekvence, trvání)
    • Pokud funkci zadáme ještě délku přehrávání tónu (v milisekundách), dojde vypnutí přehrávání tónu po uplynulé době.

Ukažme si tedy použití v obou případech.

#define BZUCAK A1

void setup() {
  tone(BZUCAK, 440);
  delay(1000);
  noTone(BZUCAK);
}

void loop() {}

A bez delay:

#define BZUCAK A1

void setup() {
  tone(BZUCAK, 440, 1000);
}

void loop() {}

Přehrávání melodie

V příkladu na závěr si ukážeme, jak se dá přehrát jednoduchá melodie. Abychom si usnadnili situaci, přidáme si k projektu soubor s definicemi tónů a jejich frekvencí.

V Arduino IDE klikneme na šipku dolů v pravé horní části. A zvolíme možnost Add new tab. Vytvoří se nám nová záložka v IDE, kterou nazveme pitches.h a vložíme do ní následující kód:

#define NOTE_B0  31
#define NOTE_C1  33
#define NOTE_CS1 35
#define NOTE_D1  37
#define NOTE_DS1 39
#define NOTE_E1  41
#define NOTE_F1  44
#define NOTE_FS1 46
#define NOTE_G1  49
#define NOTE_GS1 52
#define NOTE_A1  55
#define NOTE_AS1 58
#define NOTE_B1  62
#define NOTE_C2  65
#define NOTE_CS2 69
#define NOTE_D2  73
#define NOTE_DS2 78
#define NOTE_E2  82
#define NOTE_F2  87
#define NOTE_FS2 93
#define NOTE_G2  98
#define NOTE_GS2 104
#define NOTE_A2  110
#define NOTE_AS2 117
#define NOTE_B2  123
#define NOTE_C3  131
#define NOTE_CS3 139
#define NOTE_D3  147
#define NOTE_DS3 156
#define NOTE_E3  165
#define NOTE_F3  175
#define NOTE_FS3 185
#define NOTE_G3  196
#define NOTE_GS3 208
#define NOTE_A3  220
#define NOTE_AS3 233
#define NOTE_B3  247
#define NOTE_C4  262
#define NOTE_CS4 277
#define NOTE_D4  294
#define NOTE_DS4 311
#define NOTE_E4  330
#define NOTE_F4  349
#define NOTE_FS4 370
#define NOTE_G4  392
#define NOTE_GS4 415
#define NOTE_A4  440
#define NOTE_AS4 466
#define NOTE_B4  494
#define NOTE_C5  523
#define NOTE_CS5 554
#define NOTE_D5  587
#define NOTE_DS5 622
#define NOTE_E5  659
#define NOTE_F5  698
#define NOTE_FS5 740
#define NOTE_G5  784
#define NOTE_GS5 831
#define NOTE_A5  880
#define NOTE_AS5 932
#define NOTE_B5  988
#define NOTE_C6  1047
#define NOTE_CS6 1109
#define NOTE_D6  1175
#define NOTE_DS6 1245
#define NOTE_E6  1319
#define NOTE_F6  1397
#define NOTE_FS6 1480
#define NOTE_G6  1568
#define NOTE_GS6 1661
#define NOTE_A6  1760
#define NOTE_AS6 1865
#define NOTE_B6  1976
#define NOTE_C7  2093
#define NOTE_CS7 2217
#define NOTE_D7  2349
#define NOTE_DS7 2489
#define NOTE_E7  2637
#define NOTE_F7  2794
#define NOTE_FS7 2960
#define NOTE_G7  3136
#define NOTE_GS7 3322
#define NOTE_A7  3520
#define NOTE_AS7 3729
#define NOTE_B7  3951
#define NOTE_C8  4186
#define NOTE_CS8 4435
#define NOTE_D8  4699
#define NOTE_DS8 4978

Tyto konstanty potom můžeme použít v našem programu tak, že na jeho začátek přidáme řádek #include „pitches.h“. Ukážeme si, jak přehrát stupnici. Úpravou programu ale bude možné zahrát libovolnou stupnici.

#include "pitches.h"
#define BZUCAK A1

unsigned int stupnice[] = {NOTE_C4, NOTE_D4, NOTE_E4, NOTE_F4, NOTE_G4, NOTE_A4, NOTE_B4, NOTE_C5};

void setup() {
  for(int i = 0; i < 8; i++){
    tone(BZUCAK, stupnice[i]);
    delay(1000);
  }
  
  noTone(BZUCAK);  
}

void loop() {}

Úprav se nabízí celá řada. Třeba umožnit různou délku tónu a další. Hodně zajímavý je třeba Imperial March na bzučák:

Vytvořili jste vlastní kód? Pochlubte se v komentářích, nebo na našem fóru arduino-forum.cz.

Viewing all 537 articles
Browse latest View live


Latest Images

<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>