require($_SERVER["DOCUMENT_ROOT"]."/interactive/interactive.php");
=====BeamBOT учится не пересекать границу=====
Давай применим умение запоминать состояние и научим нашего робота новому трюку. Как насчет умения ездить вперед-назад внутри очерченной границы? Для этого нам понадобится сразу три микросхемы: ULN2003A для инверсии сигналов от датчиков линии, CD4013 для запоминания состояний и L293D для управления моторами. Давай соберем схему и испытаем ее.
~~NOCACHE~~
pinlab_draw_picture("beambot/uchitsya_ne_peresekat_granicu/scheme1");
pinlab_bom("beambot/uchitsya_ne_peresekat_granicu/scheme1.mont");
pinlab_draw_instruction("beambot/uchitsya_ne_peresekat_granicu/scheme1.mont");
Если поставить робота на белую поверхность очерченную черной полосой он будет бесконечно кататься вперед-назад внутри границы. Как работает схема и зачем нужна микросхема ULN2003A? Оба мотора подключены к первому Н-мосту драйвера L293A, который управляется прямым и инверсным выходами RS-триггера CD4013. Входы же триггера подключены к переднему и заднему датчикам линии, но не напрямую, а через микросхему ULN2003A. Каналы микросхемы ULN2003A кроме того что усиливают сигнал, еще инвертируют его. То есть если на входе логический сигнал "1", то на выходе "0". Однако, чтобы работало и наоборот нужно выходы каналов подтянуть к "+", для этого и используются резисторы R1 и R2. Зачем вообще инвертировать сигналы от датчиков? Дело в том что датчики выдают логический сигнал "1" когда находятся на белой поверхностью и "0", наоборот нужен сигнал "1" на вход триггера, когда робот наезжает на черную линию.
Экспериментируй:
* Поменяй местами провода подключенные к разъемам датчиков "В" и "З". Как теперь ведет себя робот?