Устройство для запуска робота-пылесоса по расписанию

Устройство для запуска робота-пылесоса по расписанию
Помните, каким был робот-пылесос «Кибернетика» в книге Н.Н. Носова «Незнайка в Солнечном городе»? Разве ему надо было напоминать, что пора браться за работу? Теперь, когда такие приборы стали реальностью, оказалось, что надо. Взять пульт и нажать на нём кнопку. Герой произведения Пачкуля Пёстренький, увидев такое, обязательно подметил бы: «какая же это автоматика, если кнопку нажимать надо, вот если бы он сам, без всяких кнопок». Автор Instructables под ником ShaperG тоже так подумал. И сделал своими руками устройство для запуска робота-пылесоса по расписанию.
Самоделка состоит из механического таймера для включения различных электроприборов по расписанию (фирмы Ikea или любой другой), блока питания, Arduino, макетной платы типа breadboard и перемычек «дюпон» (необязательны, можно соединить всё пайкой), двух светодиодов — видимого свечения и инфракрасного, двух резисторов на 330 Ом, корпуса фирмы Sparkfun или любого другого.

Устройство для запуска робота-пылесоса по расписанию
Подобрав все необходимые компоненты, мастер составляет схему. И опять во Fritzing-подобной программе, в данном случай — в онлайн-приложении Mekanizmalar. Такой способ составления схем нравится не всем, но как всё соединять — понятно.

Устройство для запуска робота-пылесоса по расписанию
Определившись со схемой, мастер приступает к программированию:

Устройство для запуска робота-пылесоса по расписанию
Берёт библиотеку здесь, а скетч — здесь. Упрощает скетч так, чтобы он при включённом питании непрерывно подавал команду «чистить» каждые пять секунд. Скетч придётся доработать, если модель пылесоса отличается от iRobot Roomba 530. Ну а у мастера получается вот что:

Устройство для запуска робота-пылесоса по расписанию Скетч здесь#include <IRremote.h>

/*

Super Simple Arduino Powerd Roomba Scheduler
by gowell2010@gmail.com

2013-08-03 Instructables release

Code adapted from: https://gist.github.com/probonopd/5181021

Send infrared commands from the Arduino to the iRobot Roomba
by probono

2013-03-17 Initial release

Copyright (c) 2013 by probono
All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:

1. Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

*/

IRsend irsend; // hardwired to pin 3; use a transistor to drive the IR LED for maximal range

int LED = 10;

void setup()
{
Serial.begin(9600);
pinMode(LED, OUTPUT);
digitalWrite(LED, HIGH); // turn the LED on (HIGH is the voltage level)

}

void loop()
{
roomba_send(136); // Send "Clean"
delay(5000); //Wait 5 seconds
}

void roomba_send(int code)
{
Serial.print("Sending Roomba code ");
Serial.print(code);
int length = 8;
unsigned int raw[length*2];
unsigned int one_pulse = 3000;
unsigned int one_break = 1000;
unsigned int zero_pulse = one_break;
unsigned int zero_break = one_pulse;

int arrayposition = 0;
// Serial.println("");
for (int counter = length-1; counter >= 0; —counter) {
if(code & (1<<counter)) {
// Serial.print("1");
raw[arrayposition] = one_pulse;
raw[arrayposition+1] = one_break;
}
else {
// Serial.print("0");
raw[arrayposition] = zero_pulse;
raw[arrayposition+1] = zero_break;
}
arrayposition = arrayposition + 2;
}
for (int i = 0; i < 3; i++) {
irsend.sendRaw(raw, 15, 38);
delay(50);
}
Serial.println("");

Serial.print("Raw timings:");
for (int z=0; z<length*2; z++) {
Serial.print(" ");
Serial.print(raw[z]);
}
Serial.print("nn");
}

Первоначально мастер проверяет работу скетча по выводу в монитор последовательного порта. Затем помещает всё в корпус и запитывает Arduino не от компьютера, а от блока питания, включённого через механический таймер.

Устройство для запуска робота-пылесоса по расписаниюУстройство для запуска робота-пылесоса по расписаниюУстройство для запуска робота-пылесоса по расписаниюУстройство для запуска робота-пылесоса по расписаниюУстройство для запуска робота-пылесоса по расписанию
Теперь, расположив устройство рядом с зарядной станцией, к которой робот-пылесос всегда возвращается, можно выставить откидными язычками механического таймера расписание его запуска. Лучше всего — один раз в сутки. Только не ночью, как в произведении Н.Н. Носова.

Понравилась статья? Поделиться с друзьями: