СОДЕРЖАНИЕ ►
Лазерная игрушка для котенка на Arduino — это простой проект для начинающих с минимальным количеством необходимых деталей. Игрушку для своего кота довольно легко сделать своими руками. Мы представим на этой странице схему сборки проекта с пошаговой инструкцией и представим программу для управления сервомоторами от Arduino, где вы можете подставить свои значения по скорости и времени игры.
Интерактивная лазерная игрушка для кота

Для изготовления игрушки из лазерной указки вам потребуется плата Arduino Uno, лазерный светодиод, два сервомотора, провода, изолента и клей. Стоит предупредить, что, как и любое другое изобретение, данный проект может принести, как вред, так и пользу. С одной стороны, ваш питомец может поиграть с пятном света на стене, с другой стороны недопустимо попадание луча лазера в глаза кошке и человеку.
Игрушка для кошки «лазерная указка» состоит из двух сервоприводов, которые поворачивают лазер по горизонтали и вертикали на разный угол и с разной задержкой времени. Первый сервопривод крепится на клей или термоклей к какому-либо основанию, второй сервопривод приклеивается на качалку (шестерню) первого моторчика. Модуль лазерного светодиода крепится на качалку второго светодиода.
Лазерная игрушка для кошек своими руками
Для этого проекта потребуется:
- Arduino Uno / Arduino Nano / Arduino Mega;
- два сервопривода;
- лазерный светодиод;
- провода «папа-папа»;
- термоклей, изолента, инструмент.

Схема подключения сервоприводов и светодиода представлена на картинке выше. Чтобы сделать конструкцию более надежной, лучше сделать корпус для игрушки на 3D принтере или придумать более надежное крепление к качалкам, так как при резких поворотах сервоприводы могут отклеиться. После сборки конструкции загрузите следующий скетч в плату Arduino Nano или другой микроконтроллер Ардуино.
Скетч для интерактивной лазерной игрушки
#include <Servo.h> // библиотека для сервомоторов Servo servo_h; // задаем имена для сервомоторов Servo servo_v; unsigned long minuts = 10 * 60000; // продолжительность игры в минутах unsigned long game_time; void setup() { servo_h.attach(9); // указываем порты для сервомоторов servo_v.attach(11); pinMode(7, OUTPUT); // включаем лазерный светодиод digitalWrite(7, HIGH); game_time = millis(); // запускаем отсчет времени } void loop() { /* в начале цикла задаем рандомные значения: - для поворота горизонтального серво (от 5° до 50°) - для поворота вертикального серво (от 2° до 20°) - задержки между поворотами (от 500 до 1000 мс) === здесь можно ставить свои значения === */ while (millis() - game_time < minuts) { int horizont = random(1, 15) * 5; int vertical = random(1, 15) * 2; int pausa = random(5, 10) * 150; servo_h.write(horizont); // поворачиваем серво servo_v.write(vertical); delay(pausa); } digitalWrite(7, LOW); // выключаем светодиод после окончания цикла }
Пояснения к коду:
- в программе включение лазерного модуля и запуск счетчика отсчета времени производится один раз в процедуре
void setup(); - процедура
whileбудет выполняться до тех пор, пока счетчик времени не станет больше заданного количества миллисекунд (minutes * 60000); - для повторного запуска игры необходимо перезагрузить микроконтроллер.
Еще раз предупредим об опасности попадания лазерного луча в глаза человека или животного. Также следите, чтобы пятно от лазерной игрушки не попадал на вещи, которые котенок может повредить и тем более на открытые окна. Вы можете здесь скачать одним архивом программу для игрушки на Ардуино, а также файлы для изготовления корпуса игрушки на лазерном или фрезерном ЧПУ станке.










Сделал коту такую игрушку — он очень доволен, играет с удовольствием
Здравствуйте! Где найти библиотеку для данного проекта?
Библиотека стандартная, ее не надо искать и устанавливать
а где архив?
Ссылка на файл корпуса для лазерной игрушки — здесь
Мой сын переделал схему и скеч. Установив на 2 pin PIR Датчик.
Теперь не надо перезагружать ардуино. По окончание цикла остоновится НО как только кошка пройдёт мимо цикл перезапустится. Можно остовлять включёным когда кот один дома.
СКЕЧ
#include
Servo servo_h;
Servo servo_v;
unsigned long minuts = 10 * 60000; // продолжительность игры
unsigned long game_time;
const int laserPin = 7;
const int pirPin = 2;
bool gameActive = false;
void setup() {
servo_h.attach(9);
servo_v.attach(11);
pinMode(laserPin, OUTPUT);
digitalWrite(laserPin, LOW);
pinMode(pirPin, INPUT);
}
void loop() {
if (digitalRead(pirPin) == HIGH && !gameActive) {
gameActive = true;
game_time = millis();
digitalWrite(laserPin, HIGH);
}
if (gameActive) {
if (millis() — game_time < minuts) {
int horizont = random(1, 15) * 5;
int vertical = random(1, 15) * 2;
int pausa = random(5, 10) * 150;
servo_h.write(horizont);
servo_v.write(vertical);
delay(pausa);
} else {
digitalWrite(laserPin, LOW);
gameActive = false;
}
}
}