Да просто нашел эту тему , вроде подходит , новую не стал открывать :)
Датчик влажности почвы выдает значения от 270 в политом горшке до 770 на воздухе. Вроде нормально .
До подсоединения этого датчика и использования кнопок было так
// Датчик температуры и влажности dht11
// и вывод информации на LCD
//------------------------------------------датчик dht11------------------------------------------------------------------
#include "DHT.h" //библиотека датчика DHT11
#define DHTPIN 52 // ПИН подключения датчика
// выбираем тип датчика
#define DHTTYPE DHT11 // DHT 11
//#define DHTTYPE DHT22 // DHT 22 (AM2302)
//#define DHTTYPE DHT21 // DHT 21 (AM2301)
DHT dht(DHTPIN, DHTTYPE);
//------------------------------------------------------------------------------------------------------------------------
//----------------------------------LCD экран---------------------------------------------------------------------------
#include <Wire.h> // добавляем необходимые библиотеки
#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7 );
//-----------------------------------------------------------------------------------------------------
void setup() {
lcd.begin(16, 2);
lcd.print("Meteo");
lcd.setCursor(0, 1);
lcd.print(" Station");
Serial.begin(9600);
Serial.println("start");
dht.begin();
}
void loop() {
// Reading temperature or humidity takes about 250 milliseconds!
// Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
float h = dht.readHumidity();
float t = dht.readTemperature();
// check if returns are valid, if they are NaN (not a number) then something went wrong!
if (isnan(t) || isnan(h)) {
Serial.println("Failed to read from DHT");
} else {
Serial.print("Humidity: ");
Serial.print(h);
Serial.print(" %\t");
lcd.setCursor(0, 0);
lcd.print(" ");
lcd.setCursor(0, 0);
lcd.print("Hum: ");
lcd.print(h);
lcd.print(" %");
Serial.print("Temperature: ");
Serial.print(t);
Serial.println(" *C");
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.setCursor(0, 1);
lcd.print("Temp: ");
lcd.print(t);
lcd.print(" *C");
}
}
Единственное что не устраивало , так это что экран мигал. Видимо при обновлении цикла .
потом прикрутил кнопки для вывод температуры и влажности отдельно стало так
// Датчик температуры и влажности dht11
// и вывод информации на LCD
//датчик dht11
#include "DHT.h" //библиотека датчика DHT11
#define DHTPIN 52 // ПИН подключения датчика
// Выбираем модель датчика
#define DHTTYPE DHT11 // DHT 11
//#define DHTTYPE DHT22 // DHT 22 (AM2302)
//#define DHTTYPE DHT21 // DHT 21 (AM2301)
DHT dht(DHTPIN, DHTTYPE);
//-------------
//LCD экран
#include <Wire.h> // добавляем необходимые библиотеки
#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7 );
// Нажатые кнопки
int button;
const int BUTTON_NONE = 0;
const int BUTTON_RIGHT = 1;
const int BUTTON_UP = 2;
const int BUTTON_DOWN = 3;
const int BUTTON_LEFT = 4;
const int BUTTON_SELECT = 5;
int getPressedButton()
{
int buttonValue = analogRead(0); // считываем значения с аналогового входа(A0)
if (buttonValue < 100) {
return BUTTON_RIGHT;
}
else if (buttonValue < 200) { // для других кнопок на плате
return BUTTON_UP;
}
// else if (buttonValue < 400){
// return BUTTON_DOWN;
// }
// else if (buttonValue < 600){
// return BUTTON_LEFT;
// }
// else if (buttonValue < 800){
// return BUTTON_SELECT;
// } // -------------------------------
return BUTTON_NONE;
}
void setup() {
lcd.begin(16, 2); //наш экран
lcd.print("Meteo"); // начальная
lcd.setCursor(0, 1); //
lcd.print(" Station"); // заставка
Serial.begin(9600); // последовательнй порт
Serial.println("DHT11 test!"); // датчик влажности и температуры
dht.begin();
}
void loop() {
float h = dht.readHumidity();
float t = dht.readTemperature();
// Если значение правильное , то выводим его в порт
if (isnan(t) || isnan(h)) {
Serial.println("Failed to read from DHT");
delay(2000);
} else {
Serial.print("Humidity: ");
Serial.print(h);
Serial.print(" %\t");
Serial.print("Temperature: ");
Serial.print(t);
Serial.println(" *C");
}
//---------------------------------------------------
button = getPressedButton();
switch (button)
{
case BUTTON_RIGHT: // при нажатии кнопки выводим нужную информацию на экран
lcd.setCursor(0, 0);
lcd.print(" ");
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.setCursor(0, 0);
lcd.print("Humidity: ");
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.print(h);
lcd.print(" %");
break;
case BUTTON_UP:
lcd.setCursor(0, 0);
lcd.print(" ");
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.setCursor(0, 0);
lcd.print("Temperature: ");
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.print(t);
lcd.print(" *C");
break;
}
//---------------------------------------------------------------------------------
}
Этот вариант очень понравился :) кнопки срабатывали с вероятностью 90% примерно :) но при подключении датчика влажности почвы кнопки плохо реагируют. Вот решил обратиться к спецам.
И кстати два цифровых пина используются для точности измерений имхо . В коде то с одного + подают , то с другого . И потом находят среднее арифметическое . Я так понял для точности .
а насчет точности я бы поспорил. просто замер при разных токах через почву. характеристика скорее всего нелинейна, а с 2 токами так вообще калибровка веселая получается. чем выше ток, тем более веселая хим реакция на изм. выводах. пока калибровали на более высоких токах на низких все уплыло, на и на высоких немного тоже. ну дело ваше
а насчет точности я бы поспорил. просто замер при разных токах через почву. характеристика скорее всего нелинейна, а с 2 токами так вообще калибровка веселая получается. чем выше ток, тем более веселая хим реакция на изм. выводах. пока калибровали на более высоких токах на низких все уплыло, на и на высоких немного тоже. ну дело ваше
на кикстартере чувак пообешал с этих двух электродов еще кислотность почвы высчитывать и выдавать рекомендации сколько и каких удобрений нужно добавить :)
ничего я не калибровал. нашел в этой теме ссылку . подключил датчик как рекомендовано. взял их скетч. посмотрел значения на воздухе и в политом горшке . обрадовался :)
Но потом не получилось нормально добавить в мой скетч :(
а насчет точности я бы поспорил. просто замер при разных токах через почву. характеристика скорее всего нелинейна, а с 2 токами так вообще калибровка веселая получается. чем выше ток, тем более веселая хим реакция на изм. выводах. пока калибровали на более высоких токах на низких все уплыло, на и на высоких немного тоже. ну дело ваше
на кикстартере чувак пообешал с этих двух электродов еще кислотность почвы высчитывать и выдавать рекомендации сколько и каких удобрений нужно добавить :)
интересно как. это как измеряя расход бензина определять какая деталь требует замены в авто или еще лучше оставшийся ресурс каждой детали
на кикстартере чувак пообешал с этих двух электродов еще кислотность почвы высчитывать и выдавать рекомендации сколько и каких удобрений нужно добавить :)
интересно как. это как измеряя расход бензина определять какая деталь требует замены в авто или еще лучше оставшийся ресурс каждой детали
ну еще по расходу бензина можно высчитать стаж и возраст водителя :) а так же цвет глаз и волос
Вроде я писал что с выводом информации одновременно на экран проблем нет. Ну разве что экран мигает при каждом прохождении цикла.
Но раз есть кнопки , почему бы их не задействовать :)
Поэтому я и решил повесить на каждую кнопку свое значение. POT1 как раз и ловит нажатие кнопок . Если меньше 100 , то кнопка1 , если от 100 до 200 то кнопка2 и т.д. Я так понял что это из-за того что у меня не отдельные кнопки со своим пином каждая , а все 6 кнопок подключены к А0 видимо через разное сопротивление(знаний не хватает говорить точно) , отсюда и разное напряжение при нажатии кнопок, которое ловит POT1.
Последний скетч без датчика влажности почвы . Только датчик DHT11 и шилд экрана с 6-тью кнопками . Думаю начать стоит с него. Он по крайней мере работает :) Но , если кнопку нажимать достаточно быстро , то она может не сработать . Если держишь кнопку примерно пол секунды , то срабатывает в 99% , может и в 100% .
Как говорил выше , программу пишу первый раз. Поэтому хотелось чтоб знающие люди посмотрели. Посоветовали на счет правильности кода. Походу всетаки тему надо создать в другом разделе, а то и вправду у меня больше вопросов по коду , а не по железкам.
Хотим чтоб при включении устройства на экране было приветствие , в дальнейшем думаю выводить время. При нажатии на определенную кнопку , на экране выводилась нужная информация . кнопка1-температура , кнопка2-влажность, кнопка3-влажность почвы, кнопка4-приветствие. Помимо этого все 3 значения (влажность , температура и влажность почвы )должны передаваться в последовательный порт.
Что реализовано :
в этом скетче (не кусок , полный)
// Датчик температуры и влажности dht11
// и вывод информации на LCD
//датчик dht11
#include "DHT.h" //библиотека датчика DHT11
#define DHTPIN 52 // ПИН подключения датчика
// Выбираем модель датчика
#define DHTTYPE DHT11 // DHT 11
//#define DHTTYPE DHT22 // DHT 22 (AM2302)
//#define DHTTYPE DHT21 // DHT 21 (AM2301)
DHT dht(DHTPIN, DHTTYPE);
//-------------
//LCD экран
#include <Wire.h> // добавляем необходимые библиотеки
#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7 );
#define POT1 A0 // пин кнопок
float var1;
void setup(){
lcd.begin(16,2); //наш экран
lcd.print("Meteo"); // начальная
lcd.setCursor(0, 1); //
lcd.print(" Station"); // заставка
Serial.begin(9600); // последовательнй порт
Serial.println("DHT11 test!"); // датчик влажности и температуры
dht.begin();
pinMode(POT1,INPUT);
}
void loop() {
float h = dht.readHumidity();
float t = dht.readTemperature();
// Если значение правильное , то выводим его в порт
if (isnan(t) || isnan(h)) {
Serial.println("Failed to read from DHT");
}
else {
Serial.print("Humidity: ");
Serial.print(h);
Serial.print(" %\t");
Serial.print("Temperature: ");
Serial.print(t);
Serial.println(" *C");
}
//---------------------------------------------------
var1=analogRead(POT1);
if (var1 < 100) {
lcd.setCursor(0, 0);
lcd.print(" ");
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.setCursor(0, 0);
lcd.print("Humidity: ");
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.print(h);
lcd.print(" %");
}
else if (var1 < 200) {
lcd.setCursor(0, 0);
lcd.print(" ");
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.setCursor(0, 0);
lcd.print("Temperature: ");
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.print(t);
lcd.print(" *C");
}
//---------------------------------------------------------------------------------
}
реализовано вывод температуры и влажности на экран и в порт. Вопрос по этому скетчу , правильно ли все написано ? Можно ли улучшить код ? Почему при быстром нажатии на кнопку она иногда не срабатывает? Что с этим можно сделать ?
Что не реализовано : вывод на экран данных с датчика влажности почвы ввиду замороченного опроса этого датчика .
Помогите разобраться в коде, комментарии в самом коде:
#define voltageFlipPin1 6
#define voltageFlipPin2 7
#define sensorPin 0
void setup(){
Serial.begin(9600);
pinMode(voltageFlipPin1, OUTPUT);
pinMode(voltageFlipPin2, OUTPUT);
pinMode(sensorPin, INPUT);
}
void setSensorPolarity(boolean flip){ // Здесь мы чередуем: 6 включаем 7 выключаем, 7 включаем 6 выключаем. Зачем? Почему не подходит просто допустим 6 включать выключать, зачем их два?
if(flip){
digitalWrite(voltageFlipPin1, HIGH);
digitalWrite(voltageFlipPin2, LOW);
}else{
digitalWrite(voltageFlipPin1, LOW);
digitalWrite(voltageFlipPin2, HIGH);
}
}
void loop(){
setSensorPolarity(true);
delay(1000);
int val1 = analogRead(sensorPin);
delay(1000);
setSensorPolarity(false);
delay(1000);
// invert the reading
int val2 = 1023 - analogRead(sensorPin); // Что это делает и зачем?
reportLevels(val1,val2); // Что это делает и зачем?
}
void reportLevels(int val1,int val2){
int avg = (val1 + val2) / 2;
String msg = "avg: ";
msg += avg;
Serial.println(msg);
}
отвечать скорее буду не вам а умникам и умницам решившим блеснуть своей смекалкой и остротой ума.
у меня орденов нет поэтому буду рассуждать со своей точки зрения дилетанта
1. от переменны мест слогаемых сумма не меняется. поэтому хоть плюс справа хоть слева в обоих случаях результат примерно одинаков должен быть. а по данному коду получается: при диапозоне 0..10
val1 = 4
val2 = 10-4 = 6 //а зачем ?
(6+4) /2 = 5 // важно что среднее всегда будет 5. 1 и 9 , 2 и 8, 3 и 7 и т.д.
2. как я понимаю инверсию полярности мы делаем чтобы все каки, электролизы и земляные феи липли не только к одному пину а метались в непонятке.
ИТОГ: инверсия хорошо. арифметика из рук вон плохо в данном скетче.
и всегда очень легко ответить. гуглил свою проблемму. читал разные форумы статьи. на некоторые (не смотря на дату) хочеться ответить. вед задача и её решения не привязанны ко времени ;)
Недавно провел простенький опыт по изменению емкости электродов сухих и в воде. Получилось, что емкость изменилась примерно вдвое с 2-2,5пФ до 5пФ
ниже модель сенсора, выходные уровни OUT-хх устанавливаются примерно за 10мс. В качестве генератора любой собранный на цифре,
частота влияет на время установления, чем выше, тем быстрее.
Схема предполагает, что электроды, которые втыкаются в почву изолированные. Надо бы собрат макет попробовать, да все руки не доходят, может кто протестирует.
и кстати они делают более хитро чем на приведеной схеме... они запитывают от цифровых пинов.. и получается что гвозди не постоянно под напряжением а только в момент измерения.. тоесть по расписанию... что позволит экономить энергию и не производить гидролиз :)
почитал, и может пропустил. но нафига 2 цифровых пина если нужен только один чтобы не всегда гонять ток через почву?
а что бы загадочней было :)
ну может что то более оправданное, а то как то странно
ну может что то более оправданное, а то как то странно
ну для меня вообще странно что с выбора сенсора воды в заголовке все утекло в анализатор почвы.
ну может что то более оправданное, а то как то странно
ну для меня вообще странно что с выбора сенсора воды в заголовке все утекло в анализатор почвы.
ну если так то хоть HX711 добавить если уж анализатор, а с 10битами и рабочим участом например 300-800 в еденицах ацп маловато
Да просто нашел эту тему , вроде подходит , новую не стал открывать :)
Датчик влажности почвы выдает значения от 270 в политом горшке до 770 на воздухе. Вроде нормально .
До подсоединения этого датчика и использования кнопок было так
Единственное что не устраивало , так это что экран мигал. Видимо при обновлении цикла .
потом прикрутил кнопки для вывод температуры и влажности отдельно стало так
Этот вариант очень понравился :) кнопки срабатывали с вероятностью 90% примерно :) но при подключении датчика влажности почвы кнопки плохо реагируют. Вот решил обратиться к спецам.
И кстати два цифровых пина используются для точности измерений имхо . В коде то с одного + подают , то с другого . И потом находят среднее арифметическое . Я так понял для точности .
почти угадал с диапазоном)))
а насчет точности я бы поспорил. просто замер при разных токах через почву. характеристика скорее всего нелинейна, а с 2 токами так вообще калибровка веселая получается. чем выше ток, тем более веселая хим реакция на изм. выводах. пока калибровали на более высоких токах на низких все уплыло, на и на высоких немного тоже. ну дело ваше
почти угадал с диапазоном)))
а насчет точности я бы поспорил. просто замер при разных токах через почву. характеристика скорее всего нелинейна, а с 2 токами так вообще калибровка веселая получается. чем выше ток, тем более веселая хим реакция на изм. выводах. пока калибровали на более высоких токах на низких все уплыло, на и на высоких немного тоже. ну дело ваше
на кикстартере чувак пообешал с этих двух электродов еще кислотность почвы высчитывать и выдавать рекомендации сколько и каких удобрений нужно добавить :)
ничего я не калибровал. нашел в этой теме ссылку . подключил датчик как рекомендовано. взял их скетч. посмотрел значения на воздухе и в политом горшке . обрадовался :)
Но потом не получилось нормально добавить в мой скетч :(
почти угадал с диапазоном)))
а насчет точности я бы поспорил. просто замер при разных токах через почву. характеристика скорее всего нелинейна, а с 2 токами так вообще калибровка веселая получается. чем выше ток, тем более веселая хим реакция на изм. выводах. пока калибровали на более высоких токах на низких все уплыло, на и на высоких немного тоже. ну дело ваше
на кикстартере чувак пообешал с этих двух электродов еще кислотность почвы высчитывать и выдавать рекомендации сколько и каких удобрений нужно добавить :)
интересно как. это как измеряя расход бензина определять какая деталь требует замены в авто или еще лучше оставшийся ресурс каждой детали
на кикстартере чувак пообешал с этих двух электродов еще кислотность почвы высчитывать и выдавать рекомендации сколько и каких удобрений нужно добавить :)
интересно как. это как измеряя расход бензина определять какая деталь требует замены в авто или еще лучше оставшийся ресурс каждой детали
ну еще по расходу бензина можно высчитать стаж и возраст водителя :) а так же цвет глаз и волос
to art100
Я решил начать с малого , вот переписал код по вашему образцу
об этом вы говорили ? Это код без датчика влажности почвы .
4.ваши подпрограммы с ЛСД уже живые? показывают?
вот и открылось. чувак на кислоте торчит.
Вроде я писал что с выводом информации одновременно на экран проблем нет. Ну разве что экран мигает при каждом прохождении цикла.
Но раз есть кнопки , почему бы их не задействовать :)
Поэтому я и решил повесить на каждую кнопку свое значение. POT1 как раз и ловит нажатие кнопок . Если меньше 100 , то кнопка1 , если от 100 до 200 то кнопка2 и т.д. Я так понял что это из-за того что у меня не отдельные кнопки со своим пином каждая , а все 6 кнопок подключены к А0 видимо через разное сопротивление(знаний не хватает говорить точно) , отсюда и разное напряжение при нажатии кнопок, которое ловит POT1.
Последний скетч без датчика влажности почвы . Только датчик DHT11 и шилд экрана с 6-тью кнопками . Думаю начать стоит с него. Он по крайней мере работает :) Но , если кнопку нажимать достаточно быстро , то она может не сработать . Если держишь кнопку примерно пол секунды , то срабатывает в 99% , может и в 100% .
Как говорил выше , программу пишу первый раз. Поэтому хотелось чтоб знающие люди посмотрели. Посоветовали на счет правильности кода. Походу всетаки тему надо создать в другом разделе, а то и вправду у меня больше вопросов по коду , а не по железкам.
Имеем :
http://www.aliexpress.com/snapshot/6171181258.html
http://www.aliexpress.com/snapshot/6171181257.html
http://www.aliexpress.com/snapshot/6171216243.html
http://www.aliexpress.com/snapshot/6171041917.html
Что хотим :
Хотим чтоб при включении устройства на экране было приветствие , в дальнейшем думаю выводить время. При нажатии на определенную кнопку , на экране выводилась нужная информация . кнопка1-температура , кнопка2-влажность, кнопка3-влажность почвы, кнопка4-приветствие. Помимо этого все 3 значения (влажность , температура и влажность почвы )должны передаваться в последовательный порт.
Что реализовано :
в этом скетче (не кусок , полный)
реализовано вывод температуры и влажности на экран и в порт. Вопрос по этому скетчу , правильно ли все написано ? Можно ли улучшить код ? Почему при быстром нажатии на кнопку она иногда не срабатывает? Что с этим можно сделать ?
Что не реализовано : вывод на экран данных с датчика влажности почвы ввиду замороченного опроса этого датчика .
вот простой скетч для датчика влажности почвы
не могу их корректно объединить.
Вот создал тему http://arduino.ru/forum/programmirovanie/umnaya-teplitsa-na-baze-arduino-mega#comment-77779
У меня это не работает.
Помогите разобраться в коде, комментарии в самом коде:
отвечать скорее буду не вам а умникам и умницам решившим блеснуть своей смекалкой и остротой ума.
у меня орденов нет поэтому буду рассуждать со своей точки зрения дилетанта
1. от переменны мест слогаемых сумма не меняется. поэтому хоть плюс справа хоть слева в обоих случаях результат примерно одинаков должен быть. а по данному коду получается: при диапозоне 0..10
val1 = 4
val2 = 10-4 = 6 //а зачем ?
(6+4) /2 = 5 // важно что среднее всегда будет 5. 1 и 9 , 2 и 8, 3 и 7 и т.д.
2. как я понимаю инверсию полярности мы делаем чтобы все каки, электролизы и земляные феи липли не только к одному пину а метались в непонятке.
ИТОГ: инверсия хорошо. арифметика из рук вон плохо в данном скетче.
imho
Гыы, не прошло и года :)
всегда поражаюсь воскрешающим. Всегда хочется спросить:" какими судьбами ?"
и всегда очень легко ответить. гуглил свою проблемму. читал разные форумы статьи. на некоторые (не смотря на дату) хочеться ответить. вед задача и её решения не привязанны ко времени ;)
Недавно провел простенький опыт по изменению емкости электродов сухих и в воде. Получилось, что емкость изменилась примерно вдвое с 2-2,5пФ до 5пФ
ниже модель сенсора, выходные уровни OUT-хх устанавливаются примерно за 10мс. В качестве генератора любой собранный на цифре,
частота влияет на время установления, чем выше, тем быстрее.
Схема предполагает, что электроды, которые втыкаются в почву изолированные. Надо бы собрат макет попробовать, да все руки не доходят, может кто протестирует.
https://yadi.sk/i/MM90ciV7pwU7V
Правильнее, ИМХО, будет электролиз.
ведь задача и её решения не привязанны ко времени ;)
Согласен! Мне вот помогла инфа, спасибо :)