вывод информации на microSD и система регулирования температурой

Xicalicer
Offline
Зарегистрирован: 01.06.2017

Здравствуйте,я-студент, нужна ваша помощь c проектом.
Есть Arduino uno,датчик температуры и влажности DHT11,модуль microSD,лампа(как нагревательный элемент, и реле.
Нужно обеспечить ведение отчетов о процессах с сохранением на флешку и обеспчить автоматическое управление устройствами(лампой) через реле.
Есть код,но я не могу понять как написать,чтобы датчик считывал информацию,к примеру каждые 30 минут, и сохранял это на флешку,затем реле определяет по эти данным включать лампу или нет
 

#include <SD.h>
#include <dht.h>
DHT sensor = DHT();  // Датчик температуры и влажности
File sensorDataFile;  // Файл в который будут записаны показания с датчика
char* SENSOR_DATA_FILE_NAME = "1.txt";  // Название файла
#define PIN 3 
int temp = 0 ;

void setup()
{
  Serial.begin(9600);
  // Подключаем сенсор к 0 аналоговому порту
  sensor.attach(A0);
  // Ждем готовность сенсора
  delay(1000);
  // SPI SS пин должен быть OUTPUT
  pinMode(10, OUTPUT);
 
  sensorDataFile.close();
  Serial.println("Finished.");
  
  pinMode(PIN, OUTPUT);// Устанавливаем реле
}

void loop()
{
  // Инициализируем СД карту
  Serial.print("Initializing SD card...");
  if (!SD.begin(4)) {
    Serial.println("initialization failed!");
    return;
  }
  Serial.println("initialization done.");
 
  // Открываем (или создаем, если его нет) файл для записи данных с датчика
  sensorDataFile = SD.open(SENSOR_DATA_FILE_NAME, FILE_WRITE);
  for (int i = 0; i < 10; i++)
  {
    // Проводим 10 замеров
    sensor.update();
    // Записываем удачные результаты в файл и в порт
    if (sensor.getLastError() == DHT_ERROR_OK && sensorDataFile)
    {
      char msg[128];
      sprintf(msg, "Current humidity = %d%% temperature = %dC",
              sensor.getHumidityInt(), sensor.getTemperatureInt());
      Serial.println(msg);
      sensorDataFile.println(msg);
    }
    delay(2000);
  }
  sensorDataFile.close();
  Serial.println("Finished.");
  if (temp < 10) {
    digitalWrite(PIN, HIGH);
  } else if (temp > 30) {
    digitalWrite(PIN, LOW);
  }    
}

 

Yarik.Yar
Offline
Зарегистрирован: 07.09.2014

Считаете минуты, каждую минуту сравниваете с 30, если совпало - обнуляем счётчик и мутим активность.

Xicalicer
Offline
Зарегистрирован: 01.06.2017

Можно подробней если не сложно,не могу вникнуть как это осуществить

 

Yarik.Yar
Offline
Зарегистрирован: 07.09.2014

С чем конкретно проблемы?

Xicalicer
Offline
Зарегистрирован: 01.06.2017

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

Yarik.Yar
Offline
Зарегистрирован: 07.09.2014

Чёрт побери, какие непонятливые студенты ныне.
Для того, чтобы каждые 30 минут считывать показания, надо иметь какую-то временную привязку, так? Важно ли точное значение этих 30 минут?
Описывайте тогда алгоритм работы реле, что оно должно делать в зависимости от показаний датчика.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Yarik.Yar пишет:
С чем конкретно проблемы?
1. С мозгами, вернее с их отсутствием.

2. Со сроками сдачи этой работы.