Problem with comparison.
/Modules/Sensors/IRFEE01A/DOC/HTML/IRFEE01A.cs.html
0,0 → 1,515
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title> IRFEE01A </title>
<meta name="keywords" content="stavebnice MLAB univerzální moduly infračervený detektor infrared tykadlo">
<meta name="description" content="Projekt MLAB, Infračervný detektor překážek pro robota">
<!-- AUTOINCLUDE START "Page/Head.cs.ihtml" DO NOT REMOVE -->
<link rel="StyleSheet" href="../../../../../Web/CSS/MLAB.css" type="text/css" title="MLAB základní styl">
<link rel="StyleSheet" href="../../../../../Web/CSS/MLAB_Print.css" type="text/css" media="print">
<link rel="shortcut icon" type="image/x-icon" href="../../../../../Web/PIC/MLAB.ico">
<script type="text/javascript" src="../../../../../Web/JS/MLAB_Menu.js"></script>
<!-- AUTOINCLUDE END -->
</head>
 
<body lang="cs">
 
<!-- AUTOINCLUDE START "Page/Header.cs.ihtml" DO NOT REMOVE -->
<!-- ============== HLAVICKA ============== -->
<div class="Header">
<script type="text/javascript">
<!--
SetRelativePath("../../../../../");
DrawHeader();
// -->
</script>
<noscript>
<p><b> Pro zobrazení (vložení) hlavičky je potřeba JavaScript </b></p>
</noscript>
</div>
<!-- AUTOINCLUDE END -->
 
<!-- AUTOINCLUDE START "Page/Menu.cs.ihtml" DO NOT REMOVE -->
<!-- ============== MENU ============== -->
<div class="Menu">
<script type="text/javascript">
<!--
SetRelativePath("../../../../../");
DrawMenu();
// -->
</script>
<noscript>
<p><b> Pro zobrazení (vložení) menu je potřeba JavaScript </b></p>
</noscript>
</div>
<!-- AUTOINCLUDE END -->
 
<!-- ============== TEXT ============== -->
<div class="Text">
<p class="Title">
Infračervené tykadlo pro robota
</p>
<p class=Autor>
Milan Horkel
</p>
<p class="Subtitle">
Čidlo využívá modulované infračervené záření pro bezdotykovou detekci
předmětů. Je určeno zejména pro menší pohyblivé roboty jako náhrada
mechanických tykadel. Jádrem čidla je procesor řady ATtiny a přijímač
Ir pro dálkové ovládání. Modulace a průměrování signálu zajišťuje
zvýšenou odolnost proti rušení.
</p>
<p class="Subtitle">
<img width="327" height="105" src="IRFEE01A_Files/image001.jpg"
alt="Pohled na čidlo zhora">
</p>
<p class="Subtitle">
<img width="328" height="162" src="IRFEE01A_Files/image002.jpg"
alt="Pohled na čidlo ze strany">
</p>
<p>
<a href="../IRFEE01A.cs.pdf"><img class="NoBorder"
src="../../../../../Web/PIC/FileIco_PDF.ico"
alt="Acrobat">&nbsp;PDF verze</a>
</p>
<h1>Technické parametry </h1>
 
<table>
<tr>
<th> Parametr </th>
<th> Hodnota </th>
<th> Poznámka </th>
</tr>
<tr>
<td> Napájení </td>
<td> (2.7V&nbsp;..)&nbsp;3.6V&nbsp;..&nbsp;5V&nbsp;(..&nbsp;5.5V) </td>
<td> Zkontrolujte požadavky U1 a U2 </td>
</tr>
<tr>
<td> Spotřeba </td>
<td> 10mA&nbsp;/&nbsp;15mA </td>
<td> Při 5V v&nbsp;klidu a při detekci </td>
</tr>
<tr>
<td> Nosný kmitočet </td>
<td> 38kHz </td>
<td> Obvyklé hodnoty: 30, 33, 36, 38, 40, 56kHz </td>
</tr>
<tr>
<td> Dosah </td>
<td> Cca&nbsp;1m </td>
<td> Bez stínítka proti listu papíru A4 </td>
</tr>
<tr>
<td> Rychlost odezvy </td>
<td> 20ms&nbsp;/&nbsp;15ms </td>
<td> Aktivace a deaktivace </td>
</tr>
<tr>
<td> Rozměry </td>
<td> 35&nbsp;x&nbsp;15&nbsp;x&nbsp;15mm </td>
<td> Bez stínítka </td>
</tr>
</table>
<h1> Popis konstrukce </h1>
<h2> Úvodem </h2>
 
<p>
Aby mohl robot detekovat překážku aniž do ní narazí, potřebuje vhodné
čidlo. Tato konstrukce popisuje čidlo, které využívá odrazu
infračerveného záření od překážky.
</p>
<h2> Zapojení modulu </h2>
<p>
Srdcem čidla je obvod U1, přijímač infračerveného signálu a procesor
ATtiny, který zajišťuje inteligenci čidla.
</p>
<p>
<img width="588" height="396" src="IRFEE01A_Files/image003.png"
alt="Schéma zapojení čidla">
</p>
<p>
Infračervená dioda D2 vysílá modulovaný signál směrem k&nbsp;překážce.
Signál se od překážky odráží do přijímače U1. Procesor U2 generuje
vysílací signál pro diodu D2 a současně analyzuje přijímaný signál
z&nbsp;přijímače U1. Pokud se přijímaný signál <i>dostatečně</i>
shoduje s&nbsp;vysílaným signálem, je aktivován výstupní signál na
výstupu J2 a rozsvítí se indikační dioda D3.
</p>
<p>
R1 a C1 filtruje napájení pro přijímač infračerveného signálu U1, dioda
D1 je ochranná proti nechtěnému přepólování čidla. Čidlo je vybaveno
jedním upevňovacím šroubem.
</p>
<p>
Konektor J3 je standardní programovací konektor ATMEL ISP 6 PIN. Je
zapojen obvyklým způsobem. Do procesoru se musí nahrát ovládací program
přeložený pro příslušný nosný kmitočet použitého přijímače U1. Kmitočet
přijímače bývá uváděn v&nbsp;posledním dvojčíslí označení, zde tedy
38kHz.
</p>
<h2> Přijímač IR (obvod U1) </h2>
<p>
Tyto obvody jsou vyráběny pro přijímače dálkového ovládání rádií,
televizí a dalších komponent spotřební elektroniky.
</p>
<p>
<img width="386" height="195" src="IRFEE01A_Files/image004.png"
alt="Blokové schéma IR přijímače">
</p>
<p>
Sdružují v&nbsp;sobě přijímací fotodiodu, selektivní zesilovač
s&nbsp;proměnným ziskem a obvody pro demodulování signálu. Aby čidlo
fungovalo nezávisle na okolním osvětlení, je jeho pouzdro z&nbsp;černé
hmoty, která propouští je vybranou vlnovou délku infračerveného záření.
</p>
<p>
<img width="222" height="212" src="IRFEE01A_Files/image005.png"
alt="Závislost citlivosti na vlnové délce záření">
</p>
<p>
Dálkové ovládání používá spoustu přenosových kódů, ale drtivá většina
je založena na vysílání pulsů nosné frekvence řádu 30 až 50kHz.
Nejkratší přenesený impuls musí obsahovat alespoň 10 period nosného
kmitočtu. Pro optimální fungování přijímače je doporučeno, aby
přenášené impulsy byly dlouhé mezi 10 a 70 periodami nosného kmitočtu.
</p>
<p>
<img width="362" height="158" src="IRFEE01A_Files/image006.png"
alt="Testovací signál">
</p>
<p>
Čidla se vyrábějí pro různé frekvence nosného kmitočtu a mohou být lépe
nebo méně přizpůsobené pro použití konkrétního přenosového protokolu
(jedná se o kompromis mezi odolností vůči rušení a parametry
jednotlivých kódů). <i>Je třeba dát pozor na zapojení vývodů, existují
i typy, které mají prohozené napájecí vývody.</i>
</p>
<h2> Jaký použít IR přijímač? </h2>
<p>
Zdánlivě prostá otázka skrývá velkou záludnost. Záludnost spočívá
v&nbsp;tom, že některé přijímače IR signálu fungují dobře, jiné
mizerně. Platí zde že méně inteligence může být lépe.
</p>
<h3> TSOP34838 – špatná volba </h3>
<p>
Konkrétně přijímač TSOP34838 funguje tak, že s&nbsp;tím, jak se signál
zeslabuje zvyšuje svou citlivost až nakonec signál ztratí. Jenže pak je
třeba signál hodně zesílit, aby ho přijímač zase začal registrovat.
</p>
<p>
V&nbsp;praxi to pak vypadá tak, že čidlo nic nevidí dokud se překážka
velmi nepřiblíží a pak ji vidí dokud se velmi nevzdálí. Pro náš účel je
tato řada IR přijímačů nepoužitelná.
</p>
<h3> Jaký přijímač tedy použít? </h3>
<p>
Nevím. Přijímač, který mám v&nbsp;šuplíku na sobě nemá žádné rozumné
označení. Zato funguje jedna báseň. Překážku čidlo zaregistruje a zase
ztratí v&nbsp;prakticky stejné vzdálenosti. Příležitostně zkusím
nakoupit různé přijímače a otestovat jejich použitelnost.
</p>
<table>
<tr>
<th> Přijímač </th>
<th> Výrobce </th>
<th> Poznámka </th>
</tr>
<tr>
<td> TSOP34828 </td>
<td> Vishay </td>
<td> Má obrovskou hysterezi mezi zachycením signálu a jeho ztrátou </td>
</tr>
<tr>
<td> Neznámý </td>
<td> Osram? </td>
<td> Funguje výborně </td>
</tr>
</table>
<h2> Inteligence čidla </h2>
<p>
Pro detekci překážky by stačilo použít střídavý signál o vhodném
kmitočtu a přímo výstup IR přijímače. Takové řešení ale není příliš
odolné proti rušení, a kromě toho stejně potřebujeme nějaký obvod pro
generování nosného kmitočtu. Proto bylo zvoleno řešení s&nbsp;malým
procesorem, který generuje signál a současně ho i vyhodnocuje.
</p>
<p>
Vysílá se signál v&nbsp;podobě nepřetržité řady jedniček a nul.
Jednička je představována 10 impulsy nosného kmitočtu a nula stejně
dlouhou mezerou, během které se nevysílá žádné záření. Průběh je na
obrázku ve stopě 1.
</p>
<p>
<img width="320" height="240" src="IRFEE01A_Files/image007.png"
alt="Průběh vysílaného a přijímaného signálu">
</p>
<p>
Ve stopě 2 je signál na výstupu IR přijímače U1. Stav L indikuje
detekovaný optický signál. Detekovaný signál na přijímači je „rozpitý“,
protože přijímač potřebuje cca 6 až 10 period signálu pro vyhodnocení a
změnu stavu. Na obrázku vidíme asi 10 sekund aktivity zaznamenané přes
sebe.
</p>
<p>
Vyhodnocování procesor provádí tak, že testuje, zda přijímač zachytil
kombinaci 10 a pokud ano, zvýší počítadlo úspěšných detekcí. Jakmile
toto počítadlo přeroste aktivační mez, nastaví výstup čidla do stavu H.
Pokud se místo očekávané kombinace 10 přijme cokoli jiného, sníží se
počítadlo. Jakmile počítadlo poklesne pod nulu, výstup čidla se
překlopí do neaktivního stavu L. Obrázek ukazuje máchnutí rukou před
čidlem, odezva 20ms pro zapnutí a 15ms pro vypnutí.
</p>
<p>
<img width="320" height="240" src="IRFEE01A_Files/image008.png"
alt="Odezva čidla na máchnutí rukou">
</p>
<p>
Toto poměrně jednoduché řešení vede k&nbsp;solidní odolnosti vůči
rušení. Ani ovladač od televize z&nbsp;bezprostřední blízkosti
neovlivňuje funkci čidla.
</p>
<h2> Mechanická konstrukce </h2>
<p>
Předpokládá se, že čidlo bude připevněno na přední část robotu nebo na
nějaký drátový nebo plechový tvarovatelný nosník. Je proto opatřeno 1
upevňovacím šroubem. Vysílací dioda a přijímací obvod na sebe nesmějí
vidět a je nutné tyto komponenty doplnit vhodně tvarovanými stínítky
tak, aby čidlo detekovalo překážky dle potřeby. Přijímač je velmi
citlivý a vidí vysílací LED i tehdy, kdyby to člověk neřekl (například
zezadu). Stínítko lze udělat například z&nbsp;černé smršťovací bužírky.
</p>
<p>
Vysílací IR LED lze osadit jak shora desky, tak i ze spodní strany.
V&nbsp;případě potřeby je možné LED umístit dál od desky a vhodně
nasměrovat.
</p>
<h1> Osazení a oživení </h1>
<h2> Osazení </h2>
<p>
<img width="567" height="241" src="IRFEE01A_Files/image010.jpg"
alt="Osazovací výkres, strana součástek">
</p>
<p>
<img width="563" height="240" src="IRFEE01A_Files/image011.jpg"
alt="Osazovací výkres, strana spojů">
</p>
<table class="Soupiska">
<tr>
<th> Počet </th>
<th> Reference </th>
<th> Název </th>
<th> Pouzdro </th>
</tr>
<tr>
<th colspan="4"> Odpory </th>
</tr>
<tr>
<td> 1 </td>
<td> R1 </td>
<td> 100 </td>
<td> R0805 </td>
</tr>
<tr>
<td> 1 </td>
<td> R2 </td>
<td> 330 </td>
<td> R0805 </td>
</tr>
<tr>
<td> 1 </td>
<td> R3 </td>
<td> 680 </td>
<td> R0805 </td>
</tr>
<tr>
<td> 1 </td>
<td> R4 </td>
<td> 10k </td>
<td> R0805 </td>
</tr>
<tr>
<th colspan="4"> Keramické kondenzátory </th>
</tr>
<tr>
<td> 2 </td>
<td> C1, C2 </td>
<td> 4u7/6.3V </td>
<td> C0805 </td>
</tr>
<tr>
<th colspan="4"> Diody </th>
</tr>
<tr>
<td> 1 </td>
<td> D1 </td>
<td> 1N4007SMD </td>
<td> MELF </td>
</tr>
<tr>
<th colspan="4"> LED </th>
</tr>
<tr>
<td> 1 </td>
<td> D2 </td>
<td> L-53F3BT </td>
<td> LED5 </td>
</tr>
<tr>
<td> 1 </td>
<td> D3 </td>
<td> LED_RED_5mm </td>
<td> LED5 </td>
</tr>
<tr>
<th colspan="4"> Integrované obvody </th>
</tr>
<tr>
<td> 1 </td>
<td> U1 </td>
<td> IR_RECEIVER (viz text) </td>
<td> TSOP348xx </td>
</tr>
<tr>
<td> 1 </td>
<td> U2 </td>
<td> ATtiny13-20SU </td>
<td> SO8_210 </td>
</tr>
<tr>
<th colspan="4"> Mechanické součástky </th>
</tr>
<tr>
<td> 1 </td>
<td> J1 </td>
<td> JUMP3 </td>
<td> JUMP3 </td>
</tr>
<tr>
<td> 1 </td>
<td> J2 </td>
<td> JUMP1 </td>
<td> JUMP1 </td>
</tr>
<tr>
<td> 1 </td>
<td> J3 </td>
<td> JUMP2x3 </td>
<td> JUMP2x3/B </td>
</tr>
</table>
 
<p>
<img width="328" height="147" src="IRFEE01A_Files/image009.jpg"
alt="Obrázek osazené desky ze strany spojů">
</p>
 
<h2> Oživení a kalibrace </h2>
<p>
Oživení spočívá v&nbsp;naprogramování řídícího programu do procesoru.
Je třeba použít program, který generuje vysílací signál o stejné
frekvenci, na jakou je naladěn přijímací obvod. Hodnoty pro
naprogramování konfiguračních buněk procesoru jsou uvedeny na začátku
zdrojového kódu.
</p>
<h1> Programové vybavení </h1>
<h2> Popis programu </h2>
<p>
Pro generování budícího signálu vysílací IR diody se využívá časovač
v&nbsp;režimu CTC. Časovač opakovaně čítá od 0 do horní meze, která je
nastavena v&nbsp;registru OCR0A. Touto konstantou je dána frekvence
generovaného signálu.
</p>
<p>
Při každém dosažení horní meze časovače se automaticky neguje výstup
PB1, na který je připojena vysílací dioda. Současně se vyvolá
podprogram pro obsluhu přerušení, který čítá počet půlperiod vysílaného
signálu. Pokud se má vysílat tma (nazvěme stav 0), vše probíhá stejně,
jen se výstupní stav PB1 nemění.
</p>
<p>
Po vyslání nastaveného počtu period signálu (konstanta SYMBOL_LENGTH)
se střídá vysílání stavu 0 a 1 (střídavý signál a tma) a současně se
vyhodnocuje, zda se přijímaný signál shoduje s&nbsp;vysílaným.
Vyhodnocování se provádí po dvojici 0/1.
</p>
<p>
Hlavní program obsahuje inicializační část a prázdnou nekonečnou
smyčku. Za běhu se vše vyřizuje v&nbsp;podprogramu obsluhy přerušení od
časovače.
</p>
<h2> Překlad programu </h2>
<p>
Pro překlad je připravený Makefile, který přeloží program
s&nbsp;nastavením pro vyjmenované nosné kmitočty.
</p>
</div>
 
<!-- AUTOINCLUDE START "Page/Footer.cs.ihtml" DO NOT REMOVE -->
<!-- ============== PATIČKA ============== -->
<div class="Footer">
<script type="text/javascript">
<!--
SetRelativePath("../../../../../");
DrawFooter();
// -->
</script>
<noscript>
<p><b> Pro zobrazení (vložení) hlavičky je potřeba JavaScript </b></p>
</noscript>
</div>
<!-- AUTOINCLUDE END -->
 
</body>
</html>