Помогите с кодом для мониторинга и алярма температуры
- Войдите на сайт для отправки комментариев
Чт, 09/02/2017 - 11:00
Всем здрасти.Я пока есчё только учюсь програмировать ардуино.Хочу сделать мониторинг температуры котла с передачей данных по радиоканалу и аварийной сигнализацыи при достижении определённой температуры.Передачу данных сделать удалось,но никак не пойму,как сделать чтобы при определенной температуры сенсора 1,срабатывал зумер
#include <SPI.h> #include "nRF24L01.h" #include "RF24.h" #include <DallasTemperature.h> #include <Wire.h> #include <LiquidCrystal_I2C.h> #include <OneWire.h> LiquidCrystal_I2C lcd(0x27, 20, 4); const uint64_t pipe = 0xF0F1F2F3F4LL; //идентификатор передачи данных. RF24 radio(9, 10); //указываем пины подключения передатчика. OneWire oneWire(7); //указываем пины для подключения датчиков ds18b20. DallasTemperature ds(&oneWire); //активируем библиотеку ds. DeviceAddress sensor1 = {0x28, 0x46, 0x80, 0x03, 0x00, 0x00, 0x80, 0x16}; //адрес 5 датчика. DeviceAddress sensor2 = {0x28, 0xC6, 0xFD, 0x03, 0x00, 0x00, 0x80, 0x7D}; //адрес 6 датчика. DeviceAddress sensor3 = {0x28, 0xE7, 0xF9, 0x03, 0x00, 0x00, 0x80, 0xE3}; //адрес 7 датчика DeviceAddress sensor4 = {0x28, 0x7E, 0x00, 0x04, 0x00, 0x00, 0x80, 0x17}; //адрес 8 датчика void setup(){ Serial.begin(9600); //открываем пот обмена данными. ds.begin(); //запускаем функцию считывания температуры ds. radio.begin(); //делаем инициализацию. lcd.begin(); delay(2); //ждем реакции модуля передачи данных. radio.setChannel(12); // канал для передачи данных (0-127). radio.setPALevel(RF24_PA_HIGH); //указываем мощность передатчика. radio.openWritingPipe(pipe); // открываем трубу на передачу. } void loop(){ ds.requestTemperatures(); // считываем температуру с датчиков float data [4]; //создаем массив из 4-х переменных. data[0] = float(ds.getTempC(sensor1)); //присваиваем первому значению массива данные с sensor1 (за один раз можно отправить до 32 байт). data[1] = float(ds.getTempC(sensor2)); //присваиваем второму значению массива данные с sensor2 (за один раз можно отправить до 32 байт). data[2] = float(ds.getTempC(sensor3)); //присваиваем первому значению массива данные с sensor1 (за один раз можно отправить до 32 байт). data[3] = float(ds.getTempC(sensor4)); //присваиваем второму значению массива данные с sensor2 (за один раз можно отправить до 32 байт). radio.write(&data, sizeof(data)); // передаем массив и его размер. Serial.println(data[0]); //выводим данные в сериал порт для проверки. Serial.println(data[1]); //выводим данные в сериал порт для проверки. Serial.println(data[2]); //выводим данные в сериал порт для проверки. Serial.println(data[3]); //выводим данные в сериал порт для проверки. Serial.println(); //пробел. lcd.setCursor(0, 0); lcd.print("KP:"); lcd.print(data[0]); lcd.print("C"); lcd.setCursor(10, 0); lcd.print(" KG:"); lcd.print(data[1]); lcd.print("C"); lcd.setCursor(0, 1); lcd.print("NP:"); lcd.print(data[2]); lcd.print("C"); lcd.setCursor(10, 1); lcd.print(" NG:"); lcd.print(data[3]); lcd.print("C"); lcd.setCursor(0, 2); lcd.print("BP:"); lcd.print(data[0]); lcd.print("C"); lcd.setCursor(10, 2); lcd.print(" BG:"); lcd.print(data[0]); lcd.print("C"); lcd.setCursor(0, 3); lcd.print("BO:"); lcd.print(data[0]); lcd.print("C"); lcd.setCursor(10, 3); lcd.print(" LA:"); lcd.print(data[0]); lcd.print("C"); delay(2000); //ждеm 2sec }
никак не пойму,как сделать чтобы при определенной температуры сенсора 1,срабатывал зумер
НУ, так и делайте. Темпетарура с этого сенсора в data[0] живёт? Ну, так и пишите, например, для температуры болльшей, чем 33
А как запрограмировать ардуино,чтобы он видел зумер?Зумер подключен к цыфровомы пин2.Можете написать ету часть кода для зумера?Спасибо
А какой зуммер? Активный/пассивный?
Активный
ну, тогда пишите
в сетапе
pinMode(2, OUTPUT);
а когда нужно пищать
digitalWrite(2, HIGH);
Когда нужно замолчать
digitalWrite(2, LOW);
Извините за мою тупость,а можете вы переделать мой код ,а то я пока не очень понимаю?
Простите, не могу. Попробуйте обратиться в раздел "Ищу исполнителя", там ребята сделают.
Сделал как вы написали,но сеичас постоянно писчит зумер
Ну, так а Вы его затыкаете? Я э написал, как его затыкать, подайте на пин LOW он и заткнётся.
Ну, если самое простое решение, то просто
полсекунды попищит и заткнётся.
Незатыкаетса,сразу же после заливки скеча начинает писчать,дазе если температура и меньше 33.Может что не так делаю?
Так не бывает. Давайте полный скетч и схему подключения
Только указываю в сетапе pinMode(2, OUTPUT);,сразу начинает писчать,больше ничего ненадо писать
А схема где?
И ещё, скопипастите сюда содежржимое монитора порта.
Я бы написал if (data[0] > 33.0) но в принципе это не должно быть критично.
Так я так и написал,но только указываю в сетапе pinMode(2, OUTPUT);,сразу начинает писчать,больше ничего ненадо писать.Неполадки начинаютса уже с pinMode.Неужели ни ы кого нету идей?
Знаете, я вообще-то крайне матерюсь, но тут уже на грани. Я ДВАЖДЫ просил Вас показать схему. И просил скопипастить сюда отладочную печать. Вы принципиально не даёте эту информацию или беспринципно? Каких Вам идей надо, если Вы тут секретность развели?
Знаете, я вообще-то крайне матерюсь, но тут уже на грани. Я ДВАЖДЫ просил Вас показать схему. И просил скопипастить сюда отладочную печать. Вы принципиально не даёте эту информацию или беспринципно? Каких Вам идей надо, если Вы тут секретность развели?
Спасибо за советы,рашыл проблему.Проблема была в китайских зумерах,поменял на пасивный и всё заработало.
Спасибо за советы,рашыл проблему.Проблема была в китайских зумерах,поменял на пасивный и всё заработало.
Ну и отлично! Впредь тоже никогда не давайте никому схему, не публикуйте скетч и не рассказывайте что отладочные печати выдают ... и Вам обязательно помогут.
Ну и отлично! Впредь тоже никогда не давайте никому схему, не публикуйте скетч и не рассказывайте что отладочные печати выдают ... и Вам обязательно помогут.
Битва хрустальных шаров, дистанционное лечение скетчей по минимальному описанию.