Avtoargon.ru

АвтоАргон
6 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Урок 9 — Подключаем датчик температуры и влажности DHT11 к Arduino

Урок 9 — Подключаем датчик температуры и влажности DHT11 к Arduino

Датчик температуры и влажности DHT11 очень распространен в Ардуино проектах. Например в умных домах. Даже не смотря на характеристики:

  • Потребляемый ток – 2,5 мА (максимальное значение при преобразовании данных);
  • Измеряет влажность в диапазоне от 20% до 80%. Погрешность может составлять до 5%;
  • Применяется при измерении температуры в интервале от 0 до 50 градусов (точность – 2%)
  • Питание – от 3 до 5 Вольт;
  • Одно измерение в единицу времени (секунду). То есть, частота составляет 1 Гц;

Как видим датчик DHT11 не очень точный. Но он достаточна дешевый. И для измерение в бытовых помещениях подходит.

Датчик может быть в виде модуля и у него всего 3 ноги для подключения. Как в моем случае.

Так и самостоятельный датчик. С 4 ногами. Схема подключения для него будет вот такая.

Мы рассмотрим подключения модуля. Подключение отличается не очень сильно.

Схема подключения DHT11 к Arduino NANO

Схема подключения DHT11 к Arduino UNO

Программа для обоих вариантов будет одинаковая.

Для подключения датчика DHT11 к Arduino потребуется библиотека DHT. Скачать можно здесь.

Для работы нежно установить еще и Adafruit_Sensor.

После установки библиотек выбираем пример в Arduino IDE для этого преходим (Файл -> Примеры -> DHT sensor -> DHTtester).

Или копируйте вот этот код. Это то же пример из библиотеки.

После загрузки кода в плату откроем монитор порта.

Данные температуры и влажности выводятся в виде строки с интервалом 2 сек.

Также выводится температура в Фаренгейтах и тепловой индекс.

Больше фото урока Подключаем датчик температуры и влажности DHT11 к Arduino. Смотрите тут.

Подписывайтесь на мой канал на Youtube и вступайте в группы в Вконтакте и Facebook.

Спасибо за внимание!

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

Подключение Uno Protoshield к Arduino и автоматическое управление вентилятором с помощью реле и датчика DHT11

Чего только не придумал человек для облегчения своей жизни. В любой отрасли люди хотят применить минимум сил для создания какого-либо продукта, они стараются делать его более компактным и удобным в использовании. И электротехника не является исключением. Представляем к вашему вниманию Uno Protoshield. Этот шилд является очень компактным и удобным для создания вашего проекта, особенно для массового подключения электронных элементов к Arduino. Если внимательно взглянуть на Protoshield, то можно заметить, что подключение проводов к плате воспроизводится с помощью пайки. Шилд имеет форму Arduino Uno неслучайно, из-за этого Protoshield подключается к Arduino напрямую. Также он имеет множество отверстий покрытых металлическим слоем, с помощью которых и воспроизводится подключение устройств.

Сегодня мы создадим очень полезный проект, который вы сможете установить у себя дома. Идея проекта состоит в том, что Ардуино, при считывании информации с датчика влажности и температуры DHT11, будет управлять нашим реле, который по необходимости будет включать вентилятор. Короче говоря, мы создадим климат контроль. Главным преимуществом нашей установки станет использование Uno Protoshield, так как он значительно уменьшит его размеры. Узнать подробную информацию о датчике влажности и температуры DHT11 и о реле вы сможете в разделе Arduino для начинающих. Ну а в этой статье мы подробно поговорим про, пока не известный нам, Uno Protoshield!

Характеристики Uno Protoshield

Как уже говорилось, Uno Protoshield используется для удобства и уменьшения размеров вашей установки. Шилд включает в себя большое количество отверстий покрытых металлическим слоем и предназначенных для соединения проводов с помощью пайки. Также Protoshield имеет два светодиода и две кнопки. Одна кнопка используется для сбросса, другая же — обычная кнопка, которую можно подключить к своему проекту, например, при нажатии — включить светодиод. Подключение шилда к Arduino реализуется методом наложения платы, сделав, так сказать, бутерброд.

Подключение нашего мини проекта

Для нашей работы нам необходимы следующие компоненты:

Все эти элементы можно приобрести по низкой цене и с высоким качеством в интернет магазине SmartElements.

Для большего удобства вы можете кликнуть мышкой по названию в списке выше, чтобы перейти к покупке товара.

После того, как вы приготовили компоненты, перейдем к подключению. Для этого нам понадобится надежная схема, но это не проблема!

Схема подключения показана с использованием макетной платы breadbord. Мы были вынуждены сделать так потому, что это выглядит нагляднее и разборчивее. Подключение через Uno Protoshield воспроизводится также, как и с помощью макетной платы, тут ничего сложного нет! Остается только аккуратно припаять соединительные провода к Protoshield и все готово.

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

Скетч программы для управления реле с помощью датчика температуры и влажности DHT11

Для работы датчика на Arduino нужно скачать и установить библиотеку DHT11.

Скачать библиотеку можно здесь.

После того, как мы скачали нужную библиотеку, ее нужно правильно установить. Скачанные файлы нужно переместить по следующему пути :

Диск C Progtam Files Arduino Libraries

#include «DHT.h» //библиотека для работы с DHT
#define DHTPIN 3 //Обозначаем номер пина, к которому подключен датчик DHT11
#define Relay 5 //Обозначаем номер пина, к которому подключен реле
DHT dht(DHTPIN, DHT11); //инициируем датчик DHT

void setup() <
pinMode (Relay, OUTPUT); //Инициализируем режим работы порта в режиме выхода
dht. begin();
Serial.begin (9600);
>

void loop() <
delay (2000);
float h = dht.readHumidity(); //Считываем влажность в переменную «h»
float t = dht.readTemperature(); //Считываем температуру в переменную «t»
if (isnan(t) || isnan(h)) < //если неправильно считалась информация <
Serial.println («Ошибка при считывании информации»); //выводим надпись в программе
> else < //иначе
Serial.print («Humidity: «); //выводим надпись Humidity
Serial.print (h); //выводим значение переменной влажности
Serial.print (» %t»); //выводим надпись %t
Serial.print («Temperature: «); //выводим надпись в программе
Serial.print (t); //выводим переменную температуры
Serial.println (» *C»); //выводим надпись *C
>
if (h > 40) //Указываем условие, если переменная «h» (влажность) больше 40%
<
digitalWrite (Relay, LOW); //то включаем наше реле, которое приводит в действие вентилятор
>
else //иначе
<
digitalWrite (Relay, HIGH); //Реле будет выключено, вентилятор не работает
>
/*Вы можете изменить переменную на переменную . Мы привели вам самый простой пример, его идею можно использовать для создания качественного проекта! */
>

Читать еще:  Что такое двигатель с объемом 00 литров

Подробный разбор скетча

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

1)Микроконтроллер считывает информацию с датчика влажности и температуры DHT11.
2)Если влажность, которую показал датчик, больше 40%, то включается реле, которая включает вентилятор.

В нашем скетче за основу берется влажность, именно из-за нее и включается реле, но вы можете изменить, и поставить вместо «h» и «t» и , тогда рабочее состояние реле будет зависеть уже от температуры. Также можно менять значение минимального значения переменной, для включения реле.

if (h > 40) //В этой строчке мы и можем изменить «h» на «t», а также поменять значение «40» на любое другое

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

pinMode (Relay, OUTPUT);
dht. begin();
Serial.begin (9600);

Здесь тоже все сделано по стандарту, инициализируем работы портов и включаем работу датчиков.

Следующая часть кода более интересна, но также не сложна.

float h = dht.readHumidity();
float t = dht.readTemperature();

На данном этапе мы указываем Arduino, чтобы он считывал информацию с датчика DHT11 в переменные «h» и «t».

if (h > 40)
<
digitalWrite (Relay, LOW);
>
else
<
digitalWrite (Relay, HIGH);
>

Заключительным действием мы обрабатываем данные и указываем, при каких значениях будет работать наше реле, а при каких не будет. Как говорилось раннее, эти значения можно менять!

Пришло время сравнить работу на макетной платой и с Unoprotoshield.

Как вы можете заметить, разница громадная. Наш проект с Uno Protoshield получился намного компактнее, и выглядит на много лучше чем с макетной платой. А как вы думаете?!

Надеюсь у вас все получилось! Если у вас остались вопросы, можете написать нам в вконтакте или в комментариях ниже. Мы постараемся ответить на ваши вопросы в скором времени!

Управление светодиодом в Arduino UNO

Видео. Освещение дома на Ардуино

— Для питания платы и LED ленты используется блок питания на 12 Вольт с выходным напряжением 1 Ампер. При этом общее потребление электроэнергии, если включить все освещение сразу, не превышает 15 Ватт, что сравнимо с одной энергосберегающей лампочкой. Но при этом освещение на Arduino работает в санузле (туалет совмещен с ванной), в прихожей, в коридоре на 2 этаже, в гостиной (зона отдыха и зона кухни).
Для управления освещением на Arduino используется пульт от телевизора. Кроме того, что автоматическое включение подсветки в ванной и коридоре — это очень удобно, можно еще и сэкономить на оплате за электроэнергию. Также в скетче прописан цикл для создания эффекта присутствия, когда вы уезжаете из дома на несколько дней. Освещение включается и выключается в разных комнатах по заданному алгоритму.

Основные принципы работы устройства

Рассматриваемый нами проект цифрового счетчика посетителей основан на использовании таких компонентов как датчики, двигатели, плата Arduino Uno и т.д. Этот счетчик будет способен подсчитывать количество посетителей в двух (обоих) направлениях. То есть он будет увеличивать счетчик посетителей когда человек проходит в центр/офис/стадион через входные ворота и уменьшать счетчик посетителей когда человек выходит из центра/офиса/стадиона через выходные ворота. Кроме указанных применений подобный счетчик можно также использовать на автопарковках и других общественных местах.

Проект разделен на 4 части: датчики, контроллер, дисплей для отображения числа посетителей и ворота. Датчик будет обнаруживать проходящих людей и подавать соответствующий сигнал на контроллер, который будет увеличивать или уменьшать счетчик посетителей в зависимости от того, вошел человек или вышел. Затем контроллер выдает команду на ЖК дисплей отобразить текущее количество посетителей.

Принцип обнаружения человека инфракрасным датчиком основан на том, что проходящий человек прерывает поток света на некоторое время и это прерывание света обнаруживается приемным инфракрасным датчиком.

Как сделать управление освещением на Ардуино

Для этого проекта нам потребуется:

  • плата Arduino Uno / Arduino Nano / Arduino Mega;
  • IR приемник Ардуино;
  • пульт ДУ;
  • источник питания DC 12В;
  • светодиодная лента;
  • транзисторы и резисторы;
  • PIR датчики движения;
  • паяльник, термопистолет, провода и изолента.


Схема. Освещение в комнате на Arduino Nano
Для включения LED ленты используются транзисторы 2N2222, заказанные за 60 рублей за штуку на Алиэкспресс. Характеристика 2N2222 транзисторов: макcимальное напряжение коллектор-база — 60 Вольт, макcимальное напряжение коллектор-эмиттер — 30 Вольт, макcимальное напряжение эмиттер-база — 5 В, макcимальный постоянный ток коллектора — 0.8 Ампер, максимальная рассеиваемая мощность — 0,5 Ватт.

В схеме два светильника, подключены через транзистор к Pin7 и Pin8, установлены в коридоре на 1 и 2 этаже, включаются автоматически только в темноте и при срабатывании датчиков движения. Светильник, подключенный к Pin6, установлен в ванной и включается автоматически от Pir датчика движения при любом освещении. Три светильника на Pin10, Pin11 и Pin12 управляются от пульта через ИК приемник.

Скетч. Управление освещением на Ардуино

Скачать скетч для управления освещением целиком можно скачать здесь. Также в программе есть цикл для работы в режиме «имитация присутствия», включаемый с пульта ДУ. Светильники в разных комнатах включаются в разное время, имитируя присутствие хозяев в квартире или в доме. Это пригодится тем, кто хочет дополнительно защитить свое жилье от нежданных гостей в свое отсутствие.

#include // подключаем библиотеку для IR приемника IRrecv irrecv(A5); // указываем пин, к которому подключен IR приемник decode_results results; // вводим переменные для циклов while byte n = 5; byte m = 5; // вводим переменные для счетчиков unsigned long counttime0; unsigned long counttime1; unsigned long counttime2; unsigned long counttime3; // назначаем имена для портов #define PIR_V 2 // ванная комната #define PIR_K1 3 // прихожая в доме #define PIR_K2 4 // коридор на 2 этаже #define LED_V 6 // ванная комната #define LED_K1 7 // прихожая в доме #define LED_K2 8 // коридор на 2 этаже #define LED_Z 10 // светильник в комнате #define LED_Z1 11 // светильник в комнате #define LED_Z2 12 // светильник в комнате #define FOTO A0 // датчик освещенности #define IR A5 // IR — приемник void setup() < // запускаем прием инфракрасного сигнала irrecv.enableIRIn(); // запускаем серийный монитор порта Serial.begin(9600); // назначаем режим работы портов pinMode(PIR_V, INPUT); pinMode(PIR_K1, INPUT); pinMode(PIR_K2, INPUT); pinMode(LED_V, OUTPUT); pinMode(LED_K1, OUTPUT); pinMode(LED_K2, OUTPUT); pinMode(LED_Z, OUTPUT); pinMode(LED_Z1, OUTPUT); pinMode(LED_Z2, OUTPUT); pinMode(FOTO, INPUT); pinMode(IR, INPUT); // выключаем светильники digitalWrite(LED_Z, LOW); digitalWrite(LED_V, LOW); digitalWrite(LED_K1, LOW); digitalWrite(LED_K2, LOW); digitalWrite(LED_Z1, LOW); digitalWrite(LED_Z2, LOW); >

Читать еще:  Что означает если горит значок двигателя

При длительном включении 2-х метровой LED ленты, транзисторы греются, поэтому используйте радиаторы для их охлаждения или используйте для управления освещением полевой MOSFET транзистор IRF530. У транзистора максимальное напряжение коллектор-база — 100 В, макcимальный ток коллектора 3 Ампера (при напряжении на затворе 5 В), максимальная рассеиваемая мощность — 88 Ватт.

Автоматическое освещение на базе Arduino


Эта самоделка позволит автоматически включать и выключать свет в помещении. Таким помещением у автора стал балкон, так как он курильщик и частенько на него ходит. Система самостоятельно распознает движение человека с помощью сенсоров и затем принимает решение — включить или выключить свет. По такому принципу можно сделать освещение где угодно, причем не только освещение, но и организовать работу любых электрических устройств.
В качестве контроллера здесь используется недорогая версия Arduino Nano.


Материалы и инструменты для самоделки: — контроллер Arduino Nano; — текстолитовые макетки; — датчики движения; — источник питания 5В; — реле; — паяльник с припоем; — провода; — материалы для изготовления корпуса электроники (оргстекло); — напильник.


Процесс изготовления:

Шаг первый. Доработка и установка реле

Сперва вся схема собирается и тестируется на бредборде. Все отлично заработало, для регулировки чувствительности к свету был добавлен потенциометр. Но при установке всех элементов на плату возникла небольшая проблема. Реле оказалось слишком большим и не влезало на макетку. В связи с этим нужно было немного доработать его напильником. Так как ни контактов ни дорожек там не было, то с этим проблем не возникло.
Еще возникла проблема с пайкой контактов реле, их пришлось перенести на другую сторону. Что же в итоге получилось можно увидеть на фото. Самым сложным, по словам автора, было сделать дорожки на плате. Для этих целей используется тоненькая проволока, флюс и олово. Получилось все довольно грубо, но в качестве эксперимента все сделано отлично. В итоге все прекрасно поместилось на плате размером 5х7 см. Плюсом платы стало то, что на ней есть отверстия, которые можно использовать при креплении корпуса из оргстекла.


Шаг второй. Пару слов о датчике движения
Автор не делал датчик движения фиксированным, поскольку была идея сделать его на «рожках», это позволит менять его направление при необходимости. Также пока однозначно не решено, где именно будет крепиться прибор. Особенность датчика в том, что при первом запуске ему надо дать время порядка 10-30 секунд. За это время он сам настроиться, произведет калибровку и будет работать как надо. В принципе, этот момент не так важен.
Шаг третий. Прошивка электроники
Прошивка собрана из кусков различных «туториалов» для датчиков. Работает электроника очень просто, когда датчик обнаруживает движение, идет сравнивание показателей фоторезистора с пороговым значением, которое необходимо для срабатывания реле. Это значение регулируется с помощью потенциометра. Если все требования соблюдены, реле включается на три минуты, можно задать и другой временной промежуток. Далее, если движения нет, то система отключает свет.

Чтобы проверить пороговые значения фоторезистора он был закрыт пальцем и затем автор направил на него фонарик мощностью в 2000 люмен.


В общей сложности с учетом праздников и помощи надежного коллеги — кота, на всю сборку было затрачено порядка 12-15 часов. Для работы системы достаточно источника питания в 4 Ватта, автору он обошелся в 200 рублей.

Подключается система тоже очень просто. Достаточно подключить освещение через реле и подать на электронику через источник питание в 5В.

После сборки системы вся электроника прячется в корпус, его можно сделать из оргстекла или подобрать любую другую коробочку, подходящую по форме и размерам. Ну а крепится устройство в любом удобном месте, чтобы оно не мешало, и не было подвержено воздействию сырости. Естественно важно продумать, где установить датчик движения.

avtomaticheskoe-osveschenie.rar [583 b] (скачиваний: 644)

Становитесь автором сайта, публикуйте собственные статьи, описания самоделок с оплатой за текст. Подробнее здесь.

Работа схемы

Структурно рассматриваемое нами устройство состоит из 4-х модулей: модуль датчиков, модуль управления, модуль отображения и модуль реле.

В модуле датчиков, схема которого представлена на рисунке ниже, мы имеем два инфракрасных датчика с инфракрасными диодами, потенциометр, компаратор (на операционном усилителе) и светодиоды. Потенциометр предназначен для установки опорного напряжения компаратора (для регулировки чувствительности устройства). Инфракрасные датчики обнаруживают отсутствие или присутствие объекта (человека) в поле своего действия и выдают соответствующие сигналы на компаратор. Компаратор сравнивает два напряжения и обеспечивает соответствующий цифровой сигнал на своем выходе. В представленном устройстве мы использовали два компаратора (поскольку у нас два модуля инфракрасных датчиков), реализованных на микросхеме LM358.


Модуль управления построен на основе платы Arduino UNO, которая используется для управления всем устройством. Выходы компараторов подсоединены к цифровым контактам 14 и 19 Arduino. Плата Arduino считывает сигналы с этих цифровых контактов и на их основе выдает соответствующие управляющие сигналы на реле, которое управляет включением и выключением цепи электрической лампочки (bulb).

Модуль отображения состоит из ЖК дисплея 16×2, на котором будет отображаться число людей, находящихся в комнате и статус света (включен/выключен) когда никого нет в комнате.

Модуль реле состоит из транзистора BC547 и реле на 5 В, управляющим включением/выключением электрической лампочки. Транзистор необходим для управления реле поскольку плата Arduino не обеспечивает необходимые значения токов и напряжений для этого. Плата Arduino будет подавать управляющие команды на транзистор, а он с помощью реле будет включать и выключать электрическую лампочку.

Полная схема устройства представлена на следующем рисунке.


Выходы инфракрасных датчиков непосредственно подключены к цифровым контактам Arduino 14(A0) и 19(A5). База транзистора через резистор подключена к контакту 2 Arduino. ЖК дисплей подсоединен к Arduino в 4-битном режиме. Контакты RS и EN ЖК дисплея подключены к контактам 13 и 12 Arduino. Контакты данных ЖК дисплея D4-D7 подключены к контактам 11-8 Arduino.

Читать еще:  Вибрация двигателя при сбросе газа на холостом ходу

Ардуино контроль температуры и управление двигателем

Здравствуйте уважаемые форумчане.Обращаюсь с такой проблемой:

Недавно решил своими силами сделать устройство позволяющее плавно менять скорость вентилятора( 220 V) в зависимости от температуры.

Для начала решил подключить датчик температуры DS18B20 и прописать логику, для проверки использовал стандартный ШИМ arduino + двигатель постоянного тока через MOSFET. Результат меня более чем устроил, все завелось с пол пинка и олично выполняло свои функции.

Датчик температуры DS18B20 , использовал стандартные библиотеки.
Первый потенциометр VAR_REZ задаёт температуру включения вентиляции (на наименьших оборотах) , второй потенциометр VAR_REZ2 задает температуру на которой вентилятор выйдет на максимальные обороты. Соотношением этих двух резисторов можно довольно тонко настроить соотношение эффективности охлаждения к уровню шума.

вот код: сильно не ругайте он первый у меня

#include
#include
#define VAR_REZ A0
#define VAR_REZ2 A1
#define ONE_WIRE_BUS 10//назначение термодатчика на пин 10
OneWire oneWire ( ONE_WIRE_BUS );
DallasTemperature sensors (& oneWire );
int led = 13 ;
int pwm = 9 ;

void setup ( void )
<
pinMode ( led , OUTPUT );
pinMode ( pwm , OUTPUT );
Serial . begin ( 9600 );
Serial . println ( «Start» );
analogWrite ( pwm , 255 );
delay ( 2000 );
sensors . begin ();
>

void loop ( void )

int valrez = analogRead ( VAR_REZ );
int valrez2 = analogRead ( VAR_REZ2 );
int tempmin = map ( valrez , 147 , 1023 , 2000 , 5000 ) ;
int tempmax = map ( valrez2 , 135 , 1023 , 2000 , 5000 ) ;
Serial .print( » Requesting temperatures. » );
sensors . requestTemperatures (); // Send the command to get temperatures
Serial . println ( «DONE» );
Serial .print( «min temp-» );
Serial . println ( tempmin );
Serial .print( «max temp-» );
Serial . println ( tempmax );
Serial . println ( valrez );
Serial . println ( valrez2 );

int pwmval = map ( sensors . getTempCByIndex ( 0 )* 100 , tempmin , tempmax , 10 , 255 );
Serial .print( «pwm-» );
Serial . println ( pwmval );

if ( sensors . getTempCByIndex ( 0 )* 100 tempmin )

else if ( sensors . getTempCByIndex ( 0 )* 100 > tempmax )

else if ( sensors . getTempCByIndex ( 0 )* 100 > tempmin )

Serial .print( «Temperature: » );
Serial .print( sensors . getTempCByIndex ( 0 ));
if ( sensors . getTempCByIndex ( 0 )* 100 > tempmin ) digitalWrite ( led , HIGH );
if ( sensors . getTempCByIndex ( 0 )* 100 tempmin ) digitalWrite ( led , LOW );

Вдохновлённый первым успехом решил начинать с 220v. И тут начались настоящие траблы))Первым ударом было то что придётся отказаться от любимой функции analogWrite,вторым-то что придётся мутить обратную связь и.т.д.

Короче в какой то момент начал понимать что задачу не по зубам взял. Но в какой то момент натолкнулся на статью на Вашем форуме, собрал устройство (пришлось немного изменить номиналы резисторов ) залил скетч из первого поста ,протестировал и понял что данный диммер полностью подходит для моих целей. И с разбегу переписал свой скетч добавив туда код и библиотеки диммера. И всё как будто заработало- логика выполняется , скорость вращения меняется. но вентилятор вращается с прерываниями которое задаёт опрос датчика температуры . (видно когда порт мониториш)

В варианте с стандартным ШИМом такого не наблюдалось.Всю голову сломал то ли значение Dimmer1 сбрасывается почему то, при опросе датчика температуры, или конфликт библиотек.( может тоже timer 1 использует )

но это всё лиш догадки.

В общем даже не знаю в какую сторону смотреть т.к. это первый проэкт на МК.

Буду рад любым предложениям, советам, критике , примерам)

Всем заранее спасибо)

Вот код переделаный:

Здесь все библиотеки использованые в проэкте.

#include «nanopins.h» //быстрое управление пинами
#include //использует Timer1
#include
#include
#define VAR_REZ A0
#define VAR_REZ2 A1
#define ONE_WIRE_BUS 10//назначение термодатчика на пин 10
OneWire oneWire ( ONE_WIRE_BUS );
DallasTemperature sensors (& oneWire );
int led = 13 ;
volatile uint8_t tic , Dimmer1 , Dimmer2 , Dimmer3 ;

void setup ()
<
D4_Out ; //Настраиваем порт на выход Dimmer1
D5_Out ; //Настраиваем порт на выход Dimmer2
D6_Out ; //Настраиваем порт на выход Dimmer3
D4_Low ; D5_Low ; D6_Low ; //установить на выходах низкий уровень сигнала
D2_In ; //настраиваем порт на вход для отслеживания прохождения сигнала через ноль
pinMode ( led , OUTPUT );
Serial . begin ( 9600 );
Serial . println ( «Start» );
sensors . begin ();

attachInterrupt ( 0 , detect_up , FALLING ); // настроить срабатывание прерывания int0 на pin 2

Timer1 . initialize ( 40 ); // Интервал срабатывания таймера в мкс
Timer1 . attachInterrupt ( halfcycle ); //будет вызыватся каждый раз при отсчете заданого времени
Timer1 . stop ();
>
//********************обработчики прерываний*******************************
void halfcycle () //прерывания таймера
<
tic ++; //счетчик
if( Dimmer1 tic ) D4_High ; //управляем выходом
if( Dimmer2 tic ) D5_High ; //управляем выходом
if( Dimmer3 tic ) D6_High ; //управляем выходом
>

void detect_up () // обработка внешнего прерывания. Сработает по переднему фронту синусоиды
<
tic = 0 ; //обнулить счетчик
Timer1 . resume (); //запустить таймер
attachInterrupt ( 0 , detect_down , RISING ); //перепрограммировать прерывание на другой обработчик
>

void detect_down () // обработка внешнего прерывания. Сработает по заднему фронту синусоиды
<
Timer1 . stop (); //остановить таймер
D4_Low ; D5_Low ; D6_Low ; //логический ноль на выходы
tic = 0 ; //обнулить счетчик
attachInterrupt ( 0 , detect_up , FALLING ); //перепрограммировать прерывание на другой обработчик
>
//*************************************************************************
void loop ()
<

int valrez = analogRead ( VAR_REZ );
int valrez2 = analogRead ( VAR_REZ2 );
int tempmin = map ( valrez , 147 , 1023 , 2000 , 5000 ) ;
int tempmax = map ( valrez2 , 135 , 1023 , 2000 , 5000 ) ;
Serial .print( » Requesting temperatures. » );
sensors . requestTemperatures (); // Send the command to get temperatures
Serial . println ( «DONE» );
Serial .print( «min temp-» );
Serial . println ( tempmin );
Serial .print( «max temp-» );
Serial . println ( tempmax );
Serial . println ( valrez );
Serial . println ( valrez2 );

int pwmval = map ( sensors . getTempCByIndex ( 0 )* 100 , tempmin , tempmax , 150 , 0 );
Serial .print( «pwm-» );
Serial . println ( pwmval );

if ( sensors . getTempCByIndex ( 0 )* 100 tempmin )

else if ( sensors . getTempCByIndex ( 0 )* 100 > tempmax )

else if ( sensors . getTempCByIndex ( 0 )* 100 > tempmin )

Serial .print( «Temperature: » );
Serial .print( sensors . getTempCByIndex ( 0 ));
if ( sensors . getTempCByIndex ( 0 )* 100 > tempmin ) digitalWrite ( led , HIGH );
if ( sensors . getTempCByIndex ( 0 )* 100 tempmin ) digitalWrite ( led , LOW );

голоса
Рейтинг статьи
Ссылка на основную публикацию
ВсеИнструменты
Adblock
detector