Умная копилка. Жора
Обновлено: 25 мар. 2022 г.

Введение Перечень комплектующих Схема Сборка корпуса Скетч Arduino Ссылки на скачивание
DIY Робот - копилка, реагирует на движение. Если положить мелкий предмет ему в корыто, робот открывает рот и заглатывает содержимое в себя.
Для реализации проекта потребуется 3D-принтер, паяльник и установленная среда программирования Arduino IDE. Навыки программирования не обязательны.
Комплектующие
Для сборки проекта понадобится:

Arduino pro mini
Ультразвуковой дальномер HC-SR04
Сервопривод SG90 или аналогичный
Блок питания 5V или аккумуляторы
Корпус напечатанный на 3D-принтере
Светодиод и резистор 220 Ом (опционально)
Схема
Вместо Arduino Uno (на схеме) нужно использовать Arduino Pro Mini. Компактная плата легко умещается в голове робота.

Сборка
Качаем файлы для печати на 3d-принтере с Thingiverse и собираем по видеоинструкции. При желании можно раскрасить корпус акриловыми красками.
При первом запуском необходимо откалибровать положения сервопривода (открытое/закрытое/приоткрытые состояния). Смотрите соответствующие строки в коде.
В процессе калибровки потребуется перепрошивка контроллера, учтите это при сборке. Чтобы не демонтировать контроллер, можно подключить к Ардуино дополнительные провода для прошивки. Исходные файлы 3D-моделей в Solidworks есть здесь. Файлы для печати на 3D-принтере здесь.
Скетч
// Пины для подключения дальномера, светодиода, сервопривода//
#define trigPin 9 //
#define echoPin 8 //
#define led 10 //
#define servopin 7 //
//основные параметры
#define chewing 4 // Сколько раз пережёвываем проглоченное
#define blizost 10 // Расстояние, до которого будет реагировать датчик (в сантиметрах)
//состояния открытия рта. Всего их три: закрыт, открыт, приоткрыт.
//Настраиваются индивидуально под каждый сервопривод (значения от 0 до 180 градусов).
#define mouthClose 90 // Рот закрыт
#define mouthOpen 30 // Рот открыт
#define mouthAjar 70 // Рот приоткрыт
#include <Servo.h> // Подключаем библиотеку сервопривода
Servo Sergo;
void setup() {
Serial.begin(9600); //Инициализируем последовательный порт чтобы выводить в него расстояния определенное датчиком
pinMode(trigPin, OUTPUT); //
pinMode(echoPin, INPUT);
Sergo.attach(servopin); // в скобках номера пина к которому подключен сервопривод
sleep(); // установим сервопривод в исходное положение, т.е. рот закрыт
}
void loop() {
int duration, distance;
digitalWrite(trigPin, LOW); // Для большей точности установим значение LOW на пине Trig
delayMicroseconds(2);
digitalWrite(trigPin, HIGH); // Теперь установим высокий уровень на пине Trig
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH); // Узнаем длительность высокого сигнала на пине Echo
//Переводим скорость звука из 343 м/с в см/мкс: s = duration/29
//Поскольку расстояние пройдено дважды, то s = duration / (29*2)
distance = duration / 58; // Рассчитываем расстояние в сантиметрах
Serial.print(distance); // Выведем значение в Serial Monitor
Serial.println(" cm");
if (distance < blizost) { // Если расстояние до предмета меньше заданного, то проглатываем
om_nom_nom();
digitalWrite(led, HIGH);
}
delay(100);
}
void om_nom_nom() {
digitalWrite(led, HIGH); // Зажигаем лампочкой
Sergo.attach(servopin); // Подключаем сервопривод
delay(200);
Sergo.write(mouthOpen); // открываем рот и ждем пока предмет свалится в него
delay(700);
// жуем //
for (int x = 0; x < chewing; x++) {
Sergo.write(mouthAjar);
delay(250);
Sergo.write(mouthOpen);
delay(250);
Serial.println("nyam");
}
sleep(); //спим
}
void sleep(){
Sergo.write(mouthClose);
delay(250);
Sergo.detach(); // отключаем питание сервопривода, иначе он будет жужжать
digitalWrite(led, LOW); // гасим светодиод
}
Ссылки
Исходные файлы 3D-моделей в Solidworks есть здесь.
Файлы для печати на 3D-принтере здесь.
Файл скетча Arduino IDE по ссылке ниже.
Смотрите процесс создания робота на YouTube
Обсудить проект можно на нашем форуме.