ДАТЧИК ТЕМПЕРАТУРЫ С ЗАПИСЬЮ ДАННЫХ

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

Так что, я модифицировал исходный код из статьи, добавив другую библиотеку для дисплея, чтобы я мог использовать свой LCD 16х2 I2C дисплей, и DHT11 библиотеку, по вполне понятным причинам.

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

Исходный код:

// ДАТЧИК ТЕМПЕРАТУРЫ И ВЛАЖНОСТИ С ВОЗМОЖНОСТЬЮ ЗАПИСИ ДАННЫХ И ДАТЫ И ВРЕМЕНИ ИХ ПОЛУЧЕНИЯ

// С ИСПОЛЬЗОВАНИЕМ ARDUINO UNO, 16X2 I2C LCD ДИСПЛЕЯ, DHT11 ДАТЧИКА

//

//Исходный код создан Husham Samir и находится наn instructables.com //

// http://www.instructables.com/id/Temperature-Data-Logger-1/ //

//

// Модифицирован Timofte Andrei 17 января 2015

// Заменена исходная библиотека Liquid Crystal для LCD дисплея на NewLiquidCrystal

// добавлена библиотека для dht11

// добавлена кнопка для включения LCD дисплея

//

// Для подробной информации смотрите ссылку ниже:

// https://timofteandreidiy.wordpress.com/2015/01/17/arduino-datalogger-with-dht11-sd-card-i2c-lcd-and-rtc-english/

//

// или

//

// https://www.youtube.com/watch?v=84qdtLBx3nk

//

// Sharing is caring!

//

// Модуль SD карты подключается следующим образом:

// ** MOSI - пин 11

// ** MISO - пин 12

// ** CLK - пин 13

// ** CS - пин 8

 

//Часы реального времени и I2C LCD дисплей

// SDA - пин A4

// SCL - пин A5

 

// Датчик DHT11

// Пин 1 - 5V

// Пин 2 - Data -> D2 на Arduino

// Пин 3 - NC

// Пин 4 - GND

 

// Кнопка

// A2]------------+

//     R 10K     |   Ключ

// +5V--[===]-----+----[/]---+

//                           |

// GND-----------------------+

 

#include <dht11.h>

#include <LiquidCrystal_I2C.h>

#include <Wire.h>

#include <RTClib.h>

RTC_DS1307 rtc;

#include <SD.h>

 

LiquidCrystal_I2C lcd(0x20, 4, 5, 6, 0, 1, 2, 3, 7, NEGATIVE);

 

const int buttonPin = A2;

int buttonState = 0;

dht11 DHT11;

#define DHT11PIN 2

 

const int chipSelect = 10; //можетевыбратьлюбойдругойсвободныйцифровойпин

 

   byte termometru[8] = //параметры по умолчанию для значка термометра

{

   B00100,

   B01010,

   B01010,

   B01010,

   B01110,

   B11111,

   B11111,

   B01110

};

 

   byte picatura[8] = //параметры по умолчанию для значка водяной капли custom character for water drop

{

   B00100,

   B00100,

   B01010,

   B01010,

   B10001,

   B10001,

   B10001,

   B01110,

};

 

void setup()   {

pinMode(buttonPin, INPUT);

   lcd.begin(16, 2);

   lcd.clear();

 

   lcd.createChar(1,termometru);

   lcd.createChar(2,picatura);

  

   lcd.setCursor(0,0);

   lcd.print("Initializing");

  

   lcd.setCursor(3,1);

   lcd.print("SD Card...");

  

   delay(1000);

   lcd.clear();

   pinMode(10, OUTPUT); // необходимо для работы с библиотекой SD модуля

   digitalWrite(10,HIGH);

// посмотрим, будет ли карта определена и инициализированна:

if (!SD.begin(chipSelect)) {

   lcd.setCursor(4, 0);

   lcd.print("SD Card");

   lcd.setCursor(0, 1);

   lcd.print("is not present");

   // ничего больше не делать:

   delay(3000);

   return;

}

lcd.setCursor(4,0);

lcd.print("SD Card");

lcd.setCursor(0,1);

lcd.print("initialized");

   delay(2000);

   lcd.clear();

 

Wire.begin();

rtc.begin();

if (! rtc.isrunning()) {

   lcd.clear();

   lcd.print("RTC NOT Running");

   //следующая строка устанавливает на часах дату и время, в которое скомпилирован скетч

// rtc.adjust(DateTime(__DATE__, __TIME__)); //использовать только, когда время и дата на часах устанавливаются в первый раз

}

// rtc.adjust(DateTime(__DATE__, __TIME__)); //используйте, если вам нужно точное время

delay(2000);

}

void loop() {

 

buttonState = digitalRead(buttonPin);

 

if (buttonState == LOW) {    

   //подсветка загорается на 3 сек после нажатия на кнопку

   lcd.backlight();

   delay(3000);

}

else {

   //и выключается

   lcd.noBacklight();

}

 

int chk = DHT11.read(DHT11PIN);

DateTime now = rtc.now();

 

156 06.04.2017