Собираю "немного умную дачу". Датчики: температуры, газа, движения, геркон. Кричащий динамик. Включение обогрева, общение по СМС.
Может ещё чего придумаю по ходу.
Споткнулся на датчике движения AM312. Цифровой выход 3В.Но цифровой выход с Ардуино - 1,3В. Как так?
Дело ни в схеме (использовал разные пины и по входу и по выходу), ни в Ардуино (менял МК, правда обе - нано), ни в датчике (тоже менял),
ни в коде (код смешной).
Но и это не всё. При задействовании библиотеки для DS18B20 (некоторых строк) и команд печати в Serial выход на цифровом пине Ардуино =0!
Где тут собачка зарыта?
При этом по схеме подключен только датчик движения со светодиодом.
Запитывал датчик отдельно.
В мониторе порта всё в порядке.
Всю свою недоделанную башку сломал уже!
Убрал в первом коде всё лишнее.
Напряжение пришло в норму.
Знатоки, в чём здесь дело?
Может ещё чего придумаю по ходу.
Споткнулся на датчике движения AM312. Цифровой выход 3В.Но цифровой выход с Ардуино - 1,3В. Как так?
Дело ни в схеме (использовал разные пины и по входу и по выходу), ни в Ардуино (менял МК, правда обе - нано), ни в датчике (тоже менял),
ни в коде (код смешной).
C++:
uint32_t a=0;
void setup() {
pinMode(3, OUTPUT);
}
void loop() {
boolean sensor = digitalRead(2);
if (sensor == HIGH)
{a++;
sensor = digitalRead(2);
if (a>=20000) digitalWrite(3, HIGH);
}
else a=0; digitalWrite(3, LOW);
}
Но и это не всё. При задействовании библиотеки для DS18B20 (некоторых строк) и команд печати в Serial выход на цифровом пине Ардуино =0!
Где тут собачка зарыта?
C++:
#include "OneWire.h"
#include "DallasTemperature.h"
#define temp 4
#define MQ2pin (A0)
float gazValue; // переменная для хранения значения датчика газов/концентрвция
boolean gaz; // переменная для хранения значения датчика газов/наличие
float t; // переменная для хранения значения датчика температуры
boolean go; // переменная для хранения значения датчика движения
uint32_t a; // переменная для хранения значения счётчика времени датчика движения
// Настройка oneWire для связи с любыми устройствами OneWire
OneWire oneWire(temp);
DallasTemperature sensors(&oneWire);
void setup()
{ Serial.begin(9600); //для проверки
pinMode(3, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
// Запуск библиотек
sensors.begin();
}
void loop() {
//температура:
sensors.requestTemperatures(); // при добавлении этого блока
t=sensors.getTempCByIndex(0); // напряжение падает до 0В
if (t>29) digitalWrite(5, HIGH);
else digitalWrite(5, LOW);
//датчик движения:
go = digitalRead(2);
if (go == HIGH)
{a++;
go = digitalRead(2);
if (a>=2000) digitalWrite(3, HIGH);
}
else a=0; digitalWrite(3, LOW);
//датчик газов при добавлении этого блока
gazValue = analogRead(MQ2pin); // напряжение падает до 0,2В
gaz = !digitalRead(7);
if (gaz == 1) digitalWrite(6, HIGH);
else digitalWrite(6, LOW);
Serial.print(t); // при добавлении этого блока
Serial.print(" "); // напряжение падает до 0В
Serial.print(go);
Serial.print(" ");
Serial.print(gazValue);
Serial.print(" ");
Serial.println(gaz);
}
Запитывал датчик отдельно.
В мониторе порта всё в порядке.
Всю свою недоделанную башку сломал уже!
Убрал в первом коде всё лишнее.
Напряжение пришло в норму.
Знатоки, в чём здесь дело?
Изменено: