fizikai számítástechnika, arduino
https://harsanyireka.blog.hu/atom
blfr4@https://blog.hu
©2024 blog.hu
https://harsanyireka.blog.hu/2016/11/17/random_betu_generator_7x5_dot_matrixon
Random betű generátor, 7x5 dot matrixon
2016-11-17T09:58:49+01:00
2016-11-17T09:58:49+01:00
harsanyireka
https://blog.hu/user/434264
<p>TC07-11EWA Dot Matrix LED Display, CC 7 x 5</p>
<p><img src="https://m.blog.hu/ha/harsanyireka/image/f4516644-01.jpg" alt="f4516644-01.jpg" class="imgnotext picomat-image" width="211" height="182" /></p>
<p><img src="https://m.blog.hu/ha/harsanyireka/image/l0247314-10.gif" alt="l0247314-10.gif" class="imgnotext picomat-image" width="153" height="200" /></p>
<p><img src="https://m.blog.hu/ha/harsanyireka/image/l0247315-10.gif" alt="l0247315-10.gif" class="imgnotext picomat-image" width="227" height="304" /></p>
<p> </p>
<p><em>forrás: http://uk.rs-online.com/web/p/led-displays/4516644/</em></p>
<p><em>----------</em></p>
<p><em> </em></p>
<p><strong>ARDUINIO - RANDOM BETŰ GENERÁTOR</strong></p>
<p>Bekötése:</p>
<p><img src="https://m.blog.hu/ha/harsanyireka/image/fi5e37wh347ff6r_medium.jpg" alt="fi5e37wh347ff6r_medium.jpg" class="imgnotext" /></p>
<p><span>(<strong>470 Ohm</strong> ellenállások minden egyes Arduino pinhez 0-6 és az adott LED matrix pinek között)</span></p>
<p>Arduino pin/LED matrix pin<br /><span>0/6 (Sor 7)</span><br /><span>1/5 (Sor 6)</span><br /><span>2/4 (Sor 5)</span><br /><span>3/9 (Sor4)</span><br /><span>4/2 (Sor 3)</span><br /><span>5/11 (Sor 2)</span><br /><span>6/12 (Sor 1)</span><br /><br /><span>8/1 (Oszlop 1)</span><br /><span>9/3 (Oszlop 2)</span><br /><span>10/10 (Oszlop 3)</span><br /><span>11/7 (Oszlop 4)</span><br /><span>12/8 (Oszlop 5)</span></p>
<p>Nyomógomb az arduino 7 pinjébe van bekötve (10kOhm ellenállás kell hozzá).</p>
<p> </p>
<p>KÓD<a href="https://m.blog.hu/ha/harsanyireka/image/matrix_5x7_stadt_land_fluss_bitmath.rar" target="_self"> letöltése</a>.</p>
<p><em>forrás: http://www.instructables.com/id/Arduino-random-letter-generator/</em></p>
<p><em>----------</em></p>
<p><em> </em></p>
<p><strong>LED GRID<em><br /><a href="https://github.com/ericlathrop/LedGrid" target="_blank">https://github.com/ericlathrop/LedGrid</a><br /></em></strong></p>
<p><a href="https://www.youtube.com/watch?v=Z6Wv3CiSTfo" target="_blank"><em>https://www.youtube.com/watch?v=Z6Wv3CiSTfo</em></a></p>
<p> </p>
<p> </p>
<p><a title="Megosztom Facebookon!" href="https://www.facebook.com/sharer.php?api_key=120587281320910&locale=hu_HU&method=stream.share&u=https%3A%2F%2Fharsanyireka.blog.hu%2F2016%2F11%2F17%2Frandom_betu_generator_7x5_dot_matrixon%3Futm_source%3Dbloghu_rss%26utm_medium%3Dfacebook%26utm_campaign%3Dblhshare"><img src="https://m.blog.hu/assets/frontend/img/rss/icon_facebook.png" alt="Megosztom Facebookon!"></a>
<a title="Megosztom Twitteren!" href="https://twitter.com/home?status=https%3A%2F%2Fharsanyireka.blog.hu%2F2016%2F11%2F17%2Frandom_betu_generator_7x5_dot_matrixon%3Futm_source%3Dbloghu_rss"><img src="https://m.blog.hu/assets/frontend/img/rss/icon_twitter.png" alt="Megosztom Twitteren!"></a>
<a title="Megosztom Tumblren!" href="https://www.tumblr.com/share?v=3&u=https%3A%2F%2Fharsanyireka.blog.hu%2F2016%2F11%2F17%2Frandom_betu_generator_7x5_dot_matrixon%3Futm_source%3Dbloghu_rss%26utm_medium%3Dtumblr%26utm_campaign%3Dblhshare&t=Random betű generátor, 7x5 dot matrixon"><img src="https://m.blog.hu/assets/frontend/img/rss/icon_tumblr.png" alt="Megosztom Tumblren!"></a>
<a href="https://harsanyireka.blog.hu/2016/11/17/random_betu_generator_7x5_dot_matrixon#comments"><img class="item_ctp" src="https://harsanyireka.blog.hu/rss/image/post/id/11968559" border="0" /></a><br /></p>
LED_panel
0
fizikai számítástechnika, arduino
https://harsanyireka.blog.hu
https://m.blog.hu/ha/harsanyireka/image/f4516644-01.jpg
https://harsanyireka.blog.hu/2016/11/03/rn42xvp_bluetooth_modul
rn42xvp bluetooth modul
2016-11-03T11:22:57+01:00
2016-11-03T11:22:57+01:00
harsanyireka
https://blog.hu/user/434264
<p><img src="https://m.blog.hu/ha/harsanyireka/image/rn42bt.jpg" alt="rn42bt.jpg" class="imgnotext open-in-modal" width="329" height="302" /></p>
<p><img src="https://m.blog.hu/ha/harsanyireka/image/_-2016-06-21-0_31_56-400x400_1.png" alt="_-2016-06-21-0_31_56-400x400_1.png" class="imgnotext" /></p>
<p> </p>
<p><em>forrás: <a href="http://design-lab.tuqulore.com/arduion_with_bluetooth/" target="_blank">http://design-lab.tuqulore.com/arduion_with_bluetooth/</a><br /><a href="http://qiita.com/ono4ji/items/84061d29fe015e39b860" target="_blank">http://qiita.com/ono4ji/items/84061d29fe015e39b860</a></em></p>
<p> </p>
<p>bekötése:</p>
<p><span>* 3.3V -> Vcc</span><br /><span>* GND -> GND</span><br /><span>* D10 -> RX(1KΩ, 510Ω)</span><br /><span>* D11 -> TX</span></p>
<p><img src="https://m.blog.hu/ha/harsanyireka/image/4a0449c8-8963-2101-4df9-a2c482c7bb04.png" alt="4a0449c8-8963-2101-4df9-a2c482c7bb04.png" class="imgnotext" /></p>
<p> </p>
<p> </p>
<p><span>Adatátviteli sebesség (baudrate) beállítása: <br /><a href="https://github.com/ono4ji/handsignglove/blob/master/sketch_bluetoothBaudRateSetting/sketch_bluetoothBaudRateSetting.ino" target="_blank">https://github.com/ono4ji/handsignglove/blob/master/sketch_bluetoothBaudRateSetting/sketch_bluetoothBaudRateSetting.ino</a><br /></span></p>
<p>Állítsd a soros portot 115200-ra (alapértelmezett) és írd be a parancsot! Ezzel átállítottad 9600bps-re az adatátviteli sebességet:</p>
<p><span>s[enter]<br /><span>b[enter]</span><br /><span>r[enter]</span></span></p>
<p><span><img src="https://m.blog.hu/ha/harsanyireka/image/c6947210-b7a6-a86a-1ed0-d7eee6f06a3e.png" alt="c6947210-b7a6-a86a-1ed0-d7eee6f06a3e.png" class="imgnotext" /></span></p>
<p> </p>
<p><span>HID</span><span><br /><a href="https://github.com/ono4ji/handsignglove/blob/master/sketch_bluetoothHIDsetting/sketch_bluetoothHIDsetting.ino" target="_blank">https://github.com/ono4ji/handsignglove/blob/master/sketch_bluetoothHIDsetting/sketch_bluetoothHIDsetting.ino</a></span></p>
<p><span>9600 bps-sel írd be a következő parancsokat!</span></p>
<p><span>s[enter]</span><br /><span>d[enter]</span><br /><span>m[enter]</span><br /><span>p[enter]</span><br /><span>k[enter]</span><br /><span>n[enter]</span><br /><span>d[enter]</span><br /><span>r[enter]</span></p>
<p><span><img src="https://m.blog.hu/ha/harsanyireka/image/4bfeedcf-308d-15b3-1110-e3b640cb6cd6.png" alt="4bfeedcf-308d-15b3-1110-e3b640cb6cd6.png" class="imgnotext" /></span></p>
<p> </p>
<p><a title="Megosztom Facebookon!" href="https://www.facebook.com/sharer.php?api_key=120587281320910&locale=hu_HU&method=stream.share&u=https%3A%2F%2Fharsanyireka.blog.hu%2F2016%2F11%2F03%2Frn42xvp_bluetooth_modul%3Futm_source%3Dbloghu_rss%26utm_medium%3Dfacebook%26utm_campaign%3Dblhshare"><img src="https://m.blog.hu/assets/frontend/img/rss/icon_facebook.png" alt="Megosztom Facebookon!"></a>
<a title="Megosztom Twitteren!" href="https://twitter.com/home?status=https%3A%2F%2Fharsanyireka.blog.hu%2F2016%2F11%2F03%2Frn42xvp_bluetooth_modul%3Futm_source%3Dbloghu_rss"><img src="https://m.blog.hu/assets/frontend/img/rss/icon_twitter.png" alt="Megosztom Twitteren!"></a>
<a title="Megosztom Tumblren!" href="https://www.tumblr.com/share?v=3&u=https%3A%2F%2Fharsanyireka.blog.hu%2F2016%2F11%2F03%2Frn42xvp_bluetooth_modul%3Futm_source%3Dbloghu_rss%26utm_medium%3Dtumblr%26utm_campaign%3Dblhshare&t=rn42xvp bluetooth modul"><img src="https://m.blog.hu/assets/frontend/img/rss/icon_tumblr.png" alt="Megosztom Tumblren!"></a>
<a href="https://harsanyireka.blog.hu/2016/11/03/rn42xvp_bluetooth_modul#comments"><img class="item_ctp" src="https://harsanyireka.blog.hu/rss/image/post/id/11927145" border="0" /></a><br /></p>
bluetooth
0
fizikai számítástechnika, arduino
https://harsanyireka.blog.hu
https://m.blog.hu/ha/harsanyireka/image/rn42bt.jpg
https://harsanyireka.blog.hu/2016/11/03/7-szegmensu_led_kijelzo
7-szegmensű LED kijelző
2016-11-03T10:59:15+01:00
2016-11-03T10:59:15+01:00
harsanyireka
https://blog.hu/user/434264
<p style="text-align: left;"><em>forrás: http://www.exploreembedded.com/wiki/index.php?title=5_Display_numbers_on_Seven_Segment_Display </em></p>
<p style="text-align: left;">bekötése: 220 Ohm ellenállásokkal</p>
<p><img src="https://m.blog.hu/ha/harsanyireka/image/680px-arduino_display_numbers_on_seven_segment_display.JPG" alt="680px-arduino_display_numbers_on_seven_segment_display.JPG" class="imgnotext" /></p>
<p> </p>
<p> kód <a href="https://m.blog.hu/ha/harsanyireka/image/_7szegmenses.rar" target="_self">letöltés</a></p>
<p> </p>
<p> </p>
<p><a title="Megosztom Facebookon!" href="https://www.facebook.com/sharer.php?api_key=120587281320910&locale=hu_HU&method=stream.share&u=https%3A%2F%2Fharsanyireka.blog.hu%2F2016%2F11%2F03%2F7-szegmensu_led_kijelzo%3Futm_source%3Dbloghu_rss%26utm_medium%3Dfacebook%26utm_campaign%3Dblhshare"><img src="https://m.blog.hu/assets/frontend/img/rss/icon_facebook.png" alt="Megosztom Facebookon!"></a>
<a title="Megosztom Twitteren!" href="https://twitter.com/home?status=https%3A%2F%2Fharsanyireka.blog.hu%2F2016%2F11%2F03%2F7-szegmensu_led_kijelzo%3Futm_source%3Dbloghu_rss"><img src="https://m.blog.hu/assets/frontend/img/rss/icon_twitter.png" alt="Megosztom Twitteren!"></a>
<a title="Megosztom Tumblren!" href="https://www.tumblr.com/share?v=3&u=https%3A%2F%2Fharsanyireka.blog.hu%2F2016%2F11%2F03%2F7-szegmensu_led_kijelzo%3Futm_source%3Dbloghu_rss%26utm_medium%3Dtumblr%26utm_campaign%3Dblhshare&t=7-szegmensű LED kijelző"><img src="https://m.blog.hu/assets/frontend/img/rss/icon_tumblr.png" alt="Megosztom Tumblren!"></a>
<a href="https://harsanyireka.blog.hu/2016/11/03/7-szegmensu_led_kijelzo#comments"><img class="item_ctp" src="https://harsanyireka.blog.hu/rss/image/post/id/11927095" border="0" /></a><br /></p>
LED_panel
7-szegmens
0
fizikai számítástechnika, arduino
https://harsanyireka.blog.hu
https://m.blog.hu/ha/harsanyireka/image/680px-arduino_display_numbers_on_seven_segment_display.JPG
https://harsanyireka.blog.hu/2014/06/22/14_2_konyvtarak_hasznos_eszkozokhoz_motorok_programozo
14. /2) Könyvtárak hasznos eszközökhöz: motorok, programozó
2014-06-22T18:00:36+02:00
2014-06-22T18:00:36+02:00
harsanyireka
https://blog.hu/user/434264
<p><span style="color: #0000ff;">Lektorált tananyag, ami a BKF Digitális és Kollaboratív Művészet (DIKOM) pályázatnak keretén belül valósult meg.</span></p>
<p><span style="color: #0000ff;">Szerző: Harsányi Réka, Társszerző: Juhász Márton András, Lektor: Fernezelyi Márton</span></p>
<p> </p>
<h2><span>Servo könyvtár</span></h2>
<p>A szervomotorok olyan aktuátorok, melyek a visszacsatolás elvén működnek. A legegyszerűbb esetben a szervo tengelyét elfordító motor egy áttételen keresztül egy potmétert is elforgat, ami egy komparátor áramkör egyik bemenetéhez kapcsolódik. A komparátor egyszerű analóg integrált áramkör, amit legegyszerűbben úgy képzelhetünk el, mint egy mérleget. A szervo esetében a „mérleg” egyik oldalán a potméter – és így a tengely – állapota, a másik oldalán a szervo bemenetére adott feszültségszint a „súly”, a „mérleg nyelve” pedig a motor elfordulási irányát és erejét reprezentálja. Ily módon meghatározott feszültségszinteknek megfeleltethetők a motortengely állásának szögei. A Servo könyvtárral az Arduino PWM képes kimeneteit felhasználva, a csatlakoztatott szervomotorokat az elfordulás szögének megadásával irányíthatjuk. Miután a potméter nem képes a körbeforgásra, a megadható szögek 0 és 180 fok közé esnek és mindig egész számok.</p>
<p><span><img src="https://m.blog.hu/ha/harsanyireka/image/14.4.%20%E2%80%A0bra%20Szervomotor%20szerkezete.png" alt="14.4. †bra Szervomotor szerkezete.png" class="imgnotext" width="451" height="558" /></span></p>
<p style="text-align: center;"><em>Szervomotor szerkezete</em> </p>
<p>(A bonyolultabb felépítésű szervomotorok komparátor helyett digitális jelfeldolgozást is végeznek. A potméter szerepét optikai vagy mágneses kódtárcsa váltja fel és a kommunikáció a motorral digitális buszon zajlik.) Hobbi és modellezési célra három méretben szabványosították a szervokat. Alaptípusaikat tekintve megkülönböztetünk nagy nyomatékú és nagy sebességű motorokat. Mindegyikre jellemző, hogy három vezeték tartozik hozzájuk: föld (barna/fekete), táp (piros) és vezérlés (narancs/fehér).</p>
<p><em> </em></p>
<p><em>Amire szükség lesz:</em></p>
<p>- Arduino,</p>
<p>- hobbi szervomotor,</p>
<p>- 10 kiloohmos potméter.</p>
<p> </p>
<p><em>Kapcsolás:</em></p>
<p>Kössük be a potméterünket feszültségosztóként, a közepét pedig az A0 analóg bemenetre. A szervomotor tápkábeleit az Arduino 5 V-os tápvezetékeihez, vezérlőkábelét a 9-es PWM kimenethez csatlakoztassuk.</p>
<p> <img src="https://m.blog.hu/ha/harsanyireka/image/14.5.%20%E2%80%A0bra%20Szervomotor%20%C3%87s%20potm%C3%87ter%20bek%C3%AEt%C3%87se.png" alt="14.5. †bra Szervomotor Çs potmÇter bekîtÇse.png" class="imgnotext" /></p>
<p style="text-align: center;"><em>Szervomotor és potméter bekötése</em></p>
<p><em> </em></p>
<p>Arduino kód: <a href="https://m.blog.hu/ha/harsanyireka/image/75szervo.zip" target="_self">75szervo</a></p>
<p> </p>
<h4><span>attach()</span></h4>
<p>Szervo objektumhoz fizikai csatlakozó címét köti.</p>
<p><em>Szintaxisa:</em></p>
<p>Servo.attach(pin),</p>
<p>Servo.attach(pin, min, max).</p>
<p><em>Paraméterei:</em></p>
<p><strong>Servo</strong>: Servo típusú változó,</p>
<p><strong>pin: </strong>a PWM képes kimenet, amire a motor vezérlését kötöttük,</p>
<p><strong>min</strong>: a vezérlőimpulzus szélességének minimuma mikroszekundumokban kifejezve, alapállapotban 544 és ez feleltethető meg a motoron a 0 foknak. Opcionális finomhangolásra ad lehetőséget.</p>
<p><strong>max</strong>: a vezérlőimpulzus szélességének maximuma, alapállapotban 2400 mikroszekundum.</p>
<p><strong> </strong></p>
<h4><span>write()</span></h4>
<p><span>A megadott pozícióba mozgatja a szervomotort. Szabvány szervo esetén a megadott szögnek megfelelően mozdul el a motor tengelye. (Ha szétszedjük a szervomotort és a potméter helyére két egyforma értékű ellenállást teszünk, mintha a potméter mindig középen állna, akkor folyamatosan forgó mozgást végző motort fogunk kapni, aminek ez a parancs a sebességét fogja állítani. 180 esetén az egyik irányba forog teljes sebességgel, 0 esetén a másikba és 90-nél megáll.)</span></p>
<p><em><span>Szintaxisa:</span></em></p>
<p><span>Servo.write(val).</span></p>
<p><em><span>Paramétere:</span></em></p>
<p><strong><span>Servo</span></strong><span>: Servo típusú változó,</span></p>
<p><strong><span>val</span></strong><span>: a szög, ahová a motort fordítani szeretnénk.</span></p>
<p> </p>
<h4><span>writeMicroseconds()</span></h4>
<p><span>Abban az esetben, ha precízebb mozgatásra van szükségünk, célszerű nem szögértékben megadni az elfordulás mértékét, hanem a vezérlő impulzus szélességét közvetlenül mikroszekundumokban. Ideális esetben 1000 körül az óramutató járásának megfelelő irányú végállapotot, 2000 körül az ellenkező végállapotot és 1500 körül a középső állapotot kellene jelentenie. Ez a gyakorlatban nem jellemző, valahol 700 és 2300 körüli értékek az irányadók.</span> </p>
<p><em><span>Szintaxisa:</span></em></p>
<p><span>Servo.writeMicroseconds(val).</span> </p>
<p><em><span>Paramétere:</span></em></p>
<p><strong><span>Servo</span></strong><span>: Servo típusú változó,</span></p>
<p><strong><span>val</span></strong><span>: impulzus szélessége mikroszekundumokban.</span></p>
<p> </p>
<h4><span>read()</span></h4>
<p><span>Visszaadja a write() utasításnak legutoljára megadott értéket.</span> </p>
<p><em><span>Szintaxisa:</span></em></p>
<p><span>Servo.read().</span></p>
<p> </p>
<h4><span>attached()</span></h4>
<p>Megvizsgálja, hogy egy Servo objektumhoz kötöttünk-e fizikai csatlakozót. Bool típusú változót ad vissza.</p>
<p><em>Szintaxisa:</em></p>
<p>Servo.attached().</p>
<p> </p>
<h4><span>detach()</span></h4>
<p>Megszünteti a Servo objektum fizikai címhez kötését.</p>
<p><em>Szintaxisa:</em></p>
<p>Servo.detach(pin).</p>
<p><em>Paraméterei:</em></p>
<p><strong>Servo</strong>: Servo típusú változó,</p>
<p><strong>pin: </strong>a PWM képes kimenet, amire a motor vezérlését kötöttük.</p>
<p> </p>
<h2>Stepper Motor könyvtár</h2>
<p>A léptetőmotorok olyan egyenáramú motorok, amiknek az állórésze több elektromágnest tartalmaz. A tengelyen elhelyezett aktív mágnest (forgórész) az egymás után szekvenciálisan be-/kikapcsolt elektromágnesek kis lépésekben elfordítják. Jelentőségük az, hogy visszacsatolás nélkül nagy pontosságú és apró lépésekből álló forgómozgást lehet velük elérni. Két alaptípust különböztetünk meg az elektromágnesek tekercseinek kivezetései alapján. Az <em>unipoláris</em> motorok esetén minden tekercs egyik vége közös vezetékként hagyja el a motor burkolatát, míg a <em>bipoláris</em> motorok esetén a tekercsek kivezetései szabadon állnak.</p>
<p style="text-align: center;"><em><img src="https://m.blog.hu/ha/harsanyireka/image/14.6.%20%E2%80%A0bra%20Unipol%E2%80%A0ris%20l%C3%87ptet%C3%A3motor%20v%E2%80%A0zlatrajza.png" alt="14.6. †bra Unipol†ris lÇptetãmotor v†zlatrajza.png" class="imgnotext" /></em></p>
<p style="text-align: center;"><em>Unipoláris léptetőmotor vázlatrajza </em></p>
<p><span>A tekercseket meghatározott rendben kell működtetni, hogy a felépülő mágneses tér négy lépésben fordítson a tengelyen:</span></p>
<p><em> </em></p>
<table width="597" height="138">
<tbody>
<tr>
<td>lépés</td>
<td>1 tekercs</td>
<td>2 tekercs</td>
<td>3 tekercs</td>
<td>4 tekercs</td>
</tr>
<tr>
<td>1</td>
<td>magas</td>
<td>alacsony</td>
<td>magas</td>
<td>alacsony</td>
</tr>
<tr>
<td>2</td>
<td>alacsony</td>
<td>magas</td>
<td>magas</td>
<td>alacsony</td>
</tr>
<tr>
<td>3</td>
<td>alacsony</td>
<td>magas</td>
<td>alacsony</td>
<td>magas</td>
</tr>
<tr>
<td>4</td>
<td>magas</td>
<td>alacsony</td>
<td>magas</td>
<td>alacsony</td>
</tr>
</tbody>
</table>
<p><em><br />Logikai jelek a negyed lépésekhez</em> </p>
<p><em> </em></p>
<p>A léptetőmotorokat leíró legfontosabb adat, hogy egy lépés alatt hány fokot fordulnak el. Egy 1,8 fok/lépés precizitású motor 200 lépésben fordul teljesen körbe, tehát a 14.1 táblázatban látható lépéseket fordulatonként 200-szor kell megismételni.</p>
<p> </p>
<h4>Unipoláris léptetőmotorok</h4>
<p>A léptetőmotorok általában több áramot vesznek fel működésükhöz, mint amennyit az Arduino digitális csatornáin keresztül kezelni képes, és sok esetben a működésükhöz szükséges feszültség sem 5 V, hanem magasabb. Az alábbi kapcsolásban szereplő integrált áramkör az ULN2004 egy teljesítmény-tranzisztorokból álló úgynevezett Darlington sor. Univerzálisan felhasználhatjuk az Arduino kimeneteinek erősítésére, csatornánként 50 V-ig 500 mA-t képes kapcsolni. Minden bemenetre adott magas szintű jel a bemenethez tartozó kimenet és a föld közé kötött fogyasztót üzembe helyezi. A COM jelzésű lábon kell, legyen az a közös tápfeszültség, amit az IC-vel kapcsoltatni szeretnénk.</p>
<p style="text-align: center;"><img src="https://m.blog.hu/ha/harsanyireka/image/14.7.%20%E2%80%A0bra%20ULN2804,%20mint%20l%C3%87ptet%C3%A3motor%20meghajt%C2%A2.jpeg" alt="14.7. †bra ULN2804, mint lÇptetãmotor meghajt¢.jpeg" class="imgnotext" /> <em>ULN2804, mint léptetőmotor meghajtó</em></p>
<p>Az unipoláris motorok általában 5 vagy 6 kivezetéssel rendelkeznek. A vezetékek közül 4 a forgórészt körülfogó tekercsek egy-egy vége, az ötödik pedig az összes tekercs másik vége egy vezetéken. Amennyiben 6 vezetéket látunk, akkor a motorban két tekercs van, amik két-két vége az első négy kivezetés, az ötödik és hatodik elvezetések pedig a tekercsek közepére csatlakoznak. A tekercsek ellenállásának megmérésével – egy műszer segítségével – kikövetkeztethetjük, hogy melyik kivezetés hová tartozik. A közös elvezetés egyben azt is jelenti, hogy a tekercsek és a mágneses tér polaritása mindig ugyanaz lesz.</p>
<p><img src="https://m.blog.hu/ha/harsanyireka/image/Arduino%20motor-shield%20%C3%87s%20l%C3%87ptet%C3%A3%20motor.jpg" alt="Arduino motor-shield Çs lÇptetã motor.jpg" class="imgnotext" width="501" height="376" /></p>
<p style="text-align: center;"><em>Arduino motor-shield és léptető motor</em></p>
<p> </p>
<h4>Bipoláris léptetőmotorok</h4>
<p>Bipoláris motorok esetén a tengely forgatásához az elektromágnesek polaritását is meg kell változtatni, ezért a két tekercs mindkét kivezetése szabadon áll. A polaritás megváltoztatásának legegyszerűbb módja H-híd kapcsolással valósítható meg, ami négy tranzisztorból álló áramkör. Képzeljük el úgy, mint négy kapcsolót, amik közül kettő a tápvezetékek pozitív, kettő pedig a negatív ágát tudja kapcsolni. Amikor (14.8. ábra) S1 és S4 megszakítja, S2 és S3 zárja az áramkört, az áram az M-mel jelölt motorban az egyik irányba folyik. Megfordítva a kapcsolók állását, az áram iránya is megfordul, csakúgy, mint a tekercs által keltett mágneses tér polaritása.</p>
<p> <img src="https://m.blog.hu/ha/harsanyireka/image/14.8.%20%E2%80%A0bra%20H-h%C2%B0d%20kapcsol%E2%80%A0s%20funkcion%E2%80%A0lis%20rajza.jpeg" alt="14.8. †bra H-h°d kapcsol†s funkcion†lis rajza.jpeg" class="imgnotext" width="306" height="183" /></p>
<p style="text-align: center;"><em>H-híd kapcsolás funkcionális rajza </em></p>
<p><em> </em></p>
<p>A gyakorlatban használhatunk integrált H-híd áramkört (pl. L293D) két egyenáramú motorok forgásirányának váltására vagy egy bipoláris léptetőmotor meghajtására. </p>
<p><em> <img src="https://m.blog.hu/ha/harsanyireka/image/14.9.%20%E2%80%A0bra%20L293D%20integr%E2%80%A0lt%20H-h%C2%B0d%20bek%C3%AEt%C3%87se%20bipol%E2%80%A0ris%20l%C3%87ptet%C3%A3motorral.gif" alt="14.9. †bra L293D integr†lt H-h°d bekîtÇse bipol†ris lÇptetãmotorral.gif" class="imgnotext" /></em></p>
<p style="text-align: center;"><em>L293D integrált H-híd bekötése bipoláris léptetőmotorral</em></p>
<p><em> </em></p>
<p>Amennyiben nem szeretnénk az áramkörök megépítésével fáradozni, különféle motorok meghajtására a legkézenfekvőbb az Adafruit által gyártott MotorShield. A kiegészítő modul tartalmaz két darab L293D-t és a vezérlésüket leegyszerűsítő logikai áramkört. Alkalmazásával egyidejűleg meg tudunk hajtani 4 db egyenáramú motort, vagy két léptetőmotort és mindezektől függetlenül két szervomotort is.</p>
<p> <img src="https://m.blog.hu/ha/harsanyireka/image/14.10.%20%E2%80%A0bra%20Adafruit%20MotorShield.jpeg" alt="14.10. †bra Adafruit MotorShield.jpeg" class="imgnotext" width="516" height="387" /></p>
<p style="text-align: center;"><em>Adafruit MotorShield</em></p>
<p> </p>
<h4>A stepper motor könyvtár használata</h4>
<p><em>Amire szükség lesz:</em></p>
<p>- Arduino,</p>
<p>- unipoláris vagy bipoláris léptetőmotor,</p>
<p>- ULN2804 vagy L293D vagy Adafruit MotorShield,</p>
<p>- 10 kiloohmos potméter.</p>
<p> </p>
<p><em>Kapcsolások:</em></p>
<p><em> <img src="https://m.blog.hu/ha/harsanyireka/image/14.1.4._uj01_bipolar_stepper_two_pins2.png" alt="14.1.4._uj01_bipolar_stepper_two_pins2.png" class="imgnotext" /></em></p>
<p style="text-align: center;"><em>2 pines bipoláris stepper motor L293D H-híddal</em></p>
<p style="text-align: center;"><em> <img src="https://m.blog.hu/ha/harsanyireka/image/14.1.4._uj02_bipolar_stepper_four_pins.jpg" alt="14.1.4._uj02_bipolar_stepper_four_pins.jpg" class="imgnotext" /></em></p>
<p style="text-align: center;"><em>4 pines bipoláris stepper motor L293D H-híddal</em></p>
<p> </p>
<p>A fentieknek megfelelően csatlakoztassunk egy léptetőmotort, és jegyezzük meg, melyik tekercs melyik Arduino kivezetéssel hozható működésbe. A potmétert feszültségosztóként a középső kivezetésével az A0 analóg bemenetre kössük.</p>
<p> </p>
<p>Arduino kód: <a href="https://m.blog.hu/ha/harsanyireka/image/76sztepper.zip" target="_self">76sztepper</a></p>
<p> </p>
<h3><span>A stepper motor könyvtár függvényei</span></h3>
<h4><span>Stepper()</span></h4>
<p>Létrehozza a Stepper osztály egy példányát a megadott lépésszámmal és tekercsekhez tartozó Arduino csatornákkal.</p>
<p><em>Szintaxisa:</em></p>
<p>Stepper(steps, pin1, pin2),</p>
<p>Stepper(steps, pin1, pin2, pin3, pin4).</p>
<p><em>Paraméterei:</em></p>
<p><strong>steps:</strong> az egy körülforduláshoz szükséges lépések száma (motortól függ),</p>
<p><strong>pin1, pin2:</strong> kétvezetékes meghajtás esetén (kiegészítő logikai áramkör szükséges) a meghajtó vezérléséhez használt csatornák száma,</p>
<p><strong>pin1, pin2, pin3, pin4:</strong> négyvezetékes meghajtás esetén a tekercsekhez tartozó csatornák száma.</p>
<p><em>Példakód:</em></p>
<p><span style="color: #ff6600;">Stepper myStepper = Stepper(200,4,5,6,7);</span></p>
<p> </p>
<h4><span>setSpeed()</span></h4>
<p>Beállítja a motor forgási sebességét a megadott fordulat/perc alapján.</p>
<p><em>Szintaxisa:</em></p>
<p>Stepper.setSpeed(rpm). </p>
<p><em>Paraméterei:</em></p>
<p><strong>Stepper</strong>: Stepper osztály példánya,</p>
<p><strong>rpm</strong>: forgási sebesség fordulat/percben.</p>
<p> </p>
<h4><span>step()</span></h4>
<p>Adott számú lépést hajtat végre a motorral. Ha a megadott érték pozitív, akkor egyik, ha negatív, akkor a másik irányba forgat. Ez a függvény megvárja, amíg a motor megteszi a lépéseket.</p>
<p><em>Szintaxisa:</em></p>
<p>Stepper.step(steps).</p>
<p><em>Paraméterei:</em></p>
<p><strong>Stepper</strong>: Stepper osztály példánya,</p>
<p><strong>steps</strong>: lépések száma, polaritása a forgás irányát határozza meg.</p>
<p> </p>
<p> </p>
<h2>Arduino, mint ISP</h2>
<p>Az Arduino legnagyobb előnye és egyszerű használatának kulcsa, hogy a fejlesztőkörnyezetből – minden egyéb eszköz nélkül – az USB porton keresztül feltölthetjük a megírt programot, ami ezt követően futtatásra kerül. Az állandó program, ami ezt lehetővé teszi, az Arduino firmware-e, az úgynevezett <em>bootloader</em>. (Az ICSP csatlakozó SPI kommunikációs funkciójának tárgyalásakor már említettük (14.1.5.), hogy a bootloader feltöltése miatt ez a felület az összes típusú lapkán megtalálható.) Az ISP (In System Programmer) egy olyan eszköz, amivel bootloader nélküli mikrokontrollerbe tölthetünk fel kódot. A környezet példakódjai között megtaláljuk az ArduinoISP firmware-t, ami AVR ISP eszközzé alakítja az Arduinot. Lehetséges alkalmazások közül az egyik leghasznosabb a tönkrement kontrollerű Arduinok javítása – elegendő kivenni a tokjából a rossz IC-t és a helyére került újba beégetni a bootloadert egy másik Arduino segítségével. Készíthetünk egyetlen kontrollerből is költséghatékony Arduinot ugyanezzel a módszerrel.</p>
<p> </p>
<p><em>Instrukciók bootloader beégetéséhez:</em></p>
<ol>
<li>Töltsük fel a <strong>programozóként</strong> használni kívánt Arduinora az ArduinoISP kódot.</li>
<li>Tegyünk egy 10 uF-os kondenzátort a programozó RESET lába és a föld közé.</li>
<li>Kössük be a programozandó eszközt az alábbi példák egyike szerint.</li>
<li>Válasszuk ki a Board menüből a <strong>programozandó</strong> eszköz típusát.</li>
<li>Burn bootloader menüből válasszuk az Arduino és ISP parancsot.</li>
</ol>
<p> </p>
<h4>Arduino programozása Arduinoval</h4>
<p><span><img src="https://m.blog.hu/ha/harsanyireka/image/14.11.%20%E2%80%A0bra%20UNO,%20Duemilanove,%20Diecimila%20programoz%E2%80%A0sa.png" alt="14.11. †bra UNO, Duemilanove, Diecimila programoz†sa.png" class="imgnotext" /></span></p>
<p style="text-align: center;"><em>UNO, Duemilanove, Diecimila programozása</em></p>
<p><em> </em></p>
<h4>ATmega mikrokontroller programozása Arduinoval</h4>
<p><span>Abban az esetben, ha egy feladat ellátásához nincs szükség az Arduino USB csatlakozójára és már megírtunk egy jól működő programot, feltölthetjük egy szabadon álló mikrokontrollerre, ami ugyanúgy fogja végrehajtani azt, mint az Arduinonk.</span></p>
<p><img src="https://m.blog.hu/ha/harsanyireka/image/14.12.%20%E2%80%A0bra%20Atmega168%20%C3%87s%20Atmega328%20l%E2%80%A0bkioszt%E2%80%A0sa%20%C3%87s%20az%20Arduino%20megfelel%C3%A3%20csatorn%E2%80%A0i.png" alt="14.12. †bra Atmega168 Çs Atmega328 l†bkioszt†sa Çs az Arduino megfelelã csatorn†i.png" class="imgnotext" /> </p>
<p style="text-align: center;"><em>Atmega168 és Atmega328 lábkiosztása és az Arduino megfelelő csatornái</em></p>
<p> </p>
<p style="text-align: center;"><em><img src="https://m.blog.hu/ha/harsanyireka/image/14.13.%20%E2%80%A0bra%20Atmega%20programoz%E2%80%A0sa.png" alt="14.13. †bra Atmega programoz†sa.png" class="imgnotext" /></em></p>
<p style="text-align: center;"><em>Atmega programozása</em></p>
<p> </p>
<p><strong> </strong></p>
<p>forrás: <span><a href="http://arduino.cc/en/Tutorial/HomePage" target="_blank">http://arduino.cc/en/Tutorial/HomePage</a>, <a href="http://arduino.cc/en/reference/stepper" target="_blank">http://arduino.cc/en/reference/stepper</a>, <a href="http://arduino.cc/en/reference/servo" target="_blank">http://arduino.cc/en/reference/servo</a>, <a href="http://arduino.cc/en/Tutorial/ArduinoISP" target="_blank">http://arduino.cc/en/Tutorial/ArduinoISP</a></span><a href="http://arduino.cc/en/Tutorial/HomePage" target="_blank"></a></p>
<p><a title="Megosztom Facebookon!" href="https://www.facebook.com/sharer.php?api_key=120587281320910&locale=hu_HU&method=stream.share&u=https%3A%2F%2Fharsanyireka.blog.hu%2F2014%2F06%2F22%2F14_2_konyvtarak_hasznos_eszkozokhoz_motorok_programozo%3Futm_source%3Dbloghu_rss%26utm_medium%3Dfacebook%26utm_campaign%3Dblhshare"><img src="https://m.blog.hu/assets/frontend/img/rss/icon_facebook.png" alt="Megosztom Facebookon!"></a>
<a title="Megosztom Twitteren!" href="https://twitter.com/home?status=https%3A%2F%2Fharsanyireka.blog.hu%2F2014%2F06%2F22%2F14_2_konyvtarak_hasznos_eszkozokhoz_motorok_programozo%3Futm_source%3Dbloghu_rss"><img src="https://m.blog.hu/assets/frontend/img/rss/icon_twitter.png" alt="Megosztom Twitteren!"></a>
<a title="Megosztom Tumblren!" href="https://www.tumblr.com/share?v=3&u=https%3A%2F%2Fharsanyireka.blog.hu%2F2014%2F06%2F22%2F14_2_konyvtarak_hasznos_eszkozokhoz_motorok_programozo%3Futm_source%3Dbloghu_rss%26utm_medium%3Dtumblr%26utm_campaign%3Dblhshare&t=14. /2) Könyvtárak hasznos eszközökhöz: motorok, programozó"><img src="https://m.blog.hu/assets/frontend/img/rss/icon_tumblr.png" alt="Megosztom Tumblren!"></a>
<a href="https://harsanyireka.blog.hu/2014/06/22/14_2_konyvtarak_hasznos_eszkozokhoz_motorok_programozo#comments"><img class="item_ctp" src="https://harsanyireka.blog.hu/rss/image/post/id/6401007" border="0" /></a><br /></p>
motorok
leckék
könyvtárak
stepper
servo
ISP
lektorált
0
fizikai számítástechnika, arduino
https://harsanyireka.blog.hu
http://m.cdn.blog.hu/ha/harsanyireka/image/14.4.%20%E2%80%A0bra%20Szervomotor%20szerkezete.png
https://harsanyireka.blog.hu/2014/06/22/14_1_konyvtarak_hasznos_eszkozokhoz_hattertar_kijelzo
14. /1) Könyvtárak hasznos eszközökhöz: háttértár, kijelző
2014-06-22T17:18:56+02:00
2014-06-22T17:18:56+02:00
harsanyireka
https://blog.hu/user/434264
<p><span style="color: #0000ff;">Lektorált tananyag, ami a BKF Digitális és Kollaboratív Művészet (DIKOM) pályázatnak keretén belül valósult meg.</span></p>
<p><span style="color: #0000ff;">Szerző: Harsányi Réka, Társszerző: Juhász Márton András, Lektor: Fernezelyi Márton </span></p>
<p> </p>
<h2><span>EEPROM könyvtár</span></h2>
<p>Az Arduino három különböző típusú memóriával rendelkezik, az egyes típusok kapacitása a mikrokontroller fajtájától függ:</p>
<ul>
<li><em>Flash</em>: Többszörösen újraírható memória, tartalma az eszköz kikapcsolását követően is megmarad. A fejlesztőkörnyezet által lefordított kódunk itt tárolódik gépi utasítások formájában.</li>
<li><em>RAM</em>: Gyors hozzáférésű memória s programunk futtatása közben ideiglenesen tárolt adatok számára. Tartalma kikapcsoláskor elvész.</li>
<li><em>EEPROM</em>: Flashnél régebbi technológia a kikapcsolást követően is megőrzendő adatok, konfigurációs beállítások, kezdeti állapotok, hosszabb szövegek eltárolásához. Nagyságrendileg 100.000 törlés az életideje.</li>
</ul>
<p>Az EEPROM könyvtár azokat a funkciókat fogja össze, amikkel bájtonként tudjuk írni és olvasni a beépített memória ezen típusát. Az Arduino Mega kontrollerének (ATmega1280 és ATmega2560) <strong>4096</strong>, az UNO és Duemilanove (ATmega328) <strong>1024</strong>, a Diecimila, NG (ATmega168) és Digital (ATmega8) <strong>512</strong> bájt a kapacitása.</p>
<p> </p>
<p><em>A könyvtár függvényei:</em></p>
<p>- read()</p>
<p>- write()</p>
<p> </p>
<h4><span>EEPROM.read()</span><strong style="line-height: 17px; color: #444444; font-family: Arial, Verdana, sans-serif; font-size: 13px;"> </strong></h4>
<p>Visszaadja az EEPROM adott címén található bájt értékét.</p>
<p><em>Szintaxisa:</em></p>
<p>EEPROM.read(address).</p>
<p><em>Paraméterei:</em></p>
<p><strong>address</strong>: a memóriacím, ahonnan az olvasás kezdődik (0-tól számozva).</p>
<p> </p>
<p>Arduino kód: <a href="https://m.blog.hu/ha/harsanyireka/image/69eepromread.zip" target="_self">69eepromread</a></p>
<p> </p>
<h4><span>EEPROM.write()</span></h4>
<p>Beállítja az EEPROM adott címén a megadott bájt értékét. Egy bájt kiírása 3,3 ms-ot vesz igénybe, ami a többi memóriatípus sebességét tekintve igen lassú folyamatnak számít, használata kihathat a teljes kódunk futására. Ne felejtsük el, hogy az EEPROM 100.000 írás után használhatatlanná válik!</p>
<p><em>Szintaxisa:</em></p>
<p>EEPROM.write(address, value). </p>
<p><em>Paraméterei:</em></p>
<p><strong>address</strong>: a memóriacím, ahonnan az olvasás kezdődik (0-tól számozva),</p>
<p><strong>value</strong>: a bájt értéke, amit szeretnénk beírni.</p>
<p> </p>
<p>Arduino kód: <a href="https://m.blog.hu/ha/harsanyireka/image/70eepromwrite.zip" target="_self">70eepromwrite</a></p>
<p> </p>
<h2><span>LiquidCrystal könyvtár</span></h2>
<p>A Hitachi HD44780 folyadékkristályos kijelző meghajtó IC hosszú időn keresztül uralta a piacot, mint a rendkívül populáris, kizárólag monokróm szöveg megjelenítésére alkalmas faxok, telefonok, lézernyomtatók, fénymásoló gépek kijelzőjének vezérlője. Mostanra hobbisták és gyors prototipizálók közkedvelt megoldásává vált a mikrokontrollerek alfanumerikus üzeneteinek megjelenítésére. Az IC által meghajtott kijelzők pár általános szabálynak felelnek meg. Egy karakter mindig 5 vízszintes és 8 függőleges pixelből áll. A leggyakoribb típus egy sorban 8 karakter megjelenítésére alkalmas (8 x 1), de létezik 16 x 2, 20 x 2 és 20 x 4-es is. A kijelzők készülhetnek LED-es, fluoreszcens, elektrolumineszcens háttérvilágítással, vagy anélkül. Az IC maga is egy mikrokontroller, ROM-jában 208 karakter térképét tárolja – japán verziója a kana, európai verziója nyugati és cirill ABC betűiből áll. A LiquidCrystal könyvtár a vezérlő IC instrukciós kódjait és kommunikációs protokollját implementálta pár könnyen használható függvény formájában.</p>
<p> <img src="https://m.blog.hu/ha/harsanyireka/image/14.1%20%E2%80%A0bra%2016%20x%202-es%20alfanumerikus%20LCD%20HD44780-as%20vez%C3%87rl%C3%A3vel.png" alt="14.1 †bra 16 x 2-es alfanumerikus LCD HD44780-as vezÇrlãvel.png" class="imgnotext" /></p>
<p style="text-align: center;"><em>6 x 2-es alfanumerikus LCD HD44780-as vezérlővel</em></p>
<p><span>A kijelző csatolófelülete (interface), amihez kapcsolódhatunk, egy párhuzamos interfész – a 8 bitnyi adatot minden órajelre egyszerre kell megadni (<strong>D0-D7</strong> lábak). Szerencsére szöveges üzenetekhez 4 bites üzemmódot is választhatunk, ami szabadon hagy 4 Arduino csatornát más célokra. Az <strong>RS</strong> (Register Select) láb logikai alacsonyra vagy magasra állításával választhatjuk meg, hogy az adatvonalak a kijelző mely memóriaterületére írjanak. Az írást az <strong>EN</strong> (Enable) lábbal engedélyezhetjük. Az adatregiszter tárolja az ASCII kódolású bájtokat, amik karakterként kerülnek megjelenítésre, az instrukciós regiszterben pedig utasítások tárolódnak a meghajtó számára. Ezek az utasítások a kijelző törlésére, a kurzor mozgatására és egyéb funkciókra vonatkoznak. A regiszterek állapotát vissza is olvashatjuk – az <strong>RW</strong> láb állapotának változtatásával megfordítható a D0-D7 adatvonalak iránya. A kijelző kontrasztját analóg módon a tápfeszültség leosztásával <strong>Vo</strong> lábon tudjuk beállítani (vagy digitális potméterrel). A háttérvilágítást annak típusától függően a kontraszthoz hasonló módon kezelhetjük. Megfelelő illesztéssel LED-es háttérvilágítást az Arduino egy PWM képes kimenetére is köthetjük, így programozhatóvá válik a fényerő állítása is.</span></p>
<p><span> </span></p>
<p><em><span>Amire szükség lesz:</span></em></p>
<p><span>- </span><span>Arduino,</span></p>
<p><span>- </span><span>LCD kijelző HD44780-as meghajtóval,</span></p>
<p><span>- </span><span>10 kiloohmos potméter,</span></p>
<p><span>- </span><span>próbapanel,</span></p>
<p><span>- </span><span>vezetékek.</span></p>
<p><span> </span></p>
<p><em><span>Kapcsolás:</span></em></p>
<p><span>Kössük az LCD RS lábát az Arduino digitális 12-es csatornájára, az EN lábát pedig a digitális 11-re. Az LCD 4-es, 5-ös, 6-os, 7-es adatvonalait pedig rendre a digitális 5, 4, 3, 2 csatornákra. A 10 kiloohmos potméterrel készítsünk feszültségosztót az 5 V-os tápvezetékről és kössük be a potméter közepét az LCD kontrasztját szabályozó Vo lábra. Az LCD 5 V-os tápfeszültségről működik (GND, Vcc). RW-t kössük a földre!</span></p>
<p><em> <img src="https://m.blog.hu/ha/harsanyireka/image/14.2.%20%E2%80%A0bra%20LCD%20kijelz%C3%A3%20Arduinohoz%20kapcsol%E2%80%A0sa.png" alt="14.2. †bra LCD kijelzã Arduinohoz kapcsol†sa.png" class="imgnotext" /></em></p>
<p style="text-align: center;"><em>LCD kijelző Arduinohoz kapcsolása</em></p>
<p> </p>
<p>Arduino kód: <a href="https://m.blog.hu/ha/harsanyireka/image/71LCD.zip" target="_self">71LCD</a></p>
<p> </p>
<h4><span>LiquidCrystal()</span></h4>
<p><span>Létrehozza a kijelző egy példányát, ami 4 vagy 8 bites módban fog működni, attól függően, hogy a híváskor hány adatvonalat adunk meg.</span> </p>
<p><em><span>Szintaxisa:</span></em></p>
<p><span>LiquidCrystal(RS, EN, D4, D5, D6, D7),</span></p>
<p><span>LiquidCrystal(RS, RW, EN, D4, D5, D6, D7),</span></p>
<p><span>LiquidCrystal(RS, EN, D0, D1, D2, D3, D4, D5, D6, D7),</span></p>
<p><span>LiquidCrystal(RS, RW, EN, D0, D1, D2, D3, D4, D5, D6, D7).</span></p>
<p><em><span>Paraméterei:</span></em></p>
<p><strong><span>RS:</span></strong><span> Annak a digitális csatornának a száma, amihez a REGISTER SELECT van kötve.</span></p>
<p><strong><span>EN:</span></strong><span> Annak a digitális csatornának a száma, amihez az ENABLE van kötve.</span></p>
<p><strong><span>RW:</span></strong><span> Annak a digitális csatornának a száma, amihez a READ/WRITE van kötve.</span></p>
<p><strong><span>D0-D7:</span></strong><span> Azok a digitális csatornák, amikhez az adatvonalak kapcsolódnak.</span></p>
<p><span> </span></p>
<h4><span>begin()</span></h4>
<p><span>A kijelző méreteit, sorok és oszlopok számát határozza meg a könyvtár számára.</span></p>
<p><em><span>Szintaxisa:</span></em></p>
<p><span>lcd.begin(cols, rows).</span></p>
<p><em><span>Paraméterei:</span></em></p>
<p><strong><span>lcd:</span></strong><span> a LiquidCrystal példány neve,</span></p>
<p><strong><span>cols:</span></strong><span> a kijelző oszlopainak száma,</span></p>
<p><strong><span>rows:</span></strong><span> a kijelző sorainak száma.</span></p>
<p><strong><span> </span></strong></p>
<h4><strong><span>clear()</span></strong></h4>
<p><span>Üresre törli az megjelenítendő karaktereket tartalmazó adatregisztert és a kijelzőt.</span></p>
<p><em><span>Szintaxisa:</span></em></p>
<p><span>lcd.clear().</span></p>
<p><em><span>Paramétere:</span></em></p>
<p><strong><span>lcd:</span></strong><span> a LiquidCrystal példány neve.</span></p>
<p><strong><span> </span></strong></p>
<h4><span>home()</span></h4>
<p><span>A kurzort az első sor első karakterére – kijelző bal felső sarkába – mozgatja.</span> </p>
<p><em><span>Szintaxisa:</span></em></p>
<p><span>lcd.home().</span> </p>
<p><em><span>Paramétere:</span></em></p>
<p><strong><span>lcd:</span></strong><span> a LiquidCrystal példány neve.</span></p>
<p><span> </span></p>
<h4><span>setCursor()</span></h4>
<p><span>A kurzort a megadott helyre mozgatja.</span></p>
<p><em><span>Szintaxisa:</span></em></p>
<p><span>lcd.setCursor(cols,rows).</span> </p>
<p><em>Paraméterei:</em></p>
<p><strong>lcd:</strong> a LiquidCrystal példány neve,</p>
<p><strong>cols:</strong> az oszlop, ahová a kurzort mozgatjuk,</p>
<p><strong>rows:</strong> a sor, ahová a kurzort mozgatjuk.</p>
<p> </p>
<h4><span>write()</span></h4>
<p>Egy bájtot, vagyis karaktert ír ki a kijelzőre. </p>
<p><em>Szintaxisa:</em></p>
<p>lcd.write(data).</p>
<p><em>Paraméterei:</em></p>
<p><strong>lcd:</strong> a LiquidCrystal példány neve,</p>
<p><strong>data:</strong> a megjelenítendő karakter ASCII-kódja.</p>
<p><em>Példakód:</em></p>
<p><span style="color: #ff6600;">void <strong>loop</strong>()</span> <span style="color: #ff6600;">{</span><br /><span style="color: #ff6600;"> if (Serial.available()) {</span><br /><span style="color: #ff6600;"> lcd.write(Serial.read());</span><br /><span style="color: #ff6600;"> }</span><br /><span style="color: #ff6600;"> }</span></p>
<p> </p>
<h4><span>print()</span></h4>
<p>Szöveget jelenít meg a kijelzőn.</p>
<p><em>Szintaxisa:</em></p>
<p>lcd.print(data),</p>
<p>lcd.print(data, BASE).</p>
<p><em>Paraméterei:</em></p>
<p><strong>lcd:</strong> a LiquidCrystal példány neve,</p>
<p><strong>data:</strong> char, byte, long, int, string – amit megjelenítünk,</p>
<p><strong>BASE: </strong>számrendszer alapja (opcionális) BIN, HEX, OCT, DEC.</p>
<p> </p>
<h4><span>cursor()</span></h4>
<p>Hívását követően egy alulvonásként megjeleníti a kurzort.</p>
<p> </p>
<h4><span>noCursor()</span></h4>
<p>Hívását követően kikapcsolja a kurzor megjelenítését.</p>
<p> </p>
<h4><span>blink()</span></h4>
<p>Ha a kurzor látható, akkor bekapcsolja a villogtatását.</p>
<p> </p>
<h4><span>noBlink()</span></h4>
<p>Ha a kurzor látható, akkor kikapcsolja a villogtatását.</p>
<p> </p>
<h4><span>noDisplay()</span></h4>
<p>Kikapcsolja a kijelzőt.</p>
<p> </p>
<h4><span>display()</span></h4>
<p>Visszakapcsolja a kijelzőt, ha előtte a noDisplay() hívással ki volt kapcsolva, és újra megjeleníti a szöveget, ami a kikapcsolás pillanatában volt látható.</p>
<p> </p>
<h4><span>scrollDisplayLeft()</span></h4>
<p>Hívásakor egy karakterrel eltolja a kijelző teljes tartalmát balra.</p>
<p> </p>
<h4><span>scrollDisplayRight()</span></h4>
<p>Hívásakor egy karakterrel eltolja a kijelző teljes tartalmát jobbra.</p>
<p> </p>
<p>Arduino kód: <a href="https://m.blog.hu/ha/harsanyireka/image/72LCDscroll.zip" target="_self">72LCDscroll</a></p>
<p> </p>
<h4><span>autoScroll()</span></h4>
<p><span>Bekapcsolja a karakterek automatikus eltolását. Amikor egy új karaktert jelenítünk meg, a beállított iránynak megfelelően a már meglévő szöveget egy pozícióval elmozgatja.</span></p>
<p><span> </span></p>
<p>Arduino kód: <a href="https://m.blog.hu/ha/harsanyireka/image/73LCDauto.zip" target="_self">73LCDauto</a></p>
<p> </p>
<h4><span>noAutoscroll()</span></h4>
<p>Kikapcsolja a karakterek automatikus eltolását.</p>
<p><strong> </strong></p>
<h4><span>leftToRight()</span></h4>
<p>Az automatikus karaktereltolás irányának beállítása balról jobbra.</p>
<p><strong> </strong></p>
<h4><span>rightToLeft()</span></h4>
<p>Az automatikus karaktereltolás irányának beállítása jobbról balra.</p>
<p> </p>
<h4><span>createChar()</span></h4>
<p>Segítségével létrehozhatunk olyan karaktereket, amit nem tartalmaz a ROM. Ezeket az 5 x 8 pontból álló jeleket glyph-nek is szokás nevezni. A vezérlő 8 különféle glyph-et tud eltárolni a létrehozása után.</p>
<p><em>Szintaxisa:</em></p>
<p>lcd.createChar(num, data).</p>
<p><em>Paraméterei:</em></p>
<p><strong>lcd:</strong> a LiquidCrystal példány neve,</p>
<p><strong>num</strong>: 0–7 a glyph száma, amelyik pozíción tárolni szeretnénk,</p>
<p><strong>data</strong>: a karakter pixeleit tartalmazó tömb.</p>
<p><strong> </strong></p>
<p>Arduino kód: <a href="https://m.blog.hu/ha/harsanyireka/image/74create.zip" target="_self">74create</a></p>
<p style="text-align: center;"><em><img src="https://m.blog.hu/ha/harsanyireka/image/14.3.%20%E2%80%A0bra%20Smiley%20glyph.png" alt="14.3. †bra Smiley glyph.png" class="imgnotext" /></em></p>
<p style="text-align: center;"><em>Smiley glyph</em></p>
<p style="text-align: center;"> </p>
<p style="text-align: left;"><em>- - - - - - - - -</em></p>
<p style="text-align: left;">forrás: <a href="http://arduino.cc/en/Tutorial/HomePage" target="_blank">http://arduino.cc/en/Tutorial/HomePage</a>, <a href="http://arduino.cc/en/Tutorial/LiquidCrystal" target="_blank">http://arduino.cc/en/Tutorial/LiquidCrystal</a>, <a href="http://arduino.cc/en/Reference/EEPROM" target="_blank">http://arduino.cc/en/Reference/EEPROM</a></p>
<p style="text-align: center;"> </p>
<p><em><br /> <br /> </em></p>
<p><a title="Megosztom Facebookon!" href="https://www.facebook.com/sharer.php?api_key=120587281320910&locale=hu_HU&method=stream.share&u=https%3A%2F%2Fharsanyireka.blog.hu%2F2014%2F06%2F22%2F14_1_konyvtarak_hasznos_eszkozokhoz_hattertar_kijelzo%3Futm_source%3Dbloghu_rss%26utm_medium%3Dfacebook%26utm_campaign%3Dblhshare"><img src="https://m.blog.hu/assets/frontend/img/rss/icon_facebook.png" alt="Megosztom Facebookon!"></a>
<a title="Megosztom Twitteren!" href="https://twitter.com/home?status=https%3A%2F%2Fharsanyireka.blog.hu%2F2014%2F06%2F22%2F14_1_konyvtarak_hasznos_eszkozokhoz_hattertar_kijelzo%3Futm_source%3Dbloghu_rss"><img src="https://m.blog.hu/assets/frontend/img/rss/icon_twitter.png" alt="Megosztom Twitteren!"></a>
<a title="Megosztom Tumblren!" href="https://www.tumblr.com/share?v=3&u=https%3A%2F%2Fharsanyireka.blog.hu%2F2014%2F06%2F22%2F14_1_konyvtarak_hasznos_eszkozokhoz_hattertar_kijelzo%3Futm_source%3Dbloghu_rss%26utm_medium%3Dtumblr%26utm_campaign%3Dblhshare&t=14. /1) Könyvtárak hasznos eszközökhöz: háttértár, kijelző"><img src="https://m.blog.hu/assets/frontend/img/rss/icon_tumblr.png" alt="Megosztom Tumblren!"></a>
<a href="https://harsanyireka.blog.hu/2014/06/22/14_1_konyvtarak_hasznos_eszkozokhoz_hattertar_kijelzo#comments"><img class="item_ctp" src="https://harsanyireka.blog.hu/rss/image/post/id/6399031" border="0" /></a><br /></p>
leckék
könyvtárak
LCD
Liquid_Crystal
EEPROM
lektorált
0
fizikai számítástechnika, arduino
https://harsanyireka.blog.hu
http://m.cdn.blog.hu/ha/harsanyireka/image/14.1%20%E2%80%A0bra%2016%20x%202-es%20alfanumerikus%20LCD%20HD44780-as%20vez%C3%87rl%C3%A3vel.png
https://harsanyireka.blog.hu/2014/06/22/13_5_kommunikacios_konyvtarak_ethernet
13. /5) Kommunikációs könyvtárak: Ethernet
2014-06-22T16:55:47+02:00
2014-06-22T16:55:47+02:00
harsanyireka
https://blog.hu/user/434264
<p><span style="color: #0000ff;">Lektorált tananyag, ami a BKF Digitális és Kollaboratív Művészet (DIKOM) pályázatnak keretén belül valósult meg.</span></p>
<p><span style="color: #0000ff;">Szerző: Harsányi Réka, Társszerző: Juhász Márton András, Lektor: Fernezelyi Márton</span></p>
<p> </p>
<p><span>Az OSI (Open Systems Interconnection) modell szerint – mely hét absztrakt rétegre osztja a kommunikációs technológiák funkcionális szintjeit – az Ethernet 1985 óta a számítógépeket összekötő hálózatok fő kommunikációs technológiai szabványa és fizikai rétegtől az adatkapcsolati rétegig nyújt szolgáltatásokat. A fizikai réteg magát a hardware-t jelenti, az adatok bitenkénti csatornákra juttatását. Az adatátviteli réteg pedig két hálózati elem közötti átvitelt biztosító eljárásokért felelős.</span></p>
<p><span><img src="https://m.blog.hu/ha/harsanyireka/image/13.9.%20%E2%80%A0bra%20Open%20Systems%20Interconnection%20modell.png" alt="13.9. †bra Open Systems Interconnection modell.png" class="imgnotext" width="490" height="631" /></span></p>
<p style="text-align: center;"><em>Open Systems Interconnection modell</em></p>
<p>Az Ethernet kiegészítő modullal (shield) és a hozzá tartozó könyvtár segítségével eljuthatunk a hálózati rétegig és internetképessé tehetjük az Arduinot. A shield a Wiznet, SPI kommunikáción alapuló W5100-as integrált áramkörére épül és fenntartja az SD kártya csatlakoztatásának lehetőségét is. A kiegészítőt elég csatlakoztatni. A következő példákban megnézzük, hogyan lehet bejövő kapcsolatokat kezelő szerverként és kimenőket intéző kliensként egyaránt működtetni.</p>
<p> <img src="https://m.blog.hu/ha/harsanyireka/image/13.10.%20%E2%80%A0bra%20Arduino%20Ethernet%20Shielddel.jpeg" alt="13.10. †bra Arduino Ethernet Shielddel.jpeg" class="imgnotext" width="459" height="403" /></p>
<p style="text-align: center;"><em>Arduino Ethernet Shielddel</em></p>
<p> </p>
<p> <img src="https://m.blog.hu/ha/harsanyireka/image/13.11.%20%E2%80%A0bra%20Csatorn%E2%80%A0k%20kioszt%E2%80%A0sa%20az%20Eethernet%20Shieldhez.png" alt="13.11. †bra Csatorn†k kioszt†sa az Eethernet Shieldhez.png" class="imgnotext" /></p>
<p style="text-align: center;"><em>Csatornák kiosztása az Eethernet Shield-hez</em></p>
<p style="text-align: center;"> </p>
<h2><span>Ethernet osztály</span></h2>
<h4><span>Ethernet.begin()</span></h4>
<p>Az ethernet könyvtárat és a hálózati beállításokat inicializálja a parancs. A begin() függvénnyel megadhatjuk az eszközünk MAC (Media Access Control – fizikai) és az IP (Internet Protocol) címét. A könyvtár támogatja a DHCP (Dynamic Host Configuration Protocol) alapú IP-cím igénylést, ezért ha csak a fizikai címet adjuk meg, ebbe az üzemmódba kerül. Az automatikus címigényléshez a könyvtár nagyobb hányada töltődik az Arduinoba, ezért ez a mód sokkal több memóriát igényel, mintha csak statikus címet adnánk meg. Ethernet.begin(mac) sikeres cím igénylés esetén 1-et, sikertelen esetén 0-át ad vissza.</p>
<p><em>Szintaxisa:</em></p>
<p>Ethernet.begin(mac),</p>
<p>Ethernet.begin(mac, ip),</p>
<p>Ethernet.begin(mac, ip, dns),</p>
<p>Ethernet.begin(mac, ip, dns, gateway),</p>
<p>Ethernet.begin(mac, ip, dns, gateway, subnet).</p>
<p><em>Paraméterei:</em></p>
<p><strong>mac:</strong> 6 bájtos tömb, az eszköz fizikai címe,</p>
<p><strong>ip:</strong> 4 bájtos tömb, az eszköz IP-címe,</p>
<p><strong>dns:</strong> 4 bájtos tömb, DNS (Domain Name Server) IP-címe,</p>
<p><strong>gateway:</strong> 4 bájtos tömb, hálózati átjáró címe,</p>
<p><strong>subnet:</strong> 4 bájtos tömb, a hálózat alhálózati maszkja, alapállapotban 255.255.255.0.</p>
<p><em> </em></p>
<h4><span>Ethernet.localIP()</span></h4>
<p>Visszaadja az eszköz aktuális IP-címét. Ez akkor hasznos, ha automatikusan igényeltük.</p>
<p> </p>
<h4><span>Ethernet.maintain()</span></h4>
<p>DHCP használata esetén egy meghatározott időre kap az eszköz IP-címet. Amikor ez lejár, meg kell újítani. Ezzel a függvénnyel a lejárt cím helyett újat igényelhetünk, ami a DHCP szervertől függően lehet ugyanaz, egy teljesen más, vagy semmi is. Egy számot ad vissza, ami ha:</p>
<p><strong>0:</strong> nem történt semmi,</p>
<p><strong>1:</strong> cím megújítása sikertelen,</p>
<p><strong>2:</strong> cím megújítása sikeres,</p>
<p><strong>3:</strong> újrakapcsolódás sikertelen,</p>
<p><strong>4:</strong> újrakapcsolódás sikeres.</p>
<p> </p>
<h2><span>IPAddress osztály</span><strong> </strong></h2>
<h4><span>IPAddress()</span></h4>
<p>Meghatározza az IP-címet, ami lehet helyi és távoli cím is.</p>
<p><em>Szintaxisa:</em></p>
<p>IPAddress(address)<strong> </strong></p>
<p><em>Paramétere:</em></p>
<p>address: vesszőkkel elválasztott 4 bájt (pl.: 192,168,1,1).</p>
<p>Arduino kód: <a href="https://m.blog.hu/ha/harsanyireka/image/64IPaddress.zip" target="_self">64IPaddress</a></p>
<p>Arduino kód: <a href="https://m.blog.hu/ha/harsanyireka/image/65localIP.zip" target="_self">65localIP</a></p>
<p> </p>
<h2><span>Server osztály</span><strong> </strong></h2>
<h4><span>EthernetServer()</span></h4>
<p>Létrehoz egy szervert, ami a bejövő kapcsolatokat figyeli egy előre meghatározott porton.</p>
<p><em>Szintaxisa:</em></p>
<p>Server(port).</p>
<p><em>Paramétere:</em></p>
<p><strong>port:</strong> a port száma, amit a szerver figyel.</p>
<p><em>Példakód:</em></p>
<p><span style="color: #ff6600;">EthernetServer server = EthernetServer(23);</span></p>
<p> </p>
<h4><span>server.begin()</span></h4>
<p>Szól a szervernek, hogy kezdjen figyelni.</p>
<p><em> </em></p>
<h4><strong>server.available()</strong></h4>
<p>Visszaadja egy csatlakozott kliens címét, ha rendelkezésre állnak olvasható adatok.</p>
<p><em>Példakód:</em></p>
<p><span style="color: #ff6600;">EthernetClient client = server.available();</span></p>
<p><em> </em></p>
<h4><span>server.write()</span></h4>
<p>Adatokat küld a szerverhez kapcsolódott klienseknek. Az adat bájt vagy karakter típusú lehet.</p>
<p><em> </em></p>
<h4><span>server.print()</span></h4>
<p>ASCII kódolású adatokat küld a szerverhez kapcsolódott klienseknek. A <em>server.println() </em>az adatot kiegészíti a soremelés kódjával.</p>
<p><em>Szintaxisa:</em></p>
<p>server.print(data),</p>
<p>server.println(data, BASE).</p>
<p><em>Paraméterei:</em></p>
<p><strong>data: </strong>char, byte, int, long, string, amit a szervernek ki kell küldenie,</p>
<p><strong>BASE:</strong> a számrendszer alapja BIN, HEX, OCT, DEC.</p>
<p><em> </em><em> </em></p>
<p>Arduino kód: <a href="https://m.blog.hu/ha/harsanyireka/image/66server.zip" target="_self">66server</a></p>
<p> </p>
<h2><span>Client osztály</span></h2>
<h4><span>EthernetClient()</span></h4>
<p>Létrehoz egy klienst, ami egy IP-címen meghatározott porthoz képes csatlakozni.</p>
<p> </p>
<h4><span>If(ethernetClient)</span></h4>
<p>Megvizsgálja, hogy a kliens készen áll-e. Bool típusú változóban adja vissza a választ.</p>
<p> </p>
<h4><span>client.connected()</span></h4>
<p>Megvizsgálja, hogy a kliens kapcsolatban van-e. Amíg van olvasatlan adat, addig igen.</p>
<p> </p>
<h4><span>client.connect()</span></h4>
<p>A meghatározott címre és portra kapcsolja a klienst, ha sikerült, IGAZ választ ad vissza.</p>
<p><strong> </strong></p>
<h4><span>client.write()</span></h4>
<p>Adatot küld a szervernek, amelyikhez a kliens kapcsolódott.</p>
<p> </p>
<h4><span>client.print() és client.println()</span></h4>
<p>ASCII kódolású adatokat küld a szervernek.</p>
<p> </p>
<h4><span>client.available()</span></h4>
<p>Visszaadja a szerver által küldött, olvasásra kész bájtok számát.</p>
<p><strong> </strong></p>
<h4><span>client.read()</span></h4>
<p>Beolvassa a szerver által küldött utolsó bájtot.</p>
<p> </p>
<h4><span>client.flush()</span></h4>
<p>Kiüríti az átmeneti tárolót, minden olvasatlan bájtot töröl.</p>
<p><strong> </strong></p>
<h4><span>client.stop()</span></h4>
<p>Megszakítja a kapcsolatot a szerverrel.</p>
<p> </p>
<p>Arduino kód: <a href="https://m.blog.hu/ha/harsanyireka/image/67client.zip" target="_self">67client</a></p>
<p> </p>
<h2><span>EthernetUDP osztály</span></h2>
<p>Az UDP (User Datagram Protocoll) az internetet alkotó protokollok egyike, amivel számítógép-alkalmazások cserélnek úgynevezett datagrammokat egymás között. Leginkább olyan esetekben érdemes használni, amikor nem fontos a hibaellenőrzés és -javítás a csomagok átvitelekor. Ez általában valós idejű adatátviteli rendszereknél fontos, ahol egy csomag elvesztése kisebb probléma, mint az ellenőrzésekből fakadó késés.</p>
<p> </p>
<h4><span>UDP.begin()</span></h4>
<p>Inicializálja az UDP könyvtárat és hálózati beállításait.</p>
<p><em>Szintaxisa:</em></p>
<p><span>EthernetUDP.begin(localPort);</span><span> </span></p>
<p><em>Paraméterei:</em></p>
<p><strong>localPort:</strong> helyi port száma</p>
<p> </p>
<h4><span>UDP.read()</span></h4>
<p>Datagrammot olvas egy meghatározott tárolóból. Argumentumok nélkül a soron következő karaktert adja vissza.</p>
<p><em>Szintaxisa:</em></p>
<p>UDP.read(packetBuffer, MaxSize).</p>
<p><em>Paraméterei:</em></p>
<p><strong>packetBuffer:</strong> az átmeneti tároló, ami a bejövő karaktereket tárolja,</p>
<p><strong>MaxSize:</strong> az átmeneti tároló maximális mérete.</p>
<p> </p>
<h4><span>UDP.write()</span></h4>
<p>Datagrammot ír egy távoli kapcsolatnak. beginPacket() és endPacket() között kell használni. Az elküldött karakterek számát adja vissza.</p>
<p><em>Szintaxisa:</em></p>
<p>UDP.write(message);<span> </span></p>
<p><em>Paraméterei:</em></p>
<p><strong>message:</strong> kimenő üzenet (char adattípus)</p>
<p> </p>
<h4><span>UDP.beginPacket()</span></h4>
<p>Inicializálja a datagramm elküldését. A küldendő adatokat a write()-tal határozzuk meg.</p>
<p><em>Szintaxisa:</em></p>
<p>UDP.beginPacket(remoteIP, remotePort);</p>
<p><em>Paraméterei:</em></p>
<p><strong>remoteIP</strong>: a távoli kapcsolat IP címe (4 byte)</p>
<p><strong>remotePort</strong>: a távoli kapcsolat port száma (int)</p>
<p> </p>
<h4><span>UDP.endPacket()</span></h4>
<p>Jóváhagyja a datagramm továbbítását. </p>
<p><em>Szintaxisa:</em></p>
<p>UDP.endPacket();<span> </span></p>
<p><em>Paraméterei:</em></p>
<p>nincs</p>
<p><strong> </strong></p>
<h4><span>UDP.parsePacket()</span></h4>
<p>Megvizsgálja, van-e elérhető datagramm, és ha van, visszaadja a méretét. Read() előtt kell használni.</p>
<p><em>Szintaxisa:</em></p>
<p>UDP.parsePacket();<span> </span></p>
<p><em>Paraméterei:</em></p>
<p>nincs</p>
<p> </p>
<h4><span>UDP.available()</span></h4>
<p>Az átmeneti tárolóba már megérkezett bájtok (karakterek) számát adja vissza. A parsePacket() után érdemes használni. </p>
<p><em>Szintaxisa:</em></p>
<p>UDP.available(); </p>
<p><em>Paraméterei:</em></p>
<p>nincs</p>
<p> </p>
<h4><span>UDP.remoteIP()</span></h4>
<p>Visszaadja a távoli kapcsolat IP-címét. A parsePacket() után kell használni.</p>
<p><em>Szintaxisa:</em></p>
<p>UDP.remoteIP();<span> </span></p>
<p><em>Paraméterei:</em></p>
<p>nincs</p>
<p> </p>
<h4><span>UDP.remotePort()</span></h4>
<p>Visszaadja a távoli kapcsolat portjának számát. A parsePacket() után kell használni. </p>
<p><em>Szintaxisa:</em></p>
<p>UDP.remotePort();<span> </span></p>
<p><em>Paraméterei:</em></p>
<p>nincs</p>
<p> </p>
<p>Arduino kód: <a href="https://m.blog.hu/ha/harsanyireka/image/68UDP.zip" target="_self">68UDP</a></p>
<p> </p>
<p>- - - - - - - - - -</p>
<p><span>forrás: </span><span><a href="http://arduino.cc/en/Tutorial/HomePage" target="_blank">http://arduino.cc/en/Tutorial/HomePage</a>, <a href="http://arduino.cc/en/reference/ethernet" target="_blank">http://arduino.cc/en/reference/ethernet</a></span></p>
<p> </p>
<p> </p>
<p><strong> </strong></p>
<p><a title="Megosztom Facebookon!" href="https://www.facebook.com/sharer.php?api_key=120587281320910&locale=hu_HU&method=stream.share&u=https%3A%2F%2Fharsanyireka.blog.hu%2F2014%2F06%2F22%2F13_5_kommunikacios_konyvtarak_ethernet%3Futm_source%3Dbloghu_rss%26utm_medium%3Dfacebook%26utm_campaign%3Dblhshare"><img src="https://m.blog.hu/assets/frontend/img/rss/icon_facebook.png" alt="Megosztom Facebookon!"></a>
<a title="Megosztom Twitteren!" href="https://twitter.com/home?status=https%3A%2F%2Fharsanyireka.blog.hu%2F2014%2F06%2F22%2F13_5_kommunikacios_konyvtarak_ethernet%3Futm_source%3Dbloghu_rss"><img src="https://m.blog.hu/assets/frontend/img/rss/icon_twitter.png" alt="Megosztom Twitteren!"></a>
<a title="Megosztom Tumblren!" href="https://www.tumblr.com/share?v=3&u=https%3A%2F%2Fharsanyireka.blog.hu%2F2014%2F06%2F22%2F13_5_kommunikacios_konyvtarak_ethernet%3Futm_source%3Dbloghu_rss%26utm_medium%3Dtumblr%26utm_campaign%3Dblhshare&t=13. /5) Kommunikációs könyvtárak: Ethernet"><img src="https://m.blog.hu/assets/frontend/img/rss/icon_tumblr.png" alt="Megosztom Tumblren!"></a>
<a href="https://harsanyireka.blog.hu/2014/06/22/13_5_kommunikacios_konyvtarak_ethernet#comments"><img class="item_ctp" src="https://harsanyireka.blog.hu/rss/image/post/id/6398733" border="0" /></a><br /></p>
leckék
könyvtárak
Ethernet
lektorált
0
fizikai számítástechnika, arduino
https://harsanyireka.blog.hu
http://m.cdn.blog.hu/ha/harsanyireka/image/13.9.%20%E2%80%A0bra%20Open%20Systems%20Interconnection%20modell.png
https://harsanyireka.blog.hu/2014/06/22/13_4_kommunikacios_konyvtarak_spi
13. /4) Kommunikációs könyvtárak: SPI
2014-06-22T16:22:29+02:00
2014-06-22T16:22:29+02:00
harsanyireka
https://blog.hu/user/434264
<p><span style="color: #0000ff;">Lektorált tananyag, ami a BKF Digitális és Kollaboratív Művészet (DIKOM) pályázatnak keretén belül valósult meg.</span></p>
<p><span style="color: #0000ff;">Szerző: Harsányi Réka, Társszerző: Juhász Márton András, Lektor: Fernezelyi Márton</span></p>
<p> </p>
<p><span>Az SPI (Serial Peripherial Interface) egy szinkron soros protokoll. Alapvető különbség az I2C-hez képest, hogy külön adatvonalat tart fenn a mestertől a szolga felé és az ellenkező irányú kommunikáció céljára, továbbá nem használ címzést, az egyetlen mester az eszközöket egyenként külön vonalakon engedélyezi. Mindezek együttesen egy gyorsabb soros adatátvitelt tesznek lehetővé a mikrokontroller és perifériái között. A közös adatvonalak a MISO (Master In Slave Out), amin keresztül a mester fogad adatokat, a MOSI (Master Out Slave In), amin a szolgák fogadnak adatokat és az SCK (Serial Clock) órajel a szinkronizáláshoz. Az eszközönként specifikus vonal az engedélyezéshez az SS (Slave Select). Amikor egy szolga SS vonala logikai alacsony szintre kerül, létrejön a kapcsolata a mesterrel, ha magas szinten tartjuk, akkor teljesen kimarad a buszon való kommunikációból, így nem zavarhatja a többi perifériát.</span></p>
<p style="text-align: center;"><em><img src="https://m.blog.hu/ha/harsanyireka/image/13.6.%20%E2%80%A0bra%20SPI%20busz%20funkcion%E2%80%A0lis%20rajza%20t%C3%AEbb%20szolgaeszk%C3%AEz%20eset%C3%87n.png" alt="13.6. †bra SPI busz funkcion†lis rajza tîbb szolgaeszkîz esetÇn.png" class="imgnotext" /></em></p>
<p style="text-align: center;"><em>SPI busz funkcionális rajza több szolgaeszköz esetén </em></p>
<p><span>A nyílt fejlesztésű rendszernek és a közösségben együttműködő programozóknak köszönhetően az Arduinoval számtalan SPI alkatrész került implementálásra, és a könyvtár ebből a rutinból fakadóan rendelkezik olyan függvényekkel, amik megkönnyítik az új eszközök használatát. Mindazonáltal az SPI protokoll meglehetősen szabadon értelmezett az eszközgyártók körében, ezért, ha egy új alkatrészhez szeretnénk programot írni, akkor nézzük meg alaposan az adatlapját. </span></p>
<p><em><span> </span></em></p>
<p><em><span>Eltérések a következő paraméterekben lehetnek:</span></em></p>
<ul>
<li><strong><span>MSB</span></strong><span> (Most Significant Bit): legnagyobb helyi értékű bitet küldi a szolga először.</span></li>
<li><strong><span>LSB</span></strong><span>: (Less Significant Bit): legkisebb helyi értékű bitet küldi a szolga először.</span></li>
</ul>
<p><span>A két változat között az <em>SPI.setBitOrder()</em> függvény biztosítja az átjárást.</span></p>
<ul>
<li><strong><span>Órajel frekvenciája</span></strong><span>: Az órajel sebességét az <em>SPI.setClockDivider()-r</em>el adhatjuk meg.</span></li>
<li><strong><span>Órajel fázisa (CPHA)</span></strong><span>: Az adatok az órajel negatív vagy pozitív élével vannak szinkronban.</span></li>
<li><strong><span>Órajel polaritása (CPOL)</span></strong><span>: A várakozás logikailag magas vagy alacsony szint.</span></li>
</ul>
<p><span>Erről az <em>SPI.setDataMode()</em> függvény segítségével dönthetünk:</span></p>
<p style="text-align: center;"><span> </span></p>
<table width="407" height="155">
<tbody>
<tr>
<td width="150">Mód
<p> </p>
</td>
<td width="150">CPOL</td>
<td width="150">CPHA</td>
</tr>
<tr>
<td width="150">
<p><span>SPI_MODE0</span></p>
</td>
<td width="150">
<p><span>0</span></p>
</td>
<td width="150">
<p><span>0</span></p>
</td>
</tr>
<tr>
<td width="150">
<p><span>SPI_MODE1</span></p>
</td>
<td width="150">
<p><span>0</span></p>
</td>
<td width="150">
<p><span>1</span></p>
</td>
</tr>
<tr>
<td width="150">
<p><span>SPI_MODE2</span></p>
</td>
<td width="150">
<p><span>1</span></p>
</td>
<td width="150">
<p><span>0</span></p>
</td>
</tr>
<tr>
<td width="150">
<p><span>SPI_MODE3</span></p>
</td>
<td width="150">
<p><span>1</span></p>
</td>
<td width="150">
<p><span>1</span></p>
</td>
</tr>
</tbody>
</table>
<p style="text-align: center;"><em><br />táblázat: setDataMode függvény állapotai</em></p>
<p><em> </em></p>
<p><span>Az SPI kivezetéseit megtalálhatjuk az Arduino alaplapján egy külön csatlakozón is, amit ICSP-nek (In Circuit Serial Programming) hívunk.</span></p>
<p><span><img src="https://m.blog.hu/ha/harsanyireka/image/13.7.%20%E2%80%A0bra%20ICSP%20csatlakoz%C2%A2%20kioszt%E2%80%A0sa.jpeg" alt="13.7. †bra ICSP csatlakoz¢ kioszt†sa.jpeg" class="imgnotext" /></span></p>
<p style="text-align: center;"><em>ICSP csatlakozó kiosztása</em></p>
<p><span>Mivel ezen a csatlakozón keresztül tölthetjük fel az Arduino alapprogramját, a bootloadert is, ezért megtalálható minden típusú alaplapon ugyanebben a formában. Mint azt láttuk, a kivezetések sokszor több különböző funkciót is el tudnak látni, így nem meglepő, hogy az ICSP vonalait az eddig tárgyalt csatlakozók valamelyikén is megtaláljuk:</span></p>
<p><span> </span></p>
<table width="570" height="177">
<tbody>
<tr>
<td width="75" style="text-align: center;">
<p><strong><span>Típus</span></strong></p>
</td>
<td width="75" style="text-align: center;">MOSI</td>
<td width="75" style="text-align: center;">MISO</td>
<td width="75" style="text-align: center;">SCK</td>
<td width="75" style="text-align: center;">
<p>SS (szolga)</p>
</td>
<td width="75" style="text-align: center;">
<p>SS (mester)</p>
</td>
</tr>
<tr>
<td width="75" style="text-align: center;">
<p><span>UNO</span></p>
</td>
<td width="75" style="text-align: center;">
<p><span>13</span></p>
</td>
<td width="75" style="text-align: center;">
<p><span>11</span></p>
</td>
<td width="75" style="text-align: center;">
<p><span>12</span></p>
</td>
<td width="75" style="text-align: center;">
<p><span>10</span></p>
</td>
<td width="75" style="text-align: center;">
<p><span>-</span></p>
</td>
</tr>
<tr>
<td width="75" style="text-align: center;">
<p><span>Mega</span></p>
</td>
<td width="75" style="text-align: center;">
<p><span>51</span></p>
</td>
<td width="75" style="text-align: center;">
<p><span>50</span></p>
</td>
<td width="75" style="text-align: center;">
<p><span>52</span></p>
</td>
<td width="75" style="text-align: center;">
<p><span>53</span></p>
</td>
<td width="75" style="text-align: center;">
<p><span>-</span></p>
</td>
</tr>
<tr>
<td width="75" style="text-align: center;">
<p><span>Leonardo</span></p>
</td>
<td width="75" style="text-align: center;">
<p><span>ICSP4</span></p>
</td>
<td width="75" style="text-align: center;">
<p><span>ICSP1</span></p>
</td>
<td width="75" style="text-align: center;">
<p><span>ICSP3</span></p>
</td>
<td width="75" style="text-align: center;">
<p><span>-</span></p>
</td>
<td width="75" style="text-align: center;">
<p><span>-</span></p>
</td>
</tr>
<tr>
<td width="75" style="text-align: center;">
<p><span>DUE</span></p>
</td>
<td width="75" style="text-align: center;">
<p><span>ICSP4</span></p>
</td>
<td width="75" style="text-align: center;">
<p><span>ICSP1</span></p>
</td>
<td width="75" style="text-align: center;">
<p><span>ICSP3</span></p>
</td>
<td width="75" style="text-align: center;">
<p><span>-</span></p>
</td>
<td width="75" style="text-align: center;">
<p><span>4, 10, 52</span></p>
</td>
</tr>
</tbody>
</table>
<p><span> </span></p>
<p style="text-align: center;"><em>SPI csatornák kivezetései a különböző típusú Arduino alaplapokon</em></p>
<p><span> </span></p>
<p><span>Az eltérések nem kizárólag az alapvető kommunikációban mutatkoznak meg, minden alkatrész rendelkezik saját utasításkészlettel és regiszterekkel.</span></p>
<p><span>Az SD kártyák is SPI buszon kommunikálnak, amiket viszonylag könnyen és nagyon sokféleképpen hasznosíthatunk arduinos projektjeinkben (háttértár, hangfelvétel, lejátszás, adatrögzítés, GPS). Példánkban a Libelium által gyártott microSD panelt fogjuk alkalmazni, aminek kialakításakor figyelembe vették mind a kétféle csatlakoztatási módot.</span></p>
<p> <img src="https://m.blog.hu/ha/harsanyireka/image/13.8.%20%E2%80%A0bra%20Arduino%20Libelium%20microSD%20modullal.png" alt="13.8. †bra Arduino Libelium microSD modullal.png" class="imgnotext" width="471" height="333" /></p>
<p style="text-align: center;"><em>Arduino Libelium microSD modullal</em></p>
<p><span>Az SD kártyák csatlakoztatása a modul megvásárlása nélkül is igen egyszerű, mindössze pár ellenállásra van szükség, amikkel az Arduino 5 V-os rendszerű SPI buszának vonalait a memóriakártyák által elfogadható 3,3 V-os szintűvé alakítjuk. Tulajdonképpen a bemutatásra kerülő modul sem tesz ennél többet. A kártya eléréséhez az SPI könyvtár egy módosított változatát fogjuk használni, ami képes FAT partíción fájlstruktúrák kezelésére.</span></p>
<p><span> </span></p>
<p><em><span>Amire szükségünk lesz:</span></em></p>
<p><span>- </span><span>Arduino,</span></p>
<p><span>- </span><span>Libelium microSD modul, vagy</span></p>
<p><span>- </span><span>5 V – 3,3 V szintillesztő.</span></p>
<p><em><span> </span></em></p>
<p>Arduino kód: <a href="https://m.blog.hu/ha/harsanyireka/image/63SDkartya.zip" target="_self">63SDkartya</a></p>
<p> </p>
<p>- - - - - - - - - -</p>
<p>forrás: <a href="http://arduino.cc/en/Reference/SD" target="_blank">http://arduino.cc/en/Reference/SD</a>, <a href="http://arduino.cc/en/Tutorial/HomePage" target="_blank"><span>http://arduino.cc/en/Tutorial/HomePage</span></a></p>
<p><span> </span></p>
<p> </p>
<p><a title="Megosztom Facebookon!" href="https://www.facebook.com/sharer.php?api_key=120587281320910&locale=hu_HU&method=stream.share&u=https%3A%2F%2Fharsanyireka.blog.hu%2F2014%2F06%2F22%2F13_4_kommunikacios_konyvtarak_spi%3Futm_source%3Dbloghu_rss%26utm_medium%3Dfacebook%26utm_campaign%3Dblhshare"><img src="https://m.blog.hu/assets/frontend/img/rss/icon_facebook.png" alt="Megosztom Facebookon!"></a>
<a title="Megosztom Twitteren!" href="https://twitter.com/home?status=https%3A%2F%2Fharsanyireka.blog.hu%2F2014%2F06%2F22%2F13_4_kommunikacios_konyvtarak_spi%3Futm_source%3Dbloghu_rss"><img src="https://m.blog.hu/assets/frontend/img/rss/icon_twitter.png" alt="Megosztom Twitteren!"></a>
<a title="Megosztom Tumblren!" href="https://www.tumblr.com/share?v=3&u=https%3A%2F%2Fharsanyireka.blog.hu%2F2014%2F06%2F22%2F13_4_kommunikacios_konyvtarak_spi%3Futm_source%3Dbloghu_rss%26utm_medium%3Dtumblr%26utm_campaign%3Dblhshare&t=13. /4) Kommunikációs könyvtárak: SPI"><img src="https://m.blog.hu/assets/frontend/img/rss/icon_tumblr.png" alt="Megosztom Tumblren!"></a>
<a href="https://harsanyireka.blog.hu/2014/06/22/13_4_kommunikacios_konyvtarak_spi#comments"><img class="item_ctp" src="https://harsanyireka.blog.hu/rss/image/post/id/6398251" border="0" /></a><br /></p>
leckék
könyvtárak
SD
SPI
lektorált
0
fizikai számítástechnika, arduino
https://harsanyireka.blog.hu
http://m.cdn.blog.hu/ha/harsanyireka/image/13.6.%20%E2%80%A0bra%20SPI%20busz%20funkcion%E2%80%A0lis%20rajza%20t%C3%AEbb%20szolgaeszk%C3%AEz%20eset%C3%87n.png
https://harsanyireka.blog.hu/2014/06/22/13_3_kommunikacios_konyvtarak_wire
13. /3) Kommunikációs könyvtárak: Wire
2014-06-22T14:24:19+02:00
2014-06-22T14:24:19+02:00
harsanyireka
https://blog.hu/user/434264
<p><span style="color: #0000ff;">Lektorált tananyag, ami a BKF Digitális és Kollaboratív Művészet (DIKOM) pályázatnak keretén belül valósult meg.</span></p>
<p><span style="color: #0000ff;">Szerző: Harsányi Réka, Társszerző: Juhász Márton András, Lektor: Fernezelyi Márton</span></p>
<p> </p>
<p><span>Az I2C, vagy más néven TWI (Two Wire Interface) egy soros buszrendszer, amit a Philips fejlesztett ki, hogy mikrokontrollerekhez alacsony sebességű perifériákat két vezeték használatával lehessen illeszteni. Ilyen eszközök például a Maxim által gyártott csatornabővítők </span>(MAX6956 <span>I2C-t 20 párhuzamos I/O csatornává alakít), LED meghajtók, adatátalakítók (pl. digitalizálók), Microchip által gyártott soros EEPROM-ok (legnagyobb 1Mbyte-os), vagy az NXP termékei: órák, memóriák, audio és video jelfeldolgozók, szintátalakítók.</span></p>
<p> <img src="https://m.blog.hu/ha/harsanyireka/image/13.2.%20%E2%80%A0bra%20A%20buszon%20kereszt%C3%85l%20sok%20eszk%C3%AEzt%20csatlakoztathatunk.png" alt="13.2. †bra A buszon keresztÅl sok eszkîzt csatlakoztathatunk.png" class="imgnotext" /> </p>
<p style="text-align: center;"><em>A buszon keresztül sok eszközt csatlakoztathatunk </em></p>
<p><span>A <em>buszokra</em> általánosságban az a jellemző, hogy az eszközök megosztoznak az adatvezetékeken, ezért minden eszköznek rendelkeznie kell egy <em>címmel</em>, ami megkülönbözteti a többi buszhoz kapcsolt egységtől. Az I2C esetén a címzés eszköztől függően kétféle lehet, 7 vagy 8 bites. Az utóbbi esetben 7 bit a tényleges címet kódolja, míg a 8. bit arról ad információt, hogy a címen írás vagy olvasás folyik. A Wire könyvtár mindkét típust támogatja. Az adatvezetékeket rendre <strong>SDA</strong> (Serial Data) és <strong>SCL</strong> (Serial Clock) neveket viselik, míg az egyiken a szinkronitást fenntartó órajel, a másikon a szekvenciális adat jelenik meg bitenként. Az Arduino mikrokontrollere fizikailag tartalmaz csatolófelületet a buszhoz, aminek kivezetései UNO – és megelőző típusok – esetében az (analóg bemenetként is használható) <strong>A4</strong> (SDA) és <strong>A5</strong> (SCL). </span></p>
<p><span>Ezen a busztípuson kétféle eszköztípus, egy mester (<strong>Master</strong>) és a címek elfogyásáig tetszőleges mennyiségű szolga (<strong>slave</strong>) eszköz kommunikálhat. A mester eszköz az, aki adott címen végrehajthat írást vagy olvasást, a szolgák pedig, akik a mester parancsait követik. A könyvtár alapbeállítása szerint a mester az Arduino, de ha könyvtár inicializálásakor címet adunk neki, akkor szolgaként is tudjuk használni – ez akkor lehet hasznunkra, ha olyan hálózatot szeretnénk építeni, amihez I2C eszközök is és több Arduino is csatlakozik (lásd 13.2. ábra). Ha képesek vagyunk a buszon a konfliktusokat kezelni, több mesteregység használata is elképzelhető.</span></p>
<p><span> </span></p>
<p><em><span>A könyvtár függvényei:</span></em></p>
<h4><span>begin()</span></h4>
<p><span>Inicializálja az I2C kommunikációt. Ha nem adunk meg neki külön címet, automatikusan az Arduino lesz a mester, ellenkező esetben a megadott címen szolgaként fog működni.</span></p>
<p><em><span>Szintaxisa:</span></em></p>
<p><span>Wire.begin(address).</span> </p>
<p><em><span>Paramétere:</span></em></p>
<p><strong><span>address</span></strong><span>: 7 bites cím.</span></p>
<p><strong><span> </span></strong></p>
<h4><span>requestFrom()</span></h4>
<p><span>A mester által használt parancs, hogy bájtokat kérjen valamelyik szolgaeszköztől. Az eszközök válaszait az available() vagy read() függvényekkel kezelhetjük. Az I2C eszközök közötti működésbeli különbségek áthidalására ez a függvény elfogad bemenetként bool típusú változót. Ami ha <strong>igaz </strong>(alapállapot), akkor a lekérés után STOP jelet küld, és nem kommunikál a buszon, ha <strong>hamis</strong>, akkor RESTART jelet küld, és nem szabadítja fel a buszt.</span></p>
<p><em><span>Szintaxisa:</span></em></p>
<p><span>Wire.requestFrom(address, quantity),</span></p>
<p><span>Wire.requestFrom(address, quantity, stop).</span></p>
<p><em><span>Paraméterei:</span></em></p>
<p><strong><span>address</span></strong><span>: 7 bites cím,</span></p>
<p><strong><span>quantity: </span></strong><span>lekérdezendő bájtok száma,</span></p>
<p><strong><span>stop:</span></strong><span> bool változó.</span></p>
<p><strong><span> </span></strong><strong><span> </span></strong></p>
<h4><span>available()</span></h4>
<p><span>Visszaadja az olvasásra kész bájtok számát. Mestereszközön requestFrom() után kell meghívni, szolgaeszközön pedig az onReceive() kezelőben.</span></p>
<p><em><span>Szintaxisa:</span></em></p>
<p><span>Wire.available().</span></p>
<p><strong><span> </span></strong><strong><span> </span></strong></p>
<h4><span>read()</span></h4>
<p><span>Beolvassa a soron következő bájtot.</span></p>
<p><em><span>Szintaxisa:</span></em></p>
<p><span>Wire.read().</span></p>
<p> </p>
<p>Arduino kód: <a href="https://m.blog.hu/ha/harsanyireka/image/60wire01.zip" target="_self">60wire01</a></p>
<p><span> </span></p>
<h4><span>write()</span></h4>
<p><span>Küld egy bájtot a szolgaeszközről a mestertől kapott kérésre válaszul – vagy a beginTransmission() és endTransmission között használva a mestereszközről küld egy bájtot valamelyik szolgának.</span></p>
<p><em><span>Szintaxisa:</span></em></p>
<p><span>Wire.write(value),</span></p>
<p><span>Wire.write(string),</span></p>
<p><span>Wire.write(data, length).</span></p>
<p><em><span>Paraméterei:</span></em></p>
<p><strong><span>value: </span></strong><span>bájtként küldendő érték,</span></p>
<p><strong><span>string: </span></strong><span>bájtok sorozata,</span></p>
<p><strong><span>data: length </span></strong><span>hosszúságú bájtok tömbje.</span></p>
<p><em><span> </span></em></p>
<p>Arduino kód: <a href="https://m.blog.hu/ha/harsanyireka/image/61wire02.zip" target="_self">61wire02</a></p>
<p><strong><span> </span></strong></p>
<h4><span>beginTransmission()</span></h4>
<p><span>Adatküldés inicializálása szolgaeszköz felé, a bájt értékének megadása a write() függvénnyel, endTransmission() küldi végül el.</span></p>
<p><strong><span> </span></strong></p>
<h4><span>endTransmission()</span></h4>
<p><span>Elküldi a beginTransmission()-nel hívott címre a write()-ban megadott értékeket. Egy bájtot ad vissza, ami ötféle érték lehet:</span></p>
<p><span>0: sikeres átvitel,</span></p>
<p><span>1: az adat nem fér bele az átviteli tárolóba,</span></p>
<p><span>2: a címről nem érkezett válasz,</span></p>
<p><span>3: az adatot nem fogadták,</span></p>
<p><span>4: egyéb hiba.</span></p>
<p><em><span>Szintaxisa:</span></em></p>
<p><span>Wire.endTransmission(),</span></p>
<p><span>Wire.endTransmission(stop) (stop – lásd feljebb).</span></p>
<p><span> </span></p>
<h4><span>onReceive()</span></h4>
<p><span>Szolgaeszközön regisztrál egy függvényt, amit végre kell hajtania, ha a mestertől <em>bármi</em> érkezik.</span></p>
<p><em><span>Szintaxisa:</span></em></p>
<p><span>onReceive(handler).</span></p>
<p><em><span>Paramétere:</span></em></p>
<p><strong><span>handler</span></strong><span>: a függvény, amit végre kell hajtania.</span></p>
<p><strong><span> </span></strong></p>
<h4><span>onRequest()</span></h4>
<p><span>Szolgaeszközön regisztrál egy függvényt, amit végre kell hajtania, ha a mestereszköz <em>adatot</em> szeretne <em>lekérdezni</em>.</span></p>
<p><em><span>Szintaxisa:</span></em></p>
<p><span>onReceive(handler).</span></p>
<p><em><span>Paramétere:</span></em></p>
<p><strong><span>handler</span></strong><span>: a függvény, amit végre kell hajtania.</span></p>
<p><strong><span> </span></strong><strong><span> </span></strong></p>
<p><span>A gyakorlatban például nagyon hasznos I2C eszköznek bizonyul a <em>digitális potméter</em>, amivel kiterjeszthetjük az Arduino analóg kimeneteinek számát, vagy programozhatóvá alakíthatunk olyan analóg áramköröket, mint egy erősítő vagy rádió.</span></p>
<p><span><img src="https://m.blog.hu/ha/harsanyireka/image/13.3.%20%E2%80%A0bra%20Digit%E2%80%A0lis%20potm%C3%87ter%20funkcion%E2%80%A0lis%20rajza.gif" alt="13.3. †bra Digit†lis potmÇter funkcion†lis rajza.gif" class="imgnotext" width="418" height="328" /></span></p>
<p style="text-align: center;"><em>Digitális potméter funkcionális rajza</em></p>
<p><span>A digitális potméter egy integrált áramkör (IC – Integrated Circuit), amiben az I2C protokollt értelmező vezérlő, elektronikus kapcsolók és számtalan különféle értékű ellenállás kapott helyet (13.3. ábra AD5171 típusú áramkör).</span></p>
<p style="text-align: center;"><em><img src="https://m.blog.hu/ha/harsanyireka/image/13.4.%20%E2%80%A0bra%20Az%20AD5171%20l%E2%80%A0bkioszt%E2%80%A0sa.png" alt="13.4. †bra Az AD5171 l†bkioszt†sa.png" class="imgnotext" width="270" height="176" /></em></p>
<p style="text-align: center;"><em>Az AD5171 lábkiosztása</em></p>
<p><span>A 13.3. és 13.4. ábrák összevetésével el tudjuk képzelni, hogy az áramkör fizikai lábaihoz mely funkciók társulnak – ezeket a rajzokat a gyártó biztosítja. <strong>GND</strong> (ground v. föld) a potenciál alapja, <strong>Vdd</strong> a tápfeszültség, <strong>SCL</strong> (Serial Clock) az órajel, <strong>SDA</strong> (Serial Data) az adatvonal, <strong>AD0</strong> (Address), amivel beállíthatjuk az eszköz címét a buszon, <strong>A</strong> és <strong>B</strong> a potméter két „szélső” kivezetése, míg <strong>W</strong> a közepe. Változtassuk egy LED fényerejét I2C buszon kommunikáló digitális potméter segítségével!</span></p>
<p><span> </span></p>
<p><em><span>Amire szükségünk lesz:</span></em></p>
<p><span>- </span><span>Arduino,</span></p>
<p><span>- </span><span>AD5171 (DIP tokozású),</span></p>
<p><span>- </span><span>LED,</span></p>
<p><span>- </span><span>220 ohmos ellenállás,</span></p>
<p><span>- </span><span>2 db 4,7 kiloohmos ellenállás,</span></p>
<p><span>- </span><span>próbapanel,</span></p>
<p><span>- </span><span>vezetékek.</span></p>
<p><span> </span></p>
<p><em><span>Kapcsolás:</span></em></p>
<p><span>Kössük az IC tápvezetékeit értelemszerűen az Arduino földjéhez és + 5 V jelölésű kivezetéséhez! Az A4 és A5 csatornákat 4,7 kiloohmos ellenálláson keresztül szintén a + 5 V-hoz. Ezek az úgynevezett <em>felhúzó ellenállások,</em> amik stabilizálják a busz vonalait. Ezután illesszük A4-et az IC SDA (5.) lábához, A5-öt az SCL (4.) lábához. A potmétert használjuk feszültségosztónak és a közepéről hajtsuk meg a LED-et a 220 ohmos soros ellenálláson keresztül. AD0-t, ha földre kötjük, a címet 44-re, ha + 5 V-ra kötjük, 45-re állítja.</span></p>
<p style="text-align: center;"><em><img src="https://m.blog.hu/ha/harsanyireka/image/13.5.%20%E2%80%A0bra%20AD5171%20bek%C3%AEt%C3%87se%20az%20Arduinoba.png" alt="13.5. †bra AD5171 bekîtÇse az Arduinoba.png" class="imgnotext" /></em></p>
<p style="text-align: center;"><em>AD5171 bekötése az Arduinoba</em><strong><span> </span></strong></p>
<p>Arduino kód: <a href="https://m.blog.hu/ha/harsanyireka/image/62wirepoti.zip" target="_self">62wirepoti</a></p>
<p> </p>
<p>- - - - - - - - - - </p>
<p><span>forrás: </span><a href="http://arduino.cc/en/Tutorial/HomePage" target="_blank"><span>http://arduino.cc/en/Tutorial/HomePage</span></a></p>
<p><a title="Megosztom Facebookon!" href="https://www.facebook.com/sharer.php?api_key=120587281320910&locale=hu_HU&method=stream.share&u=https%3A%2F%2Fharsanyireka.blog.hu%2F2014%2F06%2F22%2F13_3_kommunikacios_konyvtarak_wire%3Futm_source%3Dbloghu_rss%26utm_medium%3Dfacebook%26utm_campaign%3Dblhshare"><img src="https://m.blog.hu/assets/frontend/img/rss/icon_facebook.png" alt="Megosztom Facebookon!"></a>
<a title="Megosztom Twitteren!" href="https://twitter.com/home?status=https%3A%2F%2Fharsanyireka.blog.hu%2F2014%2F06%2F22%2F13_3_kommunikacios_konyvtarak_wire%3Futm_source%3Dbloghu_rss"><img src="https://m.blog.hu/assets/frontend/img/rss/icon_twitter.png" alt="Megosztom Twitteren!"></a>
<a title="Megosztom Tumblren!" href="https://www.tumblr.com/share?v=3&u=https%3A%2F%2Fharsanyireka.blog.hu%2F2014%2F06%2F22%2F13_3_kommunikacios_konyvtarak_wire%3Futm_source%3Dbloghu_rss%26utm_medium%3Dtumblr%26utm_campaign%3Dblhshare&t=13. /3) Kommunikációs könyvtárak: Wire"><img src="https://m.blog.hu/assets/frontend/img/rss/icon_tumblr.png" alt="Megosztom Tumblren!"></a>
<a href="https://harsanyireka.blog.hu/2014/06/22/13_3_kommunikacios_konyvtarak_wire#comments"><img class="item_ctp" src="https://harsanyireka.blog.hu/rss/image/post/id/6398217" border="0" /></a><br /></p>
leckék
könyvtárak
Wire
lektorált
0
fizikai számítástechnika, arduino
https://harsanyireka.blog.hu
http://m.cdn.blog.hu/ha/harsanyireka/image/13.2.%20%E2%80%A0bra%20A%20buszon%20kereszt%C3%85l%20sok%20eszk%C3%AEzt%20csatlakoztathatunk.png
https://harsanyireka.blog.hu/2014/06/22/13_2_kommunikacios_konyvtarak_firmata
13. /2) Kommunikációs könyvtárak: Firmata
2014-06-22T14:09:15+02:00
2014-06-22T14:09:15+02:00
harsanyireka
https://blog.hu/user/434264
<p><span style="color: #0000ff;">Lektorált tananyag, ami a BKF Digitális és Kollaboratív Művészet (DIKOM) pályázatnak keretén belül valósult meg.</span></p>
<p><span style="color: #0000ff;">Szerző: Harsányi Réka, Társszerző: Juhász Márton András, Lektor: Fernezelyi Márton</span></p>
<p><span>A Firmata egy kommunikációs protokoll, aminek célja a számítógépes környezetekkel való adatcsere megkönnyítése.</span></p>
<p>Sok olyan gyors prototipizálásra alkalmas környezet létezik, amelyiken a firmata protokoll használata már megoldott. Ilyenek például a VVVV, Max/MSP, Processing és Flash. Létezik olyan firmata alapú program (firmware), ami az Arduino minden funkcióját elérhetővé teszi soros parancsokon keresztül, az analóg olvasástól a digitális csatornák kapcsolgatásáig, és ezeket saját számítógépen futó fejlesztőkörnyezetünkből el is tudjuk érni. A könyvtár használatával anélkül hozhatunk létre célfeladatokra kétirányú soros kommunikációs programot, hogy saját protokollt (pl. handshaking) vagy objektumokat fejlesztenénk.</p>
<p> </p>
<p><em>Metódusai:</em></p>
<h4>begin()</h4>
<p><span>Elindítja a könyvtárat.</span></p>
<p><span> </span></p>
<h4>begin(long)</h4>
<p><span>Elindítja a könyvtárat és felülírja az előzőleg beállított adatátviteli sebességet arra, amit megadunk.</span></p>
<p><span> </span></p>
<h4>printVersion()</h4>
<p><span>Elküldi a protokoll verziószámát a számítógépnek.</span></p>
<p><span> </span></p>
<h4>blinkVersion()</h4>
<p><span>Elvillogja a protokoll verziószámát a 13-as csatornára kötött LED-en keresztül.</span></p>
<p><strong> </strong></p>
<h4>printFirmwareVersion()</h4>
<p><span>Elküldi a firmware nevét és verziószámát a számítógépnek.</span></p>
<p><span> </span></p>
<h4>setFirmwareVersion(byte major, byte minor)</h4>
<p><span>Beállíthatjuk a firmware nevét és verziószámát. A firmware neve a programunk nevével fog megegyezni a (.pde) kiterjesztés nélkül.</span></p>
<p><span> </span></p>
<p><span> </span></p>
<p><em>Üzenetek küldése:</em></p>
<h4>sendAnalog(byte pin, int value)</h4>
<p><span>Elküldi az analóg bemenet csatornájának számát és értékét.</span></p>
<p><span> </span></p>
<h4>sendDigitalPorts(byte pin, byte firstPort, byte secondPort)</h4>
<p><span>Elküldi a két digitális port állapotát különálló bájtokként.</span></p>
<p> </p>
<h4>sendDigitalPortPair(byte pin, int value)</h4>
<p><span>Elküldi a két digitális port állapotát egy integer változóként.</span></p>
<p><span> </span></p>
<h4>sendSysex(byte command, byte bytec, byte* bytev)</h4>
<p><span>Önkényesen választott bájtok tömbjeként küld parancsot.</span></p>
<p><strong> </strong></p>
<h4>sendString(const char* string)</h4>
<p><span>Stringet küld a számítógépnek.</span></p>
<p> </p>
<h4>sendString(byte command, const char* string)</h4>
<p><span>Parancsként is definiálhatunk stringet, amit elküld.</span></p>
<p><span> </span></p>
<p><span> </span></p>
<p><em><span>Üzenetek fogadása:</span></em></p>
<h4>available()</h4>
<p><span>Leellenőrzi, hogy van-e bejövő adat a tárolóban.</span></p>
<p> </p>
<h4>processInput()</h4>
<p><span>Feldolgozza a tárolóban található bejövő üzeneteket és – ha vannak – átvezeti őket a megfelelő visszahívási funkciókhoz.</span></p>
<p> </p>
<h4>attach(byte command, callbackFunction myFunction)</h4>
<p><span>Funkciót köt bizonyos típusú bejövő üzenetekhez.</span></p>
<p> </p>
<h4>detach(byte command)</h4>
<p><span>Törli az üzenet típusához kapcsolt funkciót.</span></p>
<p><span> </span></p>
<p><span> </span></p>
<p><em><span>Visszahívási funkciók:</span></em></p>
<p><span>Ahhoz, hogy egy üzenettípushoz funkciót tudjunk társítani, annak valamelyik szabvány visszahívási funkcióval egyeznie kell. Három különböző visszahívási funkció létezik:</span> </p>
<h2><span>generic</span></h2>
<h4>void callbackFunction(byte pin, int value);</h4>
<p>Általános visszahívási funkció, pl. csatornák állapotának lekérdezésére.</p>
<p><span>system_reset</span></p>
<p> </p>
<h4>void systemResetCallbackFunction(void);</h4>
<p>Visszaállítja a firmware-t az alapállapotba.</p>
<p><span>string</span></p>
<p> </p>
<h4>void stringCallbackFunction(char *myString);</h4>
<p>Karakterláncok visszaadásához.</p>
<p><span>sysex</span></p>
<p> </p>
<h4>void sysexCallbackFunction(byte pin, byte byteCount, byte *arrayPointer);</h4>
<p><span>pl. MIDI vezérlőjelek visszaadásához.</span></p>
<p><em><span> </span></em></p>
<p><em><span> </span></em></p>
<p><em><span>Üzenettípusok:</span></em><em> </em></p>
<h4>ANALOG_MESSAGE</h4>
<p><span>Egy analóg bemenethez tartozó aktuális érték.</span></p>
<p> </p>
<h4>DIGITAL_MESSAGE</h4>
<p><span>Egy digitális port 8 bitjének értéke.</span></p>
<p><span> </span></p>
<h4>REPORT_ANALOG</h4>
<p><span>Ki-/bekapcsolja az analóg üzeneteket.</span></p>
<p> </p>
<h4>REPORT_DIGITAL</h4>
<p><span>Ki-/bekapcsolja a digitális üzeneteket.</span></p>
<p><span> </span></p>
<h4>SET_PIN_MODE</h4>
<p>Beállít egy csatornát: INPUT/OUTPUT/PWM.</p>
<p><span> </span></p>
<h4>FIRMATA_STRING</h4>
<p>stringCallbackFunction-nel társítható string alapú üzenettípus.</p>
<p><span> </span></p>
<h4>SYSEX_START</h4>
<p>Általános, változó hosszúságú üzenetek (pl. MIDI SysEx protokoll)sysexCallbackFunction<span>-nel társítható üzenettípus.</span></p>
<p><span> </span></p>
<h4>SYSTEM_RESET</h4>
<p><span>Visszaállítja a firmware-t az alapállapotába, </span><em>systemResetCallbackFunction</em>-nel társítható üzenettípus<span>.</span></p>
<p><span> </span></p>
<p><em><span> </span></em></p>
<p> <img src="https://m.blog.hu/ha/harsanyireka/image/13.1.%20%E2%80%A0bra%20El%C3%A3re%20elk%C3%87sz%C2%B0tett%20firmata%20alap%C2%A3%20firmware-ek.png" alt="13.1. †bra Elãre elkÇsz°tett firmata alap£ firmware-ek.png" class="imgnotext" /></p>
<p style="text-align: center;"><span><em>Előre elkészített firmata alapú firmware-ek</em></span></p>
<p><span>Miután firmatára támaszkodó, előre elkészített firmware-ből többféle is létezik a programcsomagban, nézzük inkább ezek gyakorlati hasznát!</span></p>
<p><span> </span></p>
<p><strong><span>AllInputsFirmata</span></strong></p>
<p><span>Az összes analóg és digitális bemenet aktuális állapotát a lehető leggyorsabban továbbítja a számítógépnek. Létrehozását az Arduino2Max program inspirálta.</span></p>
<p><span> </span></p>
<p><strong><span>AnalogFirmata</span></strong></p>
<p><span>A lehető legtöbb analóg portot hasznosítja, beleértve az összes analóg bemenetet, 3, 5, 6, 9, 10, 11 PWM kimeneteket, melyek közül a 9 és 10 szervo meghajtóként is használható.</span></p>
<p><span> </span></p>
<p><strong><span>ServoFirmata</span></strong></p>
<p><span>Az összes digitális csatornát szervo meghajtóként érhetjük el.</span></p>
<p><span> </span></p>
<p><strong><span>I2CFirmata</span></strong></p>
<p><span>I2C protokollt használó eszközökkel kommunikálhatunk az Arduinon, mint átalakítón keresztül.</span></p>
<p><span> </span></p>
<p><strong><span>StandardFirmata</span></strong></p>
<p><span>Minden felsorolt funkciót támogat, elérhetjük a digitális és analóg ki-/bemeneteket, I2C kommunikációt, használhatunk digitális csatornákat szervo meghajtónak.</span></p>
<p><span> </span></p>
<h4>StandardFirmata használata Processingből</h4>
<p>Processing kód: <a href="https://m.blog.hu/ha/harsanyireka/image/59processingfirmata.zip" target="_self">59processingfirmata</a></p>
<p style="text-align: left;"><b>Arduino.cc library letöltése: <br /><a href="http://playground.arduino.cc/Interfacing/Processing%20" target="_blank">http://playground.arduino.cc/Interfacing/Processing </a></b></p>
<p style="text-align: left;"> </p>
<h4>StandardFirmata használata Max/MSP-vel</h4>
<p><img src="https://m.blog.hu/ha/harsanyireka/image/13.3.2.%20StandardFirmata%20haszn%E2%80%A0lata%20MaxMSP-vel.png" alt="13.3.2. StandardFirmata haszn†lata MaxMSP-vel.png" class="imgnotext" /></p>
<p> </p>
<p>- - - - - - - - - -</p>
<p><span>forrás: </span><a href="http://arduino.cc/en/Tutorial/HomePage" target="_blank"><span>http://arduino.cc/en/Tutorial/HomePage</span></a></p>
<p> </p>
<p><a title="Megosztom Facebookon!" href="https://www.facebook.com/sharer.php?api_key=120587281320910&locale=hu_HU&method=stream.share&u=https%3A%2F%2Fharsanyireka.blog.hu%2F2014%2F06%2F22%2F13_2_kommunikacios_konyvtarak_firmata%3Futm_source%3Dbloghu_rss%26utm_medium%3Dfacebook%26utm_campaign%3Dblhshare"><img src="https://m.blog.hu/assets/frontend/img/rss/icon_facebook.png" alt="Megosztom Facebookon!"></a>
<a title="Megosztom Twitteren!" href="https://twitter.com/home?status=https%3A%2F%2Fharsanyireka.blog.hu%2F2014%2F06%2F22%2F13_2_kommunikacios_konyvtarak_firmata%3Futm_source%3Dbloghu_rss"><img src="https://m.blog.hu/assets/frontend/img/rss/icon_twitter.png" alt="Megosztom Twitteren!"></a>
<a title="Megosztom Tumblren!" href="https://www.tumblr.com/share?v=3&u=https%3A%2F%2Fharsanyireka.blog.hu%2F2014%2F06%2F22%2F13_2_kommunikacios_konyvtarak_firmata%3Futm_source%3Dbloghu_rss%26utm_medium%3Dtumblr%26utm_campaign%3Dblhshare&t=13. /2) Kommunikációs könyvtárak: Firmata"><img src="https://m.blog.hu/assets/frontend/img/rss/icon_tumblr.png" alt="Megosztom Tumblren!"></a>
<a href="https://harsanyireka.blog.hu/2014/06/22/13_2_kommunikacios_konyvtarak_firmata#comments"><img class="item_ctp" src="https://harsanyireka.blog.hu/rss/image/post/id/6398097" border="0" /></a><br /></p>
leckék
könyvtárak
Firmata
lektorált
0
fizikai számítástechnika, arduino
https://harsanyireka.blog.hu
http://m.cdn.blog.hu/ha/harsanyireka/image/13.1.%20%E2%80%A0bra%20El%C3%A3re%20elk%C3%87sz%C2%B0tett%20firmata%20alap%C2%A3%20firmware-ek.png
https://harsanyireka.blog.hu/2014/06/22/13_kommunikacios_konyvtarak
13. /1) Kommunikációs könyvtárak: SoftwareSerial
2014-06-22T13:39:14+02:00
2014-06-22T13:39:14+02:00
harsanyireka
https://blog.hu/user/434264
<p><span style="color: #0000ff;">Lektorált tananyag, ami a BKF Digitális és Kollaboratív Művészet (DIKOM) pályázatnak keretén belül valósult meg.</span></p>
<p><span style="color: #0000ff;">Szerző: Harsányi Réka, Társszerző: Juhász Márton András, Lektor: Fernezelyi Márton</span></p>
<p><span>Számítástudományban a <em>könyvtár</em> olyan előre megírt kódrészeket jelent, amik meghatározott komplex funkciók elvégzésére képesek. Osztályaik és függvényeik felhasználásával a független programokban nincs szükség ezen feladatok ismételt megoldására. Általánosságban olyan csomagokként értelmezzük őket, amik szolgáltatásként teszik elérhetővé a konfigurációs adatokat, konstansokat és kódokat. Például egy matematikai könyvtár (Arduino esetében a math.h) a programnyelvből közvetlenül nem elérhető függvényeket írja le, mint a tangens, kotangens, logaritmus, gyökvonás.<span> </span>A rendkívül hasznos függvényeken túl sok esetben bizonyos típusú hardware elemek használatát könnyítik meg – operációs rendszer hiányában ezeket a könyvtárakat felfoghatjuk úgy is, mint eszközillesztő programokat (device driver). Mivel az Arduino egy nyílt forrású, együttműködő közösség által is fejlesztett rendszer, megkülönböztetünk hivatalos és kontribúciós könyvtárakat. Az előbbieket standardként is szokás nevezni, mivel kiforrottságuk miatt a fejlesztőkörnyezet programcsomagjának részét képezik, és olyan általános funkciókat írnak le, amik végrehajtására minden Arduino-típus képes.</span></p>
<p> </p>
<h2>Könyvtárak szerkezete</h2>
<p><span>Amikor a két fő rutin mellett (setup és loop) szubrutinokat szeretnénk létrehozni, az a <strong>void</strong> <em>szubrutin_neve</em>() összefüggés segítségével tehető meg:</span></p>
<p><span>Arduino kód: <a href="https://m.blog.hu/ha/harsanyireka/image/52voiddot.zip" target="_self">52voiddot</a></span></p>
<p><span>Ha a fenti kódból könyvtárat szeretnénk létrehozni, akkor legalább két fájlra lesz szükségünk, az egyik az úgynevezett <em>fejléc</em> vagy <em>header</em> fájl (kiterjesztése .h), a másik pedig a <em>forrás</em> vagy <em>source</em> fájl (kiterjesztése .cpp). A fejléc definiálja a könyvtárat – minden kifejezésnek szerepelnie kell benne, amire hivatkozni szeretnénk –, míg a forrásfájl tartalmazza a kódot.</span></p>
<p><span>A fejléc már a fájl nevében tartalmazza a könyvtárunk nevét (<strong>Morse.h</strong>):<br /><a href="https://m.blog.hu/ha/harsanyireka/image/53morse.zip" target="_self">53morseH</a></span></p>
<p>A forrásfájlba már betöltjük a fejlécet, hiszen a definiált osztályt és szubrutinjait töltjük meg tartalommal (<strong>Morse.cpp</strong>):<br /><a href="https://m.blog.hu/ha/harsanyireka/image/54morseCpp.zip" target="_self">54morseCpp</a></p>
<p><span>Végül a kész könyvtárunkkal a fenti példakódunk lerövidült és univerzálisabbá vált – használata pedig így néz ki:<br /></span><a href="https://m.blog.hu/ha/harsanyireka/image/55morsekonyvtar.zip" target="_self">55morsekonyvtar</a></p>
<p> </p>
<p><span>A fentiek alapján láthatjuk, hogyan épülnek fel a könyvtárak és hogyan kell őket használni. Akár saját könyvtár készítéséhez is hozzáfoghatunk, azonban mielőtt ezt megtennénk, érdemes kutatómunkát végezni, hiszen mérhetetlenül sokféle funkciót lefed a már létező könyvtárak összessége.</span></p>
<p> </p>
<h2><span>SoftwareSerial könyvtár</span></h2>
<p><span>Az Arduino egyetlen fizikai soros porttal rendelkezik, ami a beépített UART (Universal Asynchronous Receiver Transmitter) terhére mentesíti a feldolgozóegység erőforrásait, amíg a 64 bájtnyi soros átmeneti tárolóban van elég hely. Az integrált port a 0-ás és 1-es digitális csatornákon kommunikál (lásd 9. fejezet), ahol a számítógéphez USB átalakítóval is csatlakozik.</span></p>
<p><span>A SoftwareSerial könyvtárat – ahogy a neve is sugallja – azért fejlesztették ki, hogy a feldolgozóegység terhére a többi digitális csatornán is létre lehessen hozni soros kommunikációs felületeket. Segítségével egyszerre kapcsolódhatunk a számítógéphez és más soros eszközökhöz, kijelzőkhöz, digitális szenzorokhoz, vagy kialakíthatunk soros hálózatot több Arduino között. A szoftveres portok maximális sebessége is 115200 baud lehet, ráadásul megváltoztatható a jel polaritása, ami szélesíti a kompatibilis egységek spektrumát, azonban több port létrehozása esetén az adatok egyidejű fogadása nem lehetséges.</span></p>
<p><span>Arduino kód: <a href="https://m.blog.hu/ha/harsanyireka/image/56softwareserial.zip" target="_self">56softwareserial</a></span></p>
<p><em>A könyvtár függvényei:</em></p>
<ul>
<li>available()</li>
<li>begin()</li>
<li>isListening()</li>
<li>overflow()</li>
<li>peek()</li>
<li>read()</li>
<li>print()</li>
<li>println()</li>
<li>listen()</li>
<li>write()</li>
</ul>
<p> </p>
<h4><span>SoftwareSerial()</span></h4>
<p>Hívásakor létrehoz egy SoftwareSerial objektumot az általunk megadott névvel. Ahhoz, hogy a kommunikációt engedélyezzük, meg kell hívnunk a SoftwareSerial.begin() parancsot is. </p>
<p><em>Szintaxisa:</em></p>
<p>SoftwareSerial(Rx,Tx). </p>
<p><em>Paraméterei:</em></p>
<p><strong>Rx</strong>: a szoftveres soros portunk bejövő csatornája,</p>
<p><strong>Tx</strong>: a szoftveres soros portunk kimenő csatornája.</p>
<p><em>Példakód:</em></p>
<p><span style="color: #ff6600;">SoftwareSerial mySerial = SoftwareSerial(rxPin, txPin);</span><strong> </strong></p>
<p><strong> </strong></p>
<h4><span>available()</span></h4>
<p><span>Visszaadja a szoftveres átmeneti tárolóban elérhető, beérkezett bájtok számát.</span> </p>
<p><em>Szintaxisa:</em></p>
<p>mySerial.available(). </p>
<p><em>Példakód:</em></p>
<p><span style="color: #ff6600;">void <strong>loop</strong>() {</span><br /><span style="color: #ff6600;"> if (mySerial.available()>0){ // ha már van valami a tárolóban</span><br /><span style="color: #ff6600;"> mySerial.read(); // olvassuk ki</span><br /><span style="color: #ff6600;"> }</span><br /><span style="color: #ff6600;"> }</span></p>
<p><strong> </strong></p>
<h4><span>begin()</span></h4>
<p>Beállítja a soros kommunikáció sebességét (baud rate). A szabvány átviteli sebességek: 300, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 31250, 38400, 57600 és 115200.</p>
<p><em><span>Szintaxisa:</span></em></p>
<p><span>mySerial.begin(baudrate).</span></p>
<p><em><span>Paramétere:</span></em></p>
<p><strong><span>baudrate</span></strong><span>: long típusú változó a fenti szabványértékek valamelyike.</span><strong> </strong></p>
<p><em>Példakód:</em></p>
<p><span style="color: #ff6600;">void <strong>setup</strong>() {</span><br /><span style="color: #ff6600;"> <em>// beállítjuk a vevő és adó csatornákat bemenetnek és kimenetnek</em></span><br /><span style="color: #ff6600;"> pinMode(rxPin, INPUT);</span><br /><span style="color: #ff6600;"> pinMode(txPin, OUTPUT);</span><br /><span style="color: #ff6600;"> <em>// meghatározzuk az átviteli sebességet és megnyitjuk a portot</em></span><br /><span style="color: #ff6600;"> mySerial.begin(9600);</span><br /><span style="color: #ff6600;"> }</span></p>
<p><strong> </strong><strong> </strong></p>
<h4><span>isListening()</span></h4>
<p>Megnézhetjük vele, hogy a kiválasztott szoftveres soros port valóban aktív-e. Boole típusú választ ad vissza.</p>
<p><em>Szintaxisa:</em></p>
<p>mySerial.isListening(). </p>
<p><em>Példakód:</em></p>
<p><span style="color: #ff6600;">void <strong>loop</strong>()</span> <span style="color: #ff6600;">{</span><br /><span style="color: #ff6600;"> if (portOne.isListening()) { // ha a port aktív, akkor</span><br /><span style="color: #ff6600;"> Serial.println("A port aktív!"); </span><br /><span style="color: #ff6600;"> }</span></p>
<p> <strong> </strong></p>
<h4><span>overflow()</span></h4>
<p>A szoftveres soros port átmeneti tárolója 64 bájtot képes elraktározni. Amennyiben ezek nem kerülnek időben kiolvasásra, a tároló túlcsordul – a régi adatok helyét nem veszik át az újak és lemaradunk a közölt információ egy részéről. Ezzel a függvénnyel ellenőrizhetjük, hogy történt-e túlcsordulás. Az ellenőrzést követően a függvény válaszát képező Bool változó hamis állapotba kerül.</p>
<p><em>Szintaxisa:</em></p>
<p>mySerial.overflow().</p>
<p><em>Példakód:</em> </p>
<p><span style="color: #ff6600;">void <strong>loop</strong>() {</span><br /><span style="color: #ff6600;"> if (portOne.overflow()) { // ha túlcsordult a tároló, akkor</span><br /><span style="color: #ff6600;"> Serial.println("A tároló túlcsordult!"); </span><br /><span style="color: #ff6600;"> }</span></p>
<p><strong> </strong></p>
<h4><span>read()</span></h4>
<p><span>Karakterenként kiolvassa a soros tárolót.</span> </p>
<p><em>Szintaxisa:</em></p>
<p>mySerial.read().</p>
<p><em>Példakód:</em></p>
<p><span style="color: #ff6600;">void <strong>loop</strong>() {</span><br /><span style="color: #ff6600;"> char c = mySerial.read();</span><br /><span style="color: #ff6600;"> }</span></p>
<p><strong> </strong></p>
<h4><span>peek()</span></h4>
<p>Hasonlóan a read()-hez, az utolsó a porton beolvasott karaktert adja vissza, ha nem jött semmi –1-et.</p>
<p><em>Szintaxisa:</em></p>
<p>mySerial.peek().</p>
<p><strong> </strong></p>
<h4><span>print()</span></h4>
<p><span>Adatokat küld a szoftveres soros port Tx csatornájára. A kiírt bájtok számát adja vissza.</span> </p>
<p>Arduino kód: <a href="https://m.blog.hu/ha/harsanyireka/image/57softwareserial02.zip" target="_self">57softwareserial02</a></p>
<p><strong> </strong></p>
<h4><span>println()</span></h4>
<p>Ahogy az a fenti példából is látszik, a küldendő adatot automatikusan kiegészíti a „soremelés” kódjával – ugyanúgy, mint azt a hardware-es soros portnál már láttuk.</p>
<p><strong> </strong></p>
<h4><span>listen()</span></h4>
<p>Több szoftveres soros port használata esetén egyszerre csak egy port kaphatja meg az olvasás jogát. Ezzel a függvénnyel beállíthatjuk, melyik port legyen az, amelyik olvashat. Az összes többi portra érkező adatok elvesznek. </p>
<p><em>Szintaxisa:</em></p>
<p>mySerial.listen().</p>
<p>Arduino kód: <a href="https://m.blog.hu/ha/harsanyireka/image/58softwareserial03.zip" target="_self">58softwareserial03</a></p>
<p><strong> </strong></p>
<h4><span>write()</span></h4>
<p>Az adatokat nyers bájt formátumban küldi ki a portra és visszaadja a kiírt bájtok számát. </p>
<p><em>Példakód:</em></p>
<p><span style="color: #ff6600;"><em>//elküldi a “hello” karaktersort és visszaadja a kiküldött karakterek számát</em></span></p>
<p><span style="color: #ff6600;">int bytesSent = mySerial.write(“hello”);</span></p>
<p><span> </span></p>
<p>- - - - - - - - - -</p>
<p><span>forrás: </span><a href="http://arduino.cc/en/Tutorial/HomePage" target="_blank"><span>http://arduino.cc/en/Tutorial/HomePage</span></a></p>
<p><a title="Megosztom Facebookon!" href="https://www.facebook.com/sharer.php?api_key=120587281320910&locale=hu_HU&method=stream.share&u=https%3A%2F%2Fharsanyireka.blog.hu%2F2014%2F06%2F22%2F13_kommunikacios_konyvtarak%3Futm_source%3Dbloghu_rss%26utm_medium%3Dfacebook%26utm_campaign%3Dblhshare"><img src="https://m.blog.hu/assets/frontend/img/rss/icon_facebook.png" alt="Megosztom Facebookon!"></a>
<a title="Megosztom Twitteren!" href="https://twitter.com/home?status=https%3A%2F%2Fharsanyireka.blog.hu%2F2014%2F06%2F22%2F13_kommunikacios_konyvtarak%3Futm_source%3Dbloghu_rss"><img src="https://m.blog.hu/assets/frontend/img/rss/icon_twitter.png" alt="Megosztom Twitteren!"></a>
<a title="Megosztom Tumblren!" href="https://www.tumblr.com/share?v=3&u=https%3A%2F%2Fharsanyireka.blog.hu%2F2014%2F06%2F22%2F13_kommunikacios_konyvtarak%3Futm_source%3Dbloghu_rss%26utm_medium%3Dtumblr%26utm_campaign%3Dblhshare&t=13. /1) Kommunikációs könyvtárak: SoftwareSerial"><img src="https://m.blog.hu/assets/frontend/img/rss/icon_tumblr.png" alt="Megosztom Tumblren!"></a>
<a href="https://harsanyireka.blog.hu/2014/06/22/13_kommunikacios_konyvtarak#comments"><img class="item_ctp" src="https://harsanyireka.blog.hu/rss/image/post/id/6398003" border="0" /></a><br /></p>
leckék
könyvtárak
softwareserial
lektorált
0
fizikai számítástechnika, arduino
https://harsanyireka.blog.hu
https://harsanyireka.blog.hu/2014/06/22/12_muveletek_karakterlancokkal
12. Műveletek karakterláncokkal
2014-06-22T12:56:09+02:00
2014-06-22T12:56:09+02:00
harsanyireka
https://blog.hu/user/434264
<p><span style="color: #0000ff;">Lektorált tananyag, ami a BKF Digitális és Kollaboratív Művészet (DIKOM) pályázatnak keretén belül valósult meg.</span></p>
<p><span style="color: #0000ff;">Szerző: Harsányi Réka, Társszerző: Juhász Márton András, Lektor: Fernezelyi Márton</span></p>
<p> </p>
<p><span>Mint azt a soros kommunikációról szóló fejezetben már érintettük, a <em>char </em>olyanadattípus, amely 1 byte memóriát foglal és az ASCII táblázatnak megfelelően egy karakter értékét tárolja. Mivel a karakterek mindig számként tárolódnak, ezért műveleteket is végrehajthatunk rajtuk, például „A” + 1 = 66 – mert az A értéke a táblázatban 65.</span></p>
<p><span>Az egyszerű karakterláncokat, vagyis a karaktereket tartalmazó tömböket is (kisbetűvel) stringeknek nevezzük, és a string osztály példányait is (nagybetűvel) stringeknek hívjuk. Tehát karakterláncot kétféleképpen tudunk definiálni, string adattípusként – amin a string osztály függvényeivel komplexebb műveleteket is végezhetünk –, vagy egyszerű karaktertömbként.</span></p>
<p> </p>
<h2>Karaktertömbök</h2>
<p><span>Fontos megjegyeznünk, hogy a fordítóprogram a karakterlánc végét egy ASCII 0<span> </span>(<em>null)</em><span> </span>karakterről ismeri meg, így például serial.print() függvény a string nyomtatásakor nem szalad tovább oda nem illő memóriaterületekre. Ez azt is jelenti, hogy mindig egy karakterrel hosszabbnak kell lennie a tömbnek, mint a tárolni kívánt szöveg. A karaktereket tartalmazó tömböket az alábbi példák szerint tudjuk deklarálni:</span></p>
<ul>
<li><span>Iniciáló értékek megadása nélkül, csak az elemek számával – a fordító lezárja <em>null</em> karakterrel:<br /></span><span style="color: #ff6600;">char Str1[15]; </span></li>
</ul>
<ul>
<li><strong><span>Karakterenként aposztrófokkal</span></strong><span> – az utolsó üres helyet a fordító feltölti <em>null</em> karakterrel, de mi is megadhatjuk a sort lezáró karaktert:<br /></span><span style="color: #ff6600;">char Str2[8] = {'a', 'r', 'd', 'u', 'i', 'n', 'o'}; <br />char Str3[8] = {'a', 'r', 'd', 'u', 'i', 'n', 'o', '\0'}; </span></li>
</ul>
<ul>
<li><strong><span>Szövegként idézőjelekben</span></strong><span> – ha nem adjuk meg az elemek számát, a fordító megszámolja a karaktereket és hozzáadja a végéhez a lezáró <em>null</em> karaktert, ahogy az üres helyet is feltölti:<br /></span><span style="color: #ff6600;">char Str4[ ] = "arduino"; <br />char Str5[8] = "arduino"; <br />char Str6[15] = "arduino";</span></li>
</ul>
<p>Bár lehetséges karaktertömb definiálása sorzáró <em>null</em> karakter nélkül – hacsak nem ez a célunk –, kerüljük el, mivel a legtöbb függvény, amit karakterláncokon alkalmazunk, nincs erre felkészítve. Ha a programunk futása közben furcsa, oda nem illő karakterek jelennek meg, akkor valószínűleg ezt a hibát vétettük. </p>
<p><span>Hosszú szövegeket így is megadhatunk:</span></p>
<p><span style="color: #ff6600;">char myString[] = "ez az első sor"<br />" ez a második sor"<br />" stb…";</span></p>
<p><span>Amikor sokféle szöveggel dolgozunk, például LCD kijelző vagy soros terminál menüjének szövegeit tároljuk, sokkal kézenfekvőbb a stringeket is egy tömbbe gyűjteni. Mivel a stringek önmagukban is tömbök, ezért kétdimenziós tömböt hozunk létre:</span></p>
<p><span style="color: #ff6600;">char* myStrings[]={"This is string 1", "This is string 2", "This is string 3", "This is string 4", "This is string 5","This is string 6"};</span></p>
<p><span>Az adattípus után a csillag (char*) azt jelöli, hogy ez egy mutatókból (pointer) álló tömb. Valójában minden tömb neve pointer, ezért szükséges a megkülönböztető csillag jelölés a tömböket tartalmazó tömbök létrehozásakor.</span></p>
<p><span> Arduino kód: <a href="https://m.blog.hu/ha/harsanyireka/image/43string01.zip" target="_self">43string01</a></span></p>
<p> </p>
<p> </p>
<h2>A string osztály példányai</h2>
<p><span>A string osztály kifejezetten szöveg alapú adattípusok manipulálására jött létre. Az egyszerű karaktertömböktől eltérően az osztály példányain olyan függvényekkel is végezhetünk műveleteket, mint a vágás, az összefűzés, szövegrészletek keresése és cseréje. Ugyan a string adattípus használata ebből kifolyólag több memóriát igényel, mint a karakterláncé használatuk mégis sokszor megtérül.</span></p>
<p><span>String osztály példányait a következő módokon hozhatjuk létre:</span></p>
<ul>
<li><span>Konstansként idézőjelek közé zárva: <br /></span><span style="color: #ff6600;">String stringOne = "Hello String"; </span></li>
<li><strong>String() függvény</strong> hívásával konstans karaktert átkonvertálva: <br /><span style="color: #ff6600;">String stringOne = String('a');</span> </li>
<li>Konstansból objektummá alakítva: <br /><span style="color: #ff6600;">String stringOne = String("This is a string"); </span></li>
<li>Több stringből létrehozva: <br /><span style="color: #ff6600;">StringstringOne = String(stringTwo + "with more");</span> </li>
<li>Szám típusú változóból: <br /><span style="color: #ff6600;">String stringOne = String(13); </span></li>
<li>Szám típusú változóból, megadva a számrendszer alapját:<br /><span style="color: #ff6600;">String stringOne = String(analogRead(0), DEC); </span><br /><span style="color: #ff6600;">String stringOne = String(45, HEX); </span><br /><span style="color: #ff6600;">String stringOne = String(255, BIN); </span><br /><span style="color: #ff6600;">String stringOne = String(millis(), DEC);</span><span><span style="color: #ff6600;"> </span> </span><span><br /></span><span><br /></span></li>
</ul>
<h2><span>String osztály további függvényei</span></h2>
<h4><span>charAt()</span></h4>
<p><span>Visszaadja a string típusú változó n-edik karakterét.</span></p>
<p><em><span>Szintaxisa</span></em></p>
<p><span>string.charAt(n).</span></p>
<p><em><span>Paraméterei</span></em></p>
<p><strong><span>string</span></strong><span>: az a string típusú változó, amiben;</span></p>
<p><strong><span>n</span></strong><span>: az n-edik karaktert szeretnénk elérni.</span></p>
<p> </p>
<h4><span>setCharAt()</span></h4>
<p><span>Lecserél egy adott karaktert a string változón belül. Csak a string hosszán belül érvényes.</span></p>
<p><em><span>Szintaxisa</span></em></p>
<p><span>setCharAt(index,c).</span></p>
<p><em><span>Paraméterei</span></em></p>
<p><strong><span>string</span></strong><span>: string típusú változó neve;</span></p>
<p><strong><span>index</span></strong><span>: a lecserélendő karakter sorszáma;</span></p>
<p><strong><span>c</span></strong><span>: a lecserélendő karakter – char típusú változó.</span></p>
<p> </p>
<h4><span>compareTo()</span></h4>
<p><span>Két stringet hasonlít össze, az egyenlőségüket vizsgálja, egyenlőtlenség esetén pedig az ABC sorrendben betöltött sorrendjüket.</span></p>
<p><em><span>Szintaxisa</span></em></p>
<p><span>string.compareTo(string2).</span></p>
<p><em><span>Paraméterei</span></em></p>
<p><strong><span>string</span></strong><span>: az egyik összehasonlítandó string;</span></p>
<p><strong><span>string2</span></strong><span>: a másik összehasonlítandó string.</span></p>
<p><em><span>Kimenete</span></em></p>
<p><span>negatív érték: string előrébb való string2-nél;</span></p>
<p><span>0: a két string megegyezik;</span></p>
<p><span>pozitív érték: string2 előrébb való string-nél.</span></p>
<p><span> </span></p>
<p>Arduino kód: <a href="https://m.blog.hu/ha/harsanyireka/image/44string02.zip" target="_self">44string02</a></p>
<p><span>Stringek egybevetésekor használhatunk összehasonlító műveleti jeleket is, mint az egyenlő <strong>== </strong>, nem egyenlő <strong>!= </strong>, kisebb/nagyobb <strong>< ></strong> , nagyobb egyenlő <strong>>=</strong> , kisebb egyenlő <strong><=</strong> , az <em>equals()</em> és <em>equalsIgnoreCase()</em> függvényeket is. A két függvény közül az előbbi megegyezik a <strong>==</strong> jellel, az utóbbi csak abban tér el, hogy figyelmen kívül hagyja a kis- és nagybetűk közötti különbségeket. Számokat is tartalmazó szövegek összehasonlításakor vegyük figyelembe, hogy a fenti függvények a stringeket karakterenként vetik egybe, így például könnyen 999 > 1000 eredményre jutnak, mivel a 9 később következik a számok sorában, mint az 1.</span></p>
<p> </p>
<h4>concat()</h4>
<p><span>Összekapcsol két stringet úgy, hogy a másodikat folytatólagosan az elsőhöz ragasztja és a produktumot egy új stringbe tölti. Szám típusú változókat is hozzáadhatunk vele egy szöveghez.</span></p>
<p><em><span>Szintaxisa</span></em></p>
<p><span>string.concat(string,string2);</span></p>
<p><span>string.concat(string2);</span></p>
<p><span>string += string2.</span></p>
<p><em><span>Paraméterei</span></em></p>
<p><strong><span>string</span></strong><span>: első változó;</span></p>
<p><strong><span>string2</span></strong><span>: második változó.</span></p>
<p><span> </span></p>
<p>Arduino kód: <a href="https://m.blog.hu/ha/harsanyireka/image/45string03.zip" target="_self">45string03</a></p>
<p> </p>
<h4><span>startsWith()</span></h4>
<p><span>Megvizsgálja, hogy egy string azzal a karakterlánccal kezdődik-e, mint amit egy másik tartalmaz, és igaz/hamis választ ad vissza.</span></p>
<p><em><span>Szintaxisa</span></em></p>
<p><span>string.startsWith(string2).</span></p>
<p><em><span>Paraméterei</span></em></p>
<p><strong><span>string</span></strong><span>: string, aminek az elején keresünk;</span></p>
<p><strong><span>string2</span></strong><span>: string, amit keresünk.</span></p>
<p> </p>
<p>Arduino kód: <a href="https://m.blog.hu/ha/harsanyireka/image/46string04.zip" target="_self">46string04<strong> </strong></a></p>
<p><strong> </strong></p>
<h4><span>endsWith()</span></h4>
<p><span>Megvizsgálja, hogy egy string azzal a karakterlánccal végződik-e, mint amit egy másik tartalmaz, és igaz/hamis választ ad vissza.</span></p>
<p><em><span>Szintaxisa</span></em></p>
<p><span>string.endsWith(string2).</span> </p>
<p><em><span>Paraméterei</span></em></p>
<p><strong><span>string</span></strong><span>: string, aminek az elején keresünk;</span></p>
<p><strong><span>string2</span></strong><span>: string, amit keresünk.</span></p>
<p><span> </span></p>
<p>Arduino kód: <a href="https://m.blog.hu/ha/harsanyireka/image/47string05.zip" target="_self">47string05</a></p>
<p> </p>
<h4><span>indexOf() és lastIndexOf()</span></h4>
<p><span>Szövegen belüli keresést hajthatunk végre a segítségükkel, mely során a keresendő minta lehet karakter (char) vagy string típusú is. Alapértelmezésként az indexOf() a string elejétől kezdi a keresést, de megadhatunk kezdő pozíciót is. A lastIndexOf() abban különbözik, hogy képes a string végéről visszafelé keresni. Mindkét függvény a találat tömbön belüli indexét adja vissza és –1-et, ha nem talál egyezést.</span></p>
<p><em><span>Szintaxisuk</span></em></p>
<p><span>string.indexOf(val);</span></p>
<p><span>string.indexOf(val, from);</span></p>
<p><span>string.lastIndexOf(val);</span></p>
<p><span>string.lastIndexOf(val, from).</span></p>
<p><em><span>Paramétereik</span></em></p>
<p><strong><span>string</span></strong><span>: amiben keresünk;</span></p>
<p><strong><span>val</span></strong><span>: amit keresünk, lehet <em>char</em> vagy <em>string;</em></span></p>
<p><strong><span>from</span></strong><span>: a karakter pozíciója a tömbben, ahonnan a keresés indul.</span></p>
<p><span> </span></p>
<p>Arduino kód: <a href="https://m.blog.hu/ha/harsanyireka/image/48string06.zip" target="_self">48string06</a></p>
<p> </p>
<h4><span>length()</span></h4>
<p><span>Visszaadja a string karaktereinek számát a lezáró <em>null</em> karakter nélkül.</span></p>
<p><em><span>Szintaxisa</span></em></p>
<p><span>string.length().</span><strong> </strong></p>
<p><em><span>Paramétere</span></em></p>
<p><strong><span>string</span></strong><span>: aminek a hosszára kíváncsiak vagyunk.</span></p>
<p> </p>
<h4><span>trim()</span></h4>
<p><span>Levágja a szöveget megelőző vagy követő üres helyeket és az eredményt visszatölti az eredeti változóba. Az szünetnek látszó üres karakterek például: SPACE (ASCII 32), tab (ASCII 9), függőleges tab (ASCII 11), sor elejére ugrás (ASCII 13), új sor (ASCII 11). </span></p>
<p><em><span>Szintaxisa</span></em></p>
<p><span>string.trim().</span></p>
<p><span> </span><em><span>Paramétere</span></em></p>
<p><strong><span>string</span></strong><span>: amit szeretnénk megváltoztatni.</span></p>
<p><span> </span></p>
<p>Arduino kód: <a href="https://m.blog.hu/ha/harsanyireka/image/49string07.zip" target="_self">49string07 </a></p>
<p> </p>
<h4><span>substring()</span></h4>
<p><span>Egy string tetszőleges részletét adja vissza, amit a tömb indexeivel határolhatunk. A kezdőpozíción található karakter még bele fog esni a kimásolt karakterláncba, míg a végpozíción található karakter már nem. Ha nem adunk meg végpozíciót, akkor az automatikusan a karakterlánc vége lesz.</span></p>
<p><em><span>Szintaxisa</span></em></p>
<p><span>string.substring(from);</span></p>
<p><span>string.substring(from, to).</span><strong> </strong></p>
<p><em><span>Paraméterei</span></em></p>
<p><strong><span>string</span></strong><span>: amiből karakterláncot másolunk;</span></p>
<p><strong><span>from</span></strong><span>: a tömb indexe, ami a kezdőpozíciót jelöli;</span></p>
<p><strong><span>to</span></strong><span>: a tömb indexe, ami a végpozíciót jelöli.</span></p>
<p><span> </span></p>
<p>Arduino kód: <a href="https://m.blog.hu/ha/harsanyireka/image/50string08.zip" target="_self">50string08</a></p>
<p> </p>
<h4><span>replace()</span></h4>
<p><span>Kicserél két karakterláncot egy stringen belül, de csak akkor, ha amire cserélünk, nem hosszabb, mint az egész string. Máskülönben a fordító hiba nélkül továbblép és az eredeti string változatlan marad.</span></p>
<p><em><span>Szintaxisa</span></em></p>
<p><span>string.replace(substring1, substring2).</span></p>
<p><em><span>Paraméterei</span></em></p>
<p><strong><span>string</span></strong><span>: a karakterlánc, aminek egy részét cseréljük;</span></p>
<p><strong><span>substring1</span></strong><span>: amit ki szeretnénk cserélni;</span></p>
<p><strong><span>substring2</span></strong><span>: amire ki szeretnénk cserélni.</span></p>
<p><strong> </strong></p>
<p>Arduino kód: <a href="https://m.blog.hu/ha/harsanyireka/image/51string09.zip" target="_self">51string09</a></p>
<p><strong> </strong><strong> </strong></p>
<h4><span>toLowerCase() </span></h4>
<p><span>Átalakítja egy stringben a nagybetűket kisbetűkké és visszatölti az eredményt az eredeti változóba. Ezzel szemben a <em>toUppercase()</em> a kisbetűket alakítja nagybetűkké.</span></p>
<p><em><span>Szintaxisa</span></em></p>
<p><span>string.toLowerCase();</span></p>
<p><span>string.toUpperCase().</span></p>
<p><em><span>Paramétere</span></em></p>
<p><strong><span>string</span></strong><span>: amin a változtatást végrehajtjuk.</span></p>
<p><strong> </strong></p>
<h4><span>getBytes()</span></h4>
<p><span>Előfordulhat, hogy szeretnénk a string típusát átalakítani. Ha byte-okat tartalmazó tömbként szeretnénk a karakterláncot kezelni, akkor ez a függvény kimásolja a string tartalmát byte-onként egy tömbbe.</span></p>
<p><em><span>Szintaxisa</span></em></p>
<p><span>string.getBytes(buf, len).</span></p>
<p><em><span>Paraméterei</span></em></p>
<p><strong><span>string</span></strong><span>: string változónk, aminek a tartalmát másoljuk;</span></p>
<p><strong><span>buf</span></strong><span>: byte[] (byte tömb) típusú változónk, ahová másolunk;</span></p>
<p><strong><span>len</span></strong><span>: a byte tömbünk hossza (unsigned int típusú).</span></p>
<p><span> </span></p>
<h4><span>toCharArray()</span></h4>
<p><span>Hasonlóan az előzőhöz, kimásolja a string tartalmát és egyszerű karaktereket tartalmazó tömbbe tölti.</span></p>
<p><em><span>Szintaxisa</span></em></p>
<p><span>string.toCharArray(buf, len).</span> </p>
<p><em><span>Paraméterei</span></em></p>
<p><strong><span>string</span></strong><span>: string változónk, aminek a tartalmát másoljuk;</span></p>
<p><strong><span>buf</span></strong><span>: char[] (karakter tömb) típusú változónk, ahová másolunk;</span></p>
<p><strong><span>len</span></strong><span>: a karakterlánc hossza (unsigned int típusú).</span></p>
<p><span> </span></p>
<p> </p>
<p>- - - - - - - - - - </p>
<p>forrás: <a href="http://arduino.cc/en/Tutorial/HomePage" target="_blank">http://arduino.cc/en/Tutorial/HomePage</a></p>
<p> </p>
<p><a title="Megosztom Facebookon!" href="https://www.facebook.com/sharer.php?api_key=120587281320910&locale=hu_HU&method=stream.share&u=https%3A%2F%2Fharsanyireka.blog.hu%2F2014%2F06%2F22%2F12_muveletek_karakterlancokkal%3Futm_source%3Dbloghu_rss%26utm_medium%3Dfacebook%26utm_campaign%3Dblhshare"><img src="https://m.blog.hu/assets/frontend/img/rss/icon_facebook.png" alt="Megosztom Facebookon!"></a>
<a title="Megosztom Twitteren!" href="https://twitter.com/home?status=https%3A%2F%2Fharsanyireka.blog.hu%2F2014%2F06%2F22%2F12_muveletek_karakterlancokkal%3Futm_source%3Dbloghu_rss"><img src="https://m.blog.hu/assets/frontend/img/rss/icon_twitter.png" alt="Megosztom Twitteren!"></a>
<a title="Megosztom Tumblren!" href="https://www.tumblr.com/share?v=3&u=https%3A%2F%2Fharsanyireka.blog.hu%2F2014%2F06%2F22%2F12_muveletek_karakterlancokkal%3Futm_source%3Dbloghu_rss%26utm_medium%3Dtumblr%26utm_campaign%3Dblhshare&t=12. Műveletek karakterláncokkal"><img src="https://m.blog.hu/assets/frontend/img/rss/icon_tumblr.png" alt="Megosztom Tumblren!"></a>
<a href="https://harsanyireka.blog.hu/2014/06/22/12_muveletek_karakterlancokkal#comments"><img class="item_ctp" src="https://harsanyireka.blog.hu/rss/image/post/id/6396533" border="0" /></a><br /></p>
string
leckék
lektorált
0
fizikai számítástechnika, arduino
https://harsanyireka.blog.hu
https://harsanyireka.blog.hu/2014/06/21/12_153
11. /2) Motorok fajtái és működése
2014-06-21T17:45:13+02:00
2014-06-21T17:45:13+02:00
harsanyireka
https://blog.hu/user/434264
<p><span style="color: #0000ff;">Lektorált tananyag, ami a BKF Digitális és Kollaboratív Művészet (DIKOM) pályázatnak keretén belül valósult meg.</span></p>
<p><span style="color: #0000ff;">Szerző: Harsányi Réka, Társszerző: Juhász Márton András, Lektor: Fernezelyi Márton</span></p>
<p> </p>
<h2><span>Az elektromágneses mező</span></h2>
<p><span>Az elektromágneses teret az elektromos mező változása, azaz az elektronok áramlása idézi elő. Az elektromos mező a töltéssel rendelkező részecskékből származik, a mágneses mező pedig ezek mozgásából, a kettő együtt eredményezi az elektromágneses teret. Általában a mágneses mező irányát és nagyságát az úgynevezett erővonalakkal jelezzük, ezek a mágnes északi sarkától a déli felé haladnak. Szemléltetni úgy lehet, hogy vasreszelék fölé helyezett mágnes hatására a reszelék összefüggő vonalakká rendeződik.</span></p>
<p> <img src="https://m.blog.hu/ha/harsanyireka/image/11.5.1.%20%E2%80%A0bra%20M%E2%80%A0gneses%20t%C3%87r%20ir%E2%80%A0nyt%CB%9Akkel.jpg" alt="11.5.1. †bra M†gneses tÇr ir†nyt˚kkel.jpg" class="imgnotext" width="500" height="375" /></p>
<p style="text-align: center;"><em>Mágneses tér iránytűkkel (<a href="http://commons.wikimedia.org/wiki/User:Nevit">© Nevit Dilmen</a> found at Wikimedia commons)</em></p>
<p>Minden vezetőnek, amiben áram folyik, van mágneses tere, melynek erővonalai koncentrikus körök formájában körülveszik a vezetőt</p>
<p>Az elektromágnes esetén egy tekercsbe helyezett lágyvas hozza létre a mágneses teret addig, amíg a tekercsen áramot vezetünk át. Formájukat tekintve lehetnek rúd, patkó vagy gyűrű alakúak, ezeknek eltérő a mágneses áramlásuk. A legjobb a teljesen zárt vasmaggal rendelkező elektromágnesé.</p>
<p> </p>
<h2><span>Az elektromágneses indukció</span></h2>
<p><span>Mágneses térben mozgó vezetőben elektromos feszültség keletkezik. Ez teszi lehetővé a dinamók, a villanymotorok és a transzformátorok működését. Két csoportra lehet osztani ezt a jelenséget, a nyugalmi és a mozgási indukciókra. Nyugalmiba pl. a transzformátorok, a mozgásiba pl. a motorok tartoznak. Nyugalmi esetén a fluxus (egy erőtérnek egy adott felületen való áthatolását jellemző mennyiség) hozza létre az indukciót, mivel sem a vezető, sem a mágneses mező nem mozog.</span></p>
<p><span>Számunkra a mozgási indukció megértése fontos, mivel villanymotorokat fogunk használni. Ebben az esetben vagy a vezető, vagy a mágneses mező, vagy mindkettő elmozdul egymáshoz viszonyítva. Legelterjedtebb formája a forgómozgás. A villanymotorok az elektromos energiából nyerik mechanikus energiájukat.</span> </p>
<p>Három motortípusra térünk ki – mivel ezekből létezik kisfeszültséggel működő változatban is –, ezek a villanymotorok, a léptetőmotorok és a szervomotorok.</p>
<p> </p>
<h2><span>Egyenáramú villanymotor</span></h2>
<p><span>Angolul DC motor. Az elektromágneses indukció elvén működik, az elektromos áramból nyert energiát alakítja át mechanikus energiává, konkrétabban forgó mozgássá.</span></p>
<p><span style="color: #808080;"><em>„<strong>Kommutátor</strong>: áramfordító, egyenáramú dinamók és motorok, valamint bizonyos fajtájú váltóáramú motorok tengelyére szerelt, vele együtt forgó, egymástól elszigetelt vörösréz-szegmensekből álló henger. Minden szegmenshez egy-egy tekercsvég kivezetés van forrasztva. A kommutátorra rugók szorítják rá a réz- vagy szénkeféket, melyek az áramot be, illetve elvezetik. A forgórész valamely vezetőjében az állórész két pólusa között való elhaladásakor az indukált áram iránya megváltozik, azonban a keféken keresztül csak egyirányú áram folyik, mert a tekercsvéghez forrasztott kommutátor szegmens addigra már elhaladt a kefe alatt és a következő tekercs szegmensével nyer érintkezést, melyben még nem változott meg az áramirány.” (hu.metapedia.org)</em></span></p>
<p><span style="color: #808080;"><em> „<strong>Mágneses fluxusnak</strong> hívjuk, ami szemléletesen a felületet metsző mágneses indukcióvonalak száma” (hu.wikipedia.org/fluxus)</em></span></p>
<p><span style="color: #808080;"><em><strong>„Armatúra:</strong>elektromos gépeknek az az alkatrésze, amelyben a feszültség indukálódik.” (kislexikon.hu)</em></span></p>
<p>Az egyenáramú motor működése a mágneses pólusok vonzásán és taszításán alapul.<span> A motor két kivezetésére rákapcsoljuk az áramforrás pozítív és negatív kivezetését. Egy mágneses térben elhelyezett tekercsbe ha áramot vezetünk, akkor az indukálódott elektromágneses mező kölcsönhatásba lép az állandó mágnesek erőterével. Ezért az amatúra (a tekercs, ami a motor forgó része) a pólusok vonzó, illetve taszító hatása következtében</span><span>elmozdul. Ha az álló és forgórész pólusa azonos akkor vonzzák, ha ellentétes akkor taszítják egymást. Az áramváltást, azaz a pólusok felcserélését a kommutátor biztosítja, abban a pillanatban amikor a forgó és állórész pólusa megegyezik, átkapcsolja ellentétesre, így ismét taszítják egymást ezek az alkatrészek, ezért folytatódik a forgás. Az erőtér és az armatúra különféle összekapcsolása különböző belső fordulatszámot eredményez. A villanymotor sebességét befolyásolhatjuk az armatúra feszültségének vagy a gerjesztő áramnak a változtatásával. Villanymotor meghajtó mikrochippel is vezérelhetjük őket, úgynevezett H-híddal, melyre később térünk ki. A villanymotor jellemző adatai a feszültség és az áramerősség.</span></p>
<p style="text-align: center;"><em><img src="https://m.blog.hu/ha/harsanyireka/image/11.5.2.%20%E2%80%A0bra%20Villanymotorok.jpg" alt="11.5.2. †bra Villanymotorok.jpg" class="imgnotext" width="451" height="490" /></em></p>
<p style="text-align: center;"><em>Villanymotorok</em></p>
<p style="text-align: center;"><em> <img src="https://m.blog.hu/ha/harsanyireka/image/11.5.3.%20%E2%80%A0bra%20Villanymotor%20szerkezete.png" alt="11.5.3. †bra Villanymotor szerkezete.png" class="imgnotext" /></em></p>
<p style="text-align: center;"><em>Villanymotor szerkezete</em></p>
<p style="text-align: center;"><em> <img src="https://m.blog.hu/ha/harsanyireka/image/11.5.4.%20%E2%80%A0bra%20Villanymotor%20%E2%80%A0ll%C2%A2-%20%C3%87s%20forg%C2%A2r%C3%87sze.jpg" alt="11.5.4. †bra Villanymotor †ll¢- Çs forg¢rÇsze.jpg" class="imgnotext" /></em></p>
<p style="text-align: center;"><em>Villanymotor álló- és forgórésze</em></p>
<p style="text-align: center;"><img src="https://m.blog.hu/ha/harsanyireka/image/11.5.5.%20%E2%80%A0bra%20Nagyon%20kis%20m%C3%87retben%20is%20l%C3%87teznek,%20%E2%80%A0ltal%E2%80%A0ban%20j%E2%80%A0t%C3%87kokban%20haszn%E2%80%A0lj%E2%80%A0k%20%C3%A3ket..jpg" alt="11.5.5. †bra Nagyon kis mÇretben is lÇteznek, †ltal†ban j†tÇkokban haszn†lj†k ãket..jpg" class="imgnotext" /> </p>
<p style="text-align: center;"><em>Nagyon kis méretben is léteznek, általában játékokban használják őket.</em></p>
<p style="text-align: center;"> </p>
<h2>Egyenáramú villanymotor vezérlése H-híddal</h2>
<p><span>Mivel a villanymotorok – ha szimplán rákötjük őket az áramra – egy irányba és adott sebességgel forognak, ezért ha irányítani akarjuk, egy motorvezérlő áramkörre, úgynevezett H-hídra van szükségünk. Ez egy elektromos áramkör, amit házilag is megépíthetünk, de mikrochip formájában meg is vásárolhatunk. A megfelelő lábakra bekötve a motorunkat, programozással vezérelhetjük a forgás irányát és sebességét. Arduinoval 3 voltos DC motorokat fogunk meghajtani L293N integrált áramkör használatával.</span></p>
<p> <img src="https://m.blog.hu/ha/harsanyireka/image/11.5.11.%20%E2%80%A0bra%20A%20H-h%C2%B0d%20k%C3%87t%20alap%E2%80%A0llapot%E2%80%A0nak%20kapcsol%E2%80%A0si%20rajza.png" alt="11.5.11. †bra A H-h°d kÇt alap†llapot†nak kapcsol†si rajza.png" class="imgnotext" /></p>
<p style="text-align: center;"><em>A H-híd két alapállapotának kapcsolási rajza</em></p>
<p style="text-align: center;"> <img src="https://m.blog.hu/ha/harsanyireka/image/11.5.12.%20%E2%80%A0bra%20293NE%20H-h%C2%B0d.jpg" alt="11.5.12. †bra 293NE H-h°d.jpg" class="imgnotext" /></p>
<p style="text-align: center;"><em>L293NE H-híd</em></p>
<p><span> </span></p>
<p><span>Szükségünk van egy 10 kiloohmos ellenállásra, egy kétállású SPDT kapcsolóra (on-on), 1 DC motorra (3 V elég, az Arduino csak 5 V-ot bír meghajtani) és egy H-hídra. A H-hídnak mindkét oldalát be kell kötni a feszültségbe és a földelésbe is, de csak azt az oldalát kell bekapcsolni, amelyiket használjuk. (EN lábra kell HIGH jelet küldeni.)</span></p>
<p> </p>
<p style="text-align: center;"><em><img src="https://m.blog.hu/ha/harsanyireka/image/11.5.12.%20%E2%80%A0bra%20L293NE%20H-h%C2%B0d.jpg" alt="11.5.12. †bra L293NE H-h°d.jpg" class="imgnotext" /></em></p>
<p style="text-align: center;"><em>A H-híd lábainak kiosztása</em></p>
<p><span>Összeépítés: próbapanelen, egy motorral, de most a 9 V elemet ne kössük rá, mert az USB kábel is elég ahhoz, hogy forogjon egy 3 V-os motor.</span></p>
<p> <img src="https://m.blog.hu/ha/harsanyireka/image/11.5.14.%20%E2%80%A0bra%20DC%20motor%20%C3%87s%20L293NE%20h-h%C2%B0d%20bek%C3%AEt%C3%87se%20pr%C2%A2bapanelen.jpg" alt="11.5.14. †bra DC motor Çs L293NE h-h°d bekîtÇse pr¢bapanelen.jpg" class="imgnotext" /></p>
<p style="text-align: center;"><em>DC motor és L293NE h-híd bekötése próbapanelen </em></p>
<p><span>Arduino kód: <a href="https://m.blog.hu/ha/harsanyireka/image/42motorhid.zip" target="_blank">42motorhid</a></span></p>
<p> </p>
<p><span><span>forrás: </span><span><a href="http://arduino.cc/en/Tutorial/HomePage" target="_blank">http://arduino.cc/en/Tutorial/HomePage</a>, <a href="http://hu.wikipedia.org/wiki/Villanymotor" target="_blank">http://hu.wikipedia.org/wiki/Villanymotor</a>, <span lang="HU"><a href="http://itp.nyu.edu/physcomp/Labs/DCMotorControl" target="_blank">http://itp.nyu.edu/physcomp/Labs/DCMotorControl</a>, <a href="http://hu.wikipedia.org/wiki/Mágneses_mező" target="_blank">http://hu.wikipedia.org/wiki/Mágneses_mező</a>, </span><a href="http://itp.nyu.edu/physcomp/Labs/DCMotorControl" target="_blank"></a></span></span></p>
<p> </p>
<p> </p>
<p><a title="Megosztom Facebookon!" href="https://www.facebook.com/sharer.php?api_key=120587281320910&locale=hu_HU&method=stream.share&u=https%3A%2F%2Fharsanyireka.blog.hu%2F2014%2F06%2F21%2F12_153%3Futm_source%3Dbloghu_rss%26utm_medium%3Dfacebook%26utm_campaign%3Dblhshare"><img src="https://m.blog.hu/assets/frontend/img/rss/icon_facebook.png" alt="Megosztom Facebookon!"></a>
<a title="Megosztom Twitteren!" href="https://twitter.com/home?status=https%3A%2F%2Fharsanyireka.blog.hu%2F2014%2F06%2F21%2F12_153%3Futm_source%3Dbloghu_rss"><img src="https://m.blog.hu/assets/frontend/img/rss/icon_twitter.png" alt="Megosztom Twitteren!"></a>
<a title="Megosztom Tumblren!" href="https://www.tumblr.com/share?v=3&u=https%3A%2F%2Fharsanyireka.blog.hu%2F2014%2F06%2F21%2F12_153%3Futm_source%3Dbloghu_rss%26utm_medium%3Dtumblr%26utm_campaign%3Dblhshare&t=11. /2) Motorok fajtái és működése"><img src="https://m.blog.hu/assets/frontend/img/rss/icon_tumblr.png" alt="Megosztom Tumblren!"></a>
<a href="https://harsanyireka.blog.hu/2014/06/21/12_153#comments"><img class="item_ctp" src="https://harsanyireka.blog.hu/rss/image/post/id/6396221" border="0" /></a><br /></p>
motorok
leckék
lektorált
0
fizikai számítástechnika, arduino
https://harsanyireka.blog.hu
http://m.cdn.blog.hu/ha/harsanyireka/image/11.5.1.%20%E2%80%A0bra%20M%E2%80%A0gneses%20t%C3%87r%20ir%E2%80%A0nyt%CB%9Akkel.jpg
https://harsanyireka.blog.hu/2014/06/21/11_695
11. Szenzorok
2014-06-21T17:45:11+02:00
2014-06-21T17:45:11+02:00
harsanyireka
https://blog.hu/user/434264
<p><span style="color: #0000ff;">Lektorált tananyag, ami a BKF Digitális és Kollaboratív Művészet (DIKOM) pályázatnak keretén belül valósult meg.</span></p>
<p><span style="color: #0000ff;">Szerző: Harsányi Réka, Társszerző: Juhász Márton András, Lektor: Fernezelyi Márton</span></p>
<p> </p>
<h2><span>ADXL3xx gyorsulásmérő</span></h2>
<p><span>Megnézzük, hogyan lehet adatot kinyerni az ADXL3xx sorozat gyorsulásmérőiből. 1, 2 vagy 3 tengely irányában működnek, a rászerelt tárgy Földhöz viszonyított helyzetét mérik, tehát a sebesség változását. Analóg és digitális kimenettel rendelkezőek egyaránt vannak. Ebben a példában az x, y, z tengelyből kinyert adatokat soros portra küldjük. Egyéb gyorsulásmérőt is használhatunk, a datasheetben keressük vissza, melyik lába miként funkcionál.</span></p>
<p> <img src="https://m.blog.hu/ha/harsanyireka/image/11.1.ADXL3xx%20gyorsulamero.jpg" alt="11.1.ADXL3xx gyorsulamero.jpg" class="imgnotext" /></p>
<p><img src="https://m.blog.hu/ha/harsanyireka/image/11.1.1.%20%E2%80%A0bra%20ADXL3xx%20gyorsul%E2%80%A0sm%C3%87r%C3%A3.png" alt="11.1.1. †bra ADXL3xx gyorsul†smÇrã.png" class="imgnotext" /></p>
<p style="text-align: center;"><em><span lang="HU">ADXL3xx</span><span lang="HU"> gyorsulásmérő és az Arduino panelbe kötött ábrája. A lábak kiosztás olyan sorrendű, hogy elég rádugni az analóg pinsorra.</span></em></p>
<p> </p>
<p><img src="https://m.blog.hu/ha/harsanyireka/image/11.1.2.%20%E2%80%A0bra%20ADXL3xx%20gyorsul%E2%80%A0sm%C3%87r%C3%A3.png" alt="11.1.2. †bra ADXL3xx gyorsul†smÇrã.png" class="imgnotext" width="435" height="424" /> </p>
<p style="text-align: center;"><em>ADXL3xx gyorsulásmérő bekötése, áramköri rajz</em></p>
<p><span> </span></p>
<p><span>Több gyártó létezik, közülük most két szenzornak a bekötését nézzük meg.</span></p>
<p><span>Az első a <strong>Spurkfun</strong> által gyártott:<br /> <br /> </span></p>
<p style="text-align: center;"><em><span lang="HU"><img src="https://m.blog.hu/ha/harsanyireka/image/11.1.3.%20%E2%80%A0bra%20Spurkfun%20ADXL335%20gyorsul%E2%80%A0sm%C3%87r%C3%A3.jpg" alt="11.1.3. †bra Spurkfun ADXL335 gyorsul†smÇrã.jpg" class="imgnotext" width="215" height="215" /></span></em></p>
<p style="text-align: center;"><em><span lang="HU">Spurkfun </span><span lang="HU">ADXL335</span><span lang="HU"> gyorsulásmérő</span></em></p>
<p> </p>
<p class="tblzat"><span lang="HU">Spurkfun gyorsulásmérő bekötése Arduinoba:</span></p>
<table cellpadding="3" border="1">
<tbody>
<tr>
<td align="left">Breakout Board Pin</td>
<td align="left">Self-Test</td>
<td align="left">Z-Axis</td>
<td align="left">Y-Axis</td>
<td align="left">X-Axis</td>
<td align="left">Ground</td>
<td align="left">VDD</td>
</tr>
<tr>
<td align="left">Arduino Analog Input Pin</td>
<td align="left">0</td>
<td align="left">1</td>
<td align="left">2</td>
<td align="left">3</td>
<td align="left">4</td>
<td align="left">5<br /><br /></td>
</tr>
</tbody>
</table>
<p class="tblzat"> </p>
<p class="tblzat"><span lang="HU"><img src="https://m.blog.hu/ha/harsanyireka/image/11.1.5.%20%E2%80%A0bra%20Spurkfun%20gyorsul%E2%80%A0sm%C3%87r%C3%A3%20Arduinoval.jpg" alt="11.1.5. †bra Spurkfun gyorsul†smÇrã Arduinoval.jpg" class="imgnotext" /></span></p>
<p style="text-align: center;"><em>Spurkfun gyorsulásmérő Arduinoval</em></p>
<p style="text-align: center;"> </p>
<p><span>A második az <strong>Adafruit </strong>által gyártott:</span></p>
<p style="text-align: center;"><img src="https://m.blog.hu/ha/harsanyireka/image/11.1.6.%20%E2%80%A0bra%20Adafruit%20ADXL335%20gyorsul%E2%80%A0sm%C3%87r%C3%A3.jpg" alt="11.1.6. †bra Adafruit ADXL335 gyorsul†smÇrã.jpg" class="imgnotext" width="277" height="213" /></p>
<p style="text-align: center;"><em>Adafruit ADXL335 gyorsulásmérő</em></p>
<p><span> </span></p>
<p><span>Adafruit gyorsulásmérő bekötése Arduinoba:</span></p>
<table cellpadding="3" border="1">
<tbody>
<tr>
<td align="left"><span><span class="wikiword">ADXL3xx</span> Pin</span></td>
<td align="left">Self-Test</td>
<td align="left"><span class="wikiword">ZOut</span></td>
<td align="left"><span class="wikiword">YOut</span></td>
<td align="left"><span class="wikiword">XOut</span></td>
<td align="left">Ground</td>
<td align="left">VDD</td>
</tr>
<tr>
<td align="left"><span>Arduino Pin</span></td>
<td align="left"><em>None</em> (unconnected)</td>
<td align="left">Analog Input 1</td>
<td align="left">Analog Input 2</td>
<td align="left">Analog Input 3</td>
<td align="left">GND</td>
<td align="left">5V<br /><br /></td>
</tr>
</tbody>
</table>
<p> </p>
<p style="text-align: center;"> <img src="https://m.blog.hu/ha/harsanyireka/image/11.1.8.%20%E2%80%A0bra%20Adafruit%20gyorsul%E2%80%A0sm%C3%87r%C3%A3%20Arduinoval.jpg" alt="11.1.8. †bra Adafruit gyorsul†smÇrã Arduinoval.jpg" class="imgnotext" width="597" height="431" /></p>
<p style="text-align: center;"><em>Adafruit gyorsulásmérő Arduinoval</em></p>
<p> </p>
<p><span>Az adafruit.com oldalon megtalálható, hogyan lehet kalibrálni ezt a szenzort: <a href="http://learn.adafruit.com/adafruit-analog-accelerometer-breakouts/programming">http://learn.adafruit.com/adafruit-analog-accelerometer-breakouts/programming</a></span></p>
<p><span>A kódban az analóg 4 és 5 pin speciális funkcióját használjuk. Az I2C kommunikációra a 13. fejezetben a Wire Könyvtár használata kapcsán részletesen kitérünk.</span></p>
<p><span>Arduino kód: <span style="color: #3366ff;"><a href="https://m.blog.hu/ha/harsanyireka/image/38gyorsulasmero.zip" target="_blank"><span style="color: #3366ff;">38gyorsulasmero</span></a></span></span></p>
<p><span>A kiolvasott érték szenzoronként változó, kb. 300–700 közé esik. Az ADXL322 2g gyorsulásmérőnél a vízszintes (amikor a szenzor párhuzamos a földdel) értéke 512 körüli. </span></p>
<p><span>Az alábbi táblázat csak nagyságrendi adatokat mutat, és egy tengelyre vonatkozik.</span></p>
<p>Gyorsulásmérő dőlésszöge és kiolvasott értéke (minta, szenzoronként eltérő):</p>
<table cellpadding="3" border="1" width="718" height="61">
<tbody>
<tr>
<td align="left"><span>Angle</span></td>
<td align="left">-90</td>
<td align="left">-80</td>
<td align="left">-70</td>
<td align="left">-60</td>
<td align="left">-50</td>
<td align="left">-40</td>
<td align="left">-30</td>
<td align="left">-20</td>
<td align="left">-10</td>
<td align="left">0</td>
<td align="left">10</td>
<td align="left">20</td>
<td align="left">30</td>
<td align="left">40</td>
<td align="left">50</td>
<td align="left">60</td>
<td align="left">70</td>
<td align="left">80</td>
<td align="left">90</td>
</tr>
<tr>
<td align="left"><span>Acceleration</span></td>
<td align="left">662</td>
<td align="left">660</td>
<td align="left">654</td>
<td align="left">642</td>
<td align="left">628</td>
<td align="left">610</td>
<td align="left">589</td>
<td align="left">563</td>
<td align="left">537</td>
<td align="left">510</td>
<td align="left">485</td>
<td align="left">455</td>
<td align="left">433</td>
<td align="left">408</td>
<td align="left">390</td>
<td align="left">374</td>
<td align="left">363</td>
<td align="left">357</td>
<td align="left">355<br /><br /></td>
</tr>
</tbody>
</table>
<p> </p>
<p> </p>
<h2><span>Piezo szenzor</span></h2>
<p><span>A piezo elektromos kristályszerkezetben összenyomás hatására feszültség keletkezik. A piezo hangszórók csak megfelelő polaritással működnek, mely azt jelenti, hogy meghatározott irányban kell, hogy átmenjen rajta az áram, ezért a fekete vagy kék vezetékét a földbe, míg a pirosat az analóg pinbe kell kötni. Ezt az analóg pint szintén le kell földelni úgy, hogy az 1 megaohmos ellenálláson keresztül vezetve átkötjük a GND pinbe, ahogy a 11.2.2. ábrán látható. A példában használt típus: Piezo hangszóró 12 V DC gerjesztő áramkörrel.</span></p>
<p><span>Műanyag borítás nélkül is beszerezhető a piezo, ilyenkor fényes lemezeknek látszanak és könnyebb őket szenzorként használni, pl. lehet nyomogatni. Akkor működnek a legjobban, ha az érzékelő felületük erősen neki van támasztva valaminek, vagy fel van ragasztva.</span></p>
<p style="text-align: center;"><em><img src="https://m.blog.hu/ha/harsanyireka/image/11.2.1%20%E2%80%A0bra%20Piezo%20%C3%87rz%C3%87kel%C3%A3.jpg" alt="11.2.1 †bra Piezo ÇrzÇkelã.jpg" class="imgnotext" /></em></p>
<p style="text-align: center;"><em>Piezo érzékelő</em></p>
<p style="text-align: center;"><em><img src="https://m.blog.hu/ha/harsanyireka/image/11.2.2%20%E2%80%A0bra%20Piezo%20%C3%87rz%C3%87kel%C3%A3%20bek%C3%AEt%C3%87se.png" alt="11.2.2 †bra Piezo ÇrzÇkelã bekîtÇse.png" class="imgnotext" /></em></p>
<p style="text-align: center;"><em>Piezo érzékelő bekötése </em></p>
<p><span>A lejjebb található kódban a piezóból érkező adatok egy általunk megadott küszöbértékhez vannak viszonyítva. Próbáljuk meg növelni vagy csökkenteni ezt az értéket, hogy kihasználjuk a szenzor teljes érzékenységi tartományát.</span> </p>
<p><span>Arduino kód: <a href="https://m.blog.hu/ha/harsanyireka/image/39piezo.zip" target="_blank"><span style="color: #3366ff;">39piezo</span></a></span></p>
<p> </p>
<h2><span>Ultrahangos távolságszenzor</span></h2>
<p><span>Ping))) ultrahangos távolságszenzor, gyártó: Parallax</span></p>
<p><span>A tőle 2–3 cm-re lévő tárgyakat érzékeli. </span></p>
<p><span>Az alábbiak szerint működik: Kiküld egy ultrahang jelet és a visszhangot figyeli, ami akkor keletkezik, ha az ultrahang visszaverődik a tárgyról. Az Arduino egy rövid impulzust küld, hogy előidézze az érzékelést, majd ugyanazon a pinen várja vissza az impulzust (ehhez a <strong>pulseIn() </strong>függvényt használja). A második impulzus időtartama megegyezik azzal az idővel, amit az ultrahang tett meg a szenzorból a tárgyig, majd arról visszaverődve a szenzorig – ezt számítja át a távolság meghatározásához.</span></p>
<p style="text-align: center;"><em><img src="https://m.blog.hu/ha/harsanyireka/image/11.3.1.%20%E2%80%A0bra%20Ping)))%20ultrahangos%20t%E2%80%A0vols%E2%80%A0gszenzor.jpg" alt="11.3.1. †bra Ping))) ultrahangos t†vols†gszenzor.jpg" class="imgnotext" width="368" height="276" /></em></p>
<p style="text-align: center;"><em>Ping))) ultrahangos távolságszenzor</em></p>
<p><span>Bekötése: A földelés pineket és a feszültség pineket összekötjük az Arduinoval, a SIG (signal) pint pedig az Arduinon keresztül a digitális 7 pinbe vezetjük.</span></p>
<p style="text-align: center;"><em><img src="https://m.blog.hu/ha/harsanyireka/image/11.3.2.%20%E2%80%A0bra%20Ping)))%20ultrahangos%20t%E2%80%A0vols%E2%80%A0gszenzor%20bek%C3%AEt%C3%87se.png" alt="11.3.2. †bra Ping))) ultrahangos t†vols†gszenzor bekîtÇse.png" class="imgnotext" /></em></p>
<p style="text-align: center;"><em>Ping))) ultrahangos távolságszenzor bekötése</em></p>
<p><span>Arduino kód: <a href="https://m.blog.hu/ha/harsanyireka/image/40ping.zip" target="_self"><span style="color: #3366ff;">40ping</span></a></span></p>
<p> </p>
<h2><span>Sharp infravörös távolságszenzor </span></h2>
<p><span>A távolságszenzorok analóg vagy digitális kivitelben léteznek. Az egyes típusok különböző távolságokban mérnek. Háromszögeléses módszerrel működik, azaz kibocsát egy infravörös fényt, ami a tárgyakról bizonyos szögben visszaverődve a szenzor optikáján át a CCD-re érkezik (hogy azon belül hova, azt a távolság határozza meg).</span></p>
<p><span>A kódban kiolvassuk az értéket és serial monitoron kiírjuk. A példában a GP2D12 Sharp szenzort használjuk. Hogy a szenzornak melyik lába a feszültség (Vcc), a föld (Gnd) és az adatkimenet (Vo), azt a datasheetben megtaláljuk. Értelem szerűen a Vcc pint az Arduino 5V pinjébe, a Vo pint az analóg bementi pinbe, a Gnd-t pedig a földbe kötjük. </span></p>
<p><span> </span></p>
<p><span><img src="https://m.blog.hu/ha/harsanyireka/image/11.4.1.sharpGP2D12.jpg" alt="11.4.1.sharpGP2D12.jpg" class="imgnotext" /></span></p>
<p> </p>
<p> </p>
<p><span><img src="https://m.blog.hu/ha/harsanyireka/image/11.4.1.%20%E2%80%A0bra%20Sharp%20GP2D12%20adatlapja%20%C3%87s%20bek%C3%AEt%C3%87se%20az%20Arduinoba.jpg" alt="11.4.1. †bra Sharp GP2D12 adatlapja Çs bekîtÇse az Arduinoba.jpg" class="imgnotext" /></span></p>
<p style="text-align: center;"><em>Sharp GP2D12 adatlapja és bekötése az Arduinoba</em></p>
<p><span>Arduino kód: <a href="https://m.blog.hu/ha/harsanyireka/image/41sharp.zip" target="_self"><span style="color: #3366ff;">41sharp</span></a></span></p>
<p> </p>
<p><span><span>forrás: </span><a href="http://arduino.cc/en/Tutorial/HomePage" target="_blank"><span>http://arduino.cc/en/Tutorial/HomePage</span></a></span></p>
<p><a title="Megosztom Facebookon!" href="https://www.facebook.com/sharer.php?api_key=120587281320910&locale=hu_HU&method=stream.share&u=https%3A%2F%2Fharsanyireka.blog.hu%2F2014%2F06%2F21%2F11_695%3Futm_source%3Dbloghu_rss%26utm_medium%3Dfacebook%26utm_campaign%3Dblhshare"><img src="https://m.blog.hu/assets/frontend/img/rss/icon_facebook.png" alt="Megosztom Facebookon!"></a>
<a title="Megosztom Twitteren!" href="https://twitter.com/home?status=https%3A%2F%2Fharsanyireka.blog.hu%2F2014%2F06%2F21%2F11_695%3Futm_source%3Dbloghu_rss"><img src="https://m.blog.hu/assets/frontend/img/rss/icon_twitter.png" alt="Megosztom Twitteren!"></a>
<a title="Megosztom Tumblren!" href="https://www.tumblr.com/share?v=3&u=https%3A%2F%2Fharsanyireka.blog.hu%2F2014%2F06%2F21%2F11_695%3Futm_source%3Dbloghu_rss%26utm_medium%3Dtumblr%26utm_campaign%3Dblhshare&t=11. Szenzorok"><img src="https://m.blog.hu/assets/frontend/img/rss/icon_tumblr.png" alt="Megosztom Tumblren!"></a>
<a href="https://harsanyireka.blog.hu/2014/06/21/11_695#comments"><img class="item_ctp" src="https://harsanyireka.blog.hu/rss/image/post/id/6396223" border="0" /></a><br /></p>
leckék
szenzorok
lektorált
0
fizikai számítástechnika, arduino
https://harsanyireka.blog.hu
http://m.cdn.blog.hu/ha/harsanyireka/image/11.1.ADXL3xx%20gyorsulamero.jpg
https://harsanyireka.blog.hu/2014/06/17/10_vezerlo_strukturak
10. Vezérlő struktúrák
2014-06-17T18:20:42+02:00
2014-06-17T18:20:42+02:00
harsanyireka
https://blog.hu/user/434264
<p><span style="color: #0000ff;">Lektorált tananyag, ami a BKF Digitális és Kollaboratív Művészet (DIKOM) pályázatnak keretén belül valósult meg.</span></p>
<p><span style="color: #0000ff;">Szerző: Harsányi Réka, Társszerző: Juhász Márton András, Lektor: Fernezelyi Márton</span></p>
<h2><span>If állítás</span></h2>
<p><span>Az <em>if()</em> állítás a legalapvetőbb vezérlő struktúra. Lehetővé teszi, hogy valami megtörténjen, vagy ne történjen meg, attól függően, hogy a feltétel igaz vagy hamis. Így néz ki:</span></p>
<p><span style="color: #ff6600;">if (someCondition) {</span><br /><span style="color: #ff6600;"> <em>// csinálj dolgokat, ha a feltétel igaz</em></span><br /><span style="color: #ff6600;"> }</span></p>
<p><span>Van egy gyakoribb verziója is, amit <em>if-else</em>-nek neveznek:</span></p>
<p><span style="color: #ff6600;">if (someCondition) {</span><br /><span style="color: #ff6600;"> <em>// csinálj dolgokat, ha a feltétel igaz</em></span></p>
<p><span style="color: #ff6600;">} else {</span><br /><span style="color: #ff6600;"> <em>// csinálj dolgokat, ha a feltétel hamis</em></span><br /><span style="color: #ff6600;"> }</span></p>
<p><span>Létezik az <em>else-if</em> verzió is, ebben az esetben, ha az első feltétel hamis, akkor a másodikat is megvizsgálja:</span></p>
<p><span style="color: #ff6600;">if (someCondition) {</span><br /><span style="color: #ff6600;"> <em>// csinálj dolgokat, ha a feltétel igaz</em></span><br /><span style="color: #ff6600;"> } else if (anotherCondition) {</span><br /><span style="color: #ff6600;"> <em>// csinálj dolgokat, ha a feltétel hamis</em></span><br /><span style="color: #ff6600;"> <em>// és a második feltétel igaz</em></span><br /><span style="color: #ff6600;"> }</span> </p>
<p><span>Az alábbi példa bekapcsolja a LED-et, ha az analóg bemeneten kiolvasott érték a küszöbérték alá megy.</span></p>
<p><span>Bekötése: A LED pozitív lába elé kössünk be egy 220 ohmos ellenállást is, a potméter középső lábát az A0-ba, a két szélsőt az 5 V-ba és a feszültségbe.</span></p>
<p style="text-align: center;"><em><img src="https://m.blog.hu/ha/harsanyireka/image/10.1.%20%E2%80%A0bra%20Potm%C3%87ter%20LED-del.png" alt="10.1. †bra PotmÇter LED-del.png" class="imgnotext" /></em></p>
<p style="text-align: center;"><em>Potméter LED-del</em></p>
<p><span>Az analogValue nevű változóban fogjuk eltárolni a potméterből kiolvasott adatokat. Ezeket hasonlítjuk majd össze a küszöbértékkel. Ha a felett van az érték, bekapcsol a LED, ha alatta van, akkor kikapcsol.</span></p>
<p><span>Arduino kód: <a href="https://m.blog.hu/ha/harsanyireka/image/32if.zip" target="_self">32if</a></span></p>
<h2><span>For ciklus</span></h2>
<p><span>Néha arra van szükség, hogy ismétlődjön a folyamat, pl. pinek sorozatán ugyanaz a parancs fusson le, vagy növelni, illetve csökkenteni akarunk egy változót és újra elvégezni rajtuk az utasításokat. Ilyenkor a for() ciklus a legmegfelelőbb megoldás.</span></p>
<p><span>A következő példában digitális 2–7 pinbe egy-egy LED-et kötünk és egymás utáni sorban be- és kikapcsoljuk őket egyik irányba, majd visszafelé is. A cikluson belül a <em>digitalWrite()</em> és a <em>delay()</em> függvényeket fogjuk használni.</span></p>
<p><span>Bekötése: Mindegyik piros 5 mm-es LED-ünk pozitív lába elé bekötünk egy-egy 220 ohmos ellenállást, ezeket a digitális 2, 3, 4, 5, 6, 7 pinekbe kötjük, a negatív lábakat pedig leföldeljük.</span></p>
<p style="text-align: center;"><em><img src="https://m.blog.hu/ha/harsanyireka/image/10.2%20%E2%80%A0bra%206%20LED%20bek%C3%AEt%C3%87se.png" alt="10.2 †bra 6 LED bekîtÇse.png" class="imgnotext" /></em></p>
<p style="text-align: center;"><em>6 LED bekötése </em></p>
<p><span>Arduino kód: <a href="https://m.blog.hu/ha/harsanyireka/image/33for.zip" target="_self">33for</a></span></p>
<p><span>A loopban két <strong>for()</strong> ciklus szerepel, az elsőben a 2. pintől indulva lépkedünk a 7-ig, a másodikban fordítva, a 7-estől indulunk, és mindig eggyel csökkentve az értéket eljutunk a 2-ig. Illetve a pineket is for ciklussal inicializáljuk. A for ciklus addig ismétlődik, amíg a kerek zárójelben lévő feltétel teljesül, utána továbblép.</span></p>
<p> </p>
<h2><span>Tömbök</span></h2>
<p><span>A for ciklus példáját alakítjuk át úgy, hogy a pinek értékeit tömbben tároljuk el, és innen olvassuk ki őket mind az inicializálásnál, mind a loopban szereplő két for ciklusban.</span></p>
<p><span>Bekötése: Mindegyik piros 5 mm-es LED-ünk pozitív lába elé bekötünk egy-egy 220 ohmos ellenállást, ezek kerülnek bekötésre a digitális 2, 3, 4, 5, 6, 7 pinekbe, a negatív lábakat pedig leföldeltük.</span></p>
<p><span> <img src="https://m.blog.hu/ha/harsanyireka/image/10.3%20%E2%80%A0bra%206%20LED%20bek%C3%AEt%C3%87se.png" alt="10.3 †bra 6 LED bekîtÇse.png" class="imgnotext" /></span></p>
<p style="text-align: center;"><span> </span><em>6 LED bekötése</em></p>
<p>Arduino kód: <a href="https://m.blog.hu/ha/harsanyireka/image/34tombok.zip" target="_self">34tombok</a></p>
<p> </p>
<h2><span>While ciklus</span></h2>
<p><span>A while ciklus addig fut, amíg a feltétele teljesül. Ebben az esetben, amikor megnyomjuk a gombot, lefut a fotóellenállás kalibrálására vonatkozó parancssor. Ezután a fotóellenállásból kiolvasott analóg értékeket skálázás után kiküldjük a LED fényerejét vezérlő PWM pinre. Minél nagyobb a beérkező érték, annál erősebben világít a LED.</span></p>
<p><span>Bekötése: A LED pozitív lábát a 220 ohmos ellenálláson át a 9 PWM pinbe kötjük, a negatívat a földelésbe. A kapcsolóhoz 10 kiloohmos ellenállást használunk, ezen keresztül a bal alsó lábát bekötjük a földelésbe, a jobb alsót az 5 V pinbe, a bal felsőt pedig a 2 pinbe. A fotóellenállás bármilyen irányban beköthető, egyik oldala az 5 V pinbe, a másik szintén 10 kiloohmos át a földelésbe és az analóg 0 pinbe is megy.</span></p>
<p style="text-align: center;"><em><img src="https://m.blog.hu/ha/harsanyireka/image/10.4%20%E2%80%A0bra%20Nyom%C2%A2gomb,%20fot%C2%A2ellen%E2%80%A0ll%E2%80%A0s%20%C3%87s%20LED%20bek%C3%AEt%C3%87se.png" alt="10.4 †bra Nyom¢gomb, fot¢ellen†ll†s Çs LED bekîtÇse.png" class="imgnotext" /></em></p>
<p style="text-align: center;"><em>Nyomógomb, fotóellenállás és LED bekötése</em></p>
<p><span>Arduino kód: <a href="https://m.blog.hu/ha/harsanyireka/image/35while.zip" target="_self">35while</a></span></p>
<p> </p>
<h2><span>Switch utasítás szenzor kiolvasással</span></h2>
<p><span>Az if feltételnek két kimenetele lehet, igaz vagy hamis, ettől függően lefut vagy nem fut le a parancs. A switch kifejezésben egyszerre több feltételt vizsgálhatunk, és az fut le közülük, amelyik épp teljesül. Ebben a példában a fotóellenállásból kiolvasott értékekhez rendelünk a fényre vonatkozó definíciókat: sötét (dark), gyenge (dim), közepes (medium), világos (bright). A szenzor érzékelési tartományát a kód elején adjuk meg, most 0–600 közötti, de ennek megváltoztatásával kísérletezhetünk. A beolvasott értéket a map() utasítással 0–3 közötti értékre skálázzuk, ez összesen négy darab lehetőséget eredményez (0, 1, 2, 3), mindegyikhez tartozik egy switch utasítás.</span></p>
<p><span>Bekötése: A fotóellenállás egyik lábát az 5 V pinbe, a másikat az analóg 0-ba és egy 10 kiloohmos ellenálláson át a földelésbe is bekötjük.</span></p>
<p><span> <img src="https://m.blog.hu/ha/harsanyireka/image/10.5%20%E2%80%A0bra%20Fot%C2%A2ellen%E2%80%A0ll%E2%80%A0s%20bek%C3%AEt%C3%87se.png" alt="10.5 †bra Fot¢ellen†ll†s bekîtÇse.png" class="imgnotext" /></span></p>
<p style="text-align: center;"><em>Fotóellenállás bekötése</em></p>
<p><span>Arduino kód: <a href="https://m.blog.hu/ha/harsanyireka/image/36switchSzenzor.zip" target="_self">36switchSzenzor</a></span></p>
<p> </p>
<h2><span>Switch utasítás soros bemenettel</span></h2>
<p><span>Most a switch case-t LED-ek bekapcsolására fogjuk használni. Attól függően kapcsol be egyik vagy másik LED, hogy a soros porton a, b, c, d vagy e érték érkezik be. Ha megnyitjuk a serial monitort, le tudjuk őket követni. ASCII táblázatban meg tudjuk nézni, melyik karakternek mennyi a számértéke, pl. „a” = 97, „b” = 98 stb.</span></p>
<p><span>Bekötése: Mindegyik piros 5 mm-es LED-ünk pozitív lába elé bekötünk egy-egy 220 ohmos ellenállást, ezek mennek a digitális 2, 3, 4, 5, 6, 7 pinekbe, a negatív lábakat pedig leföldeljük.</span></p>
<p style="text-align: center;"><em><img src="https://m.blog.hu/ha/harsanyireka/image/10.6%20%E2%80%A0bra%206%20LED%20bek%C3%AEt%C3%87se.png" alt="10.6 †bra 6 LED bekîtÇse.png" class="imgnotext" /></em></p>
<p style="text-align: center;"><em>6 LED bekötése</em></p>
<p><span>Arduino kód: <a href="https://m.blog.hu/ha/harsanyireka/image/37switchSoros.zip" target="_self">37switchSoros</a></span></p>
<p> </p>
<p><span>forrás: <a href="http://arduino.cc/en/Tutorial/HomePage" target="_blank">http://arduino.cc/en/Tutorial/HomePage</a></span></p>
<p><a title="Megosztom Facebookon!" href="https://www.facebook.com/sharer.php?api_key=120587281320910&locale=hu_HU&method=stream.share&u=https%3A%2F%2Fharsanyireka.blog.hu%2F2014%2F06%2F17%2F10_vezerlo_strukturak%3Futm_source%3Dbloghu_rss%26utm_medium%3Dfacebook%26utm_campaign%3Dblhshare"><img src="https://m.blog.hu/assets/frontend/img/rss/icon_facebook.png" alt="Megosztom Facebookon!"></a>
<a title="Megosztom Twitteren!" href="https://twitter.com/home?status=https%3A%2F%2Fharsanyireka.blog.hu%2F2014%2F06%2F17%2F10_vezerlo_strukturak%3Futm_source%3Dbloghu_rss"><img src="https://m.blog.hu/assets/frontend/img/rss/icon_twitter.png" alt="Megosztom Twitteren!"></a>
<a title="Megosztom Tumblren!" href="https://www.tumblr.com/share?v=3&u=https%3A%2F%2Fharsanyireka.blog.hu%2F2014%2F06%2F17%2F10_vezerlo_strukturak%3Futm_source%3Dbloghu_rss%26utm_medium%3Dtumblr%26utm_campaign%3Dblhshare&t=10. Vezérlő struktúrák"><img src="https://m.blog.hu/assets/frontend/img/rss/icon_tumblr.png" alt="Megosztom Tumblren!"></a>
<a href="https://harsanyireka.blog.hu/2014/06/17/10_vezerlo_strukturak#comments"><img class="item_ctp" src="https://harsanyireka.blog.hu/rss/image/post/id/6315146" border="0" /></a><br /></p>
leckék
lektorált
0
fizikai számítástechnika, arduino
https://harsanyireka.blog.hu
http://m.cdn.blog.hu/ha/harsanyireka/image/10.1.%20%E2%80%A0bra%20Potm%C3%87ter%20LED-del.png
https://harsanyireka.blog.hu/2014/06/17/09_soros_kommunikacio
09. Soros kommunikáció
2014-06-17T17:47:30+02:00
2014-06-17T17:47:30+02:00
harsanyireka
https://blog.hu/user/434264
<p><span style="color: #0000ff;">Lektorált tananyag, ami a BKF Digitális és Kollaboratív Művészet (DIKOM) pályázatnak keretén belül valósult meg. Szerző: Harsányi Réka, Társszerző: Juhász Márton András, Lektor: Fernezelyi Márton</span></p>
<p><span>Az Arduino mikrovezérlőjén (AVR ATmega) van két olyan I/O csatorna (D0 és D1), amelyeknek megkülönböztetett funkciójuk van – a két kivezetést együtt <em>soros port</em>nak nevezzük, amin keresztül adatokat cserélhetünk a környezet és a mikrovezérlő között. Az egyik csatorna az adatok fogadásáért (Rx – receiver), a másik pedig küldéséért felel (Tx – transmitter). A soros átvitel szekvenciálisan zajlik, vagyis egy időben egyetlen bit halad át a csatornán. Ennek megfelelően a kommunikáció sebességét a másodpercenként átvitt bitek számával mérjük és BPS-sel (Bits Per Second = Bit per másodperc) jelöljük. Az Arduino maximális átviteli sebessége 115200 bit másodpercenként.</span></p>
<p> <img src="https://m.blog.hu/ha/harsanyireka/image/9_1.jpeg" alt="9_1.jpeg" class="imgnotext" /></p>
<p style="text-align: center;"><em>A soros átvitelt jelző LED-ek és az USB átalakító</em></p>
<p><span><br />Ahhoz, hogy számítógépünk könnyedén kapcsolódhasson a mikrovezérlőhöz, az Arduino tartalmaz egy soros USB átalakítót (FTDI), mely a fent említett csatornákhoz kapcsolódik és létrehozza a kapcsolatot az univerzális soros busszal (USB). Az adatok ugyan bitenként, de egymástól jól elhatárolható csomagokban közlekednek. Ezek a blokkok START jelből, 8 bit adatból (1 byte) és két STOP jelből állnak.</span></p>
<p><span>Az ASCII, vagyis az <em>American Standard Code for Information Interchange</em> 1963 óta szabványa a szöveg típusú adatok digitális tárolásának és átvitelének. Az általános kódtáblázat 128 karakterből áll, melynek alapját az angol ABC kis- és nagybetűi, írásjelek, számok és matematikai kifejezések képezik. Ezeken felül 33 grafikusan nem megjeleníthető, úgynevezett vezérlőkarakter is helyet kapott, mint a „soremelés”, „fájl vége”, „fejléc kezdete”, melyek egy része ma már nem használatos. A kódtáblát legegyszerűbben egy számozott sorozatként képzelhetjük el, ahol a nulladik helytől a 31-ig a vezérlőkarakterek, 32-től 126-ig a megjeleníthető karakterek találhatók, a sort pedig a „törlés” nevű vezérlőkarakter zárja. Soros kommunikáció esetén az adat értéke egyszerűen a táblázat egyik elemének sorszámát jelöli.</span></p>
<p style="text-align: center;"><img src="http://upload.wikimedia.org/wikipedia/commons/thumb/1/1b/ASCII-Table-wide.svg/875px-ASCII-Table-wide.svg.png" alt="" class="imgnotext" /></p>
<p style="text-align: center;"><em>Az ASCII kódtábla</em> </p>
<p><span>Példánkon keresztül megérthetjük, hogyan értelmezi mindezt az Arduino, és megismerjük a kiterjesztett soros nyomtatási funkciókat. Nyomtassuk ki a soros terminálunkra az ASCII táblázat grafikus elemeit és a hozzájuk tartozó értékeket decimális, hexadecimális, oktális és bináris formátumokban!</span></p>
<p style="text-align: center;"> <img src="https://m.blog.hu/ha/harsanyireka/image/9_2.png" alt="9_2.png" class="imgnotext" /></p>
<p style="text-align: center;"><em>A soros terminált a keretprogram jobb oldalán található ikonra kattintva érhetjük el.</em></p>
<p><em><span>Arduino kód: <a href="https://m.blog.hu/ha/harsanyireka/image/20ASCII.zip" target="_self">20ASCII</a></span></em></p>
<p>Csak egy számítógéphez kötött Arduinora lesz szükségünk.</p>
<p><span>ASCII Table ~ Character Map:</span></p>
<p style="text-align: center;">!, dec: 33, hex: 21, oct: 41, bin: 100001<br /> ", dec: 34, hex: 22, oct: 42, bin: 100010<br /> #, dec: 35, hex: 23, oct: 43, bin: 100011<br /> $, dec: 36, hex: 24, oct: 44, bin: 100100<br /> %, dec: 37, hex: 25, oct: 45, bin: 100101<br /> &, dec: 38, hex: 26, oct: 46, bin: 100110<br /> ', dec: 39, hex: 27, oct: 47, bin: 100111<br /> (, dec: 40, hex: 28, oct: 50, bin: 101000<br /> ), dec: 41, hex: 29, oct: 51, bin: 101001<br /> *, dec: 42, hex: 2A, oct: 52, bin: 101010<br /> +, dec: 43, hex: 2B, oct: 53, bin: 101011<br /> ,, dec: 44, hex: 2C, oct: 54, bin: 101100<br /> -, dec: 45, hex: 2D, oct: 55, bin: 101101<br /> ., dec: 46, hex: 2E, oct: 56, bin: 101110<br /> /, dec: 47, hex: 2F, oct: 57, bin: 101111<br /> 0, dec: 48, hex: 30, oct: 60, bin: 110000<br /> 1, dec: 49, hex: 31, oct: 61, bin: 110001<br /> 2, dec: 50, hex: 32, oct: 62, bin: 110010<br /> 3, dec: 51, hex: 33, oct: 63, bin: 110011</p>
<p style="text-align: center;">stb....</p>
<p style="text-align: center;"><em>A program kimenete (ezt látjuk a soros terminálban)</em></p>
<p> </p>
<h1><span lang="HU">Adatátvitel PC-ről Arduinora</span><span lang="HU"></span></h1>
<p>Azon túl, hogy a soros terminálban képesek vagyunk adatok megjelenítésére – ami nagyon hasznos lehet az Arduino programjának írása közben hibák felderítésénél (debug), a hozzákapcsolt szenzorok érzékenységének beállításakor, a kiváltani kívánt hatások ellenőrzésekor –, használhatjuk az adatkapcsolatot arra is, hogy a számítógépünkön megírt komplex programok a fizikai környezetet az Arduinon, mint periférián keresztül érjék el.</p>
<p> A következő példában egy Arduinohoz kapcsolt LED fényerejét fogjuk változtatni számítógépről küldött adatokkal. Ahogy a fentiekben, most is byte-okat fogunk küldeni, melyek értéke 0-tól 255-ig változhat. Ezeket beolvassuk az Arduinoval és hozzárendeljük a LED fényerejét meghatározó értékhez.</p>
<p>Bármilyen programot használhatunk a kommunikációhoz, ami képes gépünk soros portját megnyitni. Nézzük meg, hogyan lehetséges ez Processing és Max/MSP5 környezetekből!</p>
<p><em><span>Amire szükségünk lesz:</span></em></p>
<ul>
<li><span>Arduino,</span></li>
<li><span>LED,</span></li>
<li><span>220 – 1 kiloohmos ellenállás,</span></li>
<li><span><a href="http://www.processing.org/">Processing</a> vagy,</span></li>
<li><span><a href="http://www.cycling74.com/products/max5">Max/MSP v. 5</a>.</span></li>
</ul>
<p> </p>
<p style="text-align: center;"><em><img src="https://m.blog.hu/ha/harsanyireka/image/9_4_2.png" alt="9_4_2.png" class="imgnotext" width="232" height="151" /></em></p>
<p style="text-align: center;"> </p>
<p style="text-align: center;"><img src="https://m.blog.hu/ha/harsanyireka/image/9_4.png" alt="9_4.png" class="imgnotext" /></p>
<p style="text-align: center;"><em>LED polaritása és bekötése az Arduinoba</em></p>
<p><span>Kössük a LED-ünk (10.4. ábrán) <em>negatívval</em> jelölt lábát az Arduino földjéhez (GND), a <em>pozitívval</em> jelölt lábát pedig egy soros ellenálláson keresztül a 9-es I/O csatornájához – amit most impulzusmodulációra (PWM) képes kimenetként fogunk használni.</span></p>
<p>Arduino kód: <a href="https://m.blog.hu/ha/harsanyireka/image/21LEDsoros.zip" target="_self">21LEDsoros</a></p>
<p> </p>
<h4><span lang="HU">Soros adat küldése Processing segítségével</span></h4>
<p><span>Hozzunk létre egy 256 pixel széles képernyőt, amin az egér aktuális vízszintes koordinátája jelenti majd az Arduinohoz kötött LED fényerejét (0–255). Vizualizáljuk az elvárt kimenetet függőleges vonalakból álló, feketéből fehérbe változó gradienssel. Küldjük ki az egér pozícióját sorosan byte-onként!</span></p>
<p><span>Processing kód: <a href="https://m.blog.hu/ha/harsanyireka/image/22Processing.zip" target="_self">22Processing</a></span></p>
<p><span><img src="https://m.blog.hu/ha/harsanyireka/image/9_5.png" alt="9_5.png" class="imgnotext" /></span></p>
<p style="text-align: center;"><em>Processing kód futásának eredménye</em></p>
<h3></h3>
<h4><span lang="HU">Soros adat küldése Max/MSP segítségével</span></h4>
<p> </p>
<p style="text-align: center;"><em><img src="https://m.blog.hu/ha/harsanyireka/image/9_6.png" alt="9_6.png" class="imgnotext" width="567" height="402" /></em></p>
<p style="text-align: center;"><em>Byte küldése Max/MSP-vel</em></p>
<p><span> </span></p>
<h2>Vezérlés karakterekkel</h2>
<p><span>Nézzünk az előző kapcsolással még egy példát! Az Arduinohoz csatlakoztatott LED-et fogjuk ki- és bekapcsolni általunk meghatározott karakterekkel. Bármely soros kommunikációra alkalmas programból elküldhetjük a karaktereket, az Arduino fejlesztőkörnyezetének saját soros termináljából is.</span></p>
<p>Arduino kód: <a href="https://m.blog.hu/ha/harsanyireka/image/23Karakter.zip" target="_self">23Karakter</a></p>
<h4>Karakterek küldése <span>Processing segítségével</span></h4>
<p><span>Az alábbi kód egyszerre példa meghatározott karakterek soros küldésére és egy egyszerű egérre reagáló gombra. Amikor egerünket a gombként működő négyzet fölé visszük, az Arduinohoz kapcsolt LED bekapcsolódik.</span></p>
<p>Processing kód: <a href="https://m.blog.hu/ha/harsanyireka/image/24KarakterProc.zip" target="_self">24KarakterProc</a></p>
<p style="text-align: center;"><em><img src="https://m.blog.hu/ha/harsanyireka/image/9_7.png" alt="9_7.png" class="imgnotext" /></em></p>
<p style="text-align: center;"><em>A processing kódunk kimenete</em></p>
<h4>Karakterek küldése <span>Max/MSP segítségével</span></h4>
<p><span><img src="https://m.blog.hu/ha/harsanyireka/image/9_8.png" alt="9_8.png" class="imgnotext" width="565" height="316" /></span></p>
<p style="text-align: center;"><em><span lang="HU">Vezérlés karakterekkel Max/MSP-vel</span></em></p>
<h2><span>Switch feltétel használata soros kommunikációban</span></h2>
<p><span>Itt még érdemes kitérnünk az Arduino nyelv egy funkciójára, amelynek segítségével diszkrét értékekhez rendelhetünk végrehajtandó kódrészeket. Ahogy az <em>if </em>esetében két – a feltételnek megfelelő és az annak nem megfelelő – állapot közül választhatunk, addig a <em>Switch (case)</em> feltétel esetében egy változó minden értékével különálló feltételt tudunk megvalósítani.</span></p>
<p><em><span>Amire szükségünk lesz:</span></em></p>
<ul>
<li><span>Arduino,</span></li>
<li><span>5 db LED,</span></li>
<li><span>5 db 220 – 1 kiloohmos ellenállás,</span></li>
<li><span>próbapanel,</span></li>
<li><span>vezetékek,</span></li>
<li><span><a href="http://www.processing.org/">Processing</a> vagy,</span></li>
<li><span><a href="http://www.cycling74.com/products/max5">Max/MSP v. 5</a>.</span> </li>
</ul>
<p style="text-align: center;"><em><img src="https://m.blog.hu/ha/harsanyireka/image/9_9.png" alt="9_9.png" class="imgnotext" /></em></p>
<p style="text-align: center;"><em>Kapcsolás a switch() feltétel megértéséhez</em></p>
<p><span>Csatlakoztassunk az Arduino 2, 3, 4, 5, 6-os csatornáihoz egy-egy LED-et soros ellenállással, az eddigi példáknak megfelelően. Az, hogy melyik LED fog világítani, az a sorosan beolvasott karaktertől függ, ami az alábbi kód szerint a, b, c, d vagy e lehet.</span></p>
<p>Arduino kód: <a href="https://m.blog.hu/ha/harsanyireka/image/25switch.zip" target="_self">25switch</a></p>
<p>A processing kódot és a MAX patchet az előzőek alapján át tudjuk alakítani. A fent meghatározott L és H karaktereket felválthatjuk a, b, c, d, e bármelyikére és kibővíthetjük a programunkat többgombosra is, az Arduino program kipróbálásához azonban elegendő a soros terminál is.</p>
<h1>Adatátvitel Arduinoról PC-re</h1>
<p><span>Fordítsuk meg az eddig taglalt folyamatot, és nézzük meg, hogyan lehet az Arduino által gyűjtött fizikai jeleket a számítógépbe eljuttatni. Legyen a szenzorunk az egyik analóg (ADC) bemenetre kötött potenciométer, amivel a tápfeszültséget leosztjuk annál kisebb feszültségekre, hogy a beolvasott 1024 lehetséges állapot közül a potméter elfordításával tudjunk választani. A beolvasott értéket aztán átadjuk a soros porton keresztül a számítógépnek, ahol grafikusan feldolgozzuk.</span></p>
<p><em><span>Amire szükségünk lesz:</span></em></p>
<ul>
<li><span>Arduino </span></li>
<li><span>10–100 kiloohmos potenciométer (3 db)</span></li>
<li><span><a href="http://www.processing.org/">Processing</a> vagy</span></li>
<li><span><a href="http://www.cycling74.com/products/max5">Max/MSP v. 5</a></span></li>
</ul>
<p style="text-align: center;"><em><img src="https://m.blog.hu/ha/harsanyireka/image/9_10.png" alt="9_10.png" class="imgnotext" /></em></p>
<p style="text-align: center;"><em>Potenciométer, mint analóg szenzor bekötése</em></p>
<p>Kössük a potméterünk egyik szélső lábát az Arduino föld- (GND), a másikat az 5 V-os tápcsatlakozójába. Ha feszültségmérővel a föld és a potméter középső lába között mérünk, azt fogjuk látni, hogy a potméter elforgatásával a feszültség 0–5 V között változik. Ezzel a módszerrel bármikor lemodellezhetjük az összes analóg módon működő szenzort. Az ilyen típusú érzékelők a mért fizikai paramétereket az általuk kibocsátott feszültség szintjével állítják valamilyen arányú összefüggésbe. Kössük a potméter középső lábát az Arduino A0 analóg bemenetére, a digitalizált érték 0–1023 között fog változni.</p>
<p>Arduino kód: <a href="https://m.blog.hu/ha/harsanyireka/image/26PotiSoros.zip" target="_self">26PotiSoros</a></p>
<h4><span>Adatok grafikus ábrázolása Processing segítségével</span></h4>
<p><span>Az alábbi példakód beolvassa az Arduino által sorosan elküldött adatokat, és minden új adatot egy olyan grafikonon ábrázol, amelyen a függőleges vonalak hossza arányos a potméterünkkel beállított feszültséggel.</span></p>
<p><span>Processing kód: <a href="https://m.blog.hu/ha/harsanyireka/image/27GraphProc.zip" target="_self">27GraphProc</a></span></p>
<p style="text-align: center;"><em><img src="https://m.blog.hu/ha/harsanyireka/image/9_11.png" alt="9_11.png" class="imgnotext" /></em></p>
<p style="text-align: center;"><em>Processinggel vizualizált grafikon</em></p>
<h4><span lang="HU">Adatok grafikus ábrázolása Max/MSP segítségével</span></h4>
<p><span lang="HU"><img src="https://m.blog.hu/ha/harsanyireka/image/9_12.png" alt="9_12.png" class="imgnotext" /></span></p>
<p style="text-align: center;"><em>Max/MSP patch Arduinoból sorosan olvasott adatok vizualizációjára</em></p>
<p style="text-align: center;"> </p>
<h4><span>Több független adat átvitele</span></h4>
<p><span>Bővítsük ki az előző példát, és nézzük meg, hogyan lehet egyszerre több bemenet értékét eljuttatni a számítógépbe. A kapcsolás lényegében lehet ugyanaz, mint eddig, azzal a különbséggel, hogy 3 db potenciométer kapcsolódik három különálló analóg bemenethez, A0-hoz, A1-hez és A2-höz. Ha rendelkezünk más jellegű érzékelőkkel, például fényérzékeny ellenállásokkal, akkor az alábbi feszültségosztó kapcsolást is használhatjuk.</span></p>
<p style="text-align: center;"><em><img src="https://m.blog.hu/ha/harsanyireka/image/9_13.png" alt="9_13.png" class="imgnotext" /></em></p>
<p style="text-align: center;"><em>Több analóg érzékelő bekötése Arduinoba</em></p>
<p>Arduino kód: <a href="https://m.blog.hu/ha/harsanyireka/image/28analog3.zip" target="_self">28analog3</a></p>
<p><span>Az analóg bemenetek értékeit továbbra is decimális kódolású ASCII karakterekként küldjük el, vagyis egy háromjegyű szám átvitelekor három egymást követő byte-ot továbbítunk. ASCII-ben az 1-es számértéke 49, a 2-es számértéke 50 és így tovább. (Lásd ASCII tábla.) A három szenzor értékét a számítógépes példakódokban három színcsatorna (piros, zöld, kék) intenzitásának változtatására fogjuk felhasználni.</span></p>
<h4><span lang="HU">Virtuális színkeverő Processingben</span></h4>
<p><span lang="HU">Processing kód: <a href="https://m.blog.hu/ha/harsanyireka/image/29szinkeveroProc.zip" target="_self">29szinkeveroProc</a></span></p>
<p style="text-align: center;"><em><span lang="HU"><img src="https://m.blog.hu/ha/harsanyireka/image/9_14.png" alt="9_14.png" class="imgnotext" /></span></em></p>
<p style="text-align: center;"><em><span lang="HU">A potméterek elforgatásával virtuálisan színeket keverhetünk.</span></em></p>
<h4><span lang="HU">Virtuális színkeverő Max/MSP-ben </span></h4>
<p style="text-align: center;"><em><img src="https://m.blog.hu/ha/harsanyireka/image/9_15.png" alt="9_15.png" class="imgnotext" /></em></p>
<p style="text-align: center;"><em>A potméterek elforgatásával virtuálisan színeket keverhetünk.</em></p>
<h1><span lang="HU">Kétirányú kapcsolat – meghívás és válasz</span></h1>
<p><span>Előfordulhat, hogy a szenzorértékek beolvasása vagy a kimenetek kapcsolása önmagában nem elegendő, és kétirányú kapcsolatot kell létrehozni az Arduino és a számítógép között. Erre léteznek különféle protokollok, melyek közül a legismertebb a Firmata – aminek működésére később kitérünk. Azonban most nézzünk egy jóval egyszerűbb megoldást, az úgynevezett Handshaking módszert. A példában az Arduino indulásakor egy A karaktert küld a számítógépnek, ezt követően a hozzá kapcsolt három szenzor értékét is továbbítja. Ha a számítógép készen áll és megkapta a „Start jelet” (A), beolvassa a szenzorok értékét és visszaküld egy A karaktert az Arduinonak, hogy folytassa az adatok küldését.</span></p>
<p><em>Amire szükségünk lesz:</em></p>
<ul>
<li><span>Arduino,</span></li>
<li><span>2 db analóg szenzor,</span></li>
<li><span>1 db nyomógomb,</span></li>
<li><span>3 db 10 kiloohmos ellenállás,</span></li>
<li><span>próbapanel,</span></li>
<li><span>vezetékek,</span></li>
<li><span><a href="http://www.processing.org/">Processing</a>, vagy</span></li>
<li><span><a href="http://www.cycling74.com/products/max5">Max/MSP v. 5</a>.</span></li>
</ul>
<p style="text-align: center;"><em><span lang="HU"><img src="https://m.blog.hu/ha/harsanyireka/image/9_16.png" alt="9_16.png" class="imgnotext" /></span></em></p>
<p style="text-align: center;"><em><span lang="HU">Két érzékelő és egy gomb bekötése</span></em></p>
<p><span>Kössünk be két analóg érzékelőt az A0 és A1 analóg bemenetekre, illetve egy nyomógombot a 2-es digitális csatornára. A két analóg érzékelő működését modellezhetjük potméterekkel, lásd a virtuális színkeveréskor használt kapcsolást.</span></p>
<p><span>Arduino kód: <a href="https://m.blog.hu/ha/harsanyireka/image/30ketiranyu.zip" target="_self">30ketiranyu</a></span></p>
<p> </p>
<h4><span lang="HU">Handshaking módszer Processing oldalról</span> </h4>
<p><span>Az analóg szenzorokkal egy körlapot mozgatunk a képernyőn, a nyomógombbal a körlap színét változtatjuk feketére.</span></p>
<p><span>Processing kód: <a href="https://m.blog.hu/ha/harsanyireka/image/31ketiranyuProc.zip" target="_self">31ketiranyuProc</a></span></p>
<p><span><img src="https://m.blog.hu/ha/harsanyireka/image/9_17.png" alt="9_17.png" class="imgnotext" /></span></p>
<p style="text-align: center;"><em><span lang="HU">Körlap mozgatása két analóg szenzorral</span></em></p>
<p> </p>
<h4><span lang="HU">Handshaking módszer Max/MSP oldalról</span></h4>
<p style="text-align: center;"><em><img src="https://m.blog.hu/ha/harsanyireka/image/9_18.png" alt="9_18.png" class="imgnotext" /></em></p>
<p style="text-align: center;"><em>Max/MSP handshaking patch</em></p>
<p> </p>
<p><br />forrás: <a href="http://arduino.cc/en/Tutorial/HomePage" target="_blank">http://arduino.cc/en/Tutorial/HomePage</a></p>
<p> </p>
<p><a title="Megosztom Facebookon!" href="https://www.facebook.com/sharer.php?api_key=120587281320910&locale=hu_HU&method=stream.share&u=https%3A%2F%2Fharsanyireka.blog.hu%2F2014%2F06%2F17%2F09_soros_kommunikacio%3Futm_source%3Dbloghu_rss%26utm_medium%3Dfacebook%26utm_campaign%3Dblhshare"><img src="https://m.blog.hu/assets/frontend/img/rss/icon_facebook.png" alt="Megosztom Facebookon!"></a>
<a title="Megosztom Twitteren!" href="https://twitter.com/home?status=https%3A%2F%2Fharsanyireka.blog.hu%2F2014%2F06%2F17%2F09_soros_kommunikacio%3Futm_source%3Dbloghu_rss"><img src="https://m.blog.hu/assets/frontend/img/rss/icon_twitter.png" alt="Megosztom Twitteren!"></a>
<a title="Megosztom Tumblren!" href="https://www.tumblr.com/share?v=3&u=https%3A%2F%2Fharsanyireka.blog.hu%2F2014%2F06%2F17%2F09_soros_kommunikacio%3Futm_source%3Dbloghu_rss%26utm_medium%3Dtumblr%26utm_campaign%3Dblhshare&t=09. Soros kommunikáció"><img src="https://m.blog.hu/assets/frontend/img/rss/icon_tumblr.png" alt="Megosztom Tumblren!"></a>
<a href="https://harsanyireka.blog.hu/2014/06/17/09_soros_kommunikacio#comments"><img class="item_ctp" src="https://harsanyireka.blog.hu/rss/image/post/id/6307576" border="0" /></a><br /></p>
processing
leckék
soros_port
lektorált
0
fizikai számítástechnika, arduino
https://harsanyireka.blog.hu
http://m.cdn.blog.hu/ha/harsanyireka/image/9_1.jpeg
https://harsanyireka.blog.hu/2014/06/16/08_peldak_analog_pinekhez
08. Példák analóg pinekhez
2014-06-16T21:36:17+02:00
2014-06-16T21:36:17+02:00
harsanyireka
https://blog.hu/user/434264
<p><span style="color: #0000ff;">Lektorált tananyag, ami a BKF Digitális és Kollaboratív Művészet (DIKOM) pályázatnak keretén belül valósult meg. Szerző: Harsányi Réka, Társszerző: Juhász Márton András, Lektor: Fernezelyi Márton</span></p>
<h2><span>Analóg bemenet kiolvasása</span></h2>
<p><span>A potméter egy változtatható ellenállású gomb, amit most analóg szenzorként értelmezünk, így analóg pinbe kötve ki tudjuk olvasni az értékeit. A kódban ezzel a kiolvasott értékkel a beépített LED-ünk villogási sebességét változtatjuk.</span></p>
<p><span>Az <strong>analogRead()</strong> parancs a beérkező 0–5 V közötti feszültségértéket átalakítja egy 0–1023 közötti digitális értékké. Ezt az Arduino egyik belső áramköre végzi el, amit <strong>ADC</strong>-nek hívunk (<strong>Analog-to-Digital Converter</strong>).</span></p>
<p><span>Bekötése: Ha a potméter (pl. 1 kiloohmos lineáris) mindhárom lába előre mutat, akkor a bal szélsőt kössük az 5 V pinbe, a jobb szélsőt a földelésbe, a középsőt pedig az analóg 0-ba. Az alaplapba épített LED-et használjuk, ami a 13 pinre ki van vezetve így opcionálisan beköthető ide egy 5mm-es LED is.</span></p>
<p style="text-align: center;"><em><img src="https://m.blog.hu/ha/harsanyireka/image/8.1.%20%E2%80%A0bra%20Potm%C3%87ter%20bek%C3%AEt%C3%87se.png" alt="8.1. †bra PotmÇter bekîtÇse.png" class="imgnotext" /></em></p>
<p style="text-align: center;"><em>Potméter bekötése </em></p>
<p style="text-align: left;"><em> </em>Arduino kód: <a href="https://m.blog.hu/ha/harsanyireka/image/15potmeter.zip" target="_self">15potmeter</a></p>
<p style="text-align: left;"> </p>
<h2><span>Analóg bemenettel vezérelt PWM</span></h2>
<p><span>Ezúttal kiolvasunk egy analóg pint és a kapott értéket 0–255 közötti digitális értékké alakítjuk, skálázzuk <strong>map()</strong> utasítással és ráküldjük egy PWM pinre, amivel egy LED fényerejét fogjuk vezérelni. Ehhez szükségünk lesz egy potméterre (mondjuk 1 kiloohmos lineáris fajtára), egy 220 ohmos ellenállásra és egy hagyományos piros LED-re.</span></p>
<p style="text-align: center;"><em><img src="https://m.blog.hu/ha/harsanyireka/image/8.2.%20%E2%80%A0bra%20LED%20%C3%87s%20potm%C3%87ter%20bek%C3%AEt%C3%87se.png" alt="8.2. †bra LED Çs potmÇter bekîtÇse.png" class="imgnotext" /></em></p>
<p style="text-align: center;"><em>LED és potméter bekötése</em></p>
<p><span>Bekötése: Ha a potméter mindhárom lába előre mutat, akkor a bal szélsőt kössük az 5 V pinbe, a jobb szélsőt a földelésbe, a középsőt pedig az analóg 0-ba. A LED rövidebb,<span> </span>negatív lába a szokásos módon a földelésbe, a hosszabb, pozitív a 220 ohmos ellenálláson át a digitális 9 pinbe kerül.</span></p>
<p><span>A kódban először megjelöljük, melyik pint miként akarjuk használni. Ezután létrehozunk két változót, az egyikbe az analóg pinből <strong>analogRead()-</strong>del kiolvasott érték kerül, a másikba ennek az értéknek az arányosított megfelelője, amit majd a LED-hez fogunk kiküldeni <strong>analogWrite()-</strong>tal. Mivel a feladathoz PWM pint használunk, az impulzusszélesség modulációval különböző erősséggel tud világítani a LED-ünk. A PWM pinre 0–255 körötti értéket küldünk, ehhez az analóg szenzorból kiolvasott 0–1023 közötti értéket <strong>map()</strong> paranccsal szétosztjuk.</span></p>
<p><span>Arduino kód: <a href="https://m.blog.hu/ha/harsanyireka/image/16potmeterLED.zip" target="_self">16potmeterLED</a></span></p>
<p> </p>
<h2><span>Analóg szenzor kalibrálása</span></h2>
<p><span>A következőkben megvizsgáljuk a szenzorok kalibrálásának menetét. A folyamat során az Arduino 5 másodpercig megszakítás nélkül olvassa ki az értéket. A program végrehajtása közben a szenzorból kiolvasott adatok meghatározzák a minimum és maximum értékeket.</span></p>
<p><span>Az analóg 0 pinbe bármilyen szenzort beköthetünk, potmétert vagy fotóellenállást is; a példában az utóbbit használjuk. </span></p>
<p><span> </span>Bekötése: A LED-ünk negatív lábát a szokásos 220 ohmos ellenálláson keresztül bekötjük a földelésbe, pozitív oldalát pedig a 9 pinbe (bármelyik lábához kerülhet az ellenállás, eddig a pozitívhoz tettük), a fotóellenállás (LDR) bármilyen irányban állhat, egyik lába az 5 V-ba, a másik lába az analóg nulla (A0) pinbe és egy 10 kiloohmos ellenálláson át a földelésbe is be van kötve.</p>
<p style="text-align: center;"><em><img src="https://m.blog.hu/ha/harsanyireka/image/8.3.%20%E2%80%A0bra%20LED%20%C3%87s%20fot%C2%A2ellen%E2%80%A0ll%E2%80%A0s%20bek%C3%AEt%C3%87se.png" alt="8.3. †bra LED Çs fot¢ellen†ll†s bekîtÇse.png" class="imgnotext" /></em></p>
<p style="text-align: center;"><em>LED és fotóellenállás bekötése </em></p>
<p><span>A kód legelején inicializálnunk kell a két változót, amelyben a minimum és maximum értéket fogjuk eltárolni. Analóg pinről lévén szó, a minimum 1023 és a maximum 0 legyen – most kivételesen fordítva használjuk. A legelején meghatároztuk a maximum értéket (0) és ha a kiolvasott érték a felett van, akkor ezt mentjük majd el, mint új maximum értéket. Ugyanígy, ha a kiolvasott érték az elején beállított minimum érték (1023) alatt van, akkor az lesz az új minimum érték. Ezután ezt a két értéket skálázzuk 0–255 közé, ez fogja vezérelni a PWM-re kötött LED-ünk fényerejét.</span></p>
<p><span>Megjegyzés: Ha potmétert használunk, ne tekerjük el a kalibrálás alatt teljesen ütközésig, így köztes értéket tudunk használni, hogy megértsük a kód működését.</span></p>
<p><span>Arduino kód: <a href="https://m.blog.hu/ha/harsanyireka/image/17kalibralas.zip" target="_self">17kalibralas</a></span></p>
<p><span>Előfordulhat, hogy a kalibráció alatt nem jelennek meg a szélsőértékek, így a map()nem valós értéket állíthat elő (pl. a maximumot felveszi 800-nak az elején, később pedig beolvas 820-at, akkor a map() eredménye már 256), ezért a constrain()-nel beszorítja a kilengéseket a megadott intervallumba.</span></p>
<p> </p>
<h2><span>LED fényerejének szabályozása PWM-mel</span></h2>
<p><span>PWM = Pulse Width Modulation, azaz impulzusszélesség moduláció. Egy olyan digitális jel, ami rendkívül gyorsan kapcsolja ki-be a digitális jelet egy meghatározott ütemben, ezáltal felruházva a digitális pinünket analóg-szerű viselkedéssel.</span></p>
<p><span>Bekötése: 220 ohmos ellenálláson át bekötjük a LED pozitív lábát a digitális 9 pinbe, a negatívat pedig a földelésbe.</span></p>
<p style="text-align: center;"><em><img src="https://m.blog.hu/ha/harsanyireka/image/8.4.%20%E2%80%A0bra%20LED%20bek%C3%AEt%C3%87se%20digit%E2%80%A0lis%209%20pinbe.png" alt="8.4. †bra LED bekîtÇse digit†lis 9 pinbe.png" class="imgnotext" /></em></p>
<p style="text-align: center;"><em>LED bekötése digitális 9 </em><i>pinbe</i></p>
<p><span>Arduino kód: <a href="https://m.blog.hu/ha/harsanyireka/image/18LEDpwm.zip" target="_self">18LEDpwm</a></span></p>
<p> </p>
<h2><span lang="HU">Simítás</span></h2>
<p><span>Ez a kód folyamatosan olvassa ki az analóg bemenetet és az értékek átlagát írja ki a számítógépre. Hasznos lehet egyenetlen szenzorok kiolvasásánál, mivel elsimítja az értékek ingadozását. Egyúttal azt is megnézzük, hogyan lehet tömböt használni adattárolásra.</span></p>
<p>Bekötése: Potmétert használunk, középső lábát analóg nullába kötjük, a két oldalsót pedig az 5 V feszültségbe és a földelésbe.</p>
<p style="text-align: center;"><em><img src="https://m.blog.hu/ha/harsanyireka/image/8.5.%20%E2%80%A0bra%20Potm%C3%87ter%20bek%C3%AEt%C3%87se%20A0-ba.png" alt="8.5. †bra PotmÇter bekîtÇse A0-ba.png" class="imgnotext" /></em></p>
<p style="text-align: center;"><em>Potméter bekötése A0-ba</em></p>
<p><span>A kód egymást követő 10 kiolvasást tárol el egy tömbben, egyesével. Ezeket összeadja, majd elosztja, így egy átlagértéket ad. Mivel a beérkező értékekkel folyamatosan kalkulál, és nem várja meg mind a 10 értéket, ezért nincs késési idő. A numReadings nevű változó értékének lecserélésével tudunk kísérletezni.</span></p>
<p><span>Arduino kód: <a href="https://m.blog.hu/ha/harsanyireka/image/19simitas.zip" target="_self">19simitas</a></span></p>
<p><span> </span></p>
<p><span>forrás: <a href="http://arduino.cc/en/Tutorial/HomePage" target="_blank">http://arduino.cc/en/Tutorial/HomePage</a></span></p>
<p><span> </span></p>
<p><a title="Megosztom Facebookon!" href="https://www.facebook.com/sharer.php?api_key=120587281320910&locale=hu_HU&method=stream.share&u=https%3A%2F%2Fharsanyireka.blog.hu%2F2014%2F06%2F16%2F08_peldak_analog_pinekhez%3Futm_source%3Dbloghu_rss%26utm_medium%3Dfacebook%26utm_campaign%3Dblhshare"><img src="https://m.blog.hu/assets/frontend/img/rss/icon_facebook.png" alt="Megosztom Facebookon!"></a>
<a title="Megosztom Twitteren!" href="https://twitter.com/home?status=https%3A%2F%2Fharsanyireka.blog.hu%2F2014%2F06%2F16%2F08_peldak_analog_pinekhez%3Futm_source%3Dbloghu_rss"><img src="https://m.blog.hu/assets/frontend/img/rss/icon_twitter.png" alt="Megosztom Twitteren!"></a>
<a title="Megosztom Tumblren!" href="https://www.tumblr.com/share?v=3&u=https%3A%2F%2Fharsanyireka.blog.hu%2F2014%2F06%2F16%2F08_peldak_analog_pinekhez%3Futm_source%3Dbloghu_rss%26utm_medium%3Dtumblr%26utm_campaign%3Dblhshare&t=08. Példák analóg pinekhez"><img src="https://m.blog.hu/assets/frontend/img/rss/icon_tumblr.png" alt="Megosztom Tumblren!"></a>
<a href="https://harsanyireka.blog.hu/2014/06/16/08_peldak_analog_pinekhez#comments"><img class="item_ctp" src="https://harsanyireka.blog.hu/rss/image/post/id/6307086" border="0" /></a><br /></p>
leckék
lektorált
0
fizikai számítástechnika, arduino
https://harsanyireka.blog.hu
http://m.cdn.blog.hu/ha/harsanyireka/image/8.1.%20%E2%80%A0bra%20Potm%C3%87ter%20bek%C3%AEt%C3%87se.png
https://harsanyireka.blog.hu/2014/06/16/07_peldak_digitalis_pinekhez
07. Példák digitális pinekhez
2014-06-16T21:08:27+02:00
2014-06-16T21:08:27+02:00
harsanyireka
https://blog.hu/user/434264
<p><span style="color: #0000ff;">Lektorált tananyag, ami a BKF Digitális és Kollaboratív Művészet (DIKOM) pályázatnak keretén belül valósult meg. Szerző: Harsányi Réka, Társszerző: Juhász Márton András, Lektor: Fernezelyi Márton</span></p>
<p><span>A következő alfejezetekben különböző eszközöket fogunk digitális pinekre kötni: LED-et, nyomógombot, kis hangszórót, miközben újabb típusú változókkal és – többek között – az <strong>if </strong>kondícióval, a <strong>for</strong> ciklussal, a <strong>tone</strong> és a <strong>millis</strong> függvényekkel ismerkedünk meg, valamint az Arduino belső felhúzó-ellenállását is használni fogjuk.</span></p>
<h2>LED villogtatása delay() nélkül</h2>
<p><span>Néha azt szeretnénk, hogy párhuzamosan történjenek dolgok, pl. miközben villog a LED egy nyomógomb állapotát is vizsgálni szeretnénk. Ilyenkor a <em>delay()</em>-t nem tudjuk használni, hiszen az az egész kód lefutását késlelteti, és lehet hogy pont akkor nyomjuk meg a gombot, amikor a kód áll, így elmumlasztjuk a kiolvasását. Ezért az alábbi kódban változók segítségével hozzuk létre a villogást úgy, hogy az eltelt idő mértékét vizsgáljuk.</span></p>
<p><span>A következő példában a LED mindig az ellenkező állapotába kerül, mint amilyenben épp van, tehát ha be van kapcsolva, akkor kikapcsol, és fordítva. Mivel a loop() folyamatosan fut, minden alkalommal megvizsgálja, hogy az if feltétel igaz-e, és ahhoz képest lép tovább a kódban. Használhatjuk az Arduino beépített LED-jét vagy beköthetünk egyet a szokásos módon – a pozitív lábát 220 ohmos ellenállásom keresztül a 13 pinbe, a negatív lábát pedig a földelésbe (Gnd).</span></p>
<p style="text-align: center;"><em><img src="https://m.blog.hu/ha/harsanyireka/image/7.1.1.%20%E2%80%A0bra%20LED%20bek%C3%AEt%C3%87se%2013%20pinbe.png" alt="7.1.1. †bra LED bekîtÇse 13 pinbe.png" class="imgnotext" /></em></p>
<p style="text-align: center;"><em>LED bekötése 13 pinbe</em></p>
<p><span>Arduino kód: <a href="https://m.blog.hu/ha/harsanyireka/image/06LEDmillis.zip" target="_self">06LEDmillis</a></span></p>
<p> </p>
<h2><span lang="HU">Nyomógomb LED-del</span></h2>
<p><span>Ismét a beépített, 13 digitális pinre kivezetett LED-ünket fogjuk használni, valamint egy nyomógombot, amit a 7.2.1. számú ábra szerint kötünk be a digitális 2 pinbe, a feszültségbe (5 V) és egy 10 kiloohmos ellenálláson keresztül a földbe (Gnd).</span></p>
<p style="text-align: center;"><em><img src="https://m.blog.hu/ha/harsanyireka/image/7.2.1.%20%E2%80%A0bra%20Nyom%C2%A2gomb%20bek%C3%AEt%C3%87se.png" alt="7.2.1. †bra Nyom¢gomb bekîtÇse.png" class="imgnotext" /></em></p>
<p style="text-align: center;"><em>Nyomógomb bekötése</em></p>
<p><span>Amikor a nyomógomb nyitva van (tehát nincs lenyomva), akkor a lábak között nincs összeköttetés, így – mivel a gombon át a földeléshez vagyunk kötve – a pinünkből LOW jelet tudunk kiolvasni. Ha a gomb lenyomásával zárjuk az áramkört, akkor a jelünk az 5 V pinből érkezik, azaz HIGH lesz.</span></p>
<p><span>Ha fordítva kötjük az áramkört, azaz az ellenállással a HIGH jelet tartjuk meg, akkor gombnyomásra LOW-t kapunk, így a LED akkor alszik el, ha nyomjuk a gombot.</span></p>
<p><span>Arduino kód: <a href="https://m.blog.hu/ha/harsanyireka/image/07nyomogomb.zip" target="_self">07nyomogomb</a></span></p>
<p> </p>
<h2><span lang="HU">Késleltetés (debounce)</span></h2>
<p><span>Ehhez a feladathoz az előző példa alkatrészeit és bekötési ábráját használjuk. A nyomógombot kapcsolóként használjuk, mely először bekapcsolja, majd második megnyomásnál kikapcsolja a LED-et. Késlelteti a bemeneti jelet, mely azt jelenti, hogy nagyon rövid időn belül kétszer is leellenőrzi, meg van-e nyomva a gomb. Késleltetés használata nélkül előfordulhat, hogy az egyszeri gombnyomást a kód többszörinek veszi. <strong>Millis() </strong>függvény segítségével követhetjük a gombnyomás időtartamát. Ugyanúgy HIGH jelet kap a bemeneti pinünk, ha lenyomjuk a gombot, mit az előző példában, és LOW jelet, ha nincs. Amikor a 2 bemeneti pin állapota LOW-ról HIGH-ra változik, átkapcsolja a kimeneti pint LOW-ról HIGH-ra, és a következő alkalommal vissza.</span></p>
<p><span>Arduino kód: <a href="https://m.blog.hu/ha/harsanyireka/image/08kesleltetes.zip" target="_self">08kesleltetes</a></span></p>
<p> </p>
<h2><span><span lang="HU">Nyomógombos számláló</span></span></h2>
<p><span>Ebben a példában egy nyomógombbal működő számlálót készítünk. Ahhoz, hogy a megnyomások számát követni tudjuk, ugyanúgy a bemeneti pin állapotát (HIGH, LOW) kell figyelnünk, és azt kell számolnunk, hogy ez a változás hányszor történt meg. Ezt „állapotváltozás érzékelés”-nek vagy „szélsőérték érzékelés”-nek hívjuk.</span></p>
<p><span>A következő kód folyamatosan kiolvassa a gomb állapotát és összehasonlítja az előzőleg kiolvasott értékkel. Amennyiben a két állapot különböző és az aktuális állapota HIGH, akkor a gomb be van nyomva, így a kódban eggyel nő a nyomógomb számlálóértéke. Ezt szintén megvizsgáljuk, és ha az a négy többszöröse, akkor bekapcsolja a beépített (13 pin) LED-ünk, egyéb esetekben kikapcsolja. Továbbra is a második példa alkatrészeit és bekötési ábráját alkalmazzuk.</span></p>
<p><span>Arduino kód: <a href="https://m.blog.hu/ha/harsanyireka/image/09szelsoertek.zip" target="_self">09szelsoertek</a></span></p>
<p> </p>
<h2><span lang="HU">Pinek beépített felhúzó ellenállása</span></h2>
<p><span>Minden pin rendelkezik egy beépített, programozható felhúzó ellenállással. Ez a példa azt mutatja meg, hogyan használjuk az INPUT_PULLUP parancsot a pinMode() függvény segítségével. A kapcsoló állapotát figyeli azáltal, hogy soros kommunikációt létesít az USB porton keresztül az Arduino és a számítógép között. A kommunikáció a (belső) soros porton (más néven: COM) történik, általában ki kell választani, hogy melyiket használjuk. </span></p>
<p><span>Ezen felül a kódban, ha a bemenet HIGH, akkor az Arduino boardba beépített LED bekapcsol, és LOW állapot esetén a LED kikapcsol. </span></p>
<p><span>Kössünk be egy nyomógombot a 7.5.1.</span><span>számú ábra szerint, az egyik lábát a földbe (GND),<span> </span>a másikat pedig a digitális 2 pinbe.</span></p>
<p style="text-align: center;"><em><img src="https://m.blog.hu/ha/harsanyireka/image/7.5.1.%20%E2%80%A0bra%20Nyom%C2%A2gomb%20bek%C3%AEt%C3%87se%20INPUT_PULLUP%20p%C3%87ld%E2%80%A0hoz.png" alt="7.5.1. †bra Nyom¢gomb bekîtÇse INPUT_PULLUP pÇld†hoz.png" class="imgnotext" /></em></p>
<p style="text-align: center;"><em>Nyomógomb bekötése INPUT_PULLUP példához</em></p>
<p><span>A nyomógombok vagy a kapcsolók alapállapotban nyitva vannak (amennyiben ilyen típust használunk, hiszen több fajta létezik), ami azt jelenti, hogy a két lába között nincs kapcsolat. Mivel a belső ellenállás a digitális 2 pinen aktív és 5 V-ra van csatlakoztatva (mivel ennyi feszültséget kap az USB-ből az Arduino, tehát ennyi jön a digitális pinből is), ezért ekkor HIGH jelet olvasunk ki. Ha a gombot lenyomjuk vagy bekapcsoljuk a kapcsolót, azzal zárjuk az áramkört, így – mivel közvetlen lesz a kapcsolat a földeléssel – LOW jelet kapunk.</span></p>
<p><span> </span>A kódban először létrehozzuk a soros kommunikációt 9600 bit/sec-on, majd engedélyezzük a 20 kiloohmos belső felhúzó ellenállást, illetve beállítjuk kimenetként a 13 LED-pint. Utána egy változó segítségével kiolvassuk a gomb állapotát, amelynek decimális értékét kiíratjuk serial monitoron – jelen esetben ez 0 vagy 1 lesz (0 = benyomva, 1 = alapállapotban).</p>
<p><span>Arduino kód: <a href="https://m.blog.hu/ha/harsanyireka/image/10felhuzo.zip" target="_self">10felhuzo</a></span></p>
<p> </p>
<h2><span><span lang="HU">Dallam lejátszása tone() függvénnyel</span></span></h2>
<p><span>Bekötése: A 8 ohmos kis hangszóró (0,25 wattos elég) pozitív oldala a 100 ohmos ellenálláson keresztül a digitális 8 pinbe, a negatív szára a földelésbe (GND) megy.</span></p>
<p style="text-align: center;"><em><img src="https://m.blog.hu/ha/harsanyireka/image/7.6.1.%20%E2%80%A0bra%20Hangsz%C2%A2r%C2%A2%20bek%C3%AEt%C3%87se.png" alt="7.6.1. †bra Hangsz¢r¢ bekîtÇse.png" class="imgnotext" /></em></p>
<p style="text-align: center;"><em>Hangszóró bekötése</em></p>
<p><span>Szükségünk van a „pitches.h” file-ra, melyhez a következő kódot egy alap szövegszerkesztőbe be kell illeszteni és elmenteni a file-t ezen a néven. A .h a <em>header file</em> kiterjesztése, ez tartalmazza a függvény meghatározásokat és definíciókat a <em>library</em> számára. </span></p>
<p><span>Az <em>arduino</em> mappa <em>libraries</em> mappájában hozzuk létre a <em>Melody</em> nevű mappát és tegyük bele a most készített <em>pitches.h</em> file-t – csak így fog működni. Az Arduino program újraindítása után bekerül a Sketch/Import Library legördülő menübe a Melody, innen fogjuk használni. Nyissunk egy új sketch-t, és másoljuk be az Arduino kódot (lejjebb található). Az #include „pitches.h” sort kitörölhetjük, majd vegyük elő az előbb említett legördülő menüből a melody-t, így megjelenik a következő sor: #include <pitches.h>. Most már működik a kód.</span></p>
<p>A pitches.h file kód <a href="https://m.blog.hu/ha/harsanyireka/image/pitchesH.zip" target="_self">letöltése</a>.</p>
<p>Arduino kód: <a href="https://m.blog.hu/ha/harsanyireka/image/11dallam.zip" target="_self">11dallam</a></p>
<p><span>Írjuk át a kódot tetszőleges dallamra!</span></p>
<p>Amennyiben<strong> standard library</strong><strong><span>-</span></strong><span>ket akarunk használni a hivatalos oldalról, akkor letöltés után előbb telepíteni kell azokat. Kicsomagolás után egy <strong>.h</strong> és egy .<strong>cpp</strong> kiterjesztésű file-t találunk. Az <strong><em>arduino</em></strong> mappában lévő <strong><em>libraries</em> </strong>mappába kell elmenteni, bár az már alapból tartalmazza őket. Esetleg itt létrehozhatunk egy saját <strong><em>library</em></strong>-t is. Az Arduino program újraindítása után a <strong><em>Sketch/Import Library</em> </strong>menüből elérhetőek és használhatóak.</span></p>
<p>Tone Library: <a href="https://code.google.com/p/rogue-code/wiki/ToneLibraryDocumentation" target="_blank">https://code.google.com/p/rogue-code/wiki/ToneLibraryDocumentation </a></p>
<h2><span lang="HU">Generált hajlítás lejátszása tone() függvénnyel</span></h2>
<p><span>Következő feladatunknál megtartjuk az előzőleg beszerelt 100 ohmos ellenállást és a 8 ohmos (0,25 wattos) kis hangszórót és bekötünk még egy fotóellenállást is egy 4,7 kiloohmos ellenállással.</span></p>
<p><span>Fotóellenállást eddig nem használtunk. Ez egy olyan alkatrész, amelynek </span>vezetőképessége fény hatására – a fényelektromos hatás következtében – megnő, ezért fényérzékelőként használható. (<span>LDR = Light Dependent Resistor) Működését tekintve minél jobban megvilágítjuk a fényérzékeny rétegét, annál kisebb lesz az ellenállása. Legnagyobb érzékenységét egy megadott fényhullámhossznál éri el, így vannak speciális fajtái, amelyek adott színekre érzékenyek, ezt spektrális érzékenységnek hívjuk. Jellemző tulajdonságai a világos-ellenállás értéke, melyet megvilágítással lehet elérni: 1000 luxhoz számolják és 100 ohmtól 2 kiloohmig terjedhet a skála; a másik a sötét-ellenállás érték, ami megvilágítás nélküli állapotában jellemző, ez megaohm nagyságrendű.</span></p>
<p style="text-align: center;"><em><span lang="HU"><img src="https://m.blog.hu/ha/harsanyireka/image/FOTOELLENALLAS_rajzjel.png" alt="FOTOELLENALLAS_rajzjel.png" class="imgnotext" /></span></em></p>
<p style="text-align: center;"><em><span lang="HU">Fotóellenállás rajzjele</span></em></p>
<p style="text-align: center;"><em><span lang="HU"><img src="https://m.blog.hu/ha/harsanyireka/image/7.7%20%E2%80%A0bra%20Fot%C2%A2ellen%E2%80%A0ll%E2%80%A0s%20(LDR).jpg" alt="7.7 †bra Fot¢ellen†ll†s (LDR).jpg" class="imgnotext" width="54" height="189" /></span></em></p>
<p style="text-align: center;"><em>Fotóellenállás (LDR)</em></p>
<p><span>Bekötése: A hangszóró pozitív szára az ellenálláson keresztül a 9 pinbe, negatív oldala a földelésbe kerül bekötésre. A fotóellenállás egyik lábát (mindegy, milyen irányba kötjük be) az 5 V-ba, a másikat az analóg 0 pinbe és a 4,7 kiloohmos ellenálláson át a földelésbe is bekötjük.</span></p>
<p style="text-align: center;"><em><img src="https://m.blog.hu/ha/harsanyireka/image/7.7.1.%20%E2%80%A0bra%20Hangsz%C2%A2r%C2%A2%20bek%C3%AEt%C3%87se%20fot%C2%A2ellen%E2%80%A0ll%E2%80%A0ssal.png" alt="7.7.1. †bra Hangsz¢r¢ bekîtÇse fot¢ellen†ll†ssal.png" class="imgnotext" /></em></p>
<p style="text-align: center;"><em>Hangszóró bekötése fotóellenállással</em></p>
<p><span>Az analóg szenzorból kiolvasott értéket követi le majd a generált hangunk, ezáltal egy hajlítás jön létre. A kód nagyon egyszerű, a kiolvasott analóg értékeket szétosztja a hallható hangok értékéhez arányosítva (ebben az esetben leszűkítjük ezt a tartományt 120–1500 Hz közé). Az analóg szenzor által használt tartományt is beállítjuk 0–1023 helyett most 400–1000 közé, hogy jobban működjön a kód. A map() utasításban lévő paraméterek átállításával kísérletezhetünk.</span></p>
<p><span>Arduino kód: <a href="https://m.blog.hu/ha/harsanyireka/image/12hajlitas.zip" target="_self">12hajlitas</a></span></p>
<p> </p>
<h2><span>Analóg billentyűzet tone() függvénnyel</span></h2>
<p><span>A következő feladathoz szükségünk lesz a 8 ohmos hangszórónkra a 100 ohmos ellenállással és három erőkifejtés-érzékelő ellenállásra, valamint hozzájuk három 10 kiloohmos ellenállásra.</span> </p>
<p><span>Az FSR = Forse Sensitive Resistor, azaz erőkifejtés-érzékelő ellenállás olyan alkatrész, amelyben összenyomás hatására megváltozik az ellenállás: minél erősebben nyomjuk össze, annál kisebb lesz, tehát annál több áram jut át rajta.</span></p>
<p style="text-align: center;"><em><img src="https://m.blog.hu/ha/harsanyireka/image/7.8.1%20%E2%80%A0bra%20Elektronok%20%C2%A3tja%20az%20FSR-ben..png" alt="7.8.1 †bra Elektronok £tja az FSR-ben..png" class="imgnotext" width="320" height="172" /></em></p>
<p style="text-align: center;"><em>Elektronok útja az FSR-ben. <br /> Bal oldalon az alap, jobb oldalon az összenyomott állapot látható. </em></p>
<p> <img src="https://m.blog.hu/ha/harsanyireka/image/7.8.2%20%E2%80%A0bra%20T%C3%AEbb%20m%C3%87retben,%20form%E2%80%A0ban%20kaphat%C2%A2.jpg" alt="7.8.2 †bra Tîbb mÇretben, form†ban kaphat¢.jpg" class="imgnotext" width="356" height="311" /></p>
<p style="text-align: center;"><em>Több méretben, formában kapható</em></p>
<p><span>Bekötése: A hangszóró negatív lába a földelésbe, a pozitív a 100 ohmos ellenálláson keresztül a 8 pinbe kerül bekötésre. A nyomásérzékeny ellenállásokat párhuzamosan bekötjük az 5 V-ba, másik lábukat pedig az analóg 0, 1, 2 pinbe, valamint a 10 kiloohmos ellenállásokon át a földelésbe is a 7.8.3 számú ábra szerint.</span></p>
<p><span> <img src="https://m.blog.hu/ha/harsanyireka/image/7.8.3%20%E2%80%A0bra%20anal%C2%A2g%20billenty%CB%9Azet%20bek%C3%AEt%C3%87se.png" alt="7.8.3 †bra anal¢g billenty˚zet bekîtÇse.png" class="imgnotext" /></span></p>
<p style="text-align: center;"><em>Analóg billentyűzet bekötése</em></p>
<p><span>Arduino kód: <a href="https://m.blog.hu/ha/harsanyireka/image/13analoghang.zip" target="_self">13analoghang</a></span></p>
<p><span>A kód kiolvassa a szenzorok értékeit – mindegyik egy hangnak felel meg a hangértékeket tároló tömbben. Ha a szenzorok értékének bármelyike a megadott küszöbérték felett van, akkor a hozzárendelt hang megszólal.</span></p>
<p><span>Ugyanazt a pitches.h fájlt használjuk, mint a dallam lejátszáskor. (Létrehozása a 7.6 alfejezetben található.) Ez tartalmazza a szokásos hangjegyek Hz-ben definiált generált hangját, pl. NOTE_C4 a közepes C hang.</span></p>
<h2>Hang lejátszása több kimeneten tone() függvénnyel</h2>
<p><span>Ez a példa megmutatja, hogyan játsszunk le különböző hangokat három hangszórón, több digitális kimenet használatával. A tone() utasítás az Atmega egyik belső időzítőjét használja, beállítja azt az általunk megadott frekvenciára és az időzítővel rezegteti a kimeneti pint. Mivel egy időzítőt használ, csak egyesével tudjuk lejátszani a hangokat, azonban több pinen egymást követően több hangot is lejátszhatunk. Ehhez ki kell kapcsolni az időzítőt az adott pinen, mielőtt a következő pinnel használni kezdjük.</span></p>
<p><span>A kód sorban minden egyes hangszórón egy hangot játszik le, úgy, hogy ez előző hangszórót előbb kikapcsolja – a hangok hosszát ebben az esetben a késleltetés idejével szabályozzuk. </span></p>
<p><span> </span>Alkatrészek bekötése: A 100 ohmos ellenállásokon át a digitális 6, 7, 8 pinbe kötjük a hangszórók pozitív oldalát, a negatívokat pedig a földelésbe.</p>
<p style="text-align: center;"><em><img src="https://m.blog.hu/ha/harsanyireka/image/7.9.1%20%E2%80%A0bra%20T%C3%AEbb%20hangsz%C2%A2r%C2%A2%20bek%C3%AEt%C3%87se.png" alt="7.9.1 †bra Tîbb hangsz¢r¢ bekîtÇse.png" class="imgnotext" /> </em></p>
<p style="text-align: center;"><em>Több hangszóró bekötése</em> </p>
<p><span>Arduino kód: <a href="https://m.blog.hu/ha/harsanyireka/image/14tobbhangszoro.zip" target="_self">14tobbhangszoro</a></span></p>
<p><span> </span></p>
<p><span>TONE library letöltése: <a href="https://code.google.com/p/rogue-code/downloads/detail?name=Arduino-Library-Tone.zip&can=2&q=" target="_blank">https://code.google.com/p/rogue-code/downloads/detail?name=Arduino-Library-Tone.zip&can=2&q= </a></span></p>
<p>forrás: <a href="http://arduino.cc/en/Tutorial/HomePage" target="_blank">http://arduino.cc/en/Tutorial/HomePage</a>, <a href="http://en.wikipedia.org/wiki/Photoresistor" target="_blank">http://en.wikipedia.org/wiki/Photoresistor</a>, <a href="http://en.wikipedia.org/wiki/Force-sensing_resistor" target="_blank">http://en.wikipedia.org/wiki/Force-sensing_resistor</a>, <a href="http://www.openmusiclabs.com/learning/sensors/fsr/" target="_blank">http://www.openmusiclabs.com/learning/sensors/fsr/</a></p>
<p> </p>
<p> </p>
<p><a title="Megosztom Facebookon!" href="https://www.facebook.com/sharer.php?api_key=120587281320910&locale=hu_HU&method=stream.share&u=https%3A%2F%2Fharsanyireka.blog.hu%2F2014%2F06%2F16%2F07_peldak_digitalis_pinekhez%3Futm_source%3Dbloghu_rss%26utm_medium%3Dfacebook%26utm_campaign%3Dblhshare"><img src="https://m.blog.hu/assets/frontend/img/rss/icon_facebook.png" alt="Megosztom Facebookon!"></a>
<a title="Megosztom Twitteren!" href="https://twitter.com/home?status=https%3A%2F%2Fharsanyireka.blog.hu%2F2014%2F06%2F16%2F07_peldak_digitalis_pinekhez%3Futm_source%3Dbloghu_rss"><img src="https://m.blog.hu/assets/frontend/img/rss/icon_twitter.png" alt="Megosztom Twitteren!"></a>
<a title="Megosztom Tumblren!" href="https://www.tumblr.com/share?v=3&u=https%3A%2F%2Fharsanyireka.blog.hu%2F2014%2F06%2F16%2F07_peldak_digitalis_pinekhez%3Futm_source%3Dbloghu_rss%26utm_medium%3Dtumblr%26utm_campaign%3Dblhshare&t=07. Példák digitális pinekhez"><img src="https://m.blog.hu/assets/frontend/img/rss/icon_tumblr.png" alt="Megosztom Tumblren!"></a>
<a href="https://harsanyireka.blog.hu/2014/06/16/07_peldak_digitalis_pinekhez#comments"><img class="item_ctp" src="https://harsanyireka.blog.hu/rss/image/post/id/6306896" border="0" /></a><br /></p>
leckék
lektorált
0
fizikai számítástechnika, arduino
https://harsanyireka.blog.hu
http://m.cdn.blog.hu/ha/harsanyireka/image/7.1.1.%20%E2%80%A0bra%20LED%20bek%C3%AEt%C3%87se%2013%20pinbe.png
https://harsanyireka.blog.hu/2014/06/14/06_2_digitalis_pinek_hasznalata
06. /2) Digitális és analóg pinek használata
2014-06-14T11:55:34+02:00
2014-06-14T11:55:34+02:00
harsanyireka
https://blog.hu/user/434264
<p><span style="color: #0000ff;">Lektorált tananyag, ami a BKF Digitális és Kollaboratív Művészet (DIKOM) pályázatnak keretén belül valósult meg.</span></p>
<p><span style="color: #0000ff;">Szerző: Harsányi Réka, Társszerző: Juhász Márton András, Lektor: Fernezelyi Márton</span></p>
<h2><span lang="HU">LED villogtatása, kiolvasás digitális pinből</span></h2>
<p><span>1 db 220 ohmos ellenállásra és 1 db 5 mm-es LED diódára lesz szükségünk. A LED negatív lába megy a földbe (rövidebb szára), a pozitív (hosszabb) pedig az ellenálláson keresztül a 13 digitális pinbe (ami a beépített LED kivezetése). Az ellenállásra a LED-hez jutó feszültség csökkentése miatt van szükségünk. Az átlagos 5 mm-es LED-ek kb. 20 mA-t fogyasztanak és 2,2–3,4 V-tal működnek. Az adott LED paramétereit a gyártó adatlapja tartalmazza. Az ellenállások színkódolása mutatja meg az értéküket. De használhatjuk az online kalkulátorokat is.</span></p>
<p style="text-align: center;"><em><img src="https://m.blog.hu/ha/harsanyireka/image/6.6.1.1.%20%E2%80%A0bra%20LED%20bek%C3%AEt%C3%87se.png" alt="6.6.1.1. †bra LED bekîtÇse.png" class="imgnotext" /></em></p>
<p style="text-align: center;"><em>LED bekötése</em></p>
<p><span>Az alább található kódban először kimenetként beállítjuk a LEDhez kötött pint: <em>pinMode(13, OUTPUT);</em> Majd a loop ciklusban bekapcsoljuk a LED fényét a <em>digitalWrite(13, HIGH);</em> paranccsal. Ennek hatására az arduino 5V feszültséggel látja el a LED-et (ez túl sok lenne, de már ellenállás bekötésével lecsökkentettük az értékét). Ez után kikapcsoljuk a fényét a <em>digitalWrite (13, LOW);</em> sorral, ilyenkor a pin állapota 0V-os. Hogy a két állapot közötti változást a szemünk is le tudja követni, lelassítjuk a villogást, úgy hogy <em>delay()</em>-jel várakoztatjuk a program lefutását, azaz a megadott idő alatt nem történik változás, tehát ha ég a LED akkor úgy is marad adott ideig az állapota. A delay() időtartamát mikiszekundumban adjuk meg, 1000 ms = 1 másodperc.</span></p>
<p><span>Arduino kódja: <a href="https://m.blog.hu/ha/harsanyireka/image/01LEDvillogas.zip" target="_self">01LEDvillogás</a><a href="https://m.blog.hu/ha/harsanyireka/image//01LEDvillogas.zip" target="_blank"></a><a href="https://m.blog.hu/ha/harsanyireka/image/01LEDvillogas.zip" target="_blank"></a><a href="https://m.blog.hu/ha/harsanyireka/image//_01LEDvillogas.zip" target="_blank"></a><a href="https://m.blog.hu/ha/harsanyireka/image//_01LEDvillogas_1.zip" target="_blank"></a></span></p>
<p><span> </span></p>
<h2><span lang="HU">Nyomógomb használata, kiírás digitális pinre</span></h2>
<pre></pre>
<p><span>Szükségünk lesz 1 db nyák mikro nyomógombra, 1 db 10 kiloohmos ellenállásra, illetve dugaszolós próbapanelre. Az ábrán látható módon kössük össze őket. A nyomógomb azért van középen, hogy a lábai ne legyenek egymáshoz bekötve, mivel a próbapanel közepén nincs átvezetés.</span></p>
<p style="text-align: center;"><em><img src="https://m.blog.hu/ha/harsanyireka/image/6.6.2.1.%20A%20dugaszol%C2%A2s%20pr%C2%A2bapanel%20%C3%AEsszek%C3%AEttet%C3%87sei.gif" alt="6.6.2.1. A dugaszol¢s pr¢bapanel îsszekîttetÇsei.gif" class="imgnotext" /></em></p>
<p style="text-align: center;"><em>A dugaszolós próbapanel összeköttetései</em></p>
<p style="text-align: center;"><em><img src="https://m.blog.hu/ha/harsanyireka/image/6.5.2.2.%20Nyom%C2%A2gomb%20bek%C3%AEt%C3%87se.png" alt="6.5.2.2. Nyom¢gomb bekîtÇse.png" class="imgnotext" /></em></p>
<p style="text-align: center;"><em>Nyomógomb bekötése</em></p>
<p><span>Amikor a nyomógomb nyitott állapotban van (nincs megnyomva), akkor nincs összeköttetés az 5V pinbe és a digitális pinbe bekötött lábai között, ezért a digitális pinből kiolvasott jel értéke LOW azaz 0V. Ilyenkor a földeléssel (Gnd pin) áll összeköttetésben (az ellenálláson keresztül) az 5V pin. Amikor a nyomógomb zárt állapotba kerül (le van nyomva), akkor záródik az áramkör az 5V pin és a digitális pin között, ekkor a beérkező jel értéke HIGH azaz 5V.<span> </span>Az alábbi kóddal ez a példa úgy működik, hogy ha lenyomjuk a gombot, világít a LED.</span></p>
<p><span>Fordított módon is beköthetjük a nyomógombot, úgy hogy az ellenállást úgy hogy a gombhoz érkező poyitív és negatí oldalakat felcseréljük. Tehát az ellenálláson keresztül HIGH jel érkezik a digitális pinbe, amikor a gomb alap állapotban van (nincs megnyomva). LOW jel érkezik amikor lenyomjuk. Ebben az esetben az alábbi kódot használva, akkor alszik ki a LED fénye, ha a gombot lenyomjuk, azaz a földeléssel zárjuk össze a digitális pint.</span></p>
<p><span>Arduino kódja: <a href="https://m.blog.hu/ha/harsanyireka/image/02Nyomogomb.zip" target="_self">02Nyomogomb</a></span></p>
<p><span>A jobb felső sarokban lévő gombbal tudjuk megnyitni a serial monitort. Vagy 0-t vagy 1-t ír ki, attól függően, hogy meg van-e nyomva a gomb.</span></p>
<p><span> </span></p>
<h2><span lang="HU">Potméter használata, kiolvasás analóg pinből</span></h2>
<p><span>A potméter egy változtatható feszültségű ellenállás, egy 10 kiloohmos szükséges a páldához. A belőle nyert változó adatokat fogjuk kiolvasni, de ugyanezen elven bármilyen analóg szenzor beköthető. </span></p>
<p><span>A potméter tengelyének elfordításával az ellenállás értékét változtathatjuk a középső és minkét szélső kivezetése között, ilyenkor a középső kivezetés feszültség értéke változik. Amikor az 5V pinhez futó és a középső pin közötti ellenállás megközelítőleg nulla (ilyenkor a másik szélső lábon megközelítőleg 10KOhm az ellenállás ebben a példában), akkor a középső pin feszültsége megközelítőleg 5V. Ha teljesen elfordítjuk a tengelyt, azaz megnöveljük az ellenállást, a feszültség 0V lesz. Ezt a feszültség érték változást fogjuk kiolvasni az Arduino analog bemmentén.</span></p>
<p><span>Az Arduino egy olyan belső áramkörrel rendelkezik, ami az analóg jelet digitálissá alakítja (<strong>analog-to-digital converter</strong>). Az analóg bement kiolvasáshoz az <em>analogRead()</em> funkciót fogjuk használni, ami egy számértéket ad vissza 0 és 1023 között (a használt feszültséghez arányosítva, pl. 5V = 1023; 0V = 0).</span> </p>
<p><span>Bekötése: Ha a lábai előre mutatnak, akkor balra tekerjük el teljesen a forgógombot, hogy beszerelés közben ne továbbítsa az áramot. Első lába az 5 V pinbe megy, a középső az analóg A0-ba, a harmadikat pedig le kell földelni a GND pinbe.</span></p>
<p style="text-align: center;"><em><img src="https://m.blog.hu/ha/harsanyireka/image/6.7.1.1.%20%E2%80%A0bra%20Potm%C3%87ter%20bek%C3%AEt%C3%87se.png" alt="6.7.1.1. †bra PotmÇter bekîtÇse.png" class="imgnotext" /></em></p>
<p style="text-align: center;"><em>Potméter bekötése</em></p>
<p><span>A kód setup függvényében az egyetlen dolog amit csinálunk, hogy bekapcsoljuk a soros port kommunikációt az Arduino és a számítógépünk között 9600 bit/sec adatsebességgel: <em>Serial.begin(9600);</em> Ez után a loop cikluson belül meghatározunk egy integer (egész számértéket tároló) változót, amiben a potméterből kiolvasott adatot (0-1023) tároljuk el: <em>int sensorValue = analogRead(A0); </em>Majd a soros ablakban (serial monitor) megjelenítjük az adatok decimális értékét, sortördeléssel: <em>Serial.println(sensorValue, DEC)</em>. A kezelőfelületen a jobb oldali felső ikonnal tudjuk megnyitni az ablakot. Ahogyan tekerjük a potmétert úgy változik a megjelenített adat.</span></p>
<p><span> </span>Arduino kód: <a href="https://m.blog.hu/ha/harsanyireka/image/03AnalogPin.zip" target="_self">03AnalogPin</a></p>
<p> </p>
<h2><span lang="HU">Analóg jel feszültség értékének kiírása serial monitoron</span></h2>
<p>A feladathoz az előző példának megfelelően kötjük be a potméterünket, tehát ismét analóg feszültségváltozást olvasunk ki.</p>
<p>A következő példakód serial monitorra írja ki a beérkező feszültség értékét, amihez – a pontosabb eredmény eléréséhez – egy float változót definiálunk. A kód ugyanúgy kezdődik mint az előző esetben, bekapcsoljuk a soros portot és eltároljuk a potméterből kiolvasott értéket egy integerben. Ez után a feszültség értékhez létrehozunk egy float (tizedes tört értékek tárolására alkalmas) változót, amiben a potméterből jövő adat feszültség értékét eltároljuk: <em>float voltage= sensorValue * (5.0 / 1023.0);</em> Vágül ezt megjelenítjük a soros ablakban: <em>Serial.println(voltage)</em>.</p>
<p>Arduino kód: <a href="https://m.blog.hu/ha/harsanyireka/image/04AnalogFeszultseg.zip" target="_self">04AnalogFeszultseg</a></p>
<p> </p>
<h2><span lang="HU">Impulzus-szélesség moduláció, </span>PWM pinek működése</h2>
<p><span>Ez a jel is 0-t és 1-t tud értékként felvenni, mint minden digitális jel. Amplitúdója állandó, de változó szélességű impulzusokból áll, így befolyásolható a kimeneten létrejövő tényleges feszültség.</span></p>
<p style="text-align: center;"><em><img src="https://m.blog.hu/ha/harsanyireka/image/6.8.1.1.%20%E2%80%A0bra%20PWM%20jel.jpg" alt="6.8.1.1. †bra PWM jel.jpg" class="imgnotext" /></em></p>
<p style="text-align: center;"><em>PWM jel <br /> (kép: www.cnv.hu/gallery/cikkek/elektronika/ pwm%20magyarazat.jpg)</em></p>
<p style="text-align: left;"><em> </em></p>
<h2><span lang="HU">LED fényerejének szabályozása PWM-mel</span></h2>
<p><span>Ebben a feladatban azt vizsgáljuk meg, hogyan lehet a digitális jel manipulációjával szabályozni a feszültséget. Az Arduino néhány digitális pinje mellé oda van írva a PWM, ezek közül használjunk egyet.</span></p>
<p><span>Bekötése: a LED pozitív lábát az ellenálláson keresztül – ugyanúgy, mint eddig – a 9-PWM digitális pinbe, a negatív lábát a földbe (Gnd) kötjük.</span></p>
<p style="text-align: center;"><em><img src="https://m.blog.hu/ha/harsanyireka/image/6.8.2.1.%20%E2%80%A0bra%20LED%20bek%C3%AEt%C3%87se%20PWM%20pinbe.jpg" alt="6.8.2.1. †bra LED bekîtÇse PWM pinbe.jpg" class="imgnotext" /></em></p>
<p style="text-align: center;"><em>LED bekötése PWM pinbe </em></p>
<p><span>Az <em>analogWrite()</em> funkciót használjuk. A PWM hihetetlenül gyorsan kapcsolja a pin állapotát ki-be, így idézi elő az analóg jelre emlékeztető elhalványuló effektust. 0–255 közötti értéket küldhetünk a PWM pinekre, pl. az analogWrite(127); 50%-ot jelent. Az ábrán a zöld vonalak az időt jelölik, 2 milliszekundumonként.</span></p>
<p><span> <img src="https://m.blog.hu/ha/harsanyireka/image/6.8.2.2.%20%E2%80%A0bra%20PWM%20jel%20magyar%E2%80%A0zata%20LED-hez.gif" alt="6.8.2.2. †bra PWM jel magyar†zata LED-hez.gif" class="imgnotext" /></span></p>
<p style="text-align: center;"><em>PWM jel magyarázata LED-hez</em></p>
<p><span>Először létrehozunk változókat: a LED a 9 pinbe van kötve. A fényerőnek, és az értéknek amivel változtatjuk majd, szintén létrehozunk integer tárolókat. A setupban kimenetként megadjuk a LED pint. A loop ciklusban analogWrite() segítségével megadjuk melyik pinre (<em>led</em>) és mekkora értéket (<em>brigthness</em>) akarunk küldeni. A PWM pin 0-255 közötti értéket fogad. A fényerő értékét folyammatosan változtatjuk, egy fix értékkel (<em>fadeAmount</em>) növeljük, ilyenkor a LED egyre világosabb. Ez addig zajlik még el nem éri a szélső, 255 értéket: <em>if (brightness == 0 || brightness == 255) {fadeAmount = -fadeAmount ;}</em></span><span>Ekkor a folyamat megfordul, mivel negatív előjelűre vált a léptetés mértékét eltároló változó, így az érték 5-ösével csökkenni fog amíg el nem éri a nullát, tehát a LED fénye halványodik. Az if feltételben azt látjuk hogy ha a fényerő értéke eléri a nullát VAGY a 255 csak akkor teljesül a feltétel, azaz csak akkor fut le a kapcsos zárójelen belül található programrész, aminek hatására megfordul a folyamat iránya. Mivel az <em>analogWrite()</em> nagyon gyorsan tudja változtatni a PWM értékeket, a kód végérén található egy késleltetés (<em>delay</em>), hogy lássuk a végbemenő változást.</span></p>
<p><span>Arduino kód: <a href="https://m.blog.hu/ha/harsanyireka/image/05PWMfade.zip" target="_self">05PWMfade</a></span></p>
<p> </p>
<p>forrás: <a href="http://arduino.cc/en/Tutorial/HomePage" target="_blank">http://arduino.cc/en/Tutorial/HomePage</a> </p>
<p> </p>
<p><a title="Megosztom Facebookon!" href="https://www.facebook.com/sharer.php?api_key=120587281320910&locale=hu_HU&method=stream.share&u=https%3A%2F%2Fharsanyireka.blog.hu%2F2014%2F06%2F14%2F06_2_digitalis_pinek_hasznalata%3Futm_source%3Dbloghu_rss%26utm_medium%3Dfacebook%26utm_campaign%3Dblhshare"><img src="https://m.blog.hu/assets/frontend/img/rss/icon_facebook.png" alt="Megosztom Facebookon!"></a>
<a title="Megosztom Twitteren!" href="https://twitter.com/home?status=https%3A%2F%2Fharsanyireka.blog.hu%2F2014%2F06%2F14%2F06_2_digitalis_pinek_hasznalata%3Futm_source%3Dbloghu_rss"><img src="https://m.blog.hu/assets/frontend/img/rss/icon_twitter.png" alt="Megosztom Twitteren!"></a>
<a title="Megosztom Tumblren!" href="https://www.tumblr.com/share?v=3&u=https%3A%2F%2Fharsanyireka.blog.hu%2F2014%2F06%2F14%2F06_2_digitalis_pinek_hasznalata%3Futm_source%3Dbloghu_rss%26utm_medium%3Dtumblr%26utm_campaign%3Dblhshare&t=06. /2) Digitális és analóg pinek használata"><img src="https://m.blog.hu/assets/frontend/img/rss/icon_tumblr.png" alt="Megosztom Tumblren!"></a>
<a href="https://harsanyireka.blog.hu/2014/06/14/06_2_digitalis_pinek_hasznalata#comments"><img class="item_ctp" src="https://harsanyireka.blog.hu/rss/image/post/id/6300670" border="0" /></a><br /></p>
leckék
lektorált
0
fizikai számítástechnika, arduino
https://harsanyireka.blog.hu
http://m.cdn.blog.hu/ha/harsanyireka/image/6.6.1.1.%20%E2%80%A0bra%20LED%20bek%C3%AEt%C3%87se.png
https://harsanyireka.blog.hu/2014/06/12/mi_az_arduino_273
06. Arduino részei, telepítése és fejlesztőkörnyezete
2014-06-12T19:56:05+02:00
2014-06-12T19:56:05+02:00
harsanyireka
https://blog.hu/user/434264
<p><span style="color: #0000ff;">Lektorált tananyag, ami a BKF Digitális és Kollaboratív Művészet (DIKOM) pályázatnak keretén belül valósult meg.</span></p>
<p><span style="color: #0000ff;">Szerző: Harsányi Réka, Társszerző: Juhász Márton András, Lektor: Fernezelyi Márton</span></p>
<p><span>Mi az Arduino? Egyrészt egy mikrokontroller, másrészt a programozási környezet neve. Több fajtája létezik, mi az órán az Arduino Duemilanove-t használjuk. Az Arduino egy nyílt forrású, gyors prototipizáláshoz ideális mikrokontroller modul. Használata a világos felépítésű elektronikának és jól értelmezhető programnyelvnek köszönhetően könnyen és gyorsan elsajátítható. Hirtelen elterjedése interaktív művészeti alkotásokban, hobbi alkalmazásokban és gyors vezérléstechnikai megoldások kivitelezésében egy jól kiépült nemzetközi tudásbázist hozott létre, hozzáférhetővé téve az elektronika egyszerű használatát minden érdeklődő számára. Sokrétű ki- és bemenetein keresztül fel tudja venni a kapcsolatot bármilyen jellegű szenzorral és programjának megfelelő válaszadásra képes, meghajtva lámpákat, motorokat, kijelzőket. A mikrokontrollert Arduino nyelven lehet programozni, ami a Wiring nyelvén alapszik, felhasználói felületét pedig a Processing alapja nyújtja. Az Arduino egyedülálló áramkörként is működtethető, vagy összekapcsolható számítógéppel, amin Flash, Processing, MaxMSP, GarageBand, illetve egyéb soros kommunikációra képes programokkal képes együttműködni. A modulokat készen és KIT-ben is meg lehet vásárolni, a programok ingyen letölthetők honlapukról. A kapcsolások és a nyomtatott áramköri tervek szintén hozzáférhetők és magáncélra szabadon felhasználhatók. Az Arduino a 2006-os Ars Electronica digitális közösségek szekciójában is elismerésben részesült. A csapat: Massimo Banzi, David Cuartielles, Tom Igoe, Gianluca Martino, és David Mellis.</span></p>
<p>A tananyag ezen részét a Massimo Banzi és társai által kidolgozott hivatalos leckék adják, amik Creative Common License-szel rendelkeznek:</p>
<p> </p>
<p><img src="https://m.blog.hu/ha/harsanyireka/image/cc-by-sa3s_1.jpg" alt="cc-by-sa3s_1.jpg" class="imgnotext" /></p>
<p> </p>
<h2>Arduino Duemilanove részei</h2>
<p><img src="https://m.blog.hu/ha/harsanyireka/image/6.3.%20%E2%80%A0bra%20Arduino%20Duemilanove.jpg" alt="6.3. †bra Arduino Duemilanove.jpg" class="imgnotext" /></p>
<p>A Duemilanove 2009-es modell, ATmega168 típusú vagy ATmega328 típusú mikrokontrollerrel felszerelt verzióban létezik. 14 digitális ki-/bemenete van amiből 6 speciális PWM funkciót is képes ellátni, 6 analóg bemenettel rendelkezik, valamint egy 16 MHz-es osszcillátorral, egy USB, egy hálózati és egy ICSP csatlakozóval rendelkezik. Egy reset (újraindító) gomb is található rajta. Minden alkatrészt tartalmaz, ami a mikrokontroller működéséhez szükséges, így ha csatlakoztatjuk USB kábelünkkel (5V) a számítógéphez, megkezdhetjük használatát, de akár elemet, akkumulátort vagy AC-to-DC adaptert (a nagyfeszültséget átalakítja kisfeszültségű egyenárammá) dughatunk a hálózati csatlakozójába, ezek ajánlott feszültség értéke maximum 12V lehet. A DC a Direct Current rövidítése, ami kisfeszültségű egyenáramot jelent, ezzel fogunk dolgozni.</p>
<p><span> </span></p>
<p><strong>A Duemilanove adatai:</strong></p>
<ul>
<li>mikrokontroller típusa: ATmega 168 vagy ATmega 328</li>
<li>működtető feszültségérték: 5V</li>
<li>bementi feszültség – ajánlott értéke: 7-12V</li>
<li>bemeneti feszültség – határ értéke: 6-20V</li>
<li>digitális ki-/bemeneti pinek száma: 14, ebből 6 PWM. 5V-on működnek, mindegyik rendelkezik egy belső felhúzó (pull-up) ellenállással, ami egy speciális paranccsal bekapcsolható (alap állapotban ki van kapcsolva), értéke 20-50 kOhm lehet.</li>
<li>analóg bemeneti pinek száma: 6, ezek 10 bites felbontáson tudnak egy értéket felvenni 0-1023 között.</li>
<li>az egyes pinekre jutó áramerősség értéke:<span> </span>40mA</li>
<li>a 3.3V elnevezésű pinre jutó áramerősség értéke:<span> </span>50mA</li>
<li>flashmemória mérete: 16KB (ATmega168), 32KB (ATmega328) amiből 2KB-ot a bootloader foglal el. A flashmemória egy olyan újraprogramozható, adattárolásra alkalmas eszköz, aminek nincs szüksége tápfeszültségre ahhoz, hogy megtartsa a benne tárolandó adatot. A bootloader magyarul rendszer betöltő program, ezzel képes elindulni az eszköz.</li>
<li>SRAM mérete: <span>1 KB (ATmega168), 2 KB (ATmega328).</span>Ez egy <span>statikus memória, amiben a tárolt adat a tápfeszültség megszűnéséig marad meg.</span></li>
<li>EEPROM mérete: <span>512 byte (ATmega168), 1 KB (ATmega328).</span>Elektronikusan törölhető és újraírható, azaz programozható tároló memória. Olyan mint a flashmemória.</li>
<li>Órajel sebessége: 16 MHz. Ez <span>egy olyan jel, amely két vagy több áramkör tevékenységét koordinálja, szinkronizálja. Egy alacsony és egy magas jelszint között osszcillál.</span></li>
</ul>
<p><span> </span></p>
<p><strong>Áramot</strong><strong> kezelő pinek: </strong></p>
<ul>
<li>Vin: bemeneti feszültség, ha külső áramforrást használunk az üzemeltetéshez.</li>
<li>Gnd: földelés.</li>
<li>5V: értelemszerűen 5V jön belőle.</li>
</ul>
<p>3V3: az alaplapra szerelt FTDI chip által termelt 3,3 V feszültség.</p>
<p><span> </span></p>
<p>Némelyik pin speciális funkciók ellátására is képes, ezeket a későbbiekben használat közben ismerjük meg.</p>
<p><span> </span></p>
<p><strong>Speciális funkciókkal ellátott pinek:</strong></p>
<ul>
<li>digitális 0(RX) és 1(TX): Ezek a pinek össze vannak kötve a FTDI USB-to-TTL nevű soros chip megfelelő részeivel, ezért soros port kommunikációhoz használhatjuk őket. Az RX fogadja, a TX pedig küldi az adatot. </li>
<li>digitális 2 és 3 pin külső megszakításhoz: a csatlakozón fellépő fel- vagy lefutó él hatására fellépő megszakításkéréshez használható, ez a mikrovezérlő valamelyik bemenetének értékváltozására generálódik. Az <em>attachInterrupt()</em> funkcióval használjuk.</li>
<li>digitális PWM pinek<span>: 3, 5, 6, 9, 10, és 11</span> (pulse width modulation = <span><a href="http://www.hobbielektronika.hu/cikkek/launchpad_ismerkedes_az_msp430_mikrovezerlokkel_ii.html?pg=8">impulzus-szélesség moduláció</a></span>). Az <em>analogWrite()</em> paranccsal 8 biten küldhetünk rá adatot.</li>
<li>SPI pinek:<span>10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK),</span> SPI busz (Serial Peripheral Interface = soros periféria illesztő) kommunikációhoz használhatjuk, az<em> SPI Library</em> meghívásával.</li>
<li>LED 13 pin: a beépített LED van ide kivezetve ide.</li>
<li>Analóg A4 (SDA) és A5 (SCL) pinek: I<sup>2</sup>C (TWI) busz kommunikációra alkalmasak, <em>Wire Library</em> meghívásával.</li>
</ul>
<p> </p>
<p><strong>Egyéb pinek:</strong></p>
<ul>
<li>AREF pin: Alapvetően az analóg pinek 0-5V között mérik a bementi adatot. Ennek felső értéke ezzel a pinnel és az <em>analogReference()</em> paranccsal megváltoztaható.</li>
<li>Reset pin: ha a <em>shield</em>et használunk és van rajta reset gomb, akkor használjuk ezt a pint. LOW-ra állítva működik.</li>
</ul>
<p> </p>
<h2><span lang="HU">Mi a különbség az analóg és a digitális jel között?</span></h2>
<p><span>Az analóg jel idő és amplitúdó szerint folyamatosan változó jel, számtalan értéket képes felvenni. Lehet szabályos időközönként, periodikusan változó vagy szabálytalan, azaz a két szélsőérték között bármekkora lehet a pillanatnyi értéke. Az amplitúdó a jel nagyságát határozza meg, a frekvencia pedig az ismétlődések időtartamát, ami a periódusidő vagy a hullámhossz.</span></p>
<p style="text-align: center;"><em><img src="https://m.blog.hu/ha/harsanyireka/image/6.3.1.1.%20%E2%80%A0bra%20Anal%C2%A2g%20jel,%20szinusz%20hull%E2%80%A0m,%20szab%E2%80%A0lyos%20(periodikus)%20jel.png" alt="6.3.1.1. †bra Anal¢g jel, szinusz hull†m, szab†lyos (periodikus) jel.png" class="imgnotext" /></em></p>
<p style="text-align: center;"><em>Analóg jel, szinusz hullám, szabályos (periodikus) jel<br />kép: http://hu.wikipedia.org/wiki/Hullám</em></p>
<p>A digitális jel két értéket vehet fel, nullát vagy egyet. Arduino esetében ez azt jelenti, hogy ha bemenetére 5 V feszültség érkezik, az érték 1 lesz, ha nem érkezik semmi, akkor 0. Kimenetként használva ugyanez igaz, ha 1 értékkel 5 V feszültséget küldünk. Az Arduinonak vannak speciális PWM pinjei, erről később lesz szó.</p>
<p><img src="https://m.blog.hu/ha/harsanyireka/image/6.3.1.2%20%E2%80%A0bra%20Digit%E2%80%A0lis%20jel,%20bin%E2%80%A0ris%20sz%E2%80%A0mrendszerben.png" alt="6.3.1.2 †bra Digit†lis jel, bin†ris sz†mrendszerben.png" class="imgnotext" /></p>
<p style="text-align: center;"><em>Digitális jel, bináris számrendszerben</em></p>
<p>Az arduino mikrokontrollerben található egy Analog-to-Digital-Converter (ADC), ami a bemeneti analóg feszültségjelet átalakítja egy <span>digitális jellé. Konkrét példán keresztül a későbbiekben ismerjük meg a használatát.</span></p>
<p> </p>
<h2><span lang="HU">Arduino fejlesztőkörnyezet telepítése</span></h2>
<p>Az Arduino Boardhoz egy Arduino nevű open source fejlesztőkörnyezet tartozik, aminek legfrissebb verziója a hivatalos oldalról letölthető háromféle operációs rendszerhez: Windows-hoz, Mac OS X-hez és Linuxhoz. A letöltött fájlt kicsomagoljuk, ha kell, és máris futtathatjuk az Arduino szoftvert, nem kell külön telepíteni. Letöltés erről a linkről lehetséges: <a href="http://arduino.cc/en/Main/Software">http://arduino.cc/en/Main/Software</a></p>
<p><span>A Windows automatikusan telepíti az USB drivert, ha rákötjük az Arduinot. Macintoshon le kell tölteni, majd telepíteni kell. Az interneten FTDI USB Serial Driver néven találjuk meg.</span></p>
<p><span>A következők szerint töltsünk fel az Arduino Boardunkra egy minta fájlt, hogy le tudjuk ellenőrizni, megfelelően működik-e:</span></p>
<ul>
<li><span>Nyissuk meg az Arduino szoftvert!</span></li>
<li><span>Keressük ki a mintapéldák között a Blink fájlt: <strong>File/Examples/1. Basics/Blink</strong>!</span></li>
</ul>
<h2><img src="https://m.blog.hu/ha/harsanyireka/image/6.4.1.%20%E2%80%A0bra%20Blink%20megnyit%E2%80%A0sa.png" alt="6.4.1. †bra Blink megnyit†sa.png" class="imgnotext" /></h2>
<p class="Nincstrkz1"><span lang="HU">·<span> </span></span><span lang="HU">Állítsuk be az általunk használt Arduino típusát. Ezt a<b> Tools/Board</b> lenyíló menüben tehetjük meg, úgy hogy klikkeléssel áttesszük a pipát az adott típushoz.<br /> <br /> </span></p>
<p class="Nincstrkz1"><span lang="HU"><img src="https://m.blog.hu/ha/harsanyireka/image/6.4.2.%20%E2%80%A0bra%20Arduino%20t%C2%B0pus%E2%80%A0nak%20kiv%E2%80%A0laszt%E2%80%A0sa.png" alt="6.4.2. †bra Arduino t°pus†nak kiv†laszt†sa.png" class="imgnotext" /></span></p>
<p class="Nincstrkz1"> </p>
<p class="Nincstrkz1"> </p>
<p class="Nincstrkz1"><span lang="HU">·<span> </span></span><span lang="HU">Ezután ellenőrizzük a soros port beállítását a <b>Tools/Serial Port</b> menüben! Hogy épp melyiket használjuk (COM1, COM2, COM3, stb.), az Eszközkezelőben (Device Manager) meg tudjuk nézni. Egyszerűbb, ha megpróbáljuk feltölteni a kódot, és ha nem sikerül, akkor átállítjuk a portot egy másikra.</span></p>
<p class="Nincstrkz1"><span lang="HU"><img src="https://m.blog.hu/ha/harsanyireka/image/6.4.3.%20%E2%80%A0bra%20Soros%20port%20kiv%E2%80%A0laszt%E2%80%A0sa%20WIN.png" alt="6.4.3. †bra Soros port kiv†laszt†sa WIN.png" class="imgnotext" /></span></p>
<p class="Nincstrkz1"><img src="https://m.blog.hu/ha/harsanyireka/image/6.4.4.%20%E2%80%A0bra%20Soros%20port%20kiv%E2%80%A0laszt%E2%80%A0sa%20MAC.png" alt="6.4.4. †bra Soros port kiv†laszt†sa MAC.png" class="imgnotext" /></p>
<p><span>A második gombbal <strong>Upload </strong>tudjuk feltölteni a kódot a mikrokontrollerünkre. <strong>Done Uploading</strong> felirat jelzi, ha ez sikerült. Ekkor a beépített sárga LED villogni kezd úgy, hogy 1 másodpercig ég és 1 másodpercig nem, míg ki nem húzzuk az áramból, azaz az USB-ből.</span></p>
<p><span>Gombok balról jobbra: Ellenőrzés, Feltöltés, Új ablak, Megnyitás, Mentés és a jobb oldalon a Serial Monitort bekapcsoló gomb.</span></p>
<p><span><img src="https://m.blog.hu/ha/harsanyireka/image/6.4.5.%20%E2%80%A0bra%20Gombok.jpg" alt="6.4.5. †bra Gombok.jpg" class="imgnotext" /></span></p>
<p> </p>
<p><span>Az alapokról, a fejlesztőkörnyezetről, hibakeresésről, gyakran ismételt kérdésekről stb. további információkat online, angol nyelven, a <strong>Help</strong> menüpont alatt találhatunk.</span></p>
<p><span><img src="https://m.blog.hu/ha/harsanyireka/image/6.4.6.%20%E2%80%A0bra%20Tov%E2%80%A0bbi%20seg%C2%B0ts%C3%87gek.jpg" alt="6.4.6. †bra Tov†bbi seg°tsÇgek.jpg" class="imgnotext" /></span></p>
<h2></h2>
<h2>Programozás: szükséges minimum kód</h2>
<p><span>Az Arduino által használ kódok, más néven <strong>Sketch</strong>-ek kiterjesztése a régebbi verzióknál <strong>.pde</strong> volt, de az 1.0 verzió óta már <strong>.ino</strong> kiterjesztést használ.</span></p>
<p><span>Arduino sketch írásnál a szükséges minimum a <em>setup()</em> és a<em> loop()</em> függvények meghívása (persze ehhez írhatunk saját függvényeket, de e nélkül nem fog működni a kódunk). Ezek az úgynevezett dedikált funkciók.</span></p>
<p><span>A <strong>setup</strong> funkció a program futtatásakor csak egyszer fut le az elején. Itt adhatjuk meg, hogy melyik pint hogyan akarjuk használni (bemenetként vagy kimenetként). Ekkor inicializáljuk a pineket (értékadás 0-val), illetve hívjuk meg a soros portot.</span></p>
<p><span>A<strong> loop</strong> funkció, mint a neve is mutatja, többször fut le egymás után. Itt változtathatjuk meg a bemeneti és kimeneti adatokat.</span></p>
<p><span>Ezek dedikált funkciók, tehát be vannak építve a fejlesztőkörnyezetbe. <em>Void</em>dal kell őket meghívni. </span></p>
<p><span> </span></p>
<h3><span>Szintaxisok:</span></h3>
<p><span> </span></p>
<p><span>Setup:</span><span> A kód legelején definiáljuk benne a változókat (inicializálás), pin módokat,<br /> könyvtár használatát stb. Csak egyszer fut le.</span></p>
<p><span> </span></p>
<p><strong><em>void setup()</em></strong><em> {</em><span><br /> <em> // ide tesszük az állandókat</em><br /> <em>}</em><br /> <br /> </span></p>
<p><span>Loop</span><span>: A setup után következik, folyamatosan, azaz többször fut le, lehetővé teszi, hogy<br /> a program változzon és reagáljon.</span></p>
<p><span><br /> <strong><em>void loop() </em></strong><em>{</em><br /> <em> // a változók helye<span> </span>– ismétlődik a lefutás</em><br /> <em>}</em></span></p>
<p> </p>
<p>További szintaxisok:</p>
<p> </p>
<p><strong>; pontosvessző</strong></p>
<p><em>Az állítások lezárására használjuk.</em></p>
<p>int a = 13;</p>
<p> </p>
<p><strong>{ } kapcsos zárójel</strong></p>
<p><em>Az arduino programnyelv legfőbb eleme, különböző konstrukciókban használjuk. </em></p>
<p><em>Ha van egy nyitó kapcsos zárójel, akkor mindig kell, hogy legyen egy hozzá tartozó záró is. Az Arduino fejlesztőkörnyezetébe be van építve, hogy ha az egyik zárójelet kijelöljük, megmutassa, melyik tartozik hozzá. Hasznos tipp, hogy ne felejtsük el bezárni a zárójelet, tegyük ki egyből mind a kettőt, utána írjunk be közé.</em> <span><em>Függvényeknél, ciklusoknál és feltételeknél</em></span><span><em> </em></span><em>használjuk.</em></p>
<p> </p>
<p><strong>// megjegyzés</strong></p>
<p><em>Két darab perjel mögé beírhatunk magunknak megjegyzéseket a programsorba, melyeket a<span> </span><span>fordítóprogram</span><span> </span>figyelmen kívül hagy, így nem tölti fel őket az Atmega chipre.</em></p>
<p><em>Ez a kommentelés csak egy sorra vonatkozik. Ha több sort akarunk írni, a csillagos perjeleket használjuk:</em></p>
<p><strong>/*</strong><span><strong> </strong></span>ide jön</p>
<p>több sor<br /> megjegyzés<span> </span><strong>*/</strong></p>
<p> </p>
<p>forrás:</p>
<p><a href="https://miau.gau.hu/mediawiki/index.php/Analóg_és_digitális_jel" target="_blank">https://miau.gau.hu/mediawiki/index.php/Analóg_és_digitális_jel </a></p>
<p><a href="http://arduino.cc/en/Guide/Environment">http://arduino.cc/en/Guide/Environment</a>, <a href="http://arduino.cc/en/Main/arduinoBoardDuemilanove">http://arduino.cc/en/Main/arduinoBoardDuemilanove</a>, </p>
<p> </p>
<p><a title="Megosztom Facebookon!" href="https://www.facebook.com/sharer.php?api_key=120587281320910&locale=hu_HU&method=stream.share&u=https%3A%2F%2Fharsanyireka.blog.hu%2F2014%2F06%2F12%2Fmi_az_arduino_273%3Futm_source%3Dbloghu_rss%26utm_medium%3Dfacebook%26utm_campaign%3Dblhshare"><img src="https://m.blog.hu/assets/frontend/img/rss/icon_facebook.png" alt="Megosztom Facebookon!"></a>
<a title="Megosztom Twitteren!" href="https://twitter.com/home?status=https%3A%2F%2Fharsanyireka.blog.hu%2F2014%2F06%2F12%2Fmi_az_arduino_273%3Futm_source%3Dbloghu_rss"><img src="https://m.blog.hu/assets/frontend/img/rss/icon_twitter.png" alt="Megosztom Twitteren!"></a>
<a title="Megosztom Tumblren!" href="https://www.tumblr.com/share?v=3&u=https%3A%2F%2Fharsanyireka.blog.hu%2F2014%2F06%2F12%2Fmi_az_arduino_273%3Futm_source%3Dbloghu_rss%26utm_medium%3Dtumblr%26utm_campaign%3Dblhshare&t=06. Arduino részei, telepítése és fejlesztőkörnyezete"><img src="https://m.blog.hu/assets/frontend/img/rss/icon_tumblr.png" alt="Megosztom Tumblren!"></a>
<a href="https://harsanyireka.blog.hu/2014/06/12/mi_az_arduino_273#comments"><img class="item_ctp" src="https://harsanyireka.blog.hu/rss/image/post/id/6181103" border="0" /></a><br /></p>
leckék
lektorált
0
fizikai számítástechnika, arduino
https://harsanyireka.blog.hu
http://m.cdn.blog.hu/ha/harsanyireka/image/cc-by-sa3s_1.jpg
https://harsanyireka.blog.hu/2014/06/12/low-tech_szenzorok_es_aktuatorok_c_konyv
04. Low-tech szenzorok és aktuátorok c. könyv
2014-06-12T15:00:44+02:00
2014-06-12T15:00:44+02:00
harsanyireka
https://blog.hu/user/434264
<p><span>Ebben a leckében játékok belsejében lévő alkatrészeket veszünk sorra, amiket később is tudunk hasznosítani, mivel némelyiket Arduinoval is összeköthetünk.<br /></span></p>
<p><span>Ez a fejezet <strong>Usman Haque és Somlai-Fischer Szabolcs: Low tech sensors and actuators</strong> c. könyvén alapul. </span></p>
<p><img src="https://m.blog.hu/ha/harsanyireka/image/4.0.lowtech-sensors-and-actuators.jpg" alt="4.0.lowtech-sensors-and-actuators.jpg" class="imgnotext" width="285" height="364" /></p>
<p><span>Weboldala: <a href="http://lowtech.propositions.org.uk/">http://lowtech.propositions.org.uk/</a> </span></p>
<p><span>Itt elérhető az eredeti könyv pdf formátumban és a hozzá tartozó videók is. </span></p>
<p><span>By-Nc-Sa licenc alatt: <a href="http://creativecommons.org/licenses/by-nc-sa/2.5/">http://creativecommons.org/licenses/by-nc-sa/2.5/</a> <br /> Videója: <a href="https://www.youtube.com/watch?feature=player_detailpage&v=FBLuBi-rVT8">https://www.youtube.com/watch?feature=player_detailpage&v=FBLuBi-rVT8</a></span></p>
<p> </p>
<p><em>©2005 Usman Haque & Adam Somlai-Fischer, </em></p>
<p><em>info@haque.co.uk / studio@aether.hu</em></p>
<p><em>This work is released under the Creative Commons Attribution - ShareAlike License.</em></p>
<p> </p>
<p><span>Ebben az alfejezetben olyan könnyen és olcsón beszerezhető eszközökről vagy játékokról lesz szó, amelyek számunkra hasznos alkatrészeket tartalmaznak, programozás nélkül is működnek. A low tech ebben az esetben egyszerű, kisfeszültségű áramköröket jelent. -</span></p>
<p><span>Az első részben komplett rendszereket rakunk össze, a második részben szétszedett játékokból és eszközökből készítünk új áramköröket.</span></p>
<h2>4.1.1. ÖSSZETETT RENDSZEREK ÉPÍTÉSE</h2>
<h4><span>4.1.1.1. Hanggal távirányított lézer</span></h4>
<p><span>Eszközök: walkie-talkie, hangérzékeny macska, lézer mutatópálca.</span></p>
<p><span>A macskából kiszerelt mikrofont a walkie-talkie hangszórójára helyezzük, hogy érzékelje a másik, távol lévő walkie-talkie-ból jövő hangot. A LED-et a relén keresztül a lézeres mutatópálcához kötjük. Így létrehoztunk egy olyan összetett rendszert, ahol egy másik környezetből jövő távoli hang be tudja kapcsolni a közelünkben lévő lézert, ekkor a LED is felkapcsol (ha ezt kivesszük az áramkörből, tovább kitart majd az elem).</span> </p>
<p><span><img src="https://m.blog.hu/ha/harsanyireka/image/4.1.1.jpg" alt="4.1.1.jpg" class="imgnotext" /></span></p>
<p><span><img src="https://m.blog.hu/ha/harsanyireka/image/4.1.2..jpg" alt="4.1.2..jpg" class="imgnotext" /></span></p>
<h4><span>4.1.1.2. Érintésre induló, többhangos rendszer (komparátorral)</span></h4>
<p><span>Eszközök: hangérzékeny macska, LED mátrix panel és MP3 lejátszó</span></p>
<p><span>A hangérzékeny macskába számos különböző tárgyat szereltek be, de a borítás megvédi őket, pl. a hangérzékelő szenzort, ami a borítás nélkül ideális érintésszenzorrá válhat. Ezeket a LED mátrix bemenetére rögzítjük, amelynek a kimenete majd az MP3 lejátszónak küld jelet, ami ezáltal a különböző érintésszenzorok megnyomására különböző hangmintákat játszik le. Ez utóbbi attól függ, milyen sorrendben nyomkodjuk a szenzorokat.</span></p>
<p><span> <img src="https://m.blog.hu/ha/harsanyireka/image/4.2.1..jpg" alt="4.2.1..jpg" class="imgnotext" /></span></p>
<h4><span>4.1.1.3. Önmagát árammal ellátó, távirányított lépésérzékelő</span></h4>
<p><span>Eszközök: mechanikus elemlámpa, walkie-talkie és hangérzékeny macska</span></p>
<p><span>Ez az összetett rendszer valamilyen mechanikus erővel aktiválható, pl. rálép valaki, szélre vagy vízlöketre, amire rádiójelet küld a fogadó egységhez. Mindehhez nincs szükség elemre, mert az áramot mechanikus erő állítja elő. A vevőre bármit szerelhetünk, így ha az megkapja a rádiójelet, lezajlik a folyamat.</span></p>
<p><span> <img src="https://m.blog.hu/ha/harsanyireka/image/4.3.1..jpg" alt="4.3.1..jpg" class="imgnotext" /></span></p>
<p><span>Kezdjük a macskával, szedjük szét és szereljük ki a szemeiből a LED-eket és a mikrofont, a hangszóróra most nem lesz szükség. Az egyik walkie-talkie-ból is szedjük ki az elemeket, és jegyezzük meg, hová voltak csatlakoztatva. Némelyiknek van Morse gombja, ami sípoló hangot vezérel. Ha van ilyen a walkie-talkie-n, véglegesen iktassuk ki, majd az alapgombot is, amelynek megnyomásával beszélni lehet. Szereljük szét a mechanikus elemlámpát, és az azt árammal ellátó drótokat szereljük át a walkie-talkie-ra, figyelve a polaritásra, és emlékezve, hogy az eredeti elem hogyan volt beszerelve. Így van egy olyan eszközünk, ami megnyomásra rádiójelet küld.</span></p>
<p><span>Most a macskából kiszedett mikrofont szereljük fel egy ragasztószalaggal a még sértetlen walkie-talkie hangszórójára. A macska LED szemeit pl. egy relén keresztül vezérelhetjük.</span></p>
<p><span><img src="https://m.blog.hu/ha/harsanyireka/image/4.3.2..jpg" alt="4.3.2..jpg" class="imgnotext" /></span></p>
<p><span><img src="https://m.blog.hu/ha/harsanyireka/image/4.3.3..jpg" alt="4.3.3..jpg" class="imgnotext" /></span></p>
<p><span>A beszélésre szolgáló gombot ragasszuk le a walkie-talkie-n és az elem helyére kössük be a mechanikus elemlámpa áramellátó drótjait.</span></p>
<p><span><img src="https://m.blog.hu/ha/harsanyireka/image/4.3.4.jpg" alt="4.3.4.jpg" class="imgnotext" /></span></p>
<p><span>A macska szenzora érzékeli a walkie-talkie-ból érkező hangokat.</span></p>
<h4><span>4.1.1.4. Hely feltérképező lézer</span></h4>
<p><span>Eszközök: távirányítós autó és lézeres mutatópálca</span></p>
<p><span>A sötét térben gyorsan forgó lézerpont a falon egy fénycsíkot képes létrehozni, ami megtörik a sarkokon, így kirajzolódik a tér. Egyszerre több tengely mentén mozgó csíkot is használhatunk a komplexebb látványhoz.</span></p>
<p><span><img src="https://m.blog.hu/ha/harsanyireka/image/4.4.1..jpg" alt="4.4.1..jpg" class="imgnotext" /></span></p>
<p> </p>
<p><img src="https://m.blog.hu/ha/harsanyireka/image/4.4.2..jpg" alt="4.4.2..jpg" class="imgnotext" /></p>
<p> </p>
<p><span>Összerakása nagyon egyszerű, nincs szükség elektronikus szerelésre, mivel csak az autó kerekére kell ragasztószalagozni a lézer mutatópálcát. Több autót is használhatunk, ha összeragasztószalagozzuk őket. Az alábbi képeken a kerekek fixen állnak és az autók teste forog a rászerelt lézerrel.</span></p>
<p><span><img src="https://m.blog.hu/ha/harsanyireka/image/4.4.3..jpg" alt="4.4.3..jpg" class="imgnotext" /></span></p>
<p><span><img src="https://m.blog.hu/ha/harsanyireka/image/4.4.4..jpg" alt="4.4.4..jpg" class="imgnotext" /></span></p>
<p><span><img src="https://m.blog.hu/ha/harsanyireka/image/4.4.5..jpg" alt="4.4.5..jpg" class="imgnotext" /></span></p>
<p><span><img src="https://m.blog.hu/ha/harsanyireka/image/4.4.6..jpg" alt="4.4.6..jpg" class="imgnotext" /> </span></p>
<h4><span>4.1.1.5. Testre reagáló lézer</span></h4>
<p><span>Eszközök: tank, hangérzékeny macska, relé és lézer mutatópálca</span></p>
<p><span><img src="https://m.blog.hu/ha/harsanyireka/image/4.5.1..jpg" alt="4.5.1..jpg" class="imgnotext" /></span></p>
<p><span>A képen az <strong>n</strong> szenzor mutatja az infravörös LED diódát és a közelében lévő kezet, az <strong>o</strong> egy játéktank, ami az oldalán fekszik, a <strong>q</strong> a macska, ami a relét indítja el (ez a <strong>p)</strong>, így bekapcsol a lézer, ami az <strong>r</strong>.</span></p>
<p><span><img src="https://m.blog.hu/ha/harsanyireka/image/4.5.2..jpg" alt="4.5.2..jpg" class="imgnotext" /></span></p>
<p><span>Az <strong>s</strong> az infrafény, ami felé a kéz közeledik, ami bekapcsolja a<strong> t</strong> jelzésű tankot, amely vibrálni kezd. Ez aktiválja a macska LED szemeit (<strong>u)</strong> és egyúttal a relét is, ez utóbbi bekapcsolja a <strong>z</strong> jelzésű lézert.</span></p>
<p><span>Egy közelebbi kép:</span></p>
<p><span><img src="https://m.blog.hu/ha/harsanyireka/image/4.5.3..jpg" alt="4.5.3..jpg" class="imgnotext" /></span></p>
<p><strong><span>w</span></strong><span> – a két infra LED, <strong>x</strong> – a korábban csatlakoztatott gomb, <strong>y</strong> – a macskából kiszerelt mikrofon, amit arra használunk, hogy érzékelje a tank vibrálását, <strong>z</strong> – a macska által bekapcsolt relé és az utána kötött lézerfény.</span></p>
<p><span> </span></p>
<h2>4.1.2. EGYEDI JÁTÉKOK ÉS SZERKENTYŰK BELSEJE</h2>
<p><span>Most nézzük meg, milyen alkatrészekből állnak ezek a játékok.</span></p>
<h4><span>4.1.2.1. Relé</span></h4>
<p><span>LEÍRÁS</span></p>
<p><span>Az egyik legfontosabb alkatrész a használtak közül, lehetővé teszi, hogy különálló eszközöket összekössünk anélkül, hogy elrontsuk őket. A relé lényegében egy „kapcsoló”, ami, ha áramot kap a bemenetén, akkor bezár egy kapcsolót a kimenetén. Ez a legjobb útja annak, hogy vezéreljünk egy eszközt egy másikon keresztül, mivel némelyik analóg szenzor nagyon érzékeny, és ha közvetlenül összekötjük őket, annak előre nem látható következménye lehet. Szinte minden összetett rendszernél használtjuk.</span></p>
<p><span> </span></p>
<p><span>MÓDSZER</span></p>
<p><span>Az indító eszköz kimenetét a relé bemenetéhez kell kötni, a kimenetére pedig annak az eszköznek a bemenete kerül, amit el akarunk indítani. A lábak funkciója relénként eltérő lehet, némelyiknek három kimeneti lába van, egy föld és kettő másik, ahol a bejövő jeltől függően nyit vagy zár az áramkör, illetve van olyan, aminek 4 kimeneti lába van, mely páronként nyit vagy zár, ha áram érkezik a bemeneti lábára. Általában kisfeszültségű relét használunk. Érdemes megnézni az adatlapját, hogy ne kelljen annyi verziót kipróbálni. A képen a kis fekete bal oldali hasáb az.</span></p>
<p><span> </span></p>
<p><span>BEMENET</span></p>
<p><span>Elektromosság (digitális) – általában 3–24 volt</span></p>
<p><span> </span></p>
<p><span>KIMENET</span></p>
<p><span>Kapcsoló (digitális) – ki vagy be állapot</span></p>
<p><span><img src="https://m.blog.hu/ha/harsanyireka/image/4.6.1..jpg" alt="4.6.1..jpg" class="imgnotext" /></span></p>
<p> </p>
<p> </p>
<h4><span>4.1.2.2. Hangérzékeny macska</span></h4>
<p><span>LEÍRÁS</span></p>
<p><span>Hasznos játék, mivel könnyen lehet vele hangra reagáló és világtó dolgokat készíteni. Például tapsra bekapcsolódó vagy hangos léptekre reagáló fényt is alkothatunk vele.</span></p>
<p><span> </span></p>
<p><span>MÓDSZER</span></p>
<p><span>A példánkban használt hangérzékelős macska szemei villogni kezdenek és hangosan nyávog, ha a közelében erős hangot, pl. tapsot érzékel. Szedjük szét a játékot, vigyázva a mikrofonra. A szemeit használhatjuk elektromos kimeneteknél, pl. jelzőfényként. a mikrofont pedig hangérzékelőként bármilyen eszköz, pl. motor vezérlésére.</span></p>
<p><span> </span></p>
<p><span>BEMENET</span></p>
<p><span>Hang (analóg) – taps, kiabálás, bútortologatás</span></p>
<p><span>Érintés (analóg) – ütés, lépés</span></p>
<p><span> </span></p>
<p><span>KIMENET</span></p>
<p><span>Fény (digitális) – LED szemek villognak</span></p>
<p><span>Hang – nyávogás</span></p>
<p><span>Elektromosság (digitális) – feszültség halad át a LED-eken</span></p>
<p><span><img src="https://m.blog.hu/ha/harsanyireka/image/4.7.1..jpg" alt="4.7.1..jpg" class="imgnotext" /></span></p>
<p><span><img src="https://m.blog.hu/ha/harsanyireka/image/4.7.2..jpg" alt="4.7.2..jpg" class="imgnotext" /></span></p>
<p><span><img src="https://m.blog.hu/ha/harsanyireka/image/4.7.3..jpg" alt="4.7.3..jpg" class="imgnotext" /> </span><span> </span></p>
<p><span>SZÉTSZERELÉSE</span></p>
<p><span>A szőrburok alatt a dobozban vannak a szenzorok, ezt kell óvatosan felnyitni, majd ellenőrizni, hogy működik-e még, ha nem, elszakadt valami.</span> </p>
<p><span><img src="https://m.blog.hu/ha/harsanyireka/image/4.7.4..jpg" alt="4.7.4..jpg" class="imgnotext" /></span></p>
<p><img src="https://m.blog.hu/ha/harsanyireka/image/4.7.6..jpg" alt="4.7.6..jpg" class="imgnotext" /></p>
<p><span><img src="https://m.blog.hu/ha/harsanyireka/image/4.7.5..jpg" alt="4.7.5..jpg" class="imgnotext" /></span></p>
<p><img src="https://m.blog.hu/ha/harsanyireka/image/4.7.7..jpg" alt="4.7.7..jpg" class="imgnotext" /></p>
<p><img src="https://m.blog.hu/ha/harsanyireka/image/4.7.8..jpg" alt="4.7.8..jpg" class="imgnotext" /></p>
<p><span><img src="https://m.blog.hu/ha/harsanyireka/image/4.7.9..jpg" alt="4.7.9..jpg" class="imgnotext" /><br /></span></p>
<p><span>A LED-eket ki kell húzni a fejéből és a dobozból kiszedni az elektronikát: <strong>a</strong> – elem, <strong>b</strong> – hangszóró, <strong>c </strong>– LED-ek, <strong>d</strong> – mikrofon.</span></p>
<p><span><img src="https://m.blog.hu/ha/harsanyireka/image/4.7.10..jpg" alt="4.7.10..jpg" class="imgnotext" /></span></p>
<p><span><img src="https://m.blog.hu/ha/harsanyireka/image/4.7.11..jpg" alt="4.7.11..jpg" class="imgnotext" /> </span></p>
<p><span>Ha közelebbről megnézzük, találunk benne egy integrált áramkört, mely az interakciót vezérli. Az az a zöld tábla, amire az összes kábel rá van kötve. Amit mikrofonnak neveztünk, az nem igazán mikorofon, hanem sokkal inkább rezgésérzékelő, de mivel nagyon érzékeny. a levegő mozgását is észleli. A következő dolgokra lehet használni: A bemenetén a közvetlen környezetében érzékelni hangot, vagy egy eszközre szerelve az abból jövö hangot. A kimenetén villogtatni a LED-et, nyávogó hangot lejátszani, vagy a LED feszültségével beindítani egyéb eszközöket.</span></p>
<p><span><img src="https://m.blog.hu/ha/harsanyireka/image/4.7.12..jpg" alt="4.7.12..jpg" class="imgnotext" /></span></p>
<p><img src="https://m.blog.hu/ha/harsanyireka/image/4.7.13..jpg" alt="4.7.13..jpg" class="imgnotext" /> </p>
<h4><span>4.1.2.3. Elemlámpa</span></h4>
<p><span>LEÍRÁS</span></p>
<p><span>Manapság sok olyan, könnyen elérhető eszköz van, ami zöld energiával működik, pl. napelemes mobiltöltő. Ezeket az eszközöket felhasználhatjuk projektünk áramellátására. Attól függően, hogy hogyan működnek, reagálhatnak kézmozgásra, lépésre, szélre vagy vízsugárra stb.</span></p>
<p><span> </span></p>
<p><span>MÓDSZER</span></p>
<p><span>Olyan eszközre van szükség, ami nem elemmel működik és kézmozgással generál áramot. Mi egy elemlámpát használtunk, melynek ha folyamatosan nyomkodjuk a nyelét, akkor világítanak a LED-jei. Ezeket a LED-eket lecserélhetjük a saját rendszerünkre.</span></p>
<p><span> </span></p>
<p><span>BEMENET</span></p>
<p><span>Mozgás (analóg) – általában tengely és lendkerék.</span></p>
<p><span> </span></p>
<p><span>KIMENET</span></p>
<p><span>Fény (digitális) – feszültség megy a vezetéken át a LED-ekhez (pozitív = piros drót).</span></p>
<p><span> </span></p>
<p><span>SZÉTSZERELÉSE</span></p>
<p><span>Viszonylag egyszerű, de nagyon oda kell figyelni, hogy az áramkört ne tegyük tönkre. Ezért jobb, ha nem szedjük szét a burkolatot, csak a LED-eket szereljük ki. Ehhez kell kötni saját rendszerünket, és meg kell tartani az áramgeneráló mechanikát. Alternatív megoldásként relét is vezérelhetünk ezzel a feszültséggel. Ha építünk neki speciális talpat, akár taposó kapcsolóként is működtethető (utolsó kép).</span></p>
<p><span><img src="https://m.blog.hu/ha/harsanyireka/image/4.8.1..jpg" alt="4.8.1..jpg" class="imgnotext" width="204" height="152" /></span></p>
<p><span><img src="https://m.blog.hu/ha/harsanyireka/image/4.8.2..jpg" alt="4.8.2..jpg" class="imgnotext" /> </span></p>
<p><span><img src="https://m.blog.hu/ha/harsanyireka/image/4.8.3..jpg" alt="4.8.3..jpg" class="imgnotext" /> </span></p>
<h4><span>4.1.2.4. LED mátrix </span></h4>
<p><span>LEÍRÁS</span></p>
<p><span>A LED mátrix egy olyan eszköz, amit gyakran láthatunk boltok kirakatában, különböző szövegek futnak rajta. Manapság olcsó, bár az általunk használtak közül ez a legdrágább alkatrész. Nagyon hasznos, pl. bemenetén át vezérelve betűket, szövegeket jeleníthetünk meg a kimenetén, de szekvenszerként (olyan elektronikus eszköz, ami egymás után sorozatban következő utasítások végrehajtására alkalmas) is működhet, ha előre programozott mintákkal vezérlünk eszközöket, és végül komparátorként is használhatjuk. A komparátor egy összehasonlító áramkör, mely két bejövő értéket hasonlít össze. Lehet analóg (kimeneti érték: referencia értékhez képest mér), vagy digitális (kimeneti érték: kisebb, egyenlő, nagyobb lehet). </span></p>
<p><span> </span></p>
<p><span>MÓDSZER</span></p>
<p><span>Ideális esetben olyan LED mátrixunk van, ami billentyűzettel rendelkezik, és saját üzenetet lehet beprogramozni neki. Mivel kimeneti eszköz, a LED-eket hozzá tudjuk kötni a második rendszerhez, hogy vezérelni tudjuk velük. Mivel komparátorként használjuk, egy másik eszközt is közvetlenül a billentyűzetbe kötünk, tehát ennek kimenete manipulálja a LED kijelzőn megjelenő mintát.</span></p>
<p><span> </span></p>
<p><span>BEMENET</span></p>
<p><span>Relé (digitális) – a LED mátrix bemenete elé kössünk egy relét, hogy megóvjuk annak belső áramköreit.</span></p>
<p><span> </span></p>
<p><span>KIMENET</span></p>
<p><span>Fényminta (digitális) – LED kijelzőn megjelenő betűk, grafikák.</span></p>
<p><span>Elektromosság (digitális) – feszültség megy a vezetéken át a LED-ekhez és tovább.</span> </p>
<p><span><img src="https://m.blog.hu/ha/harsanyireka/image/4.9.1..jpg" alt="4.9.1..jpg" class="imgnotext" /></span></p>
<p><span><img src="https://m.blog.hu/ha/harsanyireka/image/4.9.2..jpg" alt="4.9.2..jpg" class="imgnotext" /></span></p>
<p><span>SZÉTSZERELÉSE</span></p>
<p><span>Csavarozzuk le a hátulját és óvatosan húzzuk szét a két burkolót. Egy drót fut az elemcsatlakozótól a LED-ekig. Vigyázzunk, hogy ne szakadjon el! A kijelző hátulján látható, hogy sorokba és oszlopokba vannak rendezve a LED-ek. Ezekre a pontokra tudjuk forrasztani azokat az eszközöket, amiket vezérelni akarunk velük. A LED negatív lábához kell kötni az általa vezérelni kívánt eszközt, azon az oldalon kicsit le van csapva a LED széle. Célszerű a kettő közé relét szerelni.</span></p>
<p><span> <img src="https://m.blog.hu/ha/harsanyireka/image/4.9.3..jpg" alt="4.9.3..jpg" class="imgnotext" /></span></p>
<p><span><img src="https://m.blog.hu/ha/harsanyireka/image/4.9.4..jpg" alt="4.9.4..jpg" class="imgnotext" /></span></p>
<p><img src="https://m.blog.hu/ha/harsanyireka/image/4.9.5..jpg" alt="4.9.5..jpg" class="imgnotext" /></p>
<p><img src="https://m.blog.hu/ha/harsanyireka/image/4.9.6..jpg" alt="4.9.6..jpg" class="imgnotext" /> </p>
<p><span>Komplexebb módszer, ha egy relén keresztül egy másik eszköz bemenetébe kötjük a kijelző kimenetét, és szintén egy relén át bekötjük a másik eszköz kimenetét a LED mátrix billentyűzetébe, így a megjelenő üzenetet valós időben generálhatjuk.</span></p>
<p><span>Először is a billentyűzetet kell megtalálnunk. Általában ez egy lógó gumilemez lazán ráhelyezve a zöld nyomtatott áramköri lemezre. Ezen keressük meg a betűhöz tartozó részt. Emlékezzünk rá, hogy milyen irányba kell visszatenni. Amikor a betű gombja nincs megnyomva, akkor az alatta lévő két drót nem ér össze. Ezeket nem kell forrasztani, csak a reléből futó drótokat kell ugyanoda helyezni. Fontos, hogy egy drót csak egy érintkezőhöz érjen hozzá! Ezután ragasszunk rá valami puha anyagot, hogy megvédjük a nyomtatott áramkört.</span> </p>
<p><span><span><img src="https://m.blog.hu/ha/harsanyireka/image/4.9.7..jpg" alt="4.9.7..jpg" class="imgnotext" width="207" height="190" /></span></span></p>
<p><span><img src="https://m.blog.hu/ha/harsanyireka/image/4.9.8..jpg" alt="4.9.8..jpg" class="imgnotext" /></span></p>
<p><span><img src="https://m.blog.hu/ha/harsanyireka/image/4.9.9..jpg" alt="4.9.9..jpg" class="imgnotext" /></span></p>
<h4><span>4.1.2.5. Lézeres mutatópálca</span></h4>
<p><span>LEÍRÁS</span></p>
<p><span>Ezzel az eszközzel távolról fénypont hozható létre egy tárgyon. Alternatív megoldásként ráragaszthatjuk mozgó vagy forgó tárgyakra, hogy fény-vonalat rajzoljunk vele.</span></p>
<p><span> </span></p>
<p><span>MÓDSZER</span></p>
<p><span>Az alkotó részein belül valószínűleg nincs borítás. Könnyű épségben tartani és egyszerűen csatlakoztatható egy relén át. Távirányítós autó kerekére szerelve fény-vonalakat tud rajzolni.</span></p>
<p><span> </span></p>
<p><span>BEMENET</span></p>
<p><span>Elektromosság (digitális) – 4,5 V 3 db ceruzaelemből.</span></p>
<p><span> </span></p>
<p><span>KIMENET</span></p>
<p><span>Lézer fény (digitális) – pontot világít tárgyakra.</span> </p>
<p><img src="https://m.blog.hu/ha/harsanyireka/image/4.10.1.png" alt="4.10.1.png" class="imgnotext picomat-image" /></p>
<p><img src="https://m.blog.hu/ha/harsanyireka/image/4.10.2..jpg" alt="4.10.2..jpg" class="imgnotext picomat-image" /></p>
<p><img src="https://m.blog.hu/ha/harsanyireka/image/4.10.3..jpg" alt="4.10.3..jpg" class="imgnotext picomat-image" /> </p>
<h4><span>4.1.2.6. Rulett kerék</span></h4>
<p><span>LEÍRÁS</span></p>
<p><span>Ál-random kimenettel rendelkezik – hasznos más eszközök irányításánál.</span></p>
<p><span> </span></p>
<p><span>MÓDSZER</span></p>
<p><span>Relén keresztül interfésznek is használható, vagy ha a LED-ekből tovább vezetjük az áramot, már eszközök is vezérelhetők vele. Bemenetére szintén kell egy eszköz relén át, amivel a forgás szekvencia elindítható.</span></p>
<p><span> </span></p>
<p><span>BEMENET</span></p>
<p><span>Elektromosság (digitális) – 4,5 V DC (egyenáramú).</span></p>
<p><span>Nyomógomb (digitális) – elindítja a szekvenciát.</span></p>
<p><span> </span></p>
<p><span>KIMENET</span></p>
<p><span>LED (digitális) – LED kimenetek sorozata, pár másodperc után megáll az egyiken.</span></p>
<p><span> <img src="https://m.blog.hu/ha/harsanyireka/image/4.11.1..jpg" alt="4.11.1..jpg" class="imgnotext picomat-image" /></span></p>
<p><img src="https://m.blog.hu/ha/harsanyireka/image/4.11.2..jpg" alt="4.11.2..jpg" class="imgnotext picomat-image" /> </p>
<h4><span>4.1.2.6. MP3 lejátszó</span></h4>
<p><span>LEÍRÁS</span></p>
<p><span>Indításra előre felvett hangot játszik le.</span></p>
<p><span> </span></p>
<p><span>MÓDSZER</span></p>
<p><span>MP3 audio fájlt kell rátölteni. Egy relén keresztül lehet a bemenetén át vezérelni a lejátszást vagy megállítást, ami vezérelhet egy hangszórót vagy fejhallgatót.</span></p>
<p><span> </span></p>
<p><span>BEMENET</span></p>
<p><span>Elektromosság (digitális) – 1,5 V DC.</span></p>
<p><span>Nyomógomb (digitális) – indítás, pillanat állj vagy zenekiválasztás.</span></p>
<p><span> </span></p>
<p><span>KIMENET</span></p>
<p><span>Hang (digitális) – hangszóró vagy fejhallgató kell hozzá.</span></p>
<p><span><img src="https://m.blog.hu/ha/harsanyireka/image/4.12.1..jpg" alt="4.12.1..jpg" class="imgnotext" /></span></p>
<p> </p>
<p> </p>
<h4><span>4.1.2.7. Vízzel működő digitális óra</span></h4>
<p><span>LEÍRÁS</span></p>
<p><span>Vízzel állít elő elektromosságot – nem kell hozzá elem.</span></p>
<p><span> </span></p>
<p><span>MÓDSZER</span></p>
<p><span>Az elem helyére kell bekötni. Alacsony feszültséget produkál.</span></p>
<p><span> </span></p>
<p><span>BEMENET</span></p>
<p><span>Víz (analóg) – vizet engedünk a tartályba.</span></p>
<p><span> </span></p>
<p><span>KIMENET</span></p>
<p><span>Elektromosság (analóg) – kb. 50 mV.</span> </p>
<p><span><img src="https://m.blog.hu/ha/harsanyireka/image/4.13.1..jpg" alt="4.13.1..jpg" class="imgnotext" /><br /></span></p>
<h4><span>4.1.2.8. USB kamera</span></h4>
<p><span>LEÍRÁS</span></p>
<p><span>Olcsó USB kamera. Az interakció részeként embereket és tárgyak fotózhatunk.</span></p>
<p><span> </span></p>
<p><span>MÓDSZER</span></p>
<p><span>A zárkioldó gombot használhatjuk relén keresztül, mint bemenetet. Később a képeket USB-n letölthetjük.</span></p>
<p><span> </span></p>
<p><span>BEMENET</span></p>
<p><span>Nyomógomb (digitális) – zárkioldó gomb.</span></p>
<p><span> </span></p>
<p><span>KIMENET</span></p>
<p><span>Fotó (digitális) – kb. 320 x 240 pixel, kis felbontású képek.</span></p>
<p><span> <img src="https://m.blog.hu/ha/harsanyireka/image/4.14.1..jpg" alt="4.14.1..jpg" class="imgnotext" /></span></p>
<p><span> </span></p>
<h4><span>4.1.2.9. Napelemmel működő kerti lámpa</span></h4>
<p><span>LEÍRÁS</span></p>
<p><span>„Napfény-érzékelőként” és áramforrásként is használható.</span></p>
<p><span> </span></p>
<p><span>MÓDSZER</span></p>
<p><span>A LED-ből kössük össze egy relén keresztül egy másik eszközzel.</span></p>
<p><span> </span></p>
<p><span>BEMENET</span></p>
<p><span>Napfény (analóg) – kapcsoló.</span></p>
<p><span> </span></p>
<p><span>KIMENET</span></p>
<p><span>Elektromosság (digitális) – kb. 3 V.</span></p>
<p><span> <img src="https://m.blog.hu/ha/harsanyireka/image/4.15.1..jpg" alt="4.15.1..jpg" class="imgnotext" /></span></p>
<p><span> </span></p>
<h4><span>4.1.2.10. Ködgép</span></h4>
<p><span>LEÍRÁS</span></p>
<p><span>Hasznos „atmoszféra” létrehozásánál, vagy, hogy felfogja a fényalapú kimeneteket.</span></p>
<p><span> </span></p>
<p><span>MÓDSZER</span></p>
<p><span>Használd lézerfénnyel vagy vetítő eszközzel együtt.</span></p>
<p><span> </span></p>
<p><span>BEMENET</span></p>
<p><span>Elektromosság (digitális) – hálózati áramot egyenárammá alakító adapter. Egy gyűjtőedényben a vízfelszínen ki-bekapcsol az áram.</span></p>
<p><span> </span></p>
<p><span>KIMENET</span></p>
<p><span>Köd (analóg) – a gyűjtőedény pereménél bukkan fel.</span></p>
<p><span> <img src="https://m.blog.hu/ha/harsanyireka/image/4.16.1..jpg" alt="4.16.1..jpg" class="imgnotext" /></span></p>
<p> </p>
<h4><span>4.1.2.11. Infravörös játékpisztoly, távolságérzékelés</span></h4>
<p><span>LEÍRÁS</span></p>
<p><span>A távolság érzékelése nagyon hasznos, elmenő embereket, mozgó tárgyakat érzékelhetünk. Mivel nincs szükség ehhez érintkezésre, ezért a mechanikus meghibásodás kizárt. Általában a kereskedelmi forgalomban kapható távolság szenzorok ultrahanggal működnek, a visszaverődő hangot és a közben eltelt idő nagyságát figyelik (mint a denevérek), ezt számolják át távolsággá. Álalában arra használják őket, hogy megtudják egy tárgy vagy személy adott helyen van-e, vagy nincs ott semmi. Ezt a funkciót most egy olcsóbb szenzorral hozzuk létre.</span></p>
<p><span> </span></p>
<p><span>MÓDSZER</span></p>
<p><span>Infravörös fény visszaverése:</span></p>
<p><span>A legegyszerűbb módja a távolság mérésének az infra LED és mellé egy infravörös vevőegyüttes alkalmazása. Az infrafény visszaverődik a tárgyról, tehát ugyanúgy megvilágítja, mint bármilyen fény, csak ezt nem látjuk. Manapság léteznek olyan játékok, melyekbe ezek vannak beszerelve, pl. játékpisztolyok, ahol mindkettő adóval és vevővel is rendelkezik. Mi egy játéktankot szereltünk szét.</span></p>
<p><span>A LED-et és a fogadót egymással szemben kell elhelyezni, különben nem látják egymást, így két eszközre lesz szükségünk. Az első képen kék színnel jeleztük az infra fényt, mivel az emberi szem számára láthatatlan, de pl. mobil kamerán keresztül kék vagy piros fénye szokott lenni. Ez hasznos lehet, ha le akarjuk követni, hol van.</span></p>
<p><span> <img src="https://m.blog.hu/ha/harsanyireka/image/4.17.1..jpg" alt="4.17.1..jpg" class="imgnotext" /></span></p>
<p><span><img src="https://m.blog.hu/ha/harsanyireka/image/4.17.2..jpg" alt="4.17.2..jpg" class="imgnotext" /></span></p>
<p><span>BEMENET</span></p>
<p><span>Nem átlátszó dolgok távolságát méri, pl. mozgó dolgokét is.</span></p>
<p><span> </span></p>
<p><span>KIMENET</span></p>
<p><span>Vibrálás, mozgás, LED.</span></p>
<p><span> </span></p>
<p><span>SZÉTSZERELÉSE</span></p>
<p><span>Ebben a példában egy kis távirányítású játékot használunk, aminek egy infravörös fegyvere van, mellyel fogja az ugyanolyan játékból jövő jelet és lő rá.</span></p>
<p><span> </span></p>
<p><span>Mit kell tennünk:</span></p>
<p><span>- szedjük le a borítást, hogy hozzáférjünk a távirányítóhoz és az infra eszközökhöz,</span></p>
<p><span>- a kocsit és az infra LED-et helyezzük ugyanabba az irányba,</span></p>
<p><span>- találjuk ki, hogyan lehetne folyamatosan lenyomva a távirányító gombja,</span></p>
<p><span>- találjunk ki egy interakciót, amit ezzel a jellel indítunk el.</span></p>
<p><span> </span></p>
<p><span>A tank:</span></p>
<p><span>A kis LED-ek lehetnek küldők vagy fogadók – <strong>a, b</strong>. Néha fényes átlátszó fekete lappal vannak fedve. Áramellátás – <strong>c</strong>, itt lehet újratölteni.</span></p>
<p><img src="https://m.blog.hu/ha/harsanyireka/image/4.17.3..jpg" alt="4.17.3..jpg" class="imgnotext picomat-image" /></p>
<p><img src="https://m.blog.hu/ha/harsanyireka/image/4.17.4..jpg" alt="4.17.4..jpg" class="imgnotext picomat-image" /></p>
<p><span>Szedjük le óvatosan a műanyag borítást – lehet, szét kell törni, mert általában ragasztottak –, majd nézzük meg, hogy az infra LED-hez futó drótok épek-e. A LED-ek helyét <strong>d, e</strong> mutatja.</span></p>
<p><span><img src="https://m.blog.hu/ha/harsanyireka/image/4.17.5..jpg" alt="4.17.5..jpg" class="imgnotext" /></span></p>
<p> </p>
<p><img src="https://m.blog.hu/ha/harsanyireka/image/4.17.6..jpg" alt="4.17.6..jpg" class="imgnotext" /></p>
<p><span>Szabadítsuk ki az infra fogadót, aminek három lába van –<strong> f</strong>. A sima LED-eknek kettő van. </span></p>
<p><span><img src="https://m.blog.hu/ha/harsanyireka/image/4.17.7..jpg" alt="4.17.7..jpg" class="imgnotext" /> </span></p>
<p><span>A dróton több dolgot találunk: <strong>g</strong> – infra vevő, <strong>h</strong> – infra adó, <strong>i </strong>– elemek.</span></p>
<p><span><img src="https://m.blog.hu/ha/harsanyireka/image/4.17.8..jpg" alt="4.17.8..jpg" class="imgnotext" /></span></p>
<p><span>A távirányító:</span></p>
<p><span>Először az <strong>a</strong>-val jelölt LED-eket keressük meg, b – a töltőegység, c – szintén a LED-ek. Ha felnyitjuk a burkolatot, könnyebb kiszedni őket.</span></p>
<p><span><img src="https://m.blog.hu/ha/harsanyireka/image/4.17.9.jpg" alt="4.17.9.jpg" class="imgnotext" /></span></p>
<p><span><img src="https://m.blog.hu/ha/harsanyireka/image/4.17.10..jpg" alt="4.17.10..jpg" class="imgnotext" /></span></p>
<p><span>Távolítsuk el a tokot, hogy hozzáférjünk a belső részekhez. Az elemet (<strong>h</strong>) ragasztószalagozzuk rá. Diódák – <strong>d, g</strong>. Hangszóró – <strong>f</strong> (ezt levághatjuk). Kis nyomógombok – <strong>e, i</strong>, ezekkel lehet a kocsi mozgását irányítani.</span> </p>
<p><span><img src="https://m.blog.hu/ha/harsanyireka/image/4.17.11..jpg" alt="4.17.11..jpg" class="imgnotext" /></span></p>
<p><span><img src="https://m.blog.hu/ha/harsanyireka/image/4.17.12..jpg" alt="4.17.12..jpg" class="imgnotext" /> </span></p>
<p><span>Fordítsuk meg a nyomtatott áramkört!</span></p>
<p><span>A <strong>j</strong> és <strong>k</strong> mutatják a nyomógombok hátulját, 4–4 lábat találunk. Ezekre forraszthatjuk az eszközöket, hogy vezérelni tudjuk őket. A nyomógombok két felső lábát kell használni hozzá – <strong>i, m</strong>.</span></p>
<p><span><img src="https://m.blog.hu/ha/harsanyireka/image/4.17.13..jpg" alt="4.17.13..jpg" class="imgnotext" /></span></p>
<p><span><img src="https://m.blog.hu/ha/harsanyireka/image/4.17.14..jpg" alt="4.17.14..jpg" class="imgnotext" /></span></p>
<p><span><img src="https://m.blog.hu/ha/harsanyireka/image/4.17.15..jpg" alt="4.17.15..jpg" class="imgnotext" /></span></p>
<p><span><img src="https://m.blog.hu/ha/harsanyireka/image/4.17.16..jpg" alt="4.17.16..jpg" class="imgnotext" /> </span></p>
<h4>4.1.2.12. Rádió-távirányítású autó</h4>
<p>LEÍRÁS</p>
<p>A rádió távirányítású autók már egy ideje körül vesznek minket, de az utóbbi időben megjelentek a nagyon olcsó, kis méretű verziói, amik általában nagyobb méretű és elemmel működő távirányítóval rendelkeznek. Olcsóságának és felépítésének köszönhetően ez a játék ideális a vezeték nélküli hálózattal való kísérletezéshez. Nem csak az autók, hanem minden rádió távirányítású kütyü alkalmas erre, mint a példákban is láthatod.</p>
<p>Bár azt gondolhatnánk, hogy ezek az autók nagyszerűek dolgok szállításához, a példákban inkább az interakcióra és a térrel összefüggő lehetőségekre fókuszálunk, így a tulajdonságait a alábbi szempontok szerint hack-keljük meg: <br /> - egyirányú rádió kommunikáció, 9 típusú üzenet küldésével<br /> - szerkezet, ami képes rezegni, forogni, drótot húzni</p>
<p>MÓDSZER</p>
<p>Ahhoz ,hogy létrehozzunk egy vezeték nélküli kapcsolatot, egyrészt meg kell hack-kelnünk a vezérlő szerkezetet, hogy irányítsa az általunk kitalált eseményt és az autót is. Ez egyszerűbb módszer, ha a motor rezgését vizsgáljuk, mint a MACSKA működésében. Haladóbb megoldás ha számos JELFOGÓt kötünk az autóra, ez bonyolultabb üzenetek küldését teszi lehetővé. </p>
<p>BEMENET</p>
<p>Elektromos áram: 3-6 Volt<br />Gombnyomás: 4 digitális és 2 kombinált 9 lehetőséget ad ki<br />Mozgás-forgás kombinációk: 0-0, 0-1, 0-2, 1-0, 1-1, 1-2, 2-0, 2-1, 2-2 </p>
<p>KIMENET</p>
<p>Rádió jelek<br />DC motor mozgás és irány<br />szervó motor pozíció<br />általános LEDek</p>
<p>SZÉTSZERELÉSE</p>
<p>Ebben a példában egy kis távirányítású tengeralattjárót használunk.</p>
<p>Mit kell tennünk:<br /> - szedjük le a vezérlőegység borítását és a motort vezérlő gombra forrasszunk drótokat (a)<br /> - figyeljük meg a másik egységben a motor vibrálását, miközben összeérintjük a vezérlőegységbe szerelt két drót végét.</p>
<p><img src="https://m.blog.hu/ha/harsanyireka/image/4.18.1..jpg" alt="4.18.1..jpg" class="imgnotext" /></p>
<p><img src="https://m.blog.hu/ha/harsanyireka/image/4.18.2..jpg" alt="4.18.2..jpg" class="imgnotext" /></p>
<p>Ezeket a drótokat egy JELFOGÓra is köthetjük, amire rászerelhetjük a saját áramkörünket is, amit így már rádiótávirányítással is indíthatunk. Illetve a többi gomb (mozgás-forgás) felhasználásával összetettebb interakciót hozhatunk létre. Akár logikai kapukkal is kísérletezhetünk.</p>
<p> </p>
<p><img src="https://m.blog.hu/ha/harsanyireka/image/4.18.3..jpg" alt="4.18.3..jpg" class="imgnotext" /></p>
<p><span> </span></p>
<p> </p>
<p><a title="Megosztom Facebookon!" href="https://www.facebook.com/sharer.php?api_key=120587281320910&locale=hu_HU&method=stream.share&u=https%3A%2F%2Fharsanyireka.blog.hu%2F2014%2F06%2F12%2Flow-tech_szenzorok_es_aktuatorok_c_konyv%3Futm_source%3Dbloghu_rss%26utm_medium%3Dfacebook%26utm_campaign%3Dblhshare"><img src="https://m.blog.hu/assets/frontend/img/rss/icon_facebook.png" alt="Megosztom Facebookon!"></a>
<a title="Megosztom Twitteren!" href="https://twitter.com/home?status=https%3A%2F%2Fharsanyireka.blog.hu%2F2014%2F06%2F12%2Flow-tech_szenzorok_es_aktuatorok_c_konyv%3Futm_source%3Dbloghu_rss"><img src="https://m.blog.hu/assets/frontend/img/rss/icon_twitter.png" alt="Megosztom Twitteren!"></a>
<a title="Megosztom Tumblren!" href="https://www.tumblr.com/share?v=3&u=https%3A%2F%2Fharsanyireka.blog.hu%2F2014%2F06%2F12%2Flow-tech_szenzorok_es_aktuatorok_c_konyv%3Futm_source%3Dbloghu_rss%26utm_medium%3Dtumblr%26utm_campaign%3Dblhshare&t=04. Low-tech szenzorok és aktuátorok c. könyv"><img src="https://m.blog.hu/assets/frontend/img/rss/icon_tumblr.png" alt="Megosztom Tumblren!"></a>
<a href="https://harsanyireka.blog.hu/2014/06/12/low-tech_szenzorok_es_aktuatorok_c_konyv#comments"><img class="item_ctp" src="https://harsanyireka.blog.hu/rss/image/post/id/6052913" border="0" /></a><br /></p>
szenzorok
aktuátorok
0
fizikai számítástechnika, arduino
https://harsanyireka.blog.hu
http://m.cdn.blog.hu/ha/harsanyireka/image/4.0.lowtech-sensors-and-actuators.jpg