// Кисть Port считает на пальцах (1.9.74).
//
// Пять пальцев — пять приводов. Каждый подключён прямо к выводу платы и
// управляется библиотекой Servo: S0 большой ← D3, S1 указательный ← D5,
// S2 средний ← D6, S3 безымянный ← D9, S4 мизинец ← D10.
// write(0) — палец прямой, write(90) — согнут.
//
// Сначала кулак, потом пальцы разгибаются по одному: 1, 2, 3, 4, 5.
// Импульс 500–2500 мкс — как у приводов Port (у Servo по умолчанию 544–2400).
#include <Servo.h>
const uint8_t PIN[5] = {3, 5, 6, 9, 10};
const char *NAME[5] = {"большой", "указательный", "средний", "безымянный", "мизинец"};
Servo finger[5];
void setup() {
Serial.begin(9600);
for (uint8_t i = 0; i < 5; i++) {
finger[i].attach(PIN[i], 500, 2500);
finger[i].write(90); // кулак
}
delay(1000);
}
void loop() {
// Счёт: на каждом шаге разгибается ещё один палец (сначала указательный —
// так считают в России; большой — последним).
const uint8_t order[5] = {1, 2, 3, 4, 0};
for (uint8_t n = 0; n < 5; n++) {
finger[order[n]].write(0);
Serial.print(n + 1); Serial.print(" — "); Serial.println(NAME[order[n]]);
delay(700);
}
delay(800);
for (uint8_t i = 0; i < 5; i++) finger[i].write(90); // снова кулак
Serial.println("кулак");
delay(1200);
}
Кисть Port считает на пальцах
Пять пальцев — пять сервоприводов прямо на выводах Uno. Кисть сжимается в кулак и разгибает пальцы по одному: раз, два, три, четыре, пять.
Что на схеме
Плата Arduino Uno, к ней подключены:
- Кисть Port —
r1, площадка «Ровный пол»
Задействованы выводы платы: GND, D3, D5, D6, D9, D10. Всего соединений на схеме: 6.
Как смотреть
Нажмите ▶ Запустить — после сборки откроется окно робота (потом его открывает кнопка 🤖 над схемой). Мышью камеру можно повернуть, колесом — приблизить; щелчок по суставу показывает номер привода, канал PCA9685 и строку кода для него. Кнопка ⏺ над схемой записывает сцену в GIF — с теми поворотами камеры, что вы делаете.
Робот — не анимация, а модель с массами, шарнирами и трением: скетч только шлёт импульсы приводам и читает датчики, а встанет робот, пойдёт или упадёт — решает физика. Как она устроена — на странице «Физика сцен с роботами».
Как это работает
Первый шаг серии «от одного привода к роботу». Каждый палец — отдельный сервопривод, подключённый к выводу платы: библиотека Servo шлёт на вывод импульсы 50 раз в секунду, длина импульса задаёт угол. write(0) — палец прямой, write(90) — согнут. Импульс 500–2500 мкс указан в attach — как у приводов Port (у Servo по умолчанию 544–2400).
Что попробовать
- Покажите «класс» (большой палец вверх) и «мир» (указательный и средний).
- Сгибайте пальцы медленно — по градусу каждые 10 мс.
Библиотеки
Пример собирается с библиотеками:
- Servo
Они уже установлены на сервере сборки — отмечать их в проекте вручную не нужно, список приезжает вместе с примером.
Как это устроено в коде
Основное, чем пользуется скетч:
Servo— управление сервоприводом по длительности импульсаSerial.begin()— открывает монитор порта на заданной скоростиdelay()— пауза, на время которой ядро занято ожиданиемSerial.println()— печатает строку в монитор порта
В скетче 39 строк; подключено заголовков: 1. Сам скетч открыт на соседней вкладке — его можно менять и запускать заново.
Что попробовать изменить
- Замените
delay()на счёт поmillis()— иloop()освободится для всего остального, что должно происходить одновременно. - Добавьте свои
Serial.println()в интересных местах — монитор порта здесь и есть отладчик. - Перенесите деталь на другой вывод — на схеме и в коде — и убедитесь, что пример работает так же.
- Нажмите «Форкнуть»: копия станет вашим проектом, и в ней можно менять что угодно.
Смотрите также
- Рука Port берёт кубик — Рука на стойке: плечо, локоть и пальцы — три сервопривода на выводах D9–D11. Рука опускает кисть на кубик, сжимает пальц…
- Нога Port пинает мяч — Нога на стойке: бедро, колено и голеностоп на выводах D9–D11. Замах назад с согнутым коленом, быстрый удар вперёд — мяч…
- Голова Port осматривается дальномером — Голова на стойке поворачивается от −60° до +60°, в каждом направлении меряет расстояние дальномером в лице и называет, г…
- Робот Port идёт и держит равновесие — Человекоподобный робот Port (1,75 м, 50 кг) идёт по ровному полу: походка без остановок, равновесие и курс — по датчику…
- Робот Port поднимается по лестнице — Port поднимается на четыре ступени приставным шагом: места стоп — по плану лестницы, корпус — по расчёту ZMP с предуправ…
- Робот Port проходит лабиринт — Port идёт по коридорам и смотрит дальномером в голове: у стены поворачивает направо, если там занято — налево, и держитс…
Сборка ещё не запускалась.
Печатайте в Serial числа — они станут графиком.
Serial.println(t); — один ряд,
Serial.printf("t:%.1f h:%.1f\n", t, h); — два с подписями.
Формат тот же, что понимает плоттер Arduino IDE.