Урок 2. «Жук»: бампер и CD4017
В картинкахПосле этого урока робот ездит сам: едет вперёд, а наткнувшись бампером на стенку или препятствие — отъезжает, разворачивается и едет дальше. Программы нет — манёвр шагает счётчик CD4017, а колёсами управляют три вентиля.
2.1. Идея: манёвр — это шаги
Манёвр «наткнулся — отъехал — развернулся» — цепочка шагов по времени. Генератор 10 Гц даёт такт каждые 0,1 с, а CD4017 на каждом такте зажигает следующий из десяти выходов O0…O9:
O0— вперёд;O1…O4— назад (4 такта = 0,4 с);O5…O8— разворот (0,4 с);O9— вперёд, и сноваO0.
Сложить четыре шага в один сигнал — это ИЛИ на 4 входа, CD4072: BACK = O1 + O2 + O3 + O4, TURN = O5 + … + O8.
2.2. Идея: ждать удара — HOLD
Что хотим. Пока бампер свободен, робот стоит на шаге 0 и едет вперёд. Ударился — счётчик пошёл по шагам. Начатый манёвр доводится до конца, даже если бампер уже отпустило.
У CD4017 для этого есть нога INH (запрет): пока INH = 1, такты не считаются. Значит, запрет нужен ровно тогда, когда мы на шаге 0 И удара нет:
| FWD (шаг 0) | HIT (удар) | HOLD (не шагать) |
|---|---|---|
| 1 | 0 | 1 — ждём удара |
| 1 | 1 | 0 — удар, поехали |
| 0 | 0 | 0 — манёвр идёт |
| 0 | 1 | 0 — манёвр идёт |
- Формула:
HOLD=FWDИНЕ HIT.
Можно собрать как написано: инвертор на HIT и И. Но у нас уже есть NFWD = НЕ FWD (он понадобится и дальше), а правило де Моргана говорит: «A И НЕ B» — то же самое, что «НЕ (НЕ A ИЛИ B)». Получается один вентиль НЕ-ИЛИ:
HOLD=НЕ-ИЛИ(NFWD,HIT) — проверь по таблице:HOLD= 1 только когдаNFWD= 0 иHIT= 0.
НЕ-ИЛИ берём из CD4001 — в нём четыре таких вентиля, второй пойдёт на правое колесо.
Почему не «запрет = НЕ HIT» без FWD? Тогда, едва бампер отпустит (робот отъехал на сантиметр), счётчик встанет посреди манёвра — робот замрёт задом наперёд. Условие FWD держит только шаг 0.
2.3. Идея: какое колесо куда — LDIR и RDIR
Что хотим на каждом шаге (1 — колесо вперёд, 0 — назад):
| Шаг | LDIR (левое) | RDIR (правое) |
|---|---|---|
| 0 — вперёд | 1 | 1 |
| 1–4 — BACK | 0 | 0 |
| 5–8 — TURN | 1 | 0 |
| 9 — вперёд | 1 | 1 |
- Левое колесо идёт назад только на
BACK:LDIR=НЕ BACK— один инвертор CD4069. - Правое идёт назад и на
BACK, и наTURN:RDIR=НЕ (BACK ИЛИ TURN)=НЕ-ИЛИ(BACK,TURN) — второй вентиль CD4001.
На развороте левое вперёд, правое назад — робот крутится на месте по часовой. Хочешь против часовой — поменяй местами LDIR и RDIR на ногах шасси.
А BACK и TURN откуда? На каждом шаге горит ровно один выход CD4017, поэтому «идёт назад» = «горит любой из O1…O4» — это ИЛИ на четыре входа: BACK = O1 + O2 + O3 + O4, TURN = O5 + O6 + O7 + O8. Два таких ИЛИ — в одном CD4072.
2.4. Сборка
Поверх урока 1. Микросхемы — готовые, из файла набора robot-chips.json; на ногах у них — метки (двойной клик по ноге).
Шаг 1. Микросхемы в библиотеку
Если в библиотеке ещё нет папки Robot с микросхемами TI CD4017B, TI CD4072B, TI CD4069UB, TI CD4001B: в библиотеке кнопка импорта → файл robot-chips.json. Встанет папка Robot — десять микросхем на весь набор (и детали, из которых они собраны внутри).
Шаг 2. Убрать пробу урока 1
Направление колёс теперь дают микросхемы — тумблеры LDIR и RDIR удали (выдели, Delete). Метки LDIR и RDIR на ногах шасси остаются.
| Деталь | Действие |
|---|---|
| Input (тумблер), выход которого = LDIR | удалить |
| Input (тумблер), выход которого = RDIR | удалить |
Шаг 3. Генератор и «Сброс»
Clock — щелчок по корпусу до 10Hz.
| Деталь | Нога / действие | Метка / куда |
|---|---|---|
| Clock 10Hz | выход | CK |
| Button (кнопка) | выход | RESET |
Шаг 4. Бампер
Бампер тяни за оранжевую гайку к передней зелёной точке шасси — защёлкнется. Длина — ручкой (подпись у ручки): 110, шире колёс — иначе в стенку первым упрётся угол корпуса, а бампер не почует.
| Деталь | Нога / действие | Метка / куда |
|---|---|---|
| Bumper (бампер) | длина (ручка) HIT посадить | 110 HIT на f (передняя точка шасси) |
Шаг 5. Микросхемы
| Деталь | Нога / действие | Метка / куда |
|---|---|---|
| TI CD4017B | CLOCK RESET INH O0 O1 O2 O3 O4 O5 O6 O7 O8 | CK RESET HOLD FWD B1 B2 B3 B4 T1 T2 T3 T4 |
| TI CD4072B | A B C D J E F G H K | B1 B2 B3 B4 BACK T1 T2 T3 T4 TURN |
| TI CD4069UB | A G B H C D E F | FWD NFWD BACK LDIR GND GND GND GND |
| TI CD4001B | A B J C D K E F G H | BACK TURN RDIR HIT NFWD HOLD GND GND GND GND |
Не подключать: O9 и CO у CD4017, I…L у CD4069UB, L и M у CD4001B.
Шаг 6. Лампы манёвра
Цвет лампы — Alt/⌘+щелчок по ней.
| Деталь | Нога / действие | Метка / куда |
|---|---|---|
| LED, зелёная | вход | FWD |
| LED, жёлтая | вход | BACK |
| LED, красная | вход | TURN |
2.5. Проверка
- Включи питание и один раз нажми «Сброс» — горит зелёная
FWD. - Включи
GO— робот едет вперёд. - Доехал до стенки или препятствия — бампер краснеет, и робот сам: назад (жёлтая
BACK, около 0,4 с), разворот на месте по часовой (краснаяTURN, 0,4 с) и снова вперёд. Между разворотом и зелёной на мгновение не горит ни одна лампа — это шаг 9: колёса уже крутятся вперёд. - Если после разворота бампер всё ещё упирается — зелёная не загорается, робот сразу снова отъезжает. Из угла он выбирается за два-три таких отскока.
- На бумаге — прямые пробеги и «звёздочки» в местах ударов.
| Горит | Колёса | Робот |
|---|---|---|
| FWD (зелёная) | оба вперёд | едет вперёд, ждёт удара |
| BACK (жёлтая) | оба назад | отъезжает около 0,4 с |
| TURN (красн.) | левое вперёд, правое назад | разворот по часовой 0,4 с — на ~35° |
Вставка урока 2 (Cmd+I)
Вставлять в новый проект — ставит уроки 1 и 2 целиком (без пробных тумблеров урока 1). Нужны микросхемы из robot-chips.json.
# Урок 2 — «жук»: бампер; CD4017 шагает манёвр: вперёд → наехал → назад 0,4 с → разворот 0,4 с → вперёд.# Вставка: Cmd+I в новый проект (ставит уроки 1 и 2 целиком, без пробы урока 1).# ---------- питание ----------power(VCC)ground(GND)# ---------- арена: бумага, контур поверх неё, препятствие ----------mpaper p{w=800, h=500}mwall w{w=800, h=500}mblock ob{w=80, h=80}at(p, 0, 0)at(w, p, 0, 0)at(ob, p, 440, 210)# ---------- робот: шасси, перо на задней точке ----------mchassis rb{spd=60}(L_ON=GO, R_ON=GO, L_DIR=LDIR, R_DIR=RDIR)at(rb, p, 80, 210)mpen pen(DOWN=VCC)mount(pen, rb.r)# ---------- GO — моторы (остаётся до конца набора) ----------input(GO)# ---------- генератор и сброс ----------clock{rt=10}(CK)button(RESET)# ---------- бампер на передней точке шасси ----------mbumper bp{len=110}(HIT=HIT)mount(bp, rb.f)# ---------- CD4017: шаги манёвра ----------"TI CD4017B"(CLOCK=CK, RESET=RESET, INH=HOLD, O0=FWD, O1=B1, O2=B2, O3=B3, O4=B4, O5=T1, O6=T2, O7=T3, O8=T4)# ---------- CD4072: назад = шаги 1–4, разворот = шаги 5–8 ----------"TI CD4072B"(A=B1, B=B2, C=B3, D=B4, J=BACK, E=T1, F=T2, G=T3, H=T4, K=TURN)# ---------- CD4069: не-вперёд, левое колесо ----------"TI CD4069UB"(A=FWD, G=NFWD, B=BACK, H=LDIR, C=GND, D=GND, E=GND, F=GND)# ---------- CD4001: правое колесо, держать шаг 0 ----------"TI CD4001B"(A=BACK, B=TURN, J=RDIR, C=HIT, D=NFWD, K=HOLD, E=GND, F=GND, G=GND, H=GND)# ---------- лампы манёвра ----------led{color=green}(FWD)led{color=yellow}(BACK)led{color=red}(TURN)Не получается? Что-то не работает →