IvanSerov

IvanSerov

На Пикабу
464 рейтинг 11 подписчиков 1 подписка 5 постов 1 в горячем
Награды:
5 лет на Пикабу
297

Звуковая сигнализация от датчика воды

Металлопласт - зло.

(Любителям "проще купить" не посвещается)

Потому что, если его пробивает, то утечки даже не слышно, а из образовавшейся трещинки вода брызжет как пулеверизатор. Решил смастерить примитивную звуковую сигнализацию на Arduino. Работает следующим образом: при попадании капли воды на датчик зумер начинает пищать двухтоновым сигналом частотой 1000 и 800 Hz.

Сам датчик. Гуглится как mh-rd arduino. У него существуют два выхода: аналоговый - для измерения уровня воды и цифровой - получаем просто сигнал высокого уровня, либо низкого, то есть всего два состояния. Потенциометром можно регулировать чувствительность.

Плата, если кому надо в формате SprintLayout

Ссылка на проект https://cloud.mail.ru/public/96E3/XLmmp7XRD , в котором содержатся плата (.lay) и код (.ino)

Основная задача моих самоделок - это саморазвитие. Если Вы считаете, что такое проще купить или зачем изобретать велосипед, то статья безусловно не для Вас. Прошу не писать такого в комментариях. Статьи на данную тематику предназначены исключительно для электронщиков. Таких как я.

Показать полностью 2
6

Очередной терморегулятор для летнего душа на дачу

Летний душ выглядит следующим образом: есть некое помещение, а над ним находится металлический бак с ТЭНом (не спрашивайте меня почему в летнем душе находится ТЭН. Сам не знаю). Соответственно температуру всего этого чуда дачного хозяйства и будем регулировать. Датчик надо установить таким образом, чтобы теплая вода циркулируясь в баке доходила до него в последнюю очередь. В моем случае планировалось где-то в 10-ти см под подогревателем и сразу над трубой подачи воды вниз в душ. ТЭН мощностью около 2-х кВт, а реле выдерживают как раз 10А, что и составляет 2,2 кВт. Может возникнуть вопрос почему два реле? Чтобы отсекать сразу и фазу и ноль.

Хотел довести всё до конца, но волей случая пришлось на какое-то время всё оставить. Думаю на следующий год всё реализую на 100%

На данный момент выкладываю для вас, уважаемые друзья только скетч.

Он полностью рабочий.

Для изготовления вам потребуется (если конечно надумаете):

Arduino Pro Mini 328 16MHz, 5V.

OLED 0,96"

Вот такие контакты для подключения кнопок, датчика и светодиода сигнализирующего о текущем подогреве

Модуль Реле на 5 Вольт двойное

...чуть не забыл. Датчик DS18B20 в герметичном исполнении

Это печатка для всего этого добра в формате LayOut6

Здесь можете скачать всё необходимое https://cloud.mail.ru/public/AeGZ/BJ9MM1E3e

ну а это ваш любимый пастебин http://pastebin.ru/T40ngV8j


В коде всё подробно описано в комментариях к каждой строке.

Если вас это заинтересовало, то Большое Спасибо за внимание!

Показать полностью 6
35

Таймер на Arduino и управление с пульта на 433 MHz

Один мой приятель играет в хоккей и когда узнал, что я увлекаюсь программированием МК, попросил сделать ему и его команде таймер на шесть минут.

Задачи поставил следующие:

1. Управление дистанционно (чтобы не подъезжать к табло)

2. Звуковая индикация

3. Световая индикация

4. Возможность прибавлять/убавлять минуты/секунды, а также пауза и сброс таймера

Подобрал следующие компоненты

Ардуино Мини -1шт.

Порядка ста светодиодов красного свечения

Радиоканальные модули на 433 Мгц (приемник и передатчик)

Реле на 12 Вольт

Звуковая сирена "Иволга"

Поскольку я всего лишь любитель в области программирования, то особо прошу не пинать)))

Представляю вам, дорогие пикабушники-радиолюбители, код этого изобретения.

Может кому понадобится еще. Если будут вопросы, обращайтесь. Всегда рад помочь

Собственно сам код:


#include <SevenSegmentDisplay.h> //Библоитека для работы с самыми обычными индикаторами

SevenSegmentDisplay<false, QuadriDigit<9,13,12,11> > ss(2,3,4,5,6,7,8,1); // значение false или true определяет полярность дисплея: общий катод или общий анод


/////////Переменные времени


unsigned m = 6; //минуты: то,что друг просил


unsigned s = 0; //секунды


unsigned t = 0; //общее значение времени


unsigned long preMillis1 = 0;


unsigned long preMillis2 = 0;


unsigned long preMillis3 = 0;


/////////Кнопки. Переменные



int dp = HIGH; //Выход точки в состояние HIGH


int out_relay = LOW; //Выход реле в состояние LOW


unsigned long c = 0;


void setup()


{

// сюда подключаются каналы приемника

pinMode(A0, INPUT); //Старт/Стоп


pinMode(A1, INPUT); //+


pinMode(A2, INPUT); //-


pinMode(A4, OUTPUT); //Выход на реле


pinMode(10, OUTPUT); //Выход на точку


}


void loop()


{/////////работа кнопок/////////////////////////////


if (digitalRead(A0)==HIGH) //Если кнопка нажата и удерживается, то


{


dp_blink(); //мигает точка и


if (millis() - preMillis1 > 1000)


{


preMillis1 = millis();


{


countdown(); //ведется отсчет


}


}



}


else


if (digitalRead(A0)==LOW) //Если кнопка отжата, то


{


digitalWrite (10,HIGH); //точка постоянно горит


}


/////////Прибавление/убавление минут///////////////


if (millis() - preMillis2 > 500) //Задержка полсекунды


{


preMillis2 = millis();


{


if(digitalRead(A1)==HIGH)


{


m++; //на прибавление


c=0; //сброс реле


}


if(digitalRead(A2)==HIGH)


{


m--; //или убавление


if (m == 0) //Если минуты равны 0, то


{


m=0; //присвоить минутам 0


c=0; //сброс реле


}


}


}


}


/////////вывод на индикатор//////////////////////


t = m*100+s;


if (t == 0)


{


relay(); //вызов функции реле


flash(); //вызов функции мигания индиктора


}


ss.print(t);


}


////////Управление реле///////////////////////


void relay()


{


c++;


if (c == 1) //Время работы реле


{


digitalWrite (A4, HIGH);


}


else


digitalWrite (A4, LOW);


}


/////////мигание индикатора: мигает 0:00


void flash()


{


digitalWrite(9, LOW);


digitalWrite(13,LOW);


digitalWrite(12,LOW);


digitalWrite(11,LOW);


digitalWrite(10,HIGH);


delay(250);


digitalWrite(9, HIGH);


digitalWrite(13,HIGH);


digitalWrite(12,HIGH);


digitalWrite(11,HIGH);


digitalWrite(10,HIGH);


delay(250);


}


/////////Отсчет/////////////////


void countdown()


{


if (s>0)


{


s--;


}


else if (s==0 && m>0)


{


s=59;


m--;


}


else if(s==0 && m==0)


{


t=0;


}


}


////////Мигание точки/////////////////////


void dp_blink()


{


if (millis() - preMillis3 > 500)


{


preMillis3 = millis();


if (dp == HIGH)


dp = LOW;


else


dp = HIGH;


digitalWrite(10, dp);


}


}

По ссылке найдете весь проект с библоитекой , а также файлы для Proteus v 7.7

https://cloud.mail.ru/public/L1wB/aYzdKNqxe

Показать полностью 2
Отличная работа, все прочитано!