<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="sk">
	<id>https://3dliga.robotika.sk/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Admin</id>
	<title>3D liga wiki - Príspevky používateľa [sk]</title>
	<link rel="self" type="application/atom+xml" href="https://3dliga.robotika.sk/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Admin"/>
	<link rel="alternate" type="text/html" href="https://3dliga.robotika.sk/wiki/index.php/%C5%A0peci%C3%A1lne:Pr%C3%ADspevky/Admin"/>
	<updated>2026-08-04T22:00:20Z</updated>
	<subtitle>Príspevky používateľa</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>https://3dliga.robotika.sk/wiki/index.php?title=3D_liga_wiki&amp;diff=226</id>
		<title>3D liga wiki</title>
		<link rel="alternate" type="text/html" href="https://3dliga.robotika.sk/wiki/index.php?title=3D_liga_wiki&amp;diff=226"/>
		<updated>2026-06-21T08:51:35Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Vitajte na wiki stránkach Robotickej 3D Ligy!&lt;br /&gt;
&lt;br /&gt;
Nájdete tu informácie o práci so stavebnicou v prvom kole súťaže [https://3dliga.robotika.sk 3D Robotická liga].&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://3dliga.robotika.sk/wiki/index.php?title=3D_liga_wiki&amp;diff=225</id>
		<title>3D liga wiki</title>
		<link rel="alternate" type="text/html" href="https://3dliga.robotika.sk/wiki/index.php?title=3D_liga_wiki&amp;diff=225"/>
		<updated>2026-06-21T08:51:15Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Vitajte na wiki stránkach Robotickej 3D Ligy!&lt;br /&gt;
&lt;br /&gt;
Nájdete tu informácie o práci so stavebnicou v prvom kole súťaže [https://3dliga.robotika.sk 3D Robotická liga]].&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://3dliga.robotika.sk/wiki/index.php?title=Prv%C3%A9_kolo&amp;diff=221</id>
		<title>Prvé kolo</title>
		<link rel="alternate" type="text/html" href="https://3dliga.robotika.sk/wiki/index.php?title=Prv%C3%A9_kolo&amp;diff=221"/>
		<updated>2026-05-21T15:43:44Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
=== Vitajte v prvom kole 3D ligy! ===&lt;br /&gt;
&lt;br /&gt;
V tomto kole sa zoznámite so súčiastkami, programovacím prostredím a samotnou konštrukciou stavebnice. &lt;br /&gt;
Zvládnutie základov je kľúčové – bez nich by sme nedokázali stavať zložitejšie a zaujímavejšie roboty. &lt;br /&gt;
Komplexnejším projektom sa budeme venovať v 2. kole.&lt;br /&gt;
&lt;br /&gt;
==== Pravidlá kola ====&lt;br /&gt;
&lt;br /&gt;
* Počas kola budete dostávať jednoduché zadania, ktoré budete musieť zdokumentovať (odfotiť alebo natočiť) a odovzdať na mail &amp;lt;code&amp;gt;insert mail&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Každý tím má k dispozícii určitý počet bodov, ktoré môže využiť na nápovedy.&lt;br /&gt;
* Nápovedy môžu mať formu priameho kódu alebo vás nasmerujú správnym smerom.&lt;br /&gt;
* Hodnotiť sa bude: &amp;lt;code&amp;gt;insert conditions&amp;lt;/code&amp;gt;&lt;br /&gt;
* Za každú použitú nápovedu sa príslušný počet bodov odpočíta. Na konci kola sa prihliada aj na celkový zostatok bodov.&lt;br /&gt;
* Pociťujeme nárast umelej inteligencie, preto vás prosíme aby ste používali rozumne umelú inteligenciu. Tolerujeme vyhladávanie alebo opravovanie pravopisu pomocou AI (ako nástroj). Ak ale použijete AI na vygenerovanie riešenia, vypomáhanie alebo len nájdenie riešenia, tak prosíme aby ste napísali, že ste využili takúto službu. Budeme na to brať ohľad. Zakázať vám to používať nemôžeme, len sa snažíme dovŕšiť to aby ste na riešenie prišli sami a naučili sa niečo nové a zábavné.&lt;br /&gt;
&lt;br /&gt;
== Arduino IDE ==&lt;br /&gt;
&lt;br /&gt;
Na programovanie stavebnice 3D Ligy budeme používať vývojové prostredie &#039;&#039;&#039;Arduino IDE 2&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Stiahnuť ho môžete na oficiálnej [https://www.arduino.cc/en/software/ stránke Arduina]. &lt;br /&gt;
Vyberte verziu zodpovedajúcu vášmu operačnému systému (Windows, macOS alebo Linux).&lt;br /&gt;
&lt;br /&gt;
[[Image:Arduino Download.png|400px]]&lt;br /&gt;
&lt;br /&gt;
=== Mikrokontrolér ===&lt;br /&gt;
&lt;br /&gt;
Ako riadiaci čip stavebnice používame &#039;&#039;&#039;Waveshare RP2350-Zero&#039;&#039;&#039;. &lt;br /&gt;
Aby s ním Arduino IDE vedelo komunikovať, je potrebné doinštalovať príslušnú knižnicu (board package).&lt;br /&gt;
&lt;br /&gt;
Mikrokontrolér RP2350-Zero je &amp;quot;mozog&amp;quot; celej stavebnice. Obsahuje procesor, pamäť a GPIO piny cez ktoré komunikuje so všetkými komponentmi – senzormi, motorčekmi aj LED diódami. Napájanie komponentov je 3.3V.&lt;br /&gt;
&lt;br /&gt;
[[Image:RP2040-Zero-Pinout.jpg|400px]]&lt;br /&gt;
[[Image:RP2040-Zero-Board.jpg|400px]]&lt;br /&gt;
&lt;br /&gt;
=== Inštalácia knižnice ===&lt;br /&gt;
&lt;br /&gt;
# Otvorte Arduino IDE a prejdite do &#039;&#039;&#039;File → Preferences&#039;&#039;&#039;.&lt;br /&gt;
# Do poľa &amp;quot;&#039;&#039;&#039;Additional boards manager URLs&#039;&#039;&#039;&amp;quot; pridajte nasledujúci odkaz:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;https://github.com/earlephilhower/arduino-pico/releases/download/4.5.2/package_rp2040_index.json&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
# Potvrďte tlačidlom OK.&lt;br /&gt;
# Otvorte &#039;&#039;&#039;Tools → Board → Boards Manager&#039;&#039;&#039; a vyhľadajte &#039;&#039;&#039;&amp;quot;Raspberry Pi Pico/RP2040&amp;quot;&#039;&#039;&#039; (obsahuje aj &#039;&#039;&#039;RP2350&#039;&#039;&#039;).&lt;br /&gt;
# Nainštalujte knižnicu od autora &#039;&#039;&#039;Earle F. Philhower, III&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[[Image:Pico Get Start 06.png|300px]]&lt;br /&gt;
&lt;br /&gt;
=== Výber dosky a portu ===&lt;br /&gt;
&lt;br /&gt;
Po inštalácii knižnice je nutné zvoliť správnu dosku a port – bez toho počítač nerozpozná pripojený mikrokontrolér.&lt;br /&gt;
&lt;br /&gt;
# V menu &#039;&#039;&#039;Tools → Board&#039;&#039;&#039; vyhľadajte a vyberte &#039;&#039;&#039;&amp;quot;Raspberry Pi Pico&amp;quot;&#039;&#039;&#039;.&lt;br /&gt;
# Pripojte mikrokontrolér k počítaču pomocou USB kábla.&lt;br /&gt;
# V menu &#039;&#039;&#039;Tools → Port&#039;&#039;&#039; vyberte port, na ktorom sa zariadenie objavilo (napr. &amp;lt;code&amp;gt;COM3&amp;lt;/code&amp;gt; na Windows alebo &amp;lt;code&amp;gt;/dev/ttyACM0&amp;lt;/code&amp;gt; na Linuxe).&lt;br /&gt;
&lt;br /&gt;
Mikrokontrolér očakáva program vo formáte &#039;&#039;&#039;.uf2&#039;&#039;&#039;. Existujú dva spôsoby, ako ho získať:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Priamo z Arduino IDE:&#039;&#039;&#039; Použite &#039;&#039;&#039;Sketch → Export Compiled Binary&#039;&#039;&#039; (alebo skratku &amp;lt;code&amp;gt;Ctrl+Alt+S&amp;lt;/code&amp;gt;). Arduino IDE skompiluje kód a uloží súbor &amp;lt;code&amp;gt;.uf2&amp;lt;/code&amp;gt; do priečinka projektu.&lt;br /&gt;
* &#039;&#039;&#039;Drag &amp;amp; drop:&#039;&#039;&#039; Skompilovaný súbor &amp;lt;code&amp;gt;.uf2&amp;lt;/code&amp;gt; jednoducho presuňte myšou na jednotku RP2350. Po nahratí sa mikrokontrolér automaticky reštartuje a program sa spustí.&lt;br /&gt;
&lt;br /&gt;
Pre vizualizáciu tu je [https://www.youtube.com/watch?v=Vx-Y7pCRSJY Youtune video] (fyzický postup je rovnaký pre RP2040 a RP2350)&lt;br /&gt;
&lt;br /&gt;
=== Prvé pripojenie – režim BOOTSEL ===&lt;br /&gt;
&lt;br /&gt;
Pri úplne prvom nahrávaní, alebo keď mikrokontrolér neodpovedá, je potrebné ho prepnúť do režimu BOOTSEL:&lt;br /&gt;
&lt;br /&gt;
# Stlačte a &#039;&#039;&#039;podržte tlačidlo BOOT&#039;&#039;&#039; na doske RP2350-Zero.&lt;br /&gt;
# Počas držania tlačidla &#039;&#039;&#039;zapojte USB kábel&#039;&#039;&#039; do počítača.&lt;br /&gt;
# Tlačidlo &#039;&#039;&#039;uvoľnite&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Na počítači sa objaví nová jednotka (ako USB flash disk) s názvom &#039;&#039;&#039;RP2350&#039;&#039;&#039; alebo &#039;&#039;&#039;RPI-RP2&#039;&#039;&#039;. &lt;br /&gt;
Do tejto jednotky môžete priamo pretiahnuť (drag &amp;amp; drop) súbor s programom.&lt;br /&gt;
&lt;br /&gt;
=== Ďalsie nahrávanie ===&lt;br /&gt;
&lt;br /&gt;
Ďalšie nahrávania programov budú prirodzenejšie.&lt;br /&gt;
&lt;br /&gt;
* Zapojí sa doska do počítača.&lt;br /&gt;
* Vyberie sa doska (&#039;&#039;&#039;Raspberry Pi Pico 2&#039;&#039;&#039;) a port.&lt;br /&gt;
* Ak sa port našiel, potvrďte talčidlom &#039;&#039;&#039;OK&#039;&#039;&#039;&lt;br /&gt;
* Váš kód nahrajete cez tlačidlo &#039;&#039;&#039;-&amp;gt;&#039;&#039;&#039; v ľavom hornom rohu. (skratka: &#039;&#039;&#039;Ctrl+U&#039;&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
[[Image:RP2350 port.png|300px]]&lt;br /&gt;
&lt;br /&gt;
=== Hello World! ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;background:#CCFFCC&amp;quot;&amp;gt;&#039;&#039;&#039;Vyskúšaj toto:&#039;&#039;&#039;&amp;lt;/span&amp;gt; Test sériovej komunikácie. Skopíruj a spusti nasledujúci program. Sleduj sériový monitor. Uisti sa, že máš v okne sériového monitora zvolených 9600 baudov. Pred začatím odporúčame prezrieť si [[Základy programovania | prehľad premenných a operátorov]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin(9600);&lt;br /&gt;
}&lt;br /&gt;
int i = 0;&lt;br /&gt;
void loop() {&lt;br /&gt;
  Serial.print(&amp;quot;Ahoj &amp;quot;);&lt;br /&gt;
  Serial.println(i++);&lt;br /&gt;
  delay(1000);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;background:#FFFFA0&amp;quot;&amp;gt;&#039;&#039;&#039;VAŠA ÚLOHA:&#039;&#039;&#039;&amp;lt;/span&amp;gt; Uprav program tak, aby po dosiahnutí čísla 100 začal počítať v opačnom poradí – až do 0, a potom znova do 100, atď. Použi operátor dekrementovania (&#039;&#039;i--&#039;&#039;) a podmienku &#039;&#039;if&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
if (podmienka)&lt;br /&gt;
{&lt;br /&gt;
    príkazy, ktoré sa vykonajú keď je podmienka splnená&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Všimni si, ako je v kóde vyššie definovaná premenná &amp;lt;i&amp;gt;i&amp;lt;/i&amp;gt; typu &amp;lt;i&amp;gt;int&amp;lt;/i&amp;gt;. Možno budeš chcieť definovať ďalšiu premennú.&lt;br /&gt;
&lt;br /&gt;
Čo sme sa naučili?&lt;br /&gt;
* Využívať sériový výstup na výpis informácií do sériového monitora, čo je veľmi užitočné pri ladení (debugovaní) programov.&lt;br /&gt;
&lt;br /&gt;
== Vytlačená stavebnica ==&lt;br /&gt;
&lt;br /&gt;
Súčasťou vašej sady je aj 3D tlačená stavebnica – podobne ako Merkur, skladá sa z rôznych dielikov, ktoré sa dajú spájať skrutkami M3 do ľubovoľných tvarov a konštrukcií.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; Prehľad dielikov &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Farba !! Typ dielikov !! Popis&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background:#e8e8e8; padding:2px 8px;&amp;quot;&amp;gt;&#039;&#039;&#039;Biela&#039;&#039;&#039;&amp;lt;/span&amp;gt; || Základné stavebné prvky || Nosné diely s dierami pre skrutky M3 (8mm od seba) vo veľkostiach 1×N dier, ohnuté spoje (90° vertikálne aj horizontálne)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background:#ffd401; padding:2px 8px;&amp;quot;&amp;gt;&#039;&#039;&#039;Žltá&#039;&#039;&#039;&amp;lt;/span&amp;gt; || Základné doskly || Ploché dosky s dierami pre skrutky M3 (8mm od seba) vo veľkostiach 3×N a 4×N dier. &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background:#ffcccc; padding:2px 8px;&amp;quot;&amp;gt;&#039;&#039;&#039;Červená&#039;&#039;&#039;&amp;lt;/span&amp;gt; || Moduly pre senzory a joystick a držiaky na káble || Držiaky elektronických komponentov – napájajú sa priamo na biele časti&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background:#cccccc; padding:2px 8px;&amp;quot;&amp;gt;&#039;&#039;&#039;Čierna&#039;&#039;&#039;&amp;lt;/span&amp;gt; || Elektronické krabičky a ohnuté dosky || Krabička pre napájanie (batérie), modul pre mikrokontrolér RP2350-Zero a ohnuté dosky M×N dier v tvare &#039;&#039;&#039;U&#039;&#039;&#039; s odierkovanými bočnými hranami na skrutky M3 (8mm od seba).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;span style=&amp;quot;background:#cce0ff; padding:2px 8px;&amp;quot;&amp;gt;&#039;&#039;&#039;Modrá&#039;&#039;&#039;&amp;lt;/span&amp;gt; || Moduly a ramienka pre servo motorčeky || Niektoré majú diery pre M3 matice, ktoré spolu so skrutkou spájajú modul s bielimi/žltími/čiernymi súčiastkami.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; Inšpirácia &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Pozri si tieto dva modely a nechaj sa inšpirovať – čo všetko sa dá z dielikov poskladať:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
| [[Image:Model1.png|300px]] || [[Image:Model2.png|300px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
A tu je príklad toho, čo dokázali poskladať iní účastníci – srdce len zo základných dielikov:&lt;br /&gt;
&lt;br /&gt;
[[Image:srdce.jpg|300px]]&lt;br /&gt;
&lt;br /&gt;
[[Gallery | Galéria súčiastok a ich zapojenie]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; Zadanie &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;background:#FFFFA0&amp;quot;&amp;gt;&#039;&#039;&#039;VAŠA ÚLOHA:&#039;&#039;&#039;&amp;lt;/span&amp;gt; Poskladajte si z dielikov čokoľvek, čo vás napadne. Nemusí to byť funkčný robot – pokojne to môže byť zviera, písmeno, stavba alebo čokoľvek iné. Použite svoju fantáziu!&lt;br /&gt;
&lt;br /&gt;
Hotovú konštrukciu &#039;&#039;&#039;odfotografujte&#039;&#039;&#039; a foto odošlite na &amp;lt;code&amp;gt;insert mail&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Čo sme sa naučili?&lt;br /&gt;
* Spoznali sme jednotlivé typy dielikov stavebnice a ich farebné označenie.&lt;br /&gt;
* Vyskúšali sme si, ako sa dieliky spájajú pomocou skrutiek M3.&lt;br /&gt;
* Zistili sme, že zo stavebnice sa dá poskladať prakticky čokoľvek – od robotov až po dekorácie.&lt;br /&gt;
&lt;br /&gt;
== Prva stavebnica ==&lt;br /&gt;
&lt;br /&gt;
V prvej stavebnici sa zoznámite so základnými elektronickými modulmi. Niektoré z nich sa vám budú hodiť pri ladení zložitejších robotov – napríklad LED vám vie ukázať v akom stave sa robot nachádza, bzučiak vás upozorní keď sa niečo stane. Iné moduly sú dôležité pre pochopenie základov, na ktorých budeme neskôr stavať.&lt;br /&gt;
&lt;br /&gt;
Budeme sa zaoberať:&lt;br /&gt;
* &#039;&#039;&#039;RGB LED&#039;&#039;&#039; – farebná dióda na vizuálnu signalizáciu&lt;br /&gt;
* &#039;&#039;&#039;Bzučiak&#039;&#039;&#039; – jednoduchý reproduktor na zvukovú signalizáciu&lt;br /&gt;
* &#039;&#039;&#039;Mikrofón&#039;&#039;&#039; – zachytávanie zvuku z okolia&lt;br /&gt;
* &#039;&#039;&#039;Ultrazvukový senzor&#039;&#039;&#039; – meranie vzdialenosti&lt;br /&gt;
* &#039;&#039;&#039;Servo motorček&#039;&#039;&#039; – presné ovládanie pohybu&lt;br /&gt;
&lt;br /&gt;
Na konci prvej stavebnice poskladáte autíčko ktoré sa samo vyhýba prekážkam – prvého autonómneho robota!&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== RGB LED modul ===&lt;br /&gt;
&lt;br /&gt;
RGB LED je súčiastka, ktorá dokáže svietiť v ľubovoľnej farbe – kombinuje totiž tri farebné diódy v jednom puzdre: &amp;lt;span style=&amp;quot;color:#cc0000&amp;quot;&amp;gt;&#039;&#039;&#039;červenú (R)&#039;&#039;&#039;&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;color:#007700&amp;quot;&amp;gt;&#039;&#039;&#039;zelenú (G)&#039;&#039;&#039;&amp;lt;/span&amp;gt; a &amp;lt;span style=&amp;quot;color:#0000cc&amp;quot;&amp;gt;&#039;&#039;&#039;modrú (B)&#039;&#039;&#039;&amp;lt;/span&amp;gt;. Miešaním intenzity týchto troch farieb vieme dosiahnuť akýkoľvek odtieň.&lt;br /&gt;
&lt;br /&gt;
[[Image:Rgb-led-module.jpg|300px]]&lt;br /&gt;
&lt;br /&gt;
Používame modul [https://techfun.sk/produkt/led-rgb-modul/ LED RGB modul od Techfun.sk], ktorý má výhodou oproti holej LED dióde – &#039;&#039;&#039;rezistory sú už napájkované priamo na module&#039;&#039;&#039;, takže nie je potrebné zapojiť žiadne externé rezistory.&lt;br /&gt;
&lt;br /&gt;
Modul má &#039;&#039;&#039;4 piny&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Pin !! Popis !! Zapojenie v RP2350-zero&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;-&#039;&#039;&#039; || GND || GND&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;R&#039;&#039;&#039; || Červená farba || GP0&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;G&#039;&#039;&#039; || Zelená farba || GP1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;B&#039;&#039;&#039; || Modrá farba || GP2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
(Keďže modul má rezistory zabudované, zapájame ho priamo – pin &#039;&#039;&#039;&amp;quot;-&amp;quot;&#039;&#039;&#039; na GND, a piny R/G/B na GPIO piny mikrokontroléra)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; Kód &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;background:#CCFFCC&amp;quot;&amp;gt;&#039;&#039;&#039;Vyskúšaj toto:&#039;&#039;&#039;&amp;lt;/span&amp;gt; Nasledujúci program rozsvieti RGB LED na bielo a zhasne.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
// Definujeme čísla pinov&lt;br /&gt;
const int PIN_R = 0;&lt;br /&gt;
const int PIN_G = 1;&lt;br /&gt;
const int PIN_B = 2;&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  pinMode(PIN_R, OUTPUT);&lt;br /&gt;
  pinMode(PIN_G, OUTPUT);&lt;br /&gt;
  pinMode(PIN_B, OUTPUT);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  digitalWrite(PIN_R, HIGH);&lt;br /&gt;
  digitalWrite(PIN_G, HIGH);&lt;br /&gt;
  digitalWrite(PIN_B, HIGH);&lt;br /&gt;
  delay(1000);&lt;br /&gt;
&lt;br /&gt;
  digitalWrite(PIN_R, LOW);&lt;br /&gt;
  digitalWrite(PIN_G, LOW);&lt;br /&gt;
  digitalWrite(PIN_B, LOW);&lt;br /&gt;
  delay(1000);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; Princíp &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Princíp je rovnaký ako pri jednofarebnej LED – &amp;lt;code&amp;gt;HIGH&amp;lt;/code&amp;gt; = farba svieti, &amp;lt;code&amp;gt;LOW&amp;lt;/code&amp;gt; = farba nesvieti. Kombináciou troch pinov vieme získať rôzne farby:&lt;br /&gt;
&lt;br /&gt;
[[Image:RGB palete.jpg|350px]] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;background:#FFFFA0&amp;quot;&amp;gt;&#039;&#039;&#039;VAŠA ÚLOHA:&#039;&#039;&#039;&amp;lt;/span&amp;gt; Doplňte program tak, aby LED postupne prechádzala všetkými farbami z palety vyššie, vždy s pauzou 1 sekundu medzi každou farbou.&lt;br /&gt;
&lt;br /&gt;
Hotový program &#039;&#039;&#039;nahrajte do mikrokontroléra&#039;&#039;&#039;, zaznamenajte blikajúcu LED a odošlite na &amp;lt;code&amp;gt;insert mail&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Čo sme sa naučili?&lt;br /&gt;
* RGB LED modul kombinuje tri farebné diódy – miešaním HIGH/LOW vieme dosiahnuť ľubovoľnú farbu.&lt;br /&gt;
* Modul s napájkovanými rezistormi zjednodušuje zapojenie – žiadne externé súčiastky nie sú potrebné.&lt;br /&gt;
* Každý GPIO pin ovládame samostatne pomocou &amp;lt;code&amp;gt;digitalWrite()&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Bzučiak (Buzzer) ===&lt;br /&gt;
&lt;br /&gt;
Bzučiak, ktorý ste dostali, je jednoduchý reproduktor. Reproduktory vydávajú zvuk tak, že rýchlo rozkmitajú tenkú fóliu vo vnútri. Toto kmitanie stláča a rozťahuje vzduch okolo – a práve tieto tlakové vlny vnímame ako zvuk.&lt;br /&gt;
&lt;br /&gt;
Fóliu rozkmitáme malým elektromagnetom. Aby sa elektromagnet zapol, potrebuje elektrický prúd, ktorý mu dodá mikrokontrolér RP2350.&lt;br /&gt;
&lt;br /&gt;
Jeden kmit dosiahneme logickým zapnutím a následným vypnutím pinu. Zvuk je v skutočnosti niekoľko stoviek až tisíc takýchto kmitov za sekundu – čiže zapínanie a vypínanie musí prebiehať každých niekoľko &#039;&#039;&#039;mikrosekúnd&#039;&#039;&#039;. Čím rýchlejšie kmitáme, tým &#039;&#039;&#039;vyšší tón&#039;&#039;&#039; vzniká.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; Zapojenie &#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Kábel !! Pin na RP2350-Zero&lt;br /&gt;
|-&lt;br /&gt;
| Čierny || GND&lt;br /&gt;
|-&lt;br /&gt;
| Červený || GP4&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Image:buzzer.png|250px]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; Kód &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Nasledujúci program prechádza rozsahom tónov od 500 Hz do 2500 Hz. Funkcia &amp;lt;code&amp;gt;playNote()&amp;lt;/code&amp;gt; je zatiaľ prázdna – to je tvoja úloha ju doplniť!&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
const int BUZZER = 4;&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  pinMode(BUZZER, OUTPUT);&lt;br /&gt;
  Serial.begin(9600);&lt;br /&gt;
}&lt;br /&gt;
void playNote(int note)&lt;br /&gt;
{&lt;br /&gt;
  int halfPeriod = 500000 / note;&lt;br /&gt;
&lt;br /&gt;
  for (int i = 0; i &amp;lt; 10; i++) {&lt;br /&gt;
    digitalWrite(BUZZER, HIGH);   &lt;br /&gt;
    delayMicroseconds(halfPeriod); &lt;br /&gt;
    digitalWrite(BUZZER, LOW);    &lt;br /&gt;
    delayMicroseconds(halfPeriod); &lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  for (int i = 500; i &amp;lt; 2500; i++) {&lt;br /&gt;
    playNote(i);&lt;br /&gt;
    Serial.print(&amp;quot;Hrám notu: &amp;quot;);&lt;br /&gt;
    Serial.println(i);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; Princíp &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Kľúčom je funkcia &amp;lt;code&amp;gt;playNote()&amp;lt;/code&amp;gt;. Zvuk vzniká pravidelným striedaním HIGH a LOW na pine bzučiaka:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Pojem !! Vysvetlenie&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Frekvencia&#039;&#039;&#039; || Počet kmitov za sekundu, udáva sa v Hz. Vyššia frekvencia = vyšší tón.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Perióda&#039;&#039;&#039; || Čas jedného celého kmitu (zapnutie + vypnutie). Perióda = 1 000 000 / frekvencia µs.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Polovica periódy&#039;&#039;&#039; || Čas, ktorý pin strávi v stave HIGH (alebo LOW). Vypočítame ju ako 500 000 / frekvencia.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;delayMicroseconds()&amp;lt;/code&amp;gt; || Rovnaké ako &amp;lt;code&amp;gt;delay()&amp;lt;/code&amp;gt;, ale čaká v &#039;&#039;&#039;mikrosekundách&#039;&#039;&#039; namiesto milisekúnd.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Napríklad pre tón 1000 Hz:&lt;br /&gt;
* Perióda = 1 000 000 / 1000 = &#039;&#039;&#039;1000 µs&#039;&#039;&#039;&lt;br /&gt;
* Polovica periódy = &#039;&#039;&#039;500 µs&#039;&#039;&#039;&lt;br /&gt;
* Pin bude HIGH 500 µs, potom LOW 500 µs – a to 10-krát za sebou&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;background:#CCFFCC&amp;quot;&amp;gt;&#039;&#039;&#039;Vyskúšaj toto:&#039;&#039;&#039;&amp;lt;/span&amp;gt; Skopíruj kód, doplň funkciu &amp;lt;code&amp;gt;playNote()&amp;lt;/code&amp;gt; podľa vysvetlenia vyššie a nahraj ho do mikrokontroléra. Sleduj sériový monitor – vidíš ako sa mení frekvencia? Počuješ ako zvuk stúpa nahor?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;background:#FFFFA0&amp;quot;&amp;gt;&#039;&#039;&#039;VAŠA ÚLOHA:&#039;&#039;&#039;&amp;lt;/span&amp;gt; Zapojte k bzučiaku aj &#039;&#039;&#039;RGB LED&#039;&#039;&#039; (podľa zapojenia zo sekcie 3) a napíšte program, ktorý bude simulovať &#039;&#039;&#039;sanitku&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* Bzučiak bude striedavo hrať dva tóny (napr. 800 Hz a 1200 Hz) podobne ako siréna&lt;br /&gt;
* RGB LED bude blikať striedavo &#039;&#039;&#039;modrou&#039;&#039;&#039; a &#039;&#039;&#039;červenou&#039;&#039;&#039; farbou v rytme sirény&lt;br /&gt;
&lt;br /&gt;
Vzorová štruktúra programu (doplňte chýbajúce časti):&lt;br /&gt;
&lt;br /&gt;
[[Buzzer structure|Štruktúra]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--{{Note|Nápoveda: Siréna sanitky sa skladá z dvoch tónov, ktoré sa pravidelne striedajú. Každý tón trvá niekoľko stoviek kmitov – použite cyklus &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt; vo funkcii &amp;lt;code&amp;gt;loop()&amp;lt;/code&amp;gt; alebo si vytvorte vlastnú funkciu &amp;lt;code&amp;gt;playAlarm()&amp;lt;/code&amp;gt;.}}--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hotový program &#039;&#039;&#039;nahrajte do mikrokontroléra&#039;&#039;&#039;, natočte video so zvukom a odošlite na &amp;lt;code&amp;gt;insert mail&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Čo sme sa naučili?&lt;br /&gt;
* Bzučiak generuje zvuk rýchlym striedaním HIGH/LOW – čím rýchlejšie, tým vyšší tón.&lt;br /&gt;
* Funkcia &amp;lt;code&amp;gt;delayMicroseconds()&amp;lt;/code&amp;gt; umožňuje pracovať s časovými intervalmi v mikrosekundách.&lt;br /&gt;
* Kombináciou viacerých komponentov (bzučiak + LED) vieme simulovať reálne zariadenia.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Mikrofón ===&lt;br /&gt;
&lt;br /&gt;
Vieme ako zvuk generovať – teraz ho ideme aj zachytiť. Pomôže nám modul &#039;&#039;&#039;KY-038&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Mikrofón funguje presne opačne ako reproduktor. Kým reproduktor premieňa elektrický signál na kmitanie fólie (zvuk), mikrofón zachytí kmitanie vzduchu a premení ho späť na elektrický signál.&lt;br /&gt;
&lt;br /&gt;
Modul KY-038 má dva výstupy:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Výstup !! Popis&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Digitálny (D0)&#039;&#039;&#039; || Vysiela iba 0 alebo 1 – buď zvuk zachytil, alebo nie&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Analógový (A0)&#039;&#039;&#039; || Vysiela hodnotu podľa hlasitosti a frekvencie zvuku – čím hlasnejší zvuk, tým vyššia hodnota&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Citlivosť mikrofónu sa dá nastaviť &#039;&#039;&#039;otočnou skrutkou&#039;&#039;&#039; na modrej krabičke priamo na module.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; Zapojenie &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Pin modulu !! Pin na RP2350-Zero&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;VCC&#039;&#039;&#039; || 3.3V&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;GND&#039;&#039;&#039; || GND&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;D0&#039;&#039;&#039; (digitálny výstup) || GP5&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;A0&#039;&#039;&#039; (analógový výstup) || GP26 (ADC0)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Image:ky038.jpeg|350px]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Časť 1 – Čítanie hodnôt z mikrofónu ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;background:#CCFFCC&amp;quot;&amp;gt;&#039;&#039;&#039;Vyskúšaj toto:&#039;&#039;&#039;&amp;lt;/span&amp;gt; Skopíruj a spusti nasledujúci program. Otvor sériový monitor (9600 baud) a skús hovoriť, tlieskať alebo pískať pred mikrofón. Sleduj ako sa menia hodnoty.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
const int MIC_DIGITAL = 5;   // digitálny výstup D0&lt;br /&gt;
const int MIC_ANALOG  = 26;  // analógový výstup A0 (ADC)&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  pinMode(MIC_DIGITAL, INPUT);&lt;br /&gt;
  Serial.begin(9600);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  int digitalVal = digitalRead(MIC_DIGITAL);  // 0 alebo 1&lt;br /&gt;
  int analogVal  = analogRead(MIC_ANALOG);    // 0 až 4095&lt;br /&gt;
&lt;br /&gt;
  Serial.print(&amp;quot;Digitálny: &amp;quot;);&lt;br /&gt;
  Serial.print(digitalVal);&lt;br /&gt;
  Serial.print(&amp;quot;  |  Analógový: &amp;quot;);&lt;br /&gt;
  Serial.println(analogVal);&lt;br /&gt;
&lt;br /&gt;
  delay(50);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Funkcia !! Vysvetlenie&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;digitalRead(pin)&amp;lt;/code&amp;gt; || Prečíta stav pinu – vráti buď &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; (ticho) alebo &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; (zvuk zachytený)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;analogRead(pin)&amp;lt;/code&amp;gt; || Prečíta analógovú hodnotu pinu – vráti číslo od &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; do &amp;lt;code&amp;gt;4095&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;delay(50)&amp;lt;/code&amp;gt; || Čakáme 50 ms medzi meraniami – aby sériový monitor nescrolloval príliš rýchlo&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;background:#FFFFA0&amp;quot;&amp;gt;&#039;&#039;&#039;VAŠA ÚLOHA 1:&#039;&#039;&#039;&amp;lt;/span&amp;gt; Zapojte mikrofón spolu s bzučiakom a RGB LED zo sekcií 3 a 4. Napíšte program, ktorý bude fungovať ako &#039;&#039;&#039;zvukový spínač&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* Keď mikrofón zachytí hlasný zvuk (napríklad tliesknutie), program &#039;&#039;&#039;zapne&#039;&#039;&#039; sirénu a blikanie LED&lt;br /&gt;
* Keď zachytí druhé tliesknutie, program ich &#039;&#039;&#039;vypne&#039;&#039;&#039;&lt;br /&gt;
* Stav (zapnuté/vypnuté) si musí program &#039;&#039;&#039;pamätať&#039;&#039;&#039; medzi tliesknutiami&lt;br /&gt;
&lt;br /&gt;
[[Microphone structure| Štruktúra]]&lt;br /&gt;
&lt;br /&gt;
Hotový program &#039;&#039;&#039;nahrajte do mikrokontroléra&#039;&#039;&#039;, natočte video a odošlite na &amp;lt;code&amp;gt;insert mail&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Časť 2 – Mikrofón a bzučiak spolu ====&lt;br /&gt;
&lt;br /&gt;
Teraz si vyskúšame niečo zaujímavejšie – bzučiak a mikrofón zapojíme &#039;&#039;&#039;spolu&#039;&#039;&#039; a mikrofón bude počúvať čo bzučiak hrá.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Montáž:&#039;&#039;&#039; Upevnite bzučiak aj mikrofón do červených modulov stavebnice a priskrutkujte ich podľa obrázka. Snažte sa ich umiestniť &#039;&#039;&#039;oproti sebe&#039;&#039;&#039; – mikrofón by mal smerovať priamo k bzučiaku.&lt;br /&gt;
&lt;br /&gt;
[[Image:buzzer_mic_assembly.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Pre túto úlohu odpojte RGB LED a použite iba bzučiak a mikrofón. Zapojenie zostáva rovnaké ako vyššie, pin A0 mikrofónu na GP26.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;background:#CCFFCC&amp;quot;&amp;gt;&#039;&#039;&#039;Vyskúšaj toto:&#039;&#039;&#039;&amp;lt;/span&amp;gt; Nasledujúci program hrá na bzučiaku niekoľko tónov za sebou a zároveň číta analógovú hodnotu z mikrofónu. Výsledky sleduj v sériovom monitore.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
const int BUZZER     = 4;&lt;br /&gt;
const int MIC_ANALOG = 26;&lt;br /&gt;
&lt;br /&gt;
int frekvencie[] = {500, 800, 1000, 1500, 2000};&lt;br /&gt;
int pocetFrekvencii = 5;&lt;br /&gt;
long lastRead = 0;&lt;br /&gt;
&lt;br /&gt;
void playNote(int note) {&lt;br /&gt;
  // --- sem skopírujte funkciu z predchádzajúcej úlohy ---&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  pinMode(BUZZER, OUTPUT);&lt;br /&gt;
  Serial.begin(9600);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void playAndListen(int frekvencia, int trvanie) {&lt;br /&gt;
  long startTime = millis();&lt;br /&gt;
&lt;br /&gt;
  while (millis() - startTime &amp;lt; trvanie) {&lt;br /&gt;
    playNote(frekvencia);  // zahrá jeden &amp;quot;balík&amp;quot; kmitov danej frekvencie&lt;br /&gt;
    lastRead = 0;&lt;br /&gt;
    if (millis() - lastRead &amp;gt; 5) {&lt;br /&gt;
      int val = analogRead(MIC_ANALOG);&lt;br /&gt;
      Serial.print(&amp;quot;Frekvencia: &amp;quot;);&lt;br /&gt;
      Serial.print(frekvencia);&lt;br /&gt;
      Serial.print(&amp;quot; Hz  |  Mikrofón: &amp;quot;);&lt;br /&gt;
      Serial.println(val);&lt;br /&gt;
      lastRead = millis();&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  digitalWrite(BUZZER, LOW);&lt;br /&gt;
  Serial.println(&amp;quot;--- ticho ---&amp;quot;);&lt;br /&gt;
  delay(500);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  for (int i = 0; i &amp;lt; pocetFrekvencii; i++) {&lt;br /&gt;
    playAndListen(frekvencie[i], 1000);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Oproti predchádzajúcemu kódu pribúdajú nové koncepty:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Novinka !! Vysvetlenie&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;millis()&amp;lt;/code&amp;gt; || Vráti počet milisekúnd od spustenia programu. Používame ho namiesto &amp;lt;code&amp;gt;delay()&amp;lt;/code&amp;gt;, aby sme mohli zároveň hrať aj merať.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;long lastRead&amp;lt;/code&amp;gt; || Premenná s kľúčovým slovom &amp;lt;code&amp;gt;&amp;lt;/code&amp;gt; si zachováva svoju hodnotu medzi volaniami funkcie – neresetuje sa na 0 pri každom zavolaní.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;while (millis() - startTime &amp;lt; trvanie)&amp;lt;/code&amp;gt; || Cyklus beží dovtedy, kým neuplynie požadovaný čas – počas neho stihneme robiť aj kmity bzučiaka aj čítanie mikrofónu.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;int frekvencie[]&amp;lt;/code&amp;gt; || &#039;&#039;&#039;Pole&#039;&#039;&#039; – zoznam hodnôt rovnakého typu uložených za sebou. Pristupujeme k nim cez index: &amp;lt;code&amp;gt;frekvencie[0]&amp;lt;/code&amp;gt; = 500, &amp;lt;code&amp;gt;frekvencie[1]&amp;lt;/code&amp;gt; = 800, atď.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;background:#FFFFA0&amp;quot;&amp;gt;&#039;&#039;&#039;VAŠA ÚLOHA 2:&#039;&#039;&#039;&amp;lt;/span&amp;gt; Upravte program a otestujte mikrofón pri rôznych nastaveniach citlivosti:&lt;br /&gt;
&lt;br /&gt;
# Spustite program a sledujte hodnoty v sériovom monitore&lt;br /&gt;
# Otočnou skrutkou &#039;&#039;&#039;nastavte citlivosť&#039;&#039;&#039; tak, aby mikrofón spoľahlivo zachytával všetky tóny&lt;br /&gt;
# Do poľa &amp;lt;code&amp;gt;frekvencie[]&amp;lt;/code&amp;gt; &#039;&#039;&#039;pridajte vlastné frekvencie&#039;&#039;&#039; – skúste veľmi nízke (200 Hz) aj veľmi vysoké (3000 Hz). Zachytáva mikrofón všetky rovnako dobre?&lt;br /&gt;
# Skúste bzučiak a mikrofón &#039;&#039;&#039;od seba vzdialiť&#039;&#039;&#039; – pri akej vzdialenosti prestane mikrofón zachytávať signál?&lt;br /&gt;
&lt;br /&gt;
Zaznamenajte vaše pozorovania a odošlite spolu s upraveným kódom na &amp;lt;code&amp;gt;insert mail&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--{{Note|Nápoveda: Ak sú hodnoty z mikrofónu stále rovnaké (napr. 0 alebo 4095), skontrolujte zapojenie pinu A0 na GP26 a skúste otočiť skrutkou citlivosti na module.}}--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Čo sme sa naučili?&lt;br /&gt;
* Mikrofón KY-038 má digitálny aj analógový výstup – digitálny slúži na detekciu zvuku, analógový na meranie jeho intenzity.&lt;br /&gt;
* Funkcia &amp;lt;code&amp;gt;millis()&amp;lt;/code&amp;gt; umožňuje merať čas bez blokovania programu – na rozdiel od &amp;lt;code&amp;gt;delay()&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Pole (&amp;lt;code&amp;gt;int frekvencie[]&amp;lt;/code&amp;gt;) je užitočný spôsob ako uložiť viacero hodnôt a prechádzať cez ne cyklom.&lt;br /&gt;
* Mikrofón nezachytáva všetky frekvencie rovnako – jeho citlivosť závisí od vzdialenosti, nastavenia aj samotnej frekvencie zvuku.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Ultrazvukový senzor ===&lt;br /&gt;
&lt;br /&gt;
Dostali ste ultrazvukový senzor &#039;&#039;&#039;HC-SR04&#039;&#039;&#039;. Pred dvoma úlohami sme sa naučili ako generovať zvuk rýchlym zapínaním a vypínaním bzučiaka. Teraz použijeme rovnaký princíp – ale na iný účel: &#039;&#039;&#039;meranie vzdialenosti&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Senzor HC-SR04 má na sebe zabudovaný reproduktor aj mikrofón:&lt;br /&gt;
* &#039;&#039;&#039;Reproduktor&#039;&#039;&#039; vyšle krátky ultrazvukový impulz cez pin &#039;&#039;&#039;TRIG&#039;&#039;&#039;&lt;br /&gt;
* Impulz sa odrazí od objektu pred senzorom a vráti sa späť&lt;br /&gt;
* &#039;&#039;&#039;Mikrofón&#039;&#039;&#039; zachytí odrazený signál a vyšle ho cez pin &#039;&#039;&#039;ECHO&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Celý tento proces trvá nejaký čas – a práve z tohto času vieme vypočítať vzdialenosť.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--{{Note|Rýchlosť zvuku vo vzduchu je približne &#039;&#039;&#039;343 metrov za sekundu&#039;&#039;&#039; (alebo 0,0343 cm/µs). Keďže zvuk musí prejsť vzdialenosť dvakrát (tam aj späť), výsledok delíme 2.}}--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:HC-SR04-visual.jpg|350px]]&lt;br /&gt;
&lt;br /&gt;
Pozor – nie každý objekt odrazí ultrazvuk spoľahlivo. Mäkké a porézne materiály (napr. látka, molitan) zvuk pohlcujú namiesto odrazu, a senzor ich nemusí detekovať.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; Zapojenie &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Pin senzora !! Pin na RP2350-Zero&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;VCC&#039;&#039;&#039; || 5V&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;GND&#039;&#039;&#039; || GND&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;TRIG&#039;&#039;&#039; || GP6&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ECHO&#039;&#039;&#039; || GP7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; Kód – meranie času impulzu &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;background:#CCFFCC&amp;quot;&amp;gt;&#039;&#039;&#039;Vyskúšaj toto:&#039;&#039;&#039;&amp;lt;/span&amp;gt; Skopíruj a spusti nasledujúci program. Otvor sériový monitor (9600 baud) a pohybuj rukou pred senzorom. Sleduj ako sa mení nameraná vzdialenosť.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
const int TRIG = 6;&lt;br /&gt;
const int ECHO = 7;&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  pinMode(TRIG, OUTPUT);&lt;br /&gt;
  pinMode(ECHO, INPUT);&lt;br /&gt;
  Serial.begin(9600);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Funkcia odošle impulz a vráti nameraný čas v mikrosekundách&lt;br /&gt;
long measurePulse() {&lt;br /&gt;
  digitalWrite(TRIG, LOW);&lt;br /&gt;
  delayMicroseconds(2);&lt;br /&gt;
&lt;br /&gt;
  digitalWrite(TRIG, HIGH);&lt;br /&gt;
  delayMicroseconds(10);&lt;br /&gt;
  digitalWrite(TRIG, LOW);&lt;br /&gt;
&lt;br /&gt;
  return pulseIn(ECHO, HIGH);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  long trvanie = measurePulse();&lt;br /&gt;
&lt;br /&gt;
  Serial.print(&amp;quot;Čas: &amp;quot;);&lt;br /&gt;
  Serial.print(trvanie);&lt;br /&gt;
&lt;br /&gt;
  delay(100);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; Princíp &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Novinka !! Vysvetlenie&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;pulseIn(pin, HIGH)&amp;lt;/code&amp;gt; || Čaká kým pin prejde do stavu HIGH, potom meria ako dlho v ňom zostane. Vráti čas v mikrosekundách.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;digitalWrite(TRIG, HIGH)&amp;lt;/code&amp;gt; + &amp;lt;code&amp;gt;delayMicroseconds(10)&amp;lt;/code&amp;gt; || Odošleme presne 10µs impulz – to je požiadavka senzora HC-SR04 na spustenie merania.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;trvanie * 0.0343 / 2.0&amp;lt;/code&amp;gt; || Prepočet: čas (µs) × rýchlosť zvuku (cm/µs) ÷ 2 (tam aj späť) = vzdialenosť v cm.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;float&amp;lt;/code&amp;gt; || Dátový typ pre desatinné čísla – na rozdiel od &amp;lt;code&amp;gt;int&amp;lt;/code&amp;gt;, ktorý uchováva iba celé čísla.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; Vaša úloha – Parkovací senzor &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;background:#FFFFA0&amp;quot;&amp;gt;&#039;&#039;&#039;VAŠA ÚLOHA:&#039;&#039;&#039;&amp;lt;/span&amp;gt; Zapojte k ultrazvukovému senzoru bzučiak a RGB LED. Napíšte program, ktorý bude fungovať ako &#039;&#039;&#039;parkovací senzor&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* Čím je objekt &#039;&#039;&#039;bližšie&#039;&#039;&#039;, tým &#039;&#039;&#039;rýchlejšie&#039;&#039;&#039; bliká LED a pípá bzučiak&lt;br /&gt;
* Na základe vzdialenosti meňte aj &#039;&#039;&#039;farbu&#039;&#039;&#039; LED:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Vzdialenosť !! Farba LED !! Bzučiak&lt;br /&gt;
|-&lt;br /&gt;
| &amp;gt; 30 cm || &amp;lt;span style=&amp;quot;color:#007700&amp;quot;&amp;gt;Zelená&amp;lt;/span&amp;gt; || ticho&lt;br /&gt;
|-&lt;br /&gt;
| 10 – 30 cm || &amp;lt;span style=&amp;quot;color:#cc6600&amp;quot;&amp;gt;Žltá&amp;lt;/span&amp;gt; || pomalé pípanie&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt; 10 cm || &amp;lt;span style=&amp;quot;color:#cc0000&amp;quot;&amp;gt;Červená&amp;lt;/span&amp;gt; || rýchle pípanie&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Vzorová štruktúra programu:&lt;br /&gt;
&lt;br /&gt;
[[Ultrasonic sensor structure | Štruktúra]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;background:#FF9900&amp;quot;&amp;gt;&#039;&#039;&#039;Bonus:&#039;&#039;&#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
Skúste sa zamyslieť nad tým ako by sme mohli ošetriť situáciu, kedy by signál nepriśiel naspäť. Buť je objekt ďaleko alebo sa zvuk pohltí. Senzor vie nasnímať maximálne do 200cm. Skúste si to prepočítať.&lt;br /&gt;
&lt;br /&gt;
Hotový program &#039;&#039;&#039;nahrajte do mikrokontroléra&#039;&#039;&#039;, natočte video a odošlite na &amp;lt;code&amp;gt;insert mail&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Čo sme sa naučili?&lt;br /&gt;
* Ultrazvukový senzor HC-SR04 meria vzdialenosť pomocou odrazu zvuku – princíp podobný netopierom alebo parkovacím senzorom áut.&lt;br /&gt;
* Funkcia &amp;lt;code&amp;gt;pulseIn()&amp;lt;/code&amp;gt; meria čas trvania signálu na pine v mikrosekundách.&lt;br /&gt;
* Dátový typ &amp;lt;code&amp;gt;float&amp;lt;/code&amp;gt; používame vtedy, keď potrebujeme pracovať s desatinnými číslami.&lt;br /&gt;
* Nie každý materiál odráža ultrazvuk rovnako – mäkké povrchy ho môžu pohltiť.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Servo motorček ===&lt;br /&gt;
&lt;br /&gt;
Dostali ste dva druhy servo motorčekov: &#039;&#039;&#039;180°&#039;&#039;&#039; a &#039;&#039;&#039;360°&#039;&#039;&#039;. Oba fungujú na rovnakom princípe ovládania, ale majú rozdielne vlastnosti:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Typ !! Správanie&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;180° servo&#039;&#039;&#039; || Nastaví sa na presnú pozíciu (napr. 0°, 90°, 180°) a tam zostane&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;360° servo&#039;&#039;&#039; || Namiesto pozície ovládate &#039;&#039;&#039;smer a rýchlosť&#039;&#039;&#039; otáčania – hodnota 90° = stoj, pod 90° = jedna strana, nad 90° = druhá strana&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Servo dostáva riadiace impulzy v rozsahu &#039;&#039;&#039;500–2500 µs&#039;&#039;&#039;, ktoré dekóduje ako požadovanú pozíciu alebo smer otáčania. Zapojte servo na pin &#039;&#039;&#039;GP12&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--{{Note|Ak servo pri pohybe spôsobuje reštart mikrokontroléra, je odberané priveľa prúdu. V takom prípade napájajte servo samostatne a spojte iba GND.}}--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;background:#CCFFCC&amp;quot;&amp;gt;&#039;&#039;&#039;Vyskúšaj toto:&#039;&#039;&#039;&amp;lt;/span&amp;gt; Nahrajte nasledujúci program. Otvorte sériový monitor (115200 baud), zadajte číslo od 0 do 180 a stlačte Enter. Vyskúšajte si to najprv s 180° servom, potom s 360°. Čo si všimnete?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;Servo.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#define SERVO_PIN 12&lt;br /&gt;
&lt;br /&gt;
Servo servo;&lt;br /&gt;
String inputString = &amp;quot;&amp;quot;;&lt;br /&gt;
int position = 90;&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin(115200);&lt;br /&gt;
  servo.attach(SERVO_PIN, 500, 2500);&lt;br /&gt;
  servo.write(position);&lt;br /&gt;
  Serial.println(&amp;quot;Zadajte uhol (0-180) a stlačte Enter:&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  while (Serial.available()) {&lt;br /&gt;
    char c = Serial.read();&lt;br /&gt;
    if (c == &#039;\n&#039;) {&lt;br /&gt;
      position = inputString.toInt();&lt;br /&gt;
      if (position &amp;gt;= 0 &amp;amp;&amp;amp; position &amp;lt;= 180) {&lt;br /&gt;
        servo.write(position);&lt;br /&gt;
        Serial.print(&amp;quot;Servo nastavené na uhol: &amp;quot;);&lt;br /&gt;
        Serial.println(servo.read());&lt;br /&gt;
      } else {&lt;br /&gt;
        Serial.println(&amp;quot;Neplatná pozícia – zadajte číslo od 0 do 180&amp;quot;);&lt;br /&gt;
      }&lt;br /&gt;
      inputString = &amp;quot;&amp;quot;;&lt;br /&gt;
    } else {&lt;br /&gt;
      inputString += c;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  delay(50);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Novinka !! Vysvetlenie&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;#include &amp;lt;Servo.h&amp;gt;&amp;lt;/code&amp;gt; || Načítame knižnicu pre ovládanie serva – bez nej by sme museli impulzy generovať ručne&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;servo.attach(pin, 500, 2500)&amp;lt;/code&amp;gt; || Pripojíme servo na pin a definujeme rozsah impulzov (500–2500 µs)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;servo.write(uhol)&amp;lt;/code&amp;gt; || Nastavíme servo na požadovaný uhol (0–180°)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;inputString.toInt()&amp;lt;/code&amp;gt; || Prevedie textový reťazec na celé číslo – napr. &amp;lt;code&amp;gt;&amp;quot;120&amp;quot;&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;120&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;background:#FFFFA0&amp;quot;&amp;gt;&#039;&#039;&#039;VAŠA ÚLOHA:&#039;&#039;&#039;&amp;lt;/span&amp;gt; Zostrojte autíčko z dvoch &#039;&#039;&#039;360° servo motorčekov&#039;&#039;&#039;, guličky (ako tretie koleso) a ultrazvukového senzora. Ultrazvuk upevnite na predok. Naprogramujte &#039;&#039;&#039;poslušného psíčka&#039;&#039;&#039; – autíčko sleduje objekt pred sebou:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Vzdialenosť !! Správanie&lt;br /&gt;
|-&lt;br /&gt;
| &amp;gt; 30 cm || Ide vpred – ide za páničkom&lt;br /&gt;
|-&lt;br /&gt;
| 10 – 30 cm || Stojí – páničko je na ideálnej vzdialenosti&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt; 10 cm || Ide vzad – páničko je príliš blízko&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Servo structure | Štruktúra]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--{{Note|Nápoveda: Keďže ľavé a pravé koleso sú namontované oproti sebe, musia sa otáčať &#039;&#039;&#039;opačným smerom&#039;&#039;&#039; aby autíčko išlo rovno. Ak jedno servo ide na hodnotu 70, druhé musí ísť na 110.}}--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;background:#FF9900&amp;quot;&amp;gt;&#039;&#039;&#039;Bonus:&#039;&#039;&#039;&amp;lt;/span&amp;gt; Upravte program tak, aby sa psíček pohyboval &#039;&#039;&#039;proporcionálne&#039;&#039;&#039; – čím ďalej je objekt, tým rýchlejšie autíčko ide. Na škálovanie hodnôt sa vám môže hodiť funkcia [//docs.arduino.cc/language-reference/en/functions/math/map/ &amp;lt;code&amp;gt;map()&amp;lt;/code&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hotový program &#039;&#039;&#039;nahrajte do mikrokontroléra&#039;&#039;&#039;, natočte video a odošlite na &amp;lt;code&amp;gt;insert mail&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Čo sme sa naučili?&lt;br /&gt;
* Servo motorček ovládame pomocou knižnice &amp;lt;code&amp;gt;Servo.h&amp;lt;/code&amp;gt; a funkcie &amp;lt;code&amp;gt;servo.write()&amp;lt;/code&amp;gt;.&lt;br /&gt;
* 180° servo nastavuje presnú polohu, 360° servo ovláda smer a rýchlosť otáčania.&lt;br /&gt;
* Pri dvoch kolesách namontovaných oproti sebe musia servá ísť opačnými smermi aby sa autíčko pohybovalo rovno.&lt;br /&gt;
* Funkcia &amp;lt;code&amp;gt;map()&amp;lt;/code&amp;gt; umožňuje previesť hodnotu z jedného rozsahu do druhého.&lt;br /&gt;
&lt;br /&gt;
=== Roomba ===&lt;br /&gt;
&lt;br /&gt;
Naučili ste sa ako narábať s hlavnými komponentmi stavebnice. Teraz využijete všetky znalosti dokopy a postavíte si robotického vysavača – &#039;&#039;&#039;Roombu&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Autíčko bude skúmať terén pred sebou. Keď narazí na prekážku, pozrie sa doprava a doľava, nájde voľný smer a pokračuje ďalej. Konštrukciu auta môžete nechať z predchádzajúcej úlohy – stačí pridať &#039;&#039;&#039;180° servo&#039;&#039;&#039; s ultrazvukovým senzorom na otáčanie hlavy.&lt;br /&gt;
&lt;br /&gt;
Použijete:&lt;br /&gt;
* 2× 360° servo (kolesá)&lt;br /&gt;
* 1× 180° servo (otáčanie senzora)&lt;br /&gt;
* 1× HC-SR04&lt;br /&gt;
* 1× RGB LED modul (voliteľné)&lt;br /&gt;
* 1× bzučiak (voliteľné)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; Algoritmus &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Roomba má v každom momente nejaký &#039;&#039;&#039;stav&#039;&#039;&#039; – a podľa neho sa rozhoduje čo urobiť:&lt;br /&gt;
&lt;br /&gt;
# Ide rovno – ak je pred ňou voľno (&amp;gt; 20 cm)&lt;br /&gt;
# Narazila na prekážku – otočí senzor doprava a zmeria&lt;br /&gt;
# Ak je doprava voľno – otočí sa doprava a pokračuje&lt;br /&gt;
# Ak nie – otočí senzor doľava a zmeria&lt;br /&gt;
# Ak je doľava voľno – otočí sa doľava a pokračuje&lt;br /&gt;
# Ak je všade prekážka – cúvne a zopakuje skenovanie&lt;br /&gt;
&lt;br /&gt;
LED a bzučiak sú voliteľné – ale môžu pekne znázorniť jednotlivé stavy (napr. zelená = ide, červená = prekážka, pípnutie pri otočení).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;background:#FFFFA0&amp;quot;&amp;gt;&#039;&#039;&#039;VAŠA ÚLOHA:&#039;&#039;&#039;&amp;lt;/span&amp;gt; Zostrojte Roombu a naprogramujte algoritmus podľa opisu vyššie. Dostávate štruktúru na doplnenie:&lt;br /&gt;
&lt;br /&gt;
[[Roomba structure | Štruktúra]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;background:#FF9900&amp;quot;&amp;gt;&#039;&#039;&#039;Bonus:&#039;&#039;&#039;&amp;lt;/span&amp;gt; Roomba si môže &#039;&#039;&#039;pamätať históriu otočení&#039;&#039;&#039; – ak sa viackrát za sebou otočila doprava, skúsi to doľava a naopak. Tak sa vyhne zaseknutiu v rohu.&lt;br /&gt;
&lt;br /&gt;
Hotový program &#039;&#039;&#039;nahrajte do mikrokontroléra&#039;&#039;&#039;, natočte video a odošlite na &amp;lt;code&amp;gt;insert mail&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Čo sme sa naučili?&lt;br /&gt;
* Komplexnejšie správanie robota sa dá rozložiť na jednoduché stavy a prechody medzi nimi.&lt;br /&gt;
* 180° servo vie presne namieriť senzor na konkrétny uhol – využili sme ho ako &amp;quot;hlavu&amp;quot; robota.&lt;br /&gt;
* Kombináciou všetkých komponentov vieme postaviť autonómneho robota schopného orientovať sa v priestore.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Druhá stavebnica ==&lt;br /&gt;
&lt;br /&gt;
V druhej stavebnici prídete do kontaktu s presnejšími a výkonnejšími senzormi. Oproti prvej stavebnici tu pracujeme s modernými komunikačnými protokolmi – &#039;&#039;&#039;I2C&#039;&#039;&#039; zbernicou a &#039;&#039;&#039;12-bitovými analógovými prevodníkmi&#039;&#039;&#039;, ktoré nám dávajú oveľa presnejšie merania.&lt;br /&gt;
&lt;br /&gt;
Budeme sa zaoberať:&lt;br /&gt;
* &#039;&#039;&#039;VL53L0X&#039;&#039;&#039; – laserový senzor vzdialenosti (Time of Flight), presnejší ako ultrazvuk&lt;br /&gt;
* &#039;&#039;&#039;BNO055&#039;&#039;&#039; – gyroskop ktorý meria orientáciu a rotáciu robota v priestore&lt;br /&gt;
* &#039;&#039;&#039;QTR-8A + 74HC4051&#039;&#039;&#039; – line senzor s multiplexerom na sledovanie čiary&lt;br /&gt;
&lt;br /&gt;
Ku každému komponentu si postavíme jednoduché autíčko ktoré využíva jeho schopnosti – až kým na konci nebudete mať robota ktorý sleduje čiaru, vyhýba sa prekážkam a vie kde sa nachádza.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== VL53L0X senzor ===&lt;br /&gt;
&lt;br /&gt;
Dostali ste malý, ale účinný senzor na meranie vzdialenosti. &#039;&#039;&#039;VL53L0X&#039;&#039;&#039; funguje na princípe vysielania infračerveného svetla – lúč sa odrazí od objektu a vráti sa späť za rádovo nanosekundy. Zmeria sa čas letu (Time of Flight) a vypočíta sa vzdialenosť.&lt;br /&gt;
&lt;br /&gt;
Táto technológia je výrazne presnejšia a rýchlejšia ako ultrazvukový senzor – pracujeme so svetlom, ktoré je niekoľkonásobne rýchlejšie ako zvuk.&lt;br /&gt;
&lt;br /&gt;
[[Image:VL53L0X.jpg|300px]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; Zapojenie &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Senzor komunikuje cez zbernicu &#039;&#039;&#039;I2C&#039;&#039;&#039; – potrebuje iba 4 vodiče:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Pin senzora !! Pin na RP2350-Zero&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;VCC&#039;&#039;&#039; || 3.3V&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;GND&#039;&#039;&#039; || GND&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;SDA&#039;&#039;&#039; || GP4&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;SCL&#039;&#039;&#039; || GP5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; Inštalácia knižnice &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# V Arduino IDE otvorte &#039;&#039;&#039;Tools → Manage Libraries&#039;&#039;&#039;&lt;br /&gt;
# Vyhľadajte &#039;&#039;&#039;&amp;quot;VL53L0X&amp;quot;&#039;&#039;&#039; a nainštalujte knižnicu od autora &#039;&#039;&#039;Pololu&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Image:VL53L0X-lib.png|300px]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; Kód &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;background:#CCFFCC&amp;quot;&amp;gt;&#039;&#039;&#039;Vyskúšaj toto:&#039;&#039;&#039;&amp;lt;/span&amp;gt; Skopíruj a spusti nasledujúci program. Otvor sériový monitor (115200 baud) a pohybuj rukou pred senzorom.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;Wire.h&amp;gt;&lt;br /&gt;
#include &amp;lt;VL53L0X.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
VL53L0X sensor;&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin(115200);&lt;br /&gt;
  Wire.setSDA(4);  // GP4&lt;br /&gt;
  Wire.setSCL(5);  // GP5&lt;br /&gt;
  Wire.begin();&lt;br /&gt;
&lt;br /&gt;
  if (!sensor.init()) {&lt;br /&gt;
    Serial.println(&amp;quot;Senzor nenájdený!&amp;quot;);&lt;br /&gt;
    while (1);  // zastav program&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  sensor.setTimeout(500);&lt;br /&gt;
  sensor.startContinuous();&lt;br /&gt;
  Serial.println(&amp;quot;VL53L0X OK&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  int dist = sensor.readRangeContinuousMillimeters();&lt;br /&gt;
&lt;br /&gt;
  if (sensor.timeoutOccurred()) {&lt;br /&gt;
    Serial.println(&amp;quot;Timeout!&amp;quot;);&lt;br /&gt;
  } else {&lt;br /&gt;
    Serial.print(&amp;quot;Vzdialenosť: &amp;quot;);&lt;br /&gt;
    Serial.print(dist);&lt;br /&gt;
    Serial.println(&amp;quot; mm&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  delay(100);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Novinka !! Vysvetlenie&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;#include &amp;lt;Wire.h&amp;gt;&amp;lt;/code&amp;gt; || Knižnica pre I2C zbernicu – spôsob komunikácie medzi mikrokontrolérom a senzorom cez 2 vodiče (SDA, SCL)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;Wire.setSDA(4)&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;Wire.setSCL(5)&amp;lt;/code&amp;gt; || Nastavíme ktoré piny budú použité pre I2C komunikáciu&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;sensor.init()&amp;lt;/code&amp;gt; || Inicializuje senzor – ak vráti &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;, senzor nie je správne zapojený&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;sensor.startContinuous()&amp;lt;/code&amp;gt; || Spustí nepretržité meranie – senzor meria stále bez čakania na príkaz&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;sensor.timeoutOccurred()&amp;lt;/code&amp;gt; || Vráti &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; ak senzor neodpovedal včas – objekt je príliš ďaleko alebo senzor nefunguje&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Pre hlbšie vysvetlenie ako funguje tento senzor prikladáme [https://learn.adafruit.com/adafruit-vl53l0x-micro-lidar-distance-sensor-breakout/overview článok od Adafruit].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--{{Note|Na rozdiel od HC-SR04, VL53L0X vracia vzdialenosť priamo v &#039;&#039;&#039;milimetroch&#039;&#039;&#039; – nie je potrebný žiadny prepočet.}}--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;background:#FFFFA0&amp;quot;&amp;gt;&#039;&#039;&#039;VAŠA ÚLOHA:&#039;&#039;&#039;&amp;lt;/span&amp;gt; Implementujte VL53L0X senzor na svoje prvé autíčko namiesto ultrazvukového senzora. Správanie psíčka zostáva rovnaké – zmeňte iba časť kódu ktorá meria vzdialenosť.&lt;br /&gt;
&lt;br /&gt;
[[Car with lasers | Štruktúra]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;background:#FF9900&amp;quot;&amp;gt;&#039;&#039;&#039;Bonus:&#039;&#039;&#039;&amp;lt;/span&amp;gt; Použite &#039;&#039;&#039;3× VL53L0X&#039;&#039;&#039; senzory – jeden dopredu, druhý doľava a tretí doprava. Roomba tak bude vidieť do všetkých strán naraz a nebude musieť otáčať hlavou.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--{{Note|Nápoveda: Každý I2C senzor má svoju adresu. Ak zapojíte viac rovnakých senzorov, budú mať rovnakú adresu a budú si navzájom prekážať. VL53L0X umožňuje adresu zmeniť cez pin XSHUT – skúste vyhľadať ako na to.}}--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hotový program &#039;&#039;&#039;nahrajte do mikrokontroléra&#039;&#039;&#039;, natočte video a odošlite na &amp;lt;code&amp;gt;insert mail&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Čo sme sa naučili?&lt;br /&gt;
* VL53L0X meria vzdialenosť pomocou infračerveného svetla (Time of Flight) – presnejšie a rýchlejšie ako ultrazvuk.&lt;br /&gt;
* I2C je spôsob komunikácie kde viacero zariadení zdieľa iba 2 vodiče – každé má svoju jedinečnú adresu.&lt;br /&gt;
* Knižnica môže za nás vyriešiť celú komunikáciu so senzorom – stačí zavolať správne funkcie.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Gyroskop BNO055 ===&lt;br /&gt;
&lt;br /&gt;
Doteraz sme jazdili rovno bez toho, aby samotné autíčko vedelo, že ide rovno. Na to nám pomôže &#039;&#039;&#039;gyroskop&#039;&#039;&#039; – senzor ktorý zaznamenáva otáčanie v troch osiach: X, Y a Z. My budeme zatiaľ využívať os &#039;&#039;&#039;Z&#039;&#039;&#039;, ktorá zaznamenáva otáčanie doprava a doľava.&lt;br /&gt;
&lt;br /&gt;
Na rozdiel od predchádzajúcich senzorov, gyroskop musíme pred použitím &#039;&#039;&#039;skalibrovať&#039;&#039;&#039; – teda nechať ho chvíľu v pokoji, aby si zaznamenal svoju počiatočnú polohu.&lt;br /&gt;
&lt;br /&gt;
[[Image:BNO055.jpg|250px]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; Zapojenie &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Senzor komunikuje cez zbernicu &#039;&#039;&#039;I2C&#039;&#039;&#039; – rovnako ako VL53L0X:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Pin senzora !! Pin na RP2350-Zero&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;VCC&#039;&#039;&#039; || 3.3V&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;GND&#039;&#039;&#039; || GND&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;SDA&#039;&#039;&#039; || GP4&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;SCL&#039;&#039;&#039; || GP5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; Inštalácia knižnice &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
# V Arduino IDE otvorte &#039;&#039;&#039;Tools → Manage Libraries&#039;&#039;&#039;&lt;br /&gt;
# Vyhľadajte &#039;&#039;&#039;&amp;quot;Adafruit BNO055&amp;quot;&#039;&#039;&#039; a nainštalujte knižnicu&lt;br /&gt;
# Nainštalujte aj závislosť &#039;&#039;&#039;&amp;quot;Adafruit Unified Sensor&amp;quot;&#039;&#039;&#039; ak sa zobrazí výzva&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; Kód &#039;&#039;&#039;&lt;br /&gt;
&amp;lt;span style=&amp;quot;background:#CCFFCC&amp;quot;&amp;gt;&#039;&#039;&#039;Vyskúšaj toto:&#039;&#039;&#039;&amp;lt;/span&amp;gt; Skopíruj a spusti nasledujúci program. Otvor sériový monitor (115200 baud) a otáčaj senzorom v rôznych smeroch. Sleduj ako sa menia hodnoty osí X, Y, Z.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--{{Note|Pred spustením skontroluj či tvoj modul BNO055 má pin označený &#039;&#039;&#039;VIN&#039;&#039;&#039; (5V tolerantný) alebo &#039;&#039;&#039;VCC&#039;&#039;&#039; (3.3V only). Ak má iba VCC, pripoj ho na &#039;&#039;&#039;3.3V&#039;&#039;&#039; – priame napojenie na 5V môže senzor poškodiť!}}--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;Wire.h&amp;gt;&lt;br /&gt;
#include &amp;lt;Adafruit_Sensor.h&amp;gt;&lt;br /&gt;
#include &amp;lt;Adafruit_BNO055.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Adafruit_BNO055 bno;&lt;br /&gt;
bool active = false;&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin(115200);&lt;br /&gt;
  Wire.setSDA(4);&lt;br /&gt;
  Wire.setSCL(5);&lt;br /&gt;
  Wire.begin();&lt;br /&gt;
  delay(1000);&lt;br /&gt;
&lt;br /&gt;
  // Hľadáme senzor na I2C zbernici&lt;br /&gt;
  Serial.println(&amp;quot;Hľadám I2C zariadenia...&amp;quot;);&lt;br /&gt;
  int adresa = 0;&lt;br /&gt;
  for (byte addr = 1; addr &amp;lt; 127; addr++) {&lt;br /&gt;
    Wire.beginTransmission(addr);&lt;br /&gt;
    if (Wire.endTransmission() == 0) {&lt;br /&gt;
      Serial.print(&amp;quot;Nájdené zariadenie na adrese: 0x&amp;quot;);&lt;br /&gt;
      Serial.println(addr, HEX);&lt;br /&gt;
      adresa = addr;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  if (adresa &amp;gt; 0) {&lt;br /&gt;
    bno = Adafruit_BNO055(55, adresa, &amp;amp;Wire);&lt;br /&gt;
    if (bno.begin()) {&lt;br /&gt;
      active = true;&lt;br /&gt;
      Serial.println(&amp;quot;BNO055 OK – čakám na kalibráciu...&amp;quot;);&lt;br /&gt;
    } else {&lt;br /&gt;
      Serial.println(&amp;quot;BNO055 begin() zlyhalo&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
  } else {&lt;br /&gt;
    Serial.println(&amp;quot;Žiadny senzor nenájdený!&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  if (!active) {&lt;br /&gt;
    Serial.println(&amp;quot;Senzor nie je pripravený&amp;quot;);&lt;br /&gt;
    delay(1000);&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // Kontrola kalibrácie – hodnoty 0-3, kde 3 = plne kalibrované&lt;br /&gt;
  uint8_t system, gyro, accel, mag;&lt;br /&gt;
  bno.getCalibration(&amp;amp;system, &amp;amp;gyro, &amp;amp;accel, &amp;amp;mag);&lt;br /&gt;
&lt;br /&gt;
  if (system &amp;lt; 1) {&lt;br /&gt;
    Serial.println(&amp;quot;Kalibrujem – pohni senzorom...&amp;quot;);&lt;br /&gt;
    delay(100);&lt;br /&gt;
    return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  imu::Vector&amp;lt;3&amp;gt; euler = bno.getVector(Adafruit_BNO055::VECTOR_EULER);&lt;br /&gt;
  Serial.print(&amp;quot;X: &amp;quot;); Serial.print(euler.x());&lt;br /&gt;
  Serial.print(&amp;quot;  Y: &amp;quot;); Serial.print(euler.y());&lt;br /&gt;
  Serial.print(&amp;quot;  Z: &amp;quot;); Serial.println(euler.z());&lt;br /&gt;
  delay(100);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Program čaká kým nie je senzor aspoň čiastočne kalibrovaný (&amp;lt;code&amp;gt;system &amp;gt;= 1&amp;lt;/code&amp;gt;) pred tým ako začne vypisovať hodnoty. Ak vidíš stále &amp;quot;Kalibrujem&amp;quot;, pomaly otáčaj senzorom vo všetkých smeroch – kalibrácia by mala prísť do niekoľkých sekúnd.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Novinka !! Vysvetlenie&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;Adafruit_BNO055&amp;lt;/code&amp;gt; || Objekt reprezentujúci senzor – cez neho voláme všetky funkcie knižnice&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;bno.begin()&amp;lt;/code&amp;gt; || Inicializuje senzor – ak vráti &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;, senzor nie je správne zapojený&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;bno.getVector(VECTOR_EULER)&amp;lt;/code&amp;gt; || Vráti aktuálnu rotáciu vo forme troch uhlov (Eulerove uhly) v stupňoch&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;euler.x()&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;.y()&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;.z()&amp;lt;/code&amp;gt; || Jednotlivé osi rotácie – os Z sleduje otáčanie doprava/doľava&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;imu::Vector&amp;lt;3&amp;gt;&amp;lt;/code&amp;gt; || Dátový typ pre trojrozmerný vektor – obsahuje tri hodnoty naraz&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Note|Os Z vracia hodnoty 0°–360°. Keď autíčko stojí rovno = 0°, otočenie doprava zvyšuje hodnotu, otočenie doľava ju znižuje (alebo ide k 360°). Toto treba zohľadniť v kóde.}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;background:#FFFFA0&amp;quot;&amp;gt;&#039;&#039;&#039;VAŠA ÚLOHA:&#039;&#039;&#039;&amp;lt;/span&amp;gt; Pripevnite gyroskop k autíčku &#039;&#039;&#039;kolmo na cestu&#039;&#039;&#039; (plocho, aby os Z merala otáčanie). Naprogramujte autíčko ktoré:&lt;br /&gt;
&lt;br /&gt;
* Ide &#039;&#039;&#039;presne rovno&#039;&#039;&#039; – ak gyroskop zaznamená odchýlku, autíčko sa skoriguje&lt;br /&gt;
* Na príkaz cez sériový monitor sa otočí presne o &#039;&#039;&#039;90° doprava alebo doľava&#039;&#039;&#039; – otáča sa dovtedy, kým gyroskop nezaznamená 90°&lt;br /&gt;
&lt;br /&gt;
[[Gyroscope structure | Štruktúra]]&lt;br /&gt;
&lt;br /&gt;
{{Note|Nápoveda: Presné otáčanie na 90° vyžaduje aby ste sledovali &#039;&#039;&#039;zmenu uhla&#039;&#039;&#039; od momentu keď ste začali otáčanie – nie absolútnu hodnotu. Uložte si počiatočný uhol do premennej a sledujte rozdiel.}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;background:#FF9900&amp;quot;&amp;gt;&#039;&#039;&#039;Bonus:&#039;&#039;&#039;&amp;lt;/span&amp;gt; Použite VL53L0X senzor pripevnený na 180° servo a preskúmajte terén ako [https://cs.wikipedia.org/wiki/Lidar lidar] – servo sa otočí z jednej strany na druhú a senzor zaznamená vzdialenosť v každom uhle. Po preskúmaní sa autíčko otočí smerom k &#039;&#039;&#039;najbližšiemu objektu&#039;&#039;&#039; a príde za ním (upgrade poslušného psíčka).&lt;br /&gt;
&lt;br /&gt;
[[Lidar structure| Štruktúra]]&lt;br /&gt;
&lt;br /&gt;
Hotový program &#039;&#039;&#039;nahrajte do mikrokontroléra&#039;&#039;&#039;, natočte video a odošlite na &amp;lt;code&amp;gt;insert mail&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Čo sme sa naučili?&lt;br /&gt;
* Gyroskop BNO055 meria rotáciu v troch osiach – os Z sleduje otáčanie doprava/doľava.&lt;br /&gt;
* Eulerove uhly vyjadrujú orientáciu objektu v priestore pomocou troch čísel.&lt;br /&gt;
* Kombináciou gyroskopu a serv vieme autíčku dopomôcť k presnému pohybu a otáčaniu.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Line senzor + multiplexer ===&lt;br /&gt;
&lt;br /&gt;
Dostali ste modul zložený z &#039;&#039;&#039;QTR-8A&#039;&#039;&#039; line senzora a &#039;&#039;&#039;74HC4051&#039;&#039;&#039; multiplexera. &lt;br /&gt;
&lt;br /&gt;
QTR-8A obsahuje 8 infračervených snímačov odrazivosti – každý meria koľko infračerveného svetla sa odrazí od povrchu. Tmavá čiara odráža menej ako svetlý podklad.&lt;br /&gt;
&lt;br /&gt;
Senzor nemá indikačnú LED, takže navonok nevidno či dostáva napájanie. Pre najlepší účinok IR senzorov ich treba zapojiť do 5V (IR pin).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; Prečo potrebujeme multiplexer? &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
RP2350-Zero má iba &#039;&#039;&#039;4 analógové vstupy&#039;&#039;&#039; (GP26–GP29), ale senzor má &#039;&#039;&#039;8 analógových výstupov&#039;&#039;&#039;. Na to nám pomôže multiplexer 74HC4051 – prepína 8 analógových kanálov na jeden výstup. Každý kanál má svoju adresu od &amp;lt;code&amp;gt;000&amp;lt;/code&amp;gt; po &amp;lt;code&amp;gt;111&amp;lt;/code&amp;gt; (binárne), ktorú nastavujeme cez 3 select piny (S0, S1, S2).&lt;br /&gt;
&lt;br /&gt;
Postup čítania všetkých 8 kanálov:&lt;br /&gt;
# Nastavíme adresu kanála cez S0, S1, S2&lt;br /&gt;
# Počkáme kým sa multiplexer prepne (~10 µs)&lt;br /&gt;
# Prečítame hodnotu z výstupu Z&lt;br /&gt;
# Opakujeme pre všetky kanály 0–7&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; Zapojenie &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Pin modulu !! Pin na RP2350-Zero&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;VCC&#039;&#039;&#039; || 3.3V&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;GND&#039;&#039;&#039; || GND&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;IR (QTR-8A)&#039;&#039;&#039; || 5V&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Z&#039;&#039;&#039; (analógový výstup) || GP26 (ADC)&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;S0&#039;&#039;&#039; || GP6&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;S1&#039;&#039;&#039; || GP7&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;S2&#039;&#039;&#039; || GP8&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Image:QTR-8A-pinout.png|400px]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; Kód &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;background:#CCFFCC&amp;quot;&amp;gt;&#039;&#039;&#039;Vyskúšaj toto:&#039;&#039;&#039;&amp;lt;/span&amp;gt; Skopíruj a spusti nasledujúci program. Otvor sériový monitor (115200 baud) a pomaly pohybuj senzorom nad čiernou čiarou na bielom podklade.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
  RP2040                74HC4051             QTR-8A &lt;br /&gt;
┌──────────┐ ┌──────────────────────────┐  ┌────────┐&lt;br /&gt;
|      5V  ├─┘        ┌──────────┐      └──┤ IR     |&lt;br /&gt;
|      3.3V├──────────┤VCC    VCC├─────────┤ VCC    |&lt;br /&gt;
│      GP26├──────────┤Z      GND├─────────┤ GND    | &lt;br /&gt;
│      GP13├──────────┤S2      Y0├─────────┤ D1     |&lt;br /&gt;
│      GP14├──────────┤S1      Y1├─────────┤ D2     |&lt;br /&gt;
│      GP15├──────────┤S0      Y2├─────────┤ D3     |&lt;br /&gt;
│       GND├──────────┤GND     Y3├─────────┤ D4     |&lt;br /&gt;
└──────────┘          |        Y4├─────────┤ D5     |&lt;br /&gt;
                      |        Y5├─────────┤ D6     |&lt;br /&gt;
                      |        Y6├─────────┤ D7     |&lt;br /&gt;
                      |        Y7├─────────┤ D8     |&lt;br /&gt;
                      └──────────┘         └────────┘&lt;br /&gt;
*/&lt;br /&gt;
const int MUX_Z  = 26;  // analógový výstup multiplexera&lt;br /&gt;
const int MUX_S0 = 6;   // select bit 0&lt;br /&gt;
const int MUX_S1 = 7;   // select bit 1&lt;br /&gt;
const int MUX_S2 = 8;   // select bit 2&lt;br /&gt;
&lt;br /&gt;
const uint8_t SENSOR_COUNT = 8;&lt;br /&gt;
const int THRESHOLD = 400;  // prah medzi bielou (~40) a čiernou (~800)&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin(115200);&lt;br /&gt;
  analogReadResolution(12);  // 12-bitové ADC (0–4095)&lt;br /&gt;
&lt;br /&gt;
  pinMode(MUX_S0, OUTPUT);&lt;br /&gt;
  pinMode(MUX_S1, OUTPUT);&lt;br /&gt;
  pinMode(MUX_S2, OUTPUT);&lt;br /&gt;
&lt;br /&gt;
  Serial.println(&amp;quot;QTR-8A + 74HC4051 OK&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Prepne multiplexer na daný kanál (0–7)&lt;br /&gt;
void selectChannel(uint8_t channel) {&lt;br /&gt;
  digitalWrite(MUX_S0, (channel &amp;gt;&amp;gt; 0) &amp;amp; 1);&lt;br /&gt;
  digitalWrite(MUX_S1, (channel &amp;gt;&amp;gt; 1) &amp;amp; 1);&lt;br /&gt;
  digitalWrite(MUX_S2, (channel &amp;gt;&amp;gt; 2) &amp;amp; 1);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  for (uint8_t i = 0; i &amp;lt; SENSOR_COUNT; i++) {&lt;br /&gt;
    selectChannel(i);&lt;br /&gt;
    delayMicroseconds(10);  // počkáme kým sa multiplexer prepne&lt;br /&gt;
    int val = analogRead(MUX_Z);&lt;br /&gt;
    Serial.print(val &amp;gt; THRESHOLD ? &amp;quot;1&amp;quot; : &amp;quot;0&amp;quot;);&lt;br /&gt;
    Serial.print(&amp;quot;\t&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  Serial.println();&lt;br /&gt;
  delay(100);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Novinka !! Vysvetlenie&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;analogReadResolution(12)&amp;lt;/code&amp;gt; || Nastaví ADC na 12-bitové čítanie (0–4095) – bez toho by Arduino používalo 10-bitové (0–1023)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;selectChannel(i)&amp;lt;/code&amp;gt; || Nastaví adresu kanála cez select piny S0, S1, S2&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;(channel &amp;gt;&amp;gt; n) &amp;amp; 1&amp;lt;/code&amp;gt; || Bitový posun – vyextrahuje n-tý bit adresy kanála. Napr. kanál 5 = &amp;lt;code&amp;gt;101&amp;lt;/code&amp;gt; → S0=1, S1=0, S2=1&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;delayMicroseconds(10)&amp;lt;/code&amp;gt; || Krátke čakanie kým sa multiplexer fyzicky prepne na nový kanál&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Note|Typické hodnoty: biely povrch ~40, čierna čiara ~800. Ak sa tvoje hodnoty líšia, uprav konštantu &amp;lt;code&amp;gt;THRESHOLD&amp;lt;/code&amp;gt; na hodnotu v strede medzi tvojimi nameranými hodnotami.}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;background:#FFFFA0&amp;quot;&amp;gt;&#039;&#039;&#039;VAŠA ÚLOHA:&#039;&#039;&#039;&amp;lt;/span&amp;gt; Naprogramujte autíčko ktoré sleduje čiaru. Čiara môže odbáčať, robiť cik-cak, rozvetvovať sa alebo tvoriť slučku. Pripojte aj VL53L0X senzor na detekciu náhodnej prekážky v ceste:&lt;br /&gt;
&lt;br /&gt;
* Ak senzor detekuje prekážku bližšie ako 100 mm – autíčko zastaví a počká kým prekážka nezmizne&lt;br /&gt;
* Ak je cesta voľná – autíčko sleduje čiaru ďalej&lt;br /&gt;
&lt;br /&gt;
[[Line sensor structure | Štruktúra]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;background:#FF9900&amp;quot;&amp;gt;&#039;&#039;&#039;Bonus:&#039;&#039;&#039;&amp;lt;/span&amp;gt; Pripevnite aj gyroskop BNO055. Počas jazdy zaznamenávajte čas a uhol otočenia do súboru pomocou &#039;&#039;&#039;LittleFS&#039;&#039;&#039; – po skončení jazdy pripojíte mikrokontrolér k počítaču a súbor si stiahnete a vizualizujete.&lt;br /&gt;
&lt;br /&gt;
[[Line sensor bonus structure | Štruktúra]]&lt;br /&gt;
&lt;br /&gt;
[[LittleFS into| Úvod do LittleFS (jednoduchý file system)]]&lt;br /&gt;
&lt;br /&gt;
Hotový program &#039;&#039;&#039;nahrajte do mikrokontroléra&#039;&#039;&#039;, natočte video a odošlite na &amp;lt;code&amp;gt;insert mail&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Čo sme sa naučili?&lt;br /&gt;
* QTR-8A meria odrazivosť povrchu pomocou IR svetla – tmavá čiara odráža menej ako svetlý podklad.&lt;br /&gt;
* Multiplexer 74HC4051 nám umožnil čítať 8 analógových kanálov cez jeden ADC pin.&lt;br /&gt;
* Adresu kanála nastavujeme cez 3 select piny pomocou binárneho kódovania.&lt;br /&gt;
* &amp;lt;code&amp;gt;analogReadResolution(12)&amp;lt;/code&amp;gt; nastaví 12-bitové čítanie pre väčšiu presnosť merania.&lt;br /&gt;
&lt;br /&gt;
== Tretia stavebnica ==&lt;br /&gt;
&lt;br /&gt;
Najľahšie nakoniec! Túto stavebnicu sme navrhli ako oddych od programovania – aby ste si užili skladanie podľa návodu. Najprv sa zoznámime s dvoma novými ale jednoduchými elektronickými komponentmi: &#039;&#039;&#039;joystickom&#039;&#039;&#039; a &#039;&#039;&#039;touch senzorom&#039;&#039;&#039;. Po zoznámení sa s nimi sa vrhneme do stavby jednoduchého robotického ramena.&lt;br /&gt;
&lt;br /&gt;
Ak nájdete chyby v návode, prosíme napíšte nám to na &amp;lt;code&amp;gt;insert mail&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Joystick ===&lt;br /&gt;
&lt;br /&gt;
Joystick ktorý ste dostali má &#039;&#039;&#039;2 osi&#039;&#039;&#039; (X a Y) a &#039;&#039;&#039;1 tlačidlo&#039;&#039;&#039; (SW – stlačenie joysticku). Funguje ako dva potenciometre – otočením v smere X alebo Y sa mení odpor a tým aj analógová hodnota na výstupe.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; Zapojenie &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Pin joysticku !! Pin na RP2350-Zero&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;VCC&#039;&#039;&#039; || 3.3V&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;GND&#039;&#039;&#039; || GND&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;VRX&#039;&#039;&#039; (os X) || GP26 (ADC)&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;VRY&#039;&#039;&#039; (os Y) || GP27 (ADC)&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;SW&#039;&#039;&#039; (tlačidlo) || GP6&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; Kód &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;background:#CCFFCC&amp;quot;&amp;gt;&#039;&#039;&#039;Vyskúšaj toto:&#039;&#039;&#039;&amp;lt;/span&amp;gt; Skopíruj a spusti nasledujúci program. Otvor sériový monitor (115200 baud) a pohybuj joystickom. Sleduj ako sa menia hodnoty.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
const int JOY_X  = 26;&lt;br /&gt;
const int JOY_Y  = 27;&lt;br /&gt;
const int JOY_SW = 6;&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin(115200);&lt;br /&gt;
  analogReadResolution(12);  // 12-bitové ADC (0–4095)&lt;br /&gt;
  pinMode(JOY_SW, INPUT_PULLUP);  // tlačidlo – aktívne LOW&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  int x  = analogRead(JOY_X);&lt;br /&gt;
  int y  = analogRead(JOY_Y);&lt;br /&gt;
  int sw = digitalRead(JOY_SW);  // 0 = stlačené, 1 = nestlačené&lt;br /&gt;
&lt;br /&gt;
  Serial.print(&amp;quot;X: &amp;quot;); Serial.print(x);&lt;br /&gt;
  Serial.print(&amp;quot;  Y: &amp;quot;); Serial.print(y);&lt;br /&gt;
  Serial.print(&amp;quot;  SW: &amp;quot;); Serial.println(sw == LOW ? &amp;quot;stlacene&amp;quot; : &amp;quot;volne&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  delay(100);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Novinka !! Vysvetlenie&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;INPUT_PULLUP&amp;lt;/code&amp;gt; || Aktivuje vnútorný pull-up rezistor – tlačidlo číta &amp;lt;code&amp;gt;LOW&amp;lt;/code&amp;gt; keď je stlačené a &amp;lt;code&amp;gt;HIGH&amp;lt;/code&amp;gt; keď nie&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;sw == LOW&amp;lt;/code&amp;gt; || Tlačidlo je aktívne LOW – stlačenie stiahne pin na GND&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Note|Stred joysticku by mal ukazovať hodnotu okolo 2048 (polovica rozsahu 0–4095). Ak je hodnota iná, joystick je mierne mimo stredu – to je normálne.}}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Touch senzor ===&lt;br /&gt;
&lt;br /&gt;
Touch senzor detekuje dotyk prsta pomocou zmeny kapacitancie. Keď sa dotknete senzora, váš prst zmení elektrické pole okolo elektródy – senzor to zaznamená a vyšle digitálny signál.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; Zapojenie &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Pin senzora !! Pin na RP2350-Zero&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;VCC&#039;&#039;&#039; || 3.3V&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;GND&#039;&#039;&#039; || GND&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;SIG&#039;&#039;&#039; || GP7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; Kód &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;background:#CCFFCC&amp;quot;&amp;gt;&#039;&#039;&#039;Vyskúšaj toto:&#039;&#039;&#039;&amp;lt;/span&amp;gt; Skopíruj a spusti nasledujúci program. Dotknite sa senzora prstom a sleduj zmenu v sériovom monitore.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;C&amp;quot;&amp;gt;&lt;br /&gt;
const int TOUCH_PIN = 7;&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin(115200);&lt;br /&gt;
  pinMode(TOUCH_PIN, INPUT);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  int val = digitalRead(TOUCH_PIN);&lt;br /&gt;
&lt;br /&gt;
  if (val == HIGH) {&lt;br /&gt;
    Serial.println(&amp;quot;Dotyk detekovaný!&amp;quot;);&lt;br /&gt;
  } else {&lt;br /&gt;
    Serial.println(&amp;quot;Žiadny dotyk&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  delay(100);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Robotické rameno ===&lt;br /&gt;
&lt;br /&gt;
Teraz keď poznáte joystick a touch senzor, postavíte si robotické rameno ovládané joystickom. Touch senzor bude slúžiť ako tlačidlo pre uchopenie objektu (napr. otvoriť/zatvoriť kliešte).&lt;br /&gt;
&lt;br /&gt;
Rameno pozostáva z niekoľkých servo motorčekov ktoré ovládajú jednotlivé kĺby – podobne ako ľudská ruka.&lt;br /&gt;
&lt;br /&gt;
Postavte rameno podľa návodu:&lt;br /&gt;
&lt;br /&gt;
[[Manual |  Návod na skladanie ramena]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; Vaša úloha &#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;background:#FFFFA0&amp;quot;&amp;gt;&#039;&#039;&#039;VAŠA ÚLOHA:&#039;&#039;&#039;&amp;lt;/span&amp;gt; Naprogramujte ovládanie ramena joystickom:&lt;br /&gt;
&lt;br /&gt;
* Os &#039;&#039;&#039;X&#039;&#039;&#039; joysticku otáča rameno doľava/doprava&lt;br /&gt;
* Os &#039;&#039;&#039;Y&#039;&#039;&#039; joysticku pohybuje ramenom nahor/nadol&lt;br /&gt;
* &#039;&#039;&#039;Stlačenie&#039;&#039;&#039; joysticku (SW) otvára/zatvára kliešte&lt;br /&gt;
* &#039;&#039;&#039;Dotyk&#039;&#039;&#039; touch senzory pohybujú ramenom dopredu/dozadu&lt;br /&gt;
&lt;br /&gt;
[[Arm structure | Štruktúra]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;background:#FF9900&amp;quot;&amp;gt;&#039;&#039;&#039;Bonus:&#039;&#039;&#039;&amp;lt;/span&amp;gt; Pridajte &#039;&#039;&#039;pamäť pohybov&#039;&#039;&#039; – rameno si zapamätá sekvenciu pohybov a bude ju opakovať. Každé stlačenie joysticku uloží aktuálnu pozíciu všetkých serv do poľa. Po stlačení touch senzora rameno sekvencию prehrá.&lt;br /&gt;
&lt;br /&gt;
Hotové rameno &#039;&#039;&#039;natočte pri práci&#039;&#039;&#039; a video odošlite na &amp;lt;code&amp;gt;insert mail&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Čo sme sa naučili?&lt;br /&gt;
* Joystick kombinuje dva potenciometre a tlačidlo – os X a Y dávajú analógovú hodnotu 0–4095.&lt;br /&gt;
* Touch senzor detekuje dotyk bez mechanického tlačidla – využíva zmenu kapacitancie.&lt;br /&gt;
* Robotické rameno kombinuje všetky doterajšie znalosti – servo motorčeky, joystick aj touch senzor.&lt;br /&gt;
&lt;br /&gt;
__notoc__&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://3dliga.robotika.sk/wiki/index.php?title=3D_liga_wiki&amp;diff=18</id>
		<title>3D liga wiki</title>
		<link rel="alternate" type="text/html" href="https://3dliga.robotika.sk/wiki/index.php?title=3D_liga_wiki&amp;diff=18"/>
		<updated>2026-04-17T13:42:40Z</updated>

		<summary type="html">&lt;p&gt;Admin: Vytvorená stránka „Vitajte na wiki stránkach Robotickej 3D Ligy!“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Vitajte na wiki stránkach Robotickej 3D Ligy!&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://3dliga.robotika.sk/wiki/index.php?title=MediaWiki:Sidebar&amp;diff=17</id>
		<title>MediaWiki:Sidebar</title>
		<link rel="alternate" type="text/html" href="https://3dliga.robotika.sk/wiki/index.php?title=MediaWiki:Sidebar&amp;diff=17"/>
		<updated>2026-04-17T13:42:01Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
* navigation&lt;br /&gt;
** mainpage|mainpage-description&lt;br /&gt;
** Prvé kolo|Prvé kolo&lt;br /&gt;
** recentchanges-url|recentchanges&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://3dliga.robotika.sk/wiki/index.php?title=MediaWiki:Sidebar&amp;diff=16</id>
		<title>MediaWiki:Sidebar</title>
		<link rel="alternate" type="text/html" href="https://3dliga.robotika.sk/wiki/index.php?title=MediaWiki:Sidebar&amp;diff=16"/>
		<updated>2026-04-17T13:41:47Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
* navigation&lt;br /&gt;
** mainpage|mainpage-description&lt;br /&gt;
** Prvé kolo|Prvé kolo&lt;br /&gt;
** ---&lt;br /&gt;
** recentchanges-url|recentchanges&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://3dliga.robotika.sk/wiki/index.php?title=MediaWiki:Sidebar&amp;diff=15</id>
		<title>MediaWiki:Sidebar</title>
		<link rel="alternate" type="text/html" href="https://3dliga.robotika.sk/wiki/index.php?title=MediaWiki:Sidebar&amp;diff=15"/>
		<updated>2026-04-17T13:41:29Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
* navigation&lt;br /&gt;
** mainpage|mainpage-description&lt;br /&gt;
** Prvé kolo|Prvé kolo&lt;br /&gt;
&lt;br /&gt;
** recentchanges-url|recentchanges&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://3dliga.robotika.sk/wiki/index.php?title=MediaWiki:Recentchanges&amp;diff=14</id>
		<title>MediaWiki:Recentchanges</title>
		<link rel="alternate" type="text/html" href="https://3dliga.robotika.sk/wiki/index.php?title=MediaWiki:Recentchanges&amp;diff=14"/>
		<updated>2026-04-17T13:41:01Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Posledné úpravy&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://3dliga.robotika.sk/wiki/index.php?title=MediaWiki:Sidebar&amp;diff=13</id>
		<title>MediaWiki:Sidebar</title>
		<link rel="alternate" type="text/html" href="https://3dliga.robotika.sk/wiki/index.php?title=MediaWiki:Sidebar&amp;diff=13"/>
		<updated>2026-04-17T13:40:06Z</updated>

		<summary type="html">&lt;p&gt;Admin: Vytvorená stránka „ * navigation ** mainpage|mainpage-description ** Prvé kolo|Prvé kolo ** recentchanges-url|recentchanges“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
* navigation&lt;br /&gt;
** mainpage|mainpage-description&lt;br /&gt;
** Prvé kolo|Prvé kolo&lt;br /&gt;
** recentchanges-url|recentchanges&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://3dliga.robotika.sk/wiki/index.php?title=MediaWiki:Common.css&amp;diff=12</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://3dliga.robotika.sk/wiki/index.php?title=MediaWiki:Common.css&amp;diff=12"/>
		<updated>2026-04-17T13:36:13Z</updated>

		<summary type="html">&lt;p&gt;Admin: Vytvorená stránka „/* Tu umiestnené CSS bude ovplyvňovať všetky štýly */ ca-talk { display:none!important; }“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Tu umiestnené CSS bude ovplyvňovať všetky štýly */&lt;br /&gt;
ca-talk { display:none!important; }&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://3dliga.robotika.sk/wiki/index.php?title=MediaWiki:Recentchanges&amp;diff=11</id>
		<title>MediaWiki:Recentchanges</title>
		<link rel="alternate" type="text/html" href="https://3dliga.robotika.sk/wiki/index.php?title=MediaWiki:Recentchanges&amp;diff=11"/>
		<updated>2026-04-17T13:35:34Z</updated>

		<summary type="html">&lt;p&gt;Admin: Vytvorená stránka „-“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://3dliga.robotika.sk/wiki/index.php?title=MediaWiki:Specialpages-url&amp;diff=10</id>
		<title>MediaWiki:Specialpages-url</title>
		<link rel="alternate" type="text/html" href="https://3dliga.robotika.sk/wiki/index.php?title=MediaWiki:Specialpages-url&amp;diff=10"/>
		<updated>2026-04-17T13:35:16Z</updated>

		<summary type="html">&lt;p&gt;Admin: Vytvorená stránka „-“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://3dliga.robotika.sk/wiki/index.php?title=MediaWiki:Vector.css&amp;diff=9</id>
		<title>MediaWiki:Vector.css</title>
		<link rel="alternate" type="text/html" href="https://3dliga.robotika.sk/wiki/index.php?title=MediaWiki:Vector.css&amp;diff=9"/>
		<updated>2026-04-17T13:34:30Z</updated>

		<summary type="html">&lt;p&gt;Admin: Vytvorená stránka „/* Tu umiestnené CSS bude ovplyvňovať používateľov štýlu Vector */ #p-tb {display:none;}“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Tu umiestnené CSS bude ovplyvňovať používateľov štýlu Vector */&lt;br /&gt;
#p-tb {display:none;}&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://3dliga.robotika.sk/wiki/index.php?title=MediaWiki:Aboutsite&amp;diff=8</id>
		<title>MediaWiki:Aboutsite</title>
		<link rel="alternate" type="text/html" href="https://3dliga.robotika.sk/wiki/index.php?title=MediaWiki:Aboutsite&amp;diff=8"/>
		<updated>2026-04-17T13:33:57Z</updated>

		<summary type="html">&lt;p&gt;Admin: Vytvorená stránka „-“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://3dliga.robotika.sk/wiki/index.php?title=MediaWiki:About&amp;diff=7</id>
		<title>MediaWiki:About</title>
		<link rel="alternate" type="text/html" href="https://3dliga.robotika.sk/wiki/index.php?title=MediaWiki:About&amp;diff=7"/>
		<updated>2026-04-17T13:33:33Z</updated>

		<summary type="html">&lt;p&gt;Admin: Vytvorená stránka „-“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://3dliga.robotika.sk/wiki/index.php?title=MediaWiki:Disclaimers&amp;diff=6</id>
		<title>MediaWiki:Disclaimers</title>
		<link rel="alternate" type="text/html" href="https://3dliga.robotika.sk/wiki/index.php?title=MediaWiki:Disclaimers&amp;diff=6"/>
		<updated>2026-04-17T13:33:13Z</updated>

		<summary type="html">&lt;p&gt;Admin: Vytvorená stránka „-“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://3dliga.robotika.sk/wiki/index.php?title=MediaWiki:Privacy&amp;diff=5</id>
		<title>MediaWiki:Privacy</title>
		<link rel="alternate" type="text/html" href="https://3dliga.robotika.sk/wiki/index.php?title=MediaWiki:Privacy&amp;diff=5"/>
		<updated>2026-04-17T13:32:53Z</updated>

		<summary type="html">&lt;p&gt;Admin: Vytvorená stránka „-“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://3dliga.robotika.sk/wiki/index.php?title=MediaWiki:Mainpage-nstab&amp;diff=4</id>
		<title>MediaWiki:Mainpage-nstab</title>
		<link rel="alternate" type="text/html" href="https://3dliga.robotika.sk/wiki/index.php?title=MediaWiki:Mainpage-nstab&amp;diff=4"/>
		<updated>2026-04-17T13:31:18Z</updated>

		<summary type="html">&lt;p&gt;Admin: Vytvorená stránka „3D liga wiki“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;3D liga wiki&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://3dliga.robotika.sk/wiki/index.php?title=MediaWiki:Mainpage-description&amp;diff=3</id>
		<title>MediaWiki:Mainpage-description</title>
		<link rel="alternate" type="text/html" href="https://3dliga.robotika.sk/wiki/index.php?title=MediaWiki:Mainpage-description&amp;diff=3"/>
		<updated>2026-04-17T13:30:29Z</updated>

		<summary type="html">&lt;p&gt;Admin: Vytvorená stránka „3D liga wiki“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;3D liga wiki&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://3dliga.robotika.sk/wiki/index.php?title=MediaWiki:Mainpage&amp;diff=2</id>
		<title>MediaWiki:Mainpage</title>
		<link rel="alternate" type="text/html" href="https://3dliga.robotika.sk/wiki/index.php?title=MediaWiki:Mainpage&amp;diff=2"/>
		<updated>2026-04-17T13:29:54Z</updated>

		<summary type="html">&lt;p&gt;Admin: Vytvorená stránka „3D liga wiki“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;3D liga wiki&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
</feed>