Название проекта:
Выразительное лицо робота с использованием сервомоторов.
Описание проекта:
Этот проект включает в себя разработку и создание выразительного роботизированного лица, приводимого в движение сервомоторами и способного демонстрировать основные человеческие эмоции, такие как нейтральная, грустная и злая. Цель состоит в том, чтобы исследовать, как механическое движение может использоваться для имитации эмоций с помощью черт лица, создавая более интерактив
Лицо робота состоит из:
Подвижный рот (движение вверх и вниз),
Две брови, каждая из которых контролируется независимо для выражения эмоций посредством углового наклона (±30 градусов от нейтрального положения).
Используются в общей сложности три сервомотора — один для рта и два для бровей. Сервомоторы подключены к микроконтроллеру Arduino, который интерпретирует команды, полученные через последовательный монитор, для изменения мимики лица.
Каждая эмоция определяется как функция, и выбор эмоции (посредством ввода числа) плавно переводит робота в нейтральное состояние, прежде чем он переходит к новой эмоции. Это помогает создавать более реалистичные и понятные переходы.
Особенности:
Переключение эмоций с помощью последовательного ввода (например, 1 = грустный, 2 = злой, и т. д.)
Плавные переходы через нейтральную позу.
Модульная структура, основанная на функциях, для удобной отладки и добавления большего количества эмоций.
Легкая интеграция с будущими датчиками (микрофон, камера) для реактивного поведения.
Код для Arduino, чтобы запустить его:
#include <Servo.h>
Рот сервомотора;
Сервомотор для правой брови;
Сервомотор левой брови;
целое числоТекущее лицо =0;// Начнем с нейтрального.
void Настройка.() {
Сериал..Начинаем.(9600.);
Ротовый сервопривод..Прикрепить.(9);
Правый сервопривод для бровей..Прикрепить.(11);
Левая бровь-сервомотор..Прикрепить.(10);
Ротовый сервопривод..Напишите.(90);
Правый сервопривод для бровей..Напишите.(90);
Левая бровь-сервомотор..Напишите.(90);
setFace(0);// Начнем с нейтрального.
Сериал..println("Введите число, чтобы установить лицо:");
Сериал..println("0 = Нейтральный");
Сериал..println("1 = Грустно");
Сериал..println("2 = Зол");
)
void Петля.() {
Если(Сериал..Доступно.()) {
целое числоFaceID =Сериал..parseInt;)
Если(faceID >=0&& faceID <=2&& faceID != currentFace) {
Сериал..Печать.("Переход на лицо: ");
Сериал..println(faceID);
// Шаг 1: перейти в нейтральное положение.
setFace(0);
Задержка.(500.);// Ненадолго сохраняем нейтральную позицию.
// Шаг 2: перейти к целевому выражению.
setFace(faceID);
currentFace = faceID;
}В противном случае.{
Сериал..println("Выбрано недействительное или одинаковое лицо.");
}
}
)
void setFace(целое число
Переключить.(выражение) {
Дело. 0:// Нейтральный.
Ротовый сервопривод..Напишите.(120);
Правый сервопривод для бровей..Напишите.(90);
Левая бровь-сервомотор..Напишите.(90);
Перерыв.;
Дело. 1:// Грустно.
Ротовый сервопривод..Напишите.(90);
Правый сервопривод для бровей..Напишите.(125.);
Левая бровь-сервомотор..Напишите.(55);
Перерыв.;
Дело. 2:
Ротовый сервопривод..Напишите.(90);
Правый сервопривод для бровей..Напишите.(60);
Левая бровь-сервомотор..Напишите.(120);
Перерыв.;
}
)
Tags
Modellquelle
