Mega 2560 + 6 DHT22 Проблемы с выводом данных
- Войдите на сайт для отправки комментариев
Ср, 27/08/2014 - 12:23
Добрый всем день.
Не погромист, по основному образованию иженегр-проектировщик. Пишу диссер, тема связана с вентиляцией. Нужно узнать масштаб длины турбулентности течения в масштабной модели. Сказано-сделано, вытянул с алибабы компоненты, почитал интернетов, подсоединил датчики, понахватался кусков кода и получил работающую схему, измеряющую температуру и влажность в 6 точках.
Сам скетч
#include <DHT22.h> //Импортирование библиотеки обработки данных с датчика DHT22 #include <stdio.h> //Импортирование библиотеки команд ввода-вывода данных #define DHT22_1_PIN 2 //Объявление переменной пина, к которому подключен датчик №1 #define DHT22_2_PIN 3 //Объявление переменной пина, к которому подключен датчик №2 #define DHT22_3_PIN 4 //Объявление переменной пина, к которому подключен датчик №3 #define DHT22_4_PIN 5 //Объявление переменной пина, к которому подключен датчик №4 #define DHT22_5_PIN 6 //Объявление переменной пина, к которому подключен датчик №5 #define DHT22_6_PIN 7 //Объявление переменной пина, к которому подключен датчик №6 DHT22 myDHT22_1(DHT22_1_PIN); //Содаем объект-сенсор №1 DHT22 myDHT22_2(DHT22_2_PIN); //Содаем объект-сенсор №2 DHT22 myDHT22_3(DHT22_3_PIN); //Содаем объект-сенсор №3 DHT22 myDHT22_4(DHT22_4_PIN); //Содаем объект-сенсор №4 DHT22 myDHT22_5(DHT22_5_PIN); //Содаем объект-сенсор №5 DHT22 myDHT22_6(DHT22_6_PIN); //Содаем объект-сенсор №6 void setup(void) //Описываем настройки программы { Serial.begin(9600); //Запускаем считываение данных с serial-порта со скоростью 9600б/с } void loop(void) //Описываем цикл программы { DHT22_ERROR_t errorCode; delay(2000); //Устанавливаем задержку меж измерениями в 2 секунды unsigned long time; // объявление переменной time типа unsigned long //Датчик 1 errorCode = myDHT22_1.readData(); //Считываем данные датчика 1 с пина 2 if (errorCode == DHT_ERROR_NONE) { doPrintTH(myDHT22_1.getTemperatureC(), myDHT22_1.getHumidity()) //Считываем температуру в Цельсиях и влажность ;} //Датчик 2 errorCode = myDHT22_2.readData(); //Считываем данные датчика 2 с пина 3 if (errorCode == DHT_ERROR_NONE) { doPrintTH(myDHT22_2.getTemperatureC(), myDHT22_2.getHumidity()) //Считываем температуру в Цельсиях и влажность ;} //Датчик 3 errorCode = myDHT22_3.readData(); //Считываем данные датчика 3 с пина 4 if (errorCode == DHT_ERROR_NONE) { doPrintTH(myDHT22_3.getTemperatureC(), myDHT22_3.getHumidity()) //Считываем температуру в Цельсиях и влажность ;} //Датчик 4 errorCode = myDHT22_4.readData(); //Считываем данные датчика 4 с пина 5 if (errorCode == DHT_ERROR_NONE) { doPrintTH(myDHT22_4.getTemperatureC(), myDHT22_4.getHumidity()) //Считываем температуру в Цельсиях и влажность ;} //Датчик 5 errorCode = myDHT22_5.readData(); //Считываем данные датчика 5 с пина 6 if (errorCode == DHT_ERROR_NONE) { doPrintTH(myDHT22_5.getTemperatureC(), myDHT22_5.getHumidity()) //Считываем температуру в Цельсиях и влажность ;} //Датчик 6 errorCode = myDHT22_6.readData(); //Считываем данные датчика 6 с пина 7 if (errorCode == DHT_ERROR_NONE) { doPrintTH(myDHT22_6.getTemperatureC(), myDHT22_6.getHumidity()) //Считываем температуру в Цельсиях и влажность ;} } void doPrintTH(float t, float h) //Вывод данных { Serial.print("Humidity: "); Serial.print(h); Serial.print(" %\t"); Serial.print("Temperature: "); Serial.print(t); Serial.println(" *C "); }
Очень надо бы в данный код впилить следующие фичи: номер датчика, номер измерения и время измерения
вот в таком виде
Numb | Sens | Time, sec | Temp, C | Himud, % |
ну если просто впилить то так))
ну если просто впилить то так))
Okay(
Ну а если серьезно, хотелось бы структурировать информацию, выдаваемую контроллером, с выводом номера, времени и т.п. Пределом мечтаний является портирование в MathCAD (для MathLab я туповат малость)
намек не поняли. ну да ладно. скажу по другому. вы хотите получить запись такого вида
Numb | Sens | Time, sec | Temp, C | Himud, % |
но где? в uart отправить? на дисплей вывести?
намек не поняли. ну да ладно. скажу по другому. вы хотите получить запись такого вида
Numb | Sens | Time, sec | Temp, C | Himud, % |
но где? в uart отправить? на дисплей вывести?
Я в пограмировании не особо силен, но хотелось бы, чтобы в мониторе СОМ порта выводилось время замера, номер замера и номер датчика и т.д. Если есть возможность результаты измерения напрямую записывать в txt файл например - то туда. Курил туториалы на предмет экспорта измерений, нашел для портирования в MathLabб но там портирование через промежуточную среду, а это для пролетария умственного труда черезчур тяжко
1. в мониторе тогда должна быть программа которая бы собирала все эти данные
либо вручную копировать и вставлять в блокнот. потом импорт в ексель, а там указать разбить данные по ячейкам
2. подцепить sd карточку и писать в txt
а потом уже обрабатывать как хочешь
насчет sd не подскажу. все руки никак не дойдут, но кто то тут уже делал
Вот скрин результатов с экрана COM порта, откуда я могу копировать данные вручную. есть два столбца с значениями, влажность и темпераутра. А нужно добавить еще столбцы с номером датчика, номером измерения, временем измерения
для начала хотел спросить вы в курсе про инертность датчиков?
для начала хотел спросить вы в курсе про инертность датчиков?
Да. Желательно, конечно бы осреднять измерения, сделанные раз в секунду, например, на промежутке 5 секунд например.
Ну и сама конструкция корпуса представляет собой гидравлическое сопротивление, препятсвующее конвекции воздушной массы
время каким образом определять? через millis() ?
Для подобия метеостанции я делал так:
- объявлял переменные для всех датчиков
- опрашивал все датчики с записью прочитанного в переменные
- делал из всех переменных строки
- Проталкивал значения одним заходом в формате <идентификатор><значение>...<идентификатор><значение><lf> (<lf> делал с помщью char(13))
На принимающей стороне была программа на делфи, которая ждала <lf> (нашел пример кода в интернете), принимала всё из порта, парсила строку и писала замер в sqlite-базу.
Serial запускал с параметром SERIAL_8N2. При одном стоповом бите <lf> порой терялся.
DHT22 дергать чаще раза в две секунды по описанию нельзя.
Попробуй через разницу millis() замерить время опроса всех датчиков, чтобы подобрать задержку между замерами. Погрешность на время передачи всё равно будет, но хотя бы замеры будут равномерно идти.
Меня пугают инженеры которые пишут дисертацию, но немогут освоить азы програмирования, тоесть логическое мышление отсутствует. Что ждать от такого инженера? Печалько. :(
А не надо от меня ждать чего-то. Вы погромист, я газодинамик. Если я вас начну спрашивать за краевые эффекты в пограничном слое околокритического течения, то я тоже испугаюсь. И да. Умение погромировать не есть обязательное условие логического мышления, инфа сотка, я не Аристотель.
В каком месте следует что я програмист? С наблюдательностью тоже все плохо? Хотя современная наука вроде целиком построена на наблюдениях за природой. Тут совсем не важно кто вы по специальности. Хоть космонавт, смысл в том что нормальный человек с общим образованием осваивает ардуино в течении недели. А ваши выкрики что вы дисер пишете и газодинамик а не програмист, ставят вас в один ряд с местным быдлом, которое с криками что он механик,пилот,химик и тд и тп, а НЕ ПРОГРАМИСТ...пытаются разжиться чем то нахаляву.
В тред пришел пухлявый. Больше сказать нечего. :(
В тред пришел пухлявый. Больше сказать нечего. :(
Так а вы не говорите. Напишите товарищу код и отпустите. Он тут больше никогда и не появится. Хорошо если спасибо вам на прощание скажет :)
А!!! Гешефтмастер)) Ну таки бы сrазу и сказали, шо пейсы душат гоrло и Вам таки нужен пrофит с сего дельца. Таки сrазу Вас огоrчу, я бедный евrей, ой вэй. И золотых зубов на сей теме Ви таки не заrаботаете.
Таки пrоходите мимо, не тrатьте свое дraгоценное вrемя.
"Хотя современная наука вроде целиком построена на наблюдениях за природой." - годно, нет, ну правда годно. Особенно квантовая механика. Особенно теория М-струн. Инфа сотка, я не Гейзенберг
Со временем стало чуть понятнее, спасибо)
А Вы датчик калибровали? если да, то как именно
Ой таки да, мы говорим о сотке шекелей? Ви таки делаете мне смешно.
Судя по тому что вам тяжело прочитать описание функции serial.print и добавить в ваш код пару переменных , ваше обучение нужно начинать где со второй четверти первого класса.
Ну, разобрались как сделать-то?
А то это ведь элементарно....
Добавить в функцию вывода еще переменную - номер, и секунды это millis()/1000 - тоже легко сделать вывод
Да и кстати про калибровку. Вы сотку потратьте лучше на нормальные датчики с заводской калибровкой. Как раз в районе 15 баксов за датчик и выйдет сотка.
А то не серьезно, дисертацию основывать на поделках для энтузазистов.
чем больше читаю форум, тем сильнее удевляюсь, почему вас еще не забанили.
чем больше читаю форум, тем сильнее удевляюсь, почему вас еще не забанили.
А вы отдельно тему заведите и будем там догадки строить. :)
Я вот кстати подумал тут. По сути у нас есть 2 группы
1.народ который имеет желание придумывать и собирать всякую интересную фигню. Но имеется проблема, фантазия дальше какой нибуть метеостанции или "умного" выключателя не двигается. Тоесть скукота и застой.
2. Народ навроде ТС, типа проводят какие иследования, диссертации пишут и нуждаются во всяких хитрых фиговинах. Но их попытки реализации выглядят , я тут машину собрал, но она у меня боком ездиет и не поворачивает, посоветуйте какой бензин заправить ,чтобы она ездида нормально.
Так вот , мне интересно. Что мешает тому-же ТС , прийти расказать что он там изучает, какие будут переспективы и где его иследования могут получить практическое применение. Заинтересовать народ идеей а не сотками. Потом расказать что ему нужно для практического тестирования. Тоесть дать идею для первой групы народа. И как результат получить и схемы и софт. И все рады и при деле
Но это видимо не вариант, нужно прийти вывалить кусок непонятно чего и с барского плеча бросить сотку халопам , а если халопы начнут уточнять, то тут побыковать это видимо традиция.
Со временем стало чуть понятнее, спасибо)
А Вы датчик калибровали? если да, то как именно
У меня DHT11 только есть, 22 я заказал на пощупать. 11-й показывает погоду на Марсе какую-то, хотя в дождь показания его растут. По крайней мере с обычным стрелочным барометром показания не совпадали.
Температура на правду вроде похожа.
Скорее всего датчик этот не калибруется никак. Для "школьных поделок" и демонстрации DHT может и подойдет, но для чего-то серьезно надо пиаскать более точный.
В любом случае радует тот факт, что производитель предоставил не только железки, но библиотеки к ним. :)
Dht22 чуть меньше глючит. Но показывает погоду на луне. Плюс к нему библиотек кто на что горазд. Они оба состоят из двух сенсоров, потому и коробка такая огромная.
Пухлый, ты таки реально дурачок или у тебя пмс разыгрался?
1. Я открыл тему, чтобы кто может и хочет, имел возможность помочь мне в том, в чем я не компетентен.
2. Прибегает Пухлый и начинает исходить на говно, из-за того, что не все в этом мире погромисты
3. Мне здесь никто куски кода не кидал. Только название функций и операторов, которые надо глянуть, что я и делаю.
Я же не заявляю, что все, кто не могут в аналитику капилярных течений должны быть переработаны на метан или отправлены в 4 класс? Нет. Хотелось привлечь к себе внимание - Ви таки привлекли. Мисчон комплиттед. Май конгратьюлейшенс
Может кому пользительно будет, нарытая инфа по DHT
http://www.dfrobot.com/image/data/SEN0137/AM2302_manual.pdf - мануал по АМ2302, с кривыми погрешностей датчика
http://www.kandrsmith.org/RJS/Misc/calib_dht22.html - статья по точной калибровке датчика DHT22
Пухлый, ты таки реально дурачок или у тебя пмс разыгрался?
1. Я открыл тему, чтобы кто может и хочет, имел возможность помочь мне в том, в чем я не компетентен.
2. Прибегает Пухлый и начинает исходить на говно, из-за того, что не все в этом мире погромисты
3. Мне здесь никто куски кода не кидал. Только название функций и операторов, которые надо глянуть, что я и делаю.
Я же не заявляю, что все, кто не могут в аналитику капилярных течений должны быть переработаны на метан или отправлены в 4 класс? Нет. Хотелось привлечь к себе внимание - Ви таки привлекли. Мисчон комплиттед. Май конгратьюлейшенс
Ну пока "исходите на гавно" исключительно Вы. Тут не школа благородных девиц чтобы на тон советчиков жаловаться. Напишите в "ищу исполнителя" - там Вас может(!) и будут обихаживать, хотя сильно сомневаюсь.
Номер измерения вы хотите выводить общий (его можно автоматом получить из секунд, прошедших с момента перезапуска) или конкретного датчика (будет инкрементироваться только при удавшемся измерении, то есть DHT_ERROR_NONE)? Если второе, то вот пример для датчика №4, для остальных сделаете аналогично.
Номер измерения вы хотите выводить общий (его можно автоматом получить из секунд, прошедших с момента перезапуска) или конкретного датчика (будет инкрементироваться только при удавшемся измерении, то есть DHT_ERROR_NONE)? Если второе, то вот пример для датчика №4, для остальных сделаете аналогично.
Душевно! Благодарствую. Все работает=)
Хочу спросить по DTH22. Пришло из китай 3 штуки. Беру стандартный пример скетча из библиотеки. Не работает. Датчик показывает влажность 1.0 и температуру 1.0. Резисторы стоят на 4,7КОм. Пробовал все датчики. Все как один работают так. Заметил что нормально начинают работать после сброса (нажатие на ресет) контроллера, примерно в половине случаев. И если попал на удачу, то работают нормально до следующего перебоя с питанием. Если просто снять питание и включить, не работают. Надо обязательно нажать ресет. Тогда, если повезёт, заработают. Подумал что в макетке проблема, может контакта нет. Развёл датчики по дому, спаял... Но всё также, при просто включении показывают 1,0. Питание проверил, ровно 5 вольт на датчике. С резистором экспериментировал, от 1КОм до 10КОм - результат не меняется.
Кто сталкивался? В чём может быть проблема? Показания каждые 10 минут в БД идут, бывает электричество моргнёт или отключают, и показания в базу не верные идут, пока не заметишь.
Иногда показания бывают 2,0 или 0,0.