| |
— | linesensori2c [2017/10/09 22:00] (aktuální) – vytvořeno - upraveno mimo DokuWiki 127.0.0.1 |
---|
| ====== LineSensor I2C ====== |
| [[http://translate.google.com/translate?prev=hp&hl=cs&js=n&u=http%3A%2F%2Fprojects.adamh.cz%2FLineSensorI2C&sl=auto&tl=en|English version]] |
| |
| //"Inteligentní"// senzor čáry pro malé mobilní roboty, který nabízí kalibraci čidel, komunikaci s okolím prostřednictvím sběrnice I<sup>2</sup>C a čtení hodnoty čidla v několika formátech. Podrobný článek o senzoru vyšel v časopise Robot Revue ([[http://robotrevue.cz/2011/03|03/11]] a 04/11). Mozkem je mikrokontrolér ATmega8A s jádrem AVR taktovaný na 1 MHz. |
| |
| {{http://dir.adamh.cz/line_sensor_i2c/foto/top.jpg?305x157}} |
| |
| {{http://dir.adamh.cz/line_sensor_i2c/foto/bottom.jpg?305x96}} |
| |
| ===== Popis komunikace ===== |
| Senzor komunikuje jako I<sup>2</sup>C slave s výchozí adresou 0xAA, kterou lze změnit zápisem do registru 0xAA. V případě, že je adresa nastavena na 0x00 nebo 0xFF, použije se adresa výchozí. |
| |
| Zelená LED dioda blikne při každém čtení z registru senzoru. |
| |
| K dispozici jsou tyto registry: |
| |
| |
| ^Číslo registru ^Název ^Popis ^ |
| |0 |Digitální pozice |Pozice čáry jako jeden bajt, ve kterém n-tý bit odpovídá stavu n-tého čidla. Pokud čidlo čáru vidí, je odpovídající bit nastaven na 1, v opačném případě je jeho hodnota nulová. Dva zbývající bity jsou ignorovány. <html><br><br></html> __Příklad:__ <html><br></html> 0 0 1 1 0 0 – čára je uprostřed pod 3. a 4. čidlem<html><br></html>1 0 0 0 0 0 – čára je pod levým krajním čidlem | |
| |1 |OnLine |1 = Aspoň jedno čidlo vidí čáru<html><br></html>0 = Celý senzor je mimo čáru| |
| |2 |Pozice čáry (high byte) |Vyšší bajt pozice čáry (0-5000) získané váženým průměrem naměřených hodnot.<html><br><br></html> __Příklad:__ <html><br></html> 2500 – čára je uprostřed pod 3. a 4. čidlem<html><br></html>0 – čára je pod levým krajním čidlem<html><br></html>5000 – čára je pod pravým krajním čidlem<html><br><br><br><img src="http://dir.adamh.cz/line_sensor_i2c/foto/vazeny_prumer.png" alt="vážený průměr"><br><br><small></html>//a<sub>n</sub> jsou naměřené hodnoty z čidel (0-1000)//<html></small></html>| |
| |3 |Pozice čáry (low byte) | | |
| |4, 6, 8, 10, 12, 14 |Hodnota čidla (high byte) |Vyšší bajt hodnoty jednoho ze šesti čidel (0-1000),| |
| |5, 7, 9, 11, 13, 15 |Hodnota čidla (low byte) | | |
| |16, 18, 20, 22, 24, 26 |Nezpracovaná hodnota čidla (high byte) |Vyšší bajt nezpracované hodnoty čidla – hodnota přímo naměřená A/D převodníkem před kalibrací. | |
| |17, 19, 21, 23, 25, 27 |Nezpracovaná hodnota čidla (low byte) | | |
| |
| Z pozice čáry (registry 2 a 3) se nedá zjistit, zda je čidlo nad čárou nebo ji už "ztratilo" - k regulaci to totiž není potřeba. Tato informace lze zjistit přečtením registru 1, respektive 0. |
| |
| ===== Kalibrace ===== |
| Kalibraci je třeba provést přo změně prostředí, ve kterém se robot pohybuje (například na soutěži). Také je nezbytná před prvním použitím senzoru, protože kalibrační hodnoty jsou uloženy v EEPROM a nejsou tak po nahrání programu do mikrokontroléru nastaveny. Kalibrace uloží maximální a minimální hodnotu čidla, která je poté použita pro přepočet naměřené hodnoty na číslo 0-1000. |
| |
| - Zapíšte do I<sup>2</sup>C registru 0x00 hodnotu 1 nebo stiskněte tlačítko a vyčkejte, dokud se nerozsvítí zelená LED dioda. |
| - Umistěte senzor nad černou čáru a stiskněte tlačítko nebo zapište hodnotu 0x02 do I<sup>2</sup>C registru 0x00 (LED blikne). |
| - Umistěte senzor mimo čáru a stiskněte tlačítko nebo zapište hodnotu 0x02 do I<sup>2</sup>C registru 0x00 (LED blikne). |
| - Nyní je možné senzor normálně používat. |
| |
| |
| ===== Elektronika ===== |
| |
| {{http://dir.adamh.cz/line_sensor_i2c/foto/schematic.png}} |
| |
| |
| ^Označení ^Součástka ^Počet kusů ^ |
| | U1-U6 | QRD1114 | 6× | |
| | IC1 | ATmega8A-AI (pouzdro TQFP-32) | 1× | |
| | C1-C3 | Kondenzátor 0,1 μF (pouzdro 1206) | 3× | |
| | R13 | Rezistor 330 Ω (pouzdro 1206) | 1× | |
| | R1, R3, R5, R7, R9, R11 | Rezistor 10 kΩ (pouzdro 1206) | 6× | |
| | R4, R4, R6, R8, R10, R12 | Rezistor 220 nebo 330 Ω (já použil hodnotu 220R, pouzdro 1206) | 6× | |
| | LED1 | LED dioda zelená (pouzdro 1206) | 1× | |
| | L1 | Tlumivka 10 μH | 1× | |
| | JP1+2, JP3 | Pin header 90° (4 piny) | 2× | |
| | S3 | Tlačítko (tactile switch) | 1× | |
| | (modře) | Drátové propojky | 5× | |
| |
| |
| Popis konektorů je patrný z následujícího obrázku. ISP konektor je použit pouze pro nahrání programu do mikrokontroléru, pro připojení senzoru k řídící jednotce slouží konektor druhý. Z jendočipu je také vyveden pin Tx, který lze použít pro ladění programu. |
| |
| {{http://dir.adamh.cz/line_sensor_i2c/foto/board_top.png?471x250}} |
| |
| |
| ===== Revize ===== |
| **FW verze 1.1** (15. 3. 2011): |
| |
| * Možnost uložení kalibračních hodnot zápisem do registru 0x00 (alternativa ke stisku tlačítka, pokud je tlačítko v konstrukci nepřístupné) |
| * Úprava zasílání ACK v přerušení pro I<sup>2</sup>C |
| |
| |
| ===== Podklady ke stažení ===== |
| |
| Veškeré podklady ke stavbě (zdrojový kód, schéma a plošný spoj v Eagle, obrázky) jsou ke stažení na http://dir.adamh.cz/line_sensor_i2c. Plošné spoje jsou dostupné i ve verzi se zvětšenými pady pro domácí výrobu (stačí jen několik propojek). |
| |
| Celý projekt je zvěřejněn pod licencí Creative Commons <html><a href="http://creativecommons.org/licenses/by-nc-sa/3.0/cz"><img src="http://i.creativecommons.org/l/by-nc-sa/3.0/cz/80x15.png" alt="BY-NC-SA 3.0" /></a></html> [[http://creativecommons.org/licenses/by-nc-sa/3.0/|BY-NC-SA 3.0 (EN)]]. |
| |
| Několik zelených plošných spojů mi zbylo, zájemci se mohou ozvat na [[adam@adamh.cz]]. |
| |