Открытие и закрытие окна с помощью Arduino
Да в принципе даже днём нас назойливо мучает усталость, зевота, сонливость, настроение падает, вдруг беспричинно накатывает хандра, голова болит, да и вообще от такого букет можно приболеть ненароком.
К счастью, мы знаем причину всех этих неприятных моментов, которые нам мешают жить поздней осень, зимой и совсем ранней весной это недостаток свежего воздуха. В летние месяцы, у нас почти каждый день открыты почти все окна, а вот с наступлением холодных пор, открываем окна значительно реже.
Врачи в один голос трубят, что проветривание помещения очень полезно для нашего здоровья в любое время года, независимо от погоды и температуры за окном.
Но порой мы бываем очень заняты домашними делами по дому или уходим на работу, забывая при этом проветривать свое жилое помещение, таким образом, чтобы воздух в квартире всегда оставался чистым и полезным для дыхания.
В этой статье мы рассмотрим конструкцию, которая умеет открывать и закрывать ваши окна в автоматическом режиме. Более того, вы даже сможете сами составить график и внедрить его в работу данной конструкции с помощью микроконтроллера Arduino.
Альтернативный и эстетичный способ, на наш взгляд - это встроить микроконтроллер в окно, чтобы он не бросался в глаза, если бы мы его например, просто бы закрепили на болтах к стене.
На наш взгляд наилучшее решение – это вмонтировать наш микроконтроллер под подоконник, так как там достаточно места для его размещения, а также если вдруг плата Arduino сгорит в силу различных обстоятельств, то мы с легкостью сможем её заменить, так как подоконник легко можно снять, если есть надобность и также легко поставить его на место.
Микроконтроллер Arduino будет управлять сильным серводвигателем, который в последствии будет перемещать наше окно. Вся конструкция также будет иметь специальные датчики расстояния. Таким образом вся конструкция станет как бы, ориентироваться в пространстве и этой даст свой наилучший положительный эффект при постоянных открытиях и закрытиях нашего окна.
Шаг 1: Список деталей и инструментов
Основные части для нашей конструкции:
- 1 шт. Адаптер питания для Arduino (входное напряжение 7-12 V);
- 1 шт. Микроконтроллер Arduino;
- 1 шт. Сильный серводвигатель для перемещения окна. В качестве примера: Towerpro MG995 Metal Servo с Gears (крутящий момент 10 кг);
- 2 шт. Несущая плата Pololu 1134 с Sharp GP2Y0D810Z0F;
- цифровой датчик расстояния 10 см;
- 1 шт. «Рычаг привода» для крепления датчиков 1 шт.
- проводка для подключения всех деталей к Arduino, не со слишком большим сечением, чтобы вместительны для корпуса небольшого оконного шарнира;
- некоторые металлические детали для крепления сервопривода к оконной раме, винты и т. д.;
- все необходимые инструменты для монтажа и т. д.;
- припой и паяльник;
- компьютер и USB-кабель для программирования Arduino;
Сначала мы сделаем держатель для сервопривода и прикрепим его к раме. Затем мы закрепим небольшую оконную петлю на самом окне.
Делаем регулируемый рычаг из медной катанки. Не закрепляйте рычаг сервомеханизма винтом до тех пор, пока вы сначала не приведете сервопривод в нулевое (закрытое) положение с помощью управляющей программы. Хорошо, что механика легко регулируется.
В качестве примера выбран сервопривод Towerpro с металлическими шестернями, чтобы продлить срок службы установки. Он достаточно легко перемещает окно. Скорость закрытия установлена очень медленная.
Имеются файлы dfx кронштейна сервопривода и рычага привода. Можете рассмотреть в наглядности.
Шаг 3: Размещение датчика
Помещаем три датчика, два между окнами (они хорошо работают через стекло). Преимуществом является то, что в платах Pololu есть крошечные SMD-светодиоды. Вы видите цветовую индикацию непосредственно, когда датчик обнаруживает объект.
Шаг 4: Центр управления
Коробка с Arduino удобно расположена под подоконником. Там нет выключателя питания. Вы просто подключаете или отключаете разъем питания.
Шаг 5: Код
Вот программа. Он написан на программном обеспечении Arduino IDE.
Скетч для нашей «оконной конструкции» довольно хорошо и упорядочено написан. Мы добавили в вашу пользу в код (скетч) некоторые задержки для обнаружения, потому что окно иногда само открывалось.
Сам скетч:
#include <Servo.h>
const int insidePin = 2; // sensor inside
const int betweenPin = 4; // sensor between
const int outsidePin = 6; // sensor outside
const int ledPin = 13; // the number of the LED pin
Servo servo1; // create servo object to control a servo, a maximum of eight servo objects can be created
int pos1 = 0; // variable to store the servo1 position
int windowState = HIGH;
int insideState = HIGH;
int outsideState = HIGH;
int betweenState = HIGH;
int helpState = HIGH;
void setup()
{
servo1.attach(10); // attaches the servo1 on pin 10 to the servo object
// initialize the LED pin as an output:
pinMode(ledPin, OUTPUT);
// initialize the sensors pins as an input:
pinMode(insidePin, INPUT);
pinMode(outsidePin, INPUT);
pinMode(betweenPin, INPUT);
servo1.write(180); // tell servo to go to position window closed, set state low
windowState = LOW;
}
void loop()
{
// read the state of the sensors:
// First INSIDE sensor
delay(500);
helpState = insideState;
insideState = digitalRead(insidePin);
if (insideState != helpState)
{
delay(1000);
insideState = digitalRead(insidePin);
if (insideState != helpState)
{
helpState = insideState;
}
else
{
insideState = helpState; // state has to be at least 10ms in changed -state to be changed
}
}
// *********************
// then OUTSIDE sensor
delay(500);
helpState = outsideState; // store current state
outsideState = digitalRead(outsidePin);
if (outsideState != helpState)
{
delay(1000);
outsideState = digitalRead(outsidePin);
if (outsideState != helpState)
{
helpState = outsideState;
}
else
{
outsideState = helpState; // state has to be at least 1s in changed -state to be changed NOT changed
}
}
// *********************
// lastly BETWEEN sensor
delay(500);
helpState = betweenState; // store current state
betweenState = digitalRead(betweenPin);
if (betweenState != helpState)
{
delay(1000);
betweenState = digitalRead(betweenPin);
if (betweenState != helpState)
{
helpState = betweenState;
}
else
{
betweenState = helpState; // state has to be at least 1s in changed -state to be changed
}
}
// *********************
// check if the cat wants inside or outside. If it is so, the state of one sensor is LOW:
if (((insideState == LOW) or (outsideState == LOW) or (betweenState == LOW)) and (windowState == LOW))
// cat at either windowsill or between windows and window closed
// open sesame!
{
for(pos1 = 180; pos1>=1; pos1-=1) // goes from 180 degrees to 0 degrees
{
servo1.write(pos1); // tell servo to go to position in variable 'pos'
delay(15); // waits 15ms for the servo to reach each position
}
windowState = HIGH;
digitalWrite(ledPin, HIGH); // turn LED on
delay (10000); // wait at least 10 secs
}
// maybe the cat is doing the things cats do elsewhere
// if so, we may as well close the window...
if ((insideState == HIGH) and (outsideState == HIGH) and (betweenState == HIGH) and (windowState == HIGH))
{
// close it will!
for(pos1 = 0; pos1 < 180; pos1 += 1) // goes from 0 degrees to 180 degrees
{ // in steps of 1 degree
servo1.write(pos1); // tell servo to go to position in variable 'pos'
delay(150); // waits 150ms for the servo to reach each position
}
windowState = LOW; // no delay here, be prepared to open immediately
digitalWrite(ledPin, LOW); // turn LED off
}
}
По умолчанию программа закрывается в начале. Если нет, он закрывает его первым. Рекомендуем вам убедится, что с сервоприводом все в порядке, прежде чем устанавливать его в нашу конструкцию, иначе ваша конструкция просто не заработает или будет работать некорректно!
Шаг 6: Соединения
Плата Arduino включает все датчики и серводвигатель с +5 В и GND.
Датчики подключены к следующим контактам Arduino:
- PIN 2 - датчик внутреннего вида,
- PIN 4 - датчик, расположенный в проеме окна,
- PIN 6 - датчик, выходящий наружу,
- PIN 10 - провод управления серводвигателями,
- PIN 13 - светодиод, который горит, когда окно находится в движении.
Шаг 7: Счастливый пользователь
Вы должны привыкнуть к автоматическому окну. Потому что поначалу вам может казаться что у вас дома завелся домовой, имя которому - Arduino. Но если без шуток, то вы получаете довольно интересный элемент умного дома. Ведь современные и дорогостоящие системы, выполняют практически те же функции, но потребители платят баснословные цены за эту инновацию. Зачем платить больше, если можно сделать самому?