FANDOM


Optoshield3

Když jsem si začal hrát s rozpojovači, ukázalo se, že je důležité vědět kdy jej zvednout. Plošina sice Rosničku nenadzvedne (a už vúbec ne potom, co jsem do ní odlil olověná závaží), ale tření o podvozek je takové, že se prostě nehne z místa. Proudový detektor moc použít nejde, je málo přesný a každé vozidlo má jinou vzdálenost vodivého kola a konce skříně; nadto by se takový systém nedal použít na elektricky nevyzbrojené vagony.

Začal jsem experimentovat s IR reflexním dektorem. Asi rok (s letní stavební přestávkou) jsem otravoval všechny elektrotechnicky schopné kamarády, aby mi spočítali pásmový filtr. Uznávám, nemám nárok se počítat mezi slušné lidi když takovou blbost nedokážu sám - ale nedokážu. Pro kamarády to byla příliš malá výzva (nebo čistě prozaicky nebyl čas) - každopádně z rad jsem nic kloudného neuvařil.

Proto nakonec vznikl projekt Optoshield pro Arduino. Pomocí HW to neumím, ale Arduino Nano a jeho A/D převodník jsou dost rychlé na to, aby generátor pulzů a frekvenční filtr nahradil pomocí software. A navíc jde výsledky přežvykovat tak jak chci, a algoritmus se dá pilovat bez pájení.

Běhěm letní odstávky (stavba chodníku, garážové stání) mně předběhl kolega Šídlo, což mně sice mrzí, ale řešení mám malinko jiné. Aspoň něco - můžete si zvolit dle vlastního uvážení.

Princip

Optoshield pracuje jednoduše (zhruba): Arduino generuje pulzy pro LED. Pomocí fototranzistorů připojených na analogové vstupy měří úroveň (odraženého) světla a v případě že je více než X, ohlašuje obsazenost na sběrnici S88. Zapojení vyžaduje externí zdroj 7V a více (kvůli napěťovému regulátoru), LEDky jsou spínané všechny najednou pomocí darlingtonu - výkon LED není omezený výstupním výkonem Arduina. Ale ukázalo se, že i 20mA je dost na to, aby se úspěšně detekoval odraz od stropu tunelu. Přebytečné nožičky jsou vyvedené na 6pinový konfigurační konektor, pomocí kterého lze nastavovat citlivost jednotlivých vstupů. Díky způspbu zpracování měření funguje při jakémkoliv osvětlení (denní, žárovka, zářivka, LED), jediný problém je zahlcení fototranzistorum tzn. přímé letní sluneční světlo kolmo na snímač. 40W žárovka 30cm přímo nad snimačem nevadí.

Zpožděné uvolnění

Při zkouškách jsem zjistil, že při přejíždění senzoru rozsochou nápravy (je-li senzor na vnejší straně kolejnice, mezi pražci), nebo osou nápravy (je-li uprostřed, mezi kolejnicemi) dochází k velkému poklesu odraženého světla až do míry, kdy není odlišitelné od úrovně osvětlení. Bohužel. Proto jsem zavedl ochranný čas pro uvolnění obsazeného senzoru. Během dané doby nesmí senzor vůbec úspěšně (tzn. několikrát po sobě sejmout korektní stav LED) přijmout odraz; pakliže přijme, zůstává stále obsazený. Dobu lze nastavovat a pokud bude uživatel nad senzorem přejíždět, určitě se dá Optoshield zkonfigurovat tak, aby po dostatečně dlouhou dobu pokles signálu ignoroval a mezitím rozsocha (osa) přejede kritické místo.

Promo: porovnání s IR Šídlo

Kolega Šídlo doufám promine, ale přihřeju si polívčičku. Myslím, že obě naše řešení jsou platná, a minimálně to jeho funguje (moje také, ale zatím není dlouhodobě v provozu). Optoshield je složitější v SW a tím pádem také větší potenciální zdroj chyb. Vyberte si podle uvážení

Situace Optoshield IR Šídlo Poznámna
Typ osvětlení Nezáleží Různé řídící SW Výměna SW pro jednotlivé druhy osvětlení
Spínání LED Všechny najednou Každá zvlášť Led z jednoho senzoru může svítit na jiný senzor - falešná detekce
Rozpoznání Nastavitelné Adaptivní, automatické
Nastavení Připojitelný ovladač Úprava SW
Hardware Složitější Jednodušší

Návod ke konfiguraci

Konfigurační deska má 3 tlačítka


  • OK: přepíná režimy, potvrzuje, ruší
  • PLUS: zvyšuje hodnotu (citlivost, prodlevu, ...)
  • MINUS: snižuje hodnotu (citlivost, prodlevu, ...)

Na konfigurační desce jsou LEDky, aby se nemuselo koukat pod kolejiště na hlavní desku s Arduinem:


  • STATUS: stav vybraného senzoru (svítí = obsazeno)
  • ACK: potvrzení stisku tlačítek, zobrazení stavu konfigurace

Tlačítka se drží různou dobu:


  • Stisk: krátký stisk
  • Dlouhý stisk: mezi 0.5sec a 2sec
  • Konfigurační stisk: mezi 2sec a 5sec
  • Reset: déle než 5sec

Konfigurace se zahajuje a ukončuje konfiguračním (tzn. více než 2 sec) stiskem OK. Při zahájení konfigurace 3x dlouze blikne LEDka ACKCelkový reset se provede reset stiskem OK. Reset a ukončení konfigurace lze provést kdykoliv. Během konfigurace zhasne integrovaná LED Arduina. LED STATUS na konfigurační destičce ukazuje stav právě vybraného senzoru (svítí = obsazeno, nesvítí = volno).

Postupně se:


  • vybere senzor (dlouhé bliknutí ACK)
  • nastaví citlivost (2x bliknutí ACK)
  • nastaví prodleva uvolnění (ACK blikne 2x krátce, 2x dlouze)

mezi jednotivými kroky přecházíme stiskem OK. Hodnoty (číslo senzoru, ...) se zvyšují stiskem tlačítek Plus, MinusDlouhý stik OK obnoví původní nastavení hodnoty a ukončí práci se senorem (opět se vybírá senzor), ACK blikne dlouze. Po potvrzení prodlevy se opět volí senzor atd.

Nastavení citlivosti

  • stisk +/- mění hodnotu o 1 (ACK blikne krátce)
  • dlouhý +/- stisk mění hodnotu o 10 (ACK blikne dlouze)
  • konfigurační stisk +/- nastaví hodnotu na dolní resp. horní hranici
  • konfigurační stisk OK a zároveň stisk dalšího tlačítka zahájí kalibraci (viz dále)

Nastavení prodlevy

  • stisk +/- mění hodnotu o 20ms (ACK blikne krátce)
  • dlouhý +/- stisk mění hodnotu o 100ms (ACK blikne dlouze)
  • konfigurační stisk +/- nastaví hodnotu na dolní resp. horní hranici

Kalibrace

Při kalibraci se nejprve změří úroveň osvetlení bez překážky, následně s překážkou (vozidlem nad senzorem). Před zahájením kalibrace nejprve odstraňte vagonym pak stiskněte OK (2-4 sec) a zároveň krátce jedno z tlačítek +,-. LED ACK blikne dlouze a pak 1 krátce a následujících 10 sekund se měří úroveň "bežného" osvětlení. Na konci měření LED ACK blikne 1 dlouze a 2x krátce.

Nyní umístěte vagon nad senzor, stiskněte OK a přejíždějte jím tam a zpět, aby se změřil odraz na všech místech podvozku. Měření trvá 10 sec. Na konci měření blikne ACK 2x dlouze a 1 krátce. Následně můžete "ručně" doladit hodnotu viz "Nastavení citlivosti" a potvrdit OK.

Popis zapojení

Celá deska je postavena na Arduino Nano. Pozor, nejedná se o Arduino Pro Mini !! Součástky jsou běžně k dostání, pouze pozor na regulátor - ve schématu mám uveden špatný typ (nemám v knihovně správný). Má být 78S05, aby utáhl všechny LED najednou. Jako IR diody jsem použil L-7104F3C (GME-511-974) nebo L-934F3C(GME 511-503), průměr 3mm (vejde se mezi pražce). Fototranzistory jsou L-93DP3BT (GME 520-068), ale doporučuji spíše LL-304PTD4B-1A, který má selektivní pouzdro.

Regulátor slouží čistě pro napájení LED, vstupní napětí by mělo být alespoň 7V. Arduino žádnou ochranu nemá.

Zapojení pinů Arduina

Pin(y) In / Out Popis Vyvedeno na konektor
A0 - A7 In Vstup fototranzistorů Jx-3
D0, D1 In/Out Sériová komunikace USB
D2 In S88 LOAD S88, pin 6
D3 In S88 CLK S88, pin 4
D4 In S88 Data In S88 in, pin 2
D5 Out S88 Data Out S88 out, pin 2
D7 In Tlačítko "minus" CTRL, pin 6
D8 In Tlačítko "plus" CTRL, pin 5
D9 In Tlačítko "next" CTRL, pin 4
D10 Out LED "status" CTRL, pin 3
D11 Out LED "ack" CTRL, pin 2

Zapojení pinů pro konfigurační destičku (konektor CTRL)

Pin 1 je u konce desky Arduina, směrem k vstupu napájení.

Pin Funkce
1 Společná zem (GND)
2 Ovládání LED "ack", reakce na konfigurační úkony
3 Ovládání LED "status", stav konfigurovaného senzoru
4 Vstup tlačítka "next", spíná proti GND
5 Vstup tačítka "plus"
6 vstup tlačítka "minus"

Zapojení pinů jednotlivých senzorů

Pin Funkce
1 LED, spínaná proti GND
2 Napájení +5V
3 Výstup fototranzistoru

Pozor, konektor J8 je jinak stranově obrácený než ostatní !

Rozpis součástek

Hlavní deska

Součástka Typ Hodnota GME id Počet
C1,C2 kondenzátor 100nF 120-060 2
C5 kondenzátor 100uF 123-113 1
J1-8 molex konektor 3 piny 8
JP1 oboustranný kolík 832-017 1
R1 rezistor 510R
R2 rezistor 4k7 119-074 1
R3 rezistor 1k 119-043 1
R21-28 rezistor na opt. čidle 130R 8
RN1, RN2 rezistorová síť 4k7 2
IC1 regulátor napětí 78S05 1
S88-IN,OUT konektor RJ-45 2
T1 tranzistor BC337 210-018 1

Konfigurační deska

Součástka

Typ Hodnota GME id Počet
R11,R12 rezistor 470R

119-097

2
LED1 LED 3mm, červená 1
LED2 LED 3mm, žlutá 1
Tlačítko 3

Čidla

Součástka Typ Hodnota GME id Počet
R21-28 rezistor 130R 119-170 8
LED IR LED

8

T1-T8 IR fototranzistor 8

Poznámka: Fototranzistory je lepší kupovat v TME, mají 3mm se selektivním pouzdrem.

Algoritmus podrobněji

Podrobnější algoritmus je složitější. Arduino ví kdy je LED zapnutá a kdy ne. Měří se, že snímač detekuje správně zapnuto/vypnuto (tedy ne jen, že vezme nějaké světlo, ale musí to být právě to, které rozsvěcí Arduino). Chybná detekce významně snižuje celkovou váhu měření. Po několika po sobě jdoucích správných detekcích se snímač bere jako obsazený. Úroveň osvětlení se měří vždy 7ms na všech vstupech: Provede se 5 měření na jednom vstupu takovou rychlostí jak A/D převodník stíhá (a to není standardních 20ms); pak se změní vstup a 2 měření se zahodí kvůli možné nestabilitě měřícího kondenzátoru. Převodníku jsem změnil hodiny na 500kHz, takže měří skutečně rychle, po měření generuje přerušení a jeho obsluha uloží data pro zprůměrování. Drobné nepřesnosti nevadí. Měření se opakuje dokolečna v rámci přerušení; po 7ms si průměrované výsledky převezme hlavní algoritmus. Jelikož se po cca 7ms (+ režie) mění stav LED, zatímco (předpokládám napájení 230V / 50Hz) žárovka má periodu 10ms, sejdou se jen zřídka. Ve výsledku se během tech 7ms několikrát senzory objedou dokolečka, takže průměrování má i nějaký význam.

Většína konstant a nastavení, pokud nejdou konfigurovat rovnou, je ve sketchi deklarovaná jako const int, zejména počáteční hodnoty prahových hodnot a prodlev. Změňte je podle potřeby.

Schéma

Optoshield3

Soubory ke stažení

Projekt má zdrojové texty, vč. eagle souborů pro jednotlivé desky na Githubu. Poslední verze ke stažení je 1.0-alpha

Community content is available under CC-BY-SA unless otherwise noted.