26

Re: Измерение температуры (18B20) с записью данных на MicroSD

Тестируйте, в железе не проверял.

//    Подключение
 
//  CD       MOSI D11, MISO D12, CLK D13, CS D4, VCC +5V
//  18B20    OUT A1, +5V VCC // все датчики подключаются к одному входу
//  DS1307   SDA A4, SCL A5, VCC +5V
 
#include <SPI.h>
#include <SD.h>
#include <OneWire.h>
#include <Wire.h>
#include <DallasTemperature.h>
#include <iarduino_RTC.h> // http://rcl-radio.ru/wp-content/uploads/2020/01/iarduino_RTC.zip
OneWire oneWire(A1);
DallasTemperature t(&oneWire);
iarduino_RTC time(RTC_DS1307);
File myFile; 
float temp1,temp2,temp3,temp4;
unsigned long nomer;

void setup() {
  Serial.begin(9600);
  Serial.print("Initializing SD card...");
  if (!SD.begin(4)) {Serial.println(" Error!!!"); return;}
  else{Serial.println(" OK");}// проверка подключения
 
  t.begin();
  t.setResolution(12);
  time.begin();
  // УСТАНОВКА ВРЕМЕНИ
  //  time.settime(0,5,11,30,1,20,4);  // 0  сек, 5 мин, 11 час, 30, января, 2020 года, четверг
  //  time.settime(-1, -1, -1, 30, 1, 20); // Установить дату 30.01.2020, а время и день недели оставить без изменений
}
 
void loop(){
   time.gettime();
   Serial.println(time.gettime("d-m-Y, H:i:s, D")); // выводим время
   Serial.print(" ");
   t.requestTemperatures();
   Serial.println(temp1 = t.getTempCByIndex(0));//считываем температуру
   Serial.println(temp2 = t.getTempCByIndex(1));//считываем температуру
   Serial.println(temp3 = t.getTempCByIndex(2));//считываем температуру
   Serial.println(temp4 = t.getTempCByIndex(3));//считываем температуру
   nomer++;
 
   myFile = SD.open("temp.txt", FILE_WRITE);// открываем файл для записи, если файла нет, то создае его
   myFile.print(nomer);// запись
   myFile.print(" ");// запись

   myFile.print(time.day/10);myFile.print(time.day%10);myFile.print("-");
   myFile.print(time.month/10);myFile.print(time.month%10);myFile.print("-");
   myFile.print(time.year);myFile.print(" ");

   myFile.print(time.Hours/10);myFile.print(time.Hours%10);myFile.print("-");
   myFile.print(time.minutes/10);myFile.print(time.minutes%10);myFile.print("-");
   myFile.print(time.seconds/10);myFile.print(time.seconds%10);
   
   myFile.print(" t1 = ");myFile.println(temp1);
   myFile.print(" t2 = ");myFile.println(temp2);
   myFile.print(" t3 = ");myFile.println(temp3);
   myFile.print(" t4 = ");myFile.println(temp4);
   myFile.close();// закрываем файл
   delay(60000); // 10 мин
   delay(60000);
   delay(60000);
   delay(60000);
   delay(60000);
   delay(60000);
}

Re: Измерение температуры (18B20) с записью данных на MicroSD

Спасибо, шустро как у Вас!!! И библиотека  зашла как по маслу, вот загрузил, весь в ожидании... Через полчаса карту выну и обследую ее  на девственность, уверен, что все будет ок. Огромное спасибо.

28

Re: Измерение температуры (18B20) с записью данных на MicroSD

Поменяйте:
   delay(60000); // 10 мин
   delay(60000);
   delay(60000);
   delay(60000);
   delay(60000);
   delay(60000);
на
for(int i=0;i<60;i++){delay(60000);}

Я ошибся 60000 это не 10 минут, а 1 минута

Для тестирования i<60 исправьте на i<2 что бы получать данные каждые 2 минуты, потом вернете все обратно.

Re: Измерение температуры (18B20) с записью данных на MicroSD

Править не стал,  ибо если работает, то не чини! Огромное спасибо, конечно  все буду продолжать тестировать и пробывать улучшать, надо же учиться!! В планах не только  замер температуры и влажности, но и   так же вес улья,  микрофон для  контроля, а если овладею ESP8266 , то смогу регулировать  задвижку летковую, регулировку  вентиляции , и по ВайФаю.)),  Все эти электронные примочки , конечно же  не заменят живое общение с пчелками и их ужалениями, но  как помошники  весьма удобны  и  пока зима- будут изучать  эту увлекательную науку.Спасибо вам друзья.

Re: Измерение температуры (18B20) с записью данных на MicroSD

Добрый день, liman324! Обращаюсь к Вам с просьбой  еще  раз поправить Ваш скетч, а именно : вместо записи на MicroSD , производить вывод с датчиков в ексель через программу PLX-DAQ , да и часы  тоже не потребуются , ибо    DATA,TIME  можно взять  прямо с компа. И еще ..  а можно ли   брать данные с двух входов , где на каждом по четыре датчика. Буду признателен и чрезвычайно благодарен если сможете помочь.

Re: Измерение температуры (18B20) с записью данных на MicroSD

Сергей из Сибири пишет:

Добрый день, liman324! Обращаюсь к Вам с просьбой  еще  раз поправить Ваш скетч, а именно : вместо записи на MicroSD , производить вывод с датчиков в ексель через программу PLX-DAQ , да и часы  тоже не потребуются , ибо    DATA,TIME  можно взять  прямо с компа. И еще ..  а можно ли   брать данные с двух входов , где на каждом по четыре датчика. Буду признателен и чрезвычайно благодарен если сможете помочь.

Просто провожу  эксперимент, в одном улье разместил сразу две пчелинные семьи, через , так называемую ганемановскую решетку, которая позволяет рабочим пчелам переходить из отсека в отсек, а матки не могут пройти  изза своих габаритов. Я разместил в каждом отделении по 4 Dallasовских датчика , и от улья по четырех проводному кабелю  данные  принимаю в избушке. т.е. использую  два провода как + и -, а два провода  для передачи самих данных, подтягивающие резисторы  стоят на монтажной плате у Ардуино.

32

Re: Измерение температуры (18B20) с записью данных на MicroSD

К сожалению я не могу использовать PLX-DAQ, для нее требуется Windows, я использую другую ОС.

Re: Измерение температуры (18B20) с записью данных на MicroSD

liman324 пишет:

К сожалению я не могу использовать PLX-DAQ, для нее требуется Windows, я использую другую ОС.

А вывод просто на монитор через ком порт возможен, что б я мог просто смотреть?

34

Re: Измерение температуры (18B20) с записью данных на MicroSD

Это уже предусмотрено в скетче.

Re: Измерение температуры (18B20) с записью данных на MicroSD

liman324 пишет:

Это уже предусмотрено в скетче.

Я даже не пробывал, сегодня же проверю! А   второй вопрос , можно ли   брать данные с двух входов , где на каждом по четыре датчика. Что нужно  изменить в программе?

36

Re: Измерение температуры (18B20) с записью данных на MicroSD

OneWire oneWire0(A1);
DallasTemperature t0(&oneWire0);

OneWire oneWire1(A2);
DallasTemperature t1(&oneWire1);

чтение

   Serial.println(temp1 = t0.getTempCByIndex(0));//считываем температуру
   Serial.println(temp2 = t0.getTempCByIndex(1));//считываем температуру
   Serial.println(temp3 = t0.getTempCByIndex(2));//считываем температуру
   Serial.println(temp4 = t0.getTempCByIndex(3));//считываем температуру

   Serial.println(temp5 = t1.getTempCByIndex(0));//считываем температуру
   Serial.println(temp6 = t1.getTempCByIndex(1));//считываем температуру
   Serial.println(temp7 = t1.getTempCByIndex(2));//считываем температуру
   Serial.println(temp8 = t1.getTempCByIndex(3));//считываем температуру

Re: Измерение температуры (18B20) с записью данных на MicroSD

Огромное спасибо, сегодня же проверю и доложу!

Re: Измерение температуры (18B20) с записью данных на MicroSD

//  CD       MOSI D11, MISO D12, CLK D13, CS D4, VCC +5V
//  18B20    OUT A1, +5V VCC // все датчики подключаются к одному входу
//  DS1307   SDA A4, SCL A5, VCC +5V

#include <SPI.h>
#include <SD.h>
#include <OneWire.h>
#include <Wire.h>
#include <DallasTemperature.h>
#include <iarduino_RTC.h> // http://rcl-radio.ru/wp-content/uploads/ … no_RTC.zip
OneWire oneWire(A1);
DallasTemperature t(&oneWire);
iarduino_RTC time(RTC_DS1307);
File myFile;
float temp1,temp2,temp3,temp4;//float служит для хранения чисел с плавающей запятой где зпт. Точкой , если целые то можно int.
unsigned long nomer;
int row_excel = 0; // количество строк





void setup() {
  Serial.begin(9600);
  Serial.print("Initializing SD card...");
  if (!SD.begin(4)) {Serial.println(" Error!!!"); return;}
  else{Serial.println(" OK");}// проверка подключения

  t.begin();
  t.setResolution(12);
  time.begin();
  // УСТАНОВКА ВРЕМЕНИ
   time.settime(0,43,00,30,10,22,7);  // 0  сек, 5 мин, 11 час, 30, января, 2020 года, четверг
  //  time.settime(-1, -1, -1, 30, 1, 20); // Установить дату 30.01.2020, а время и день недели оставить без изменений

  Serial.println("CLEARDATA"); // очистка листа excel
  Serial.println("LABEL,Time,temp1,temp2,temp3,temp4, Num Rows"); // заголовки столбцов


}

void loop(){
   time.gettime();
   Serial.println(time.gettime("d-m-Y, H:i:s, D")); // выводим время
   Serial.print(" ");
   t.requestTemperatures();
   Serial.println(temp1 = t.getTempCByIndex(0));//считываем температуру
   Serial.println(temp2 = t.getTempCByIndex(1));//считываем температуру
   Serial.println(temp3 = t.getTempCByIndex(2));//считываем температуру
   Serial.println(temp4 = t.getTempCByIndex(3));//считываем температуру
   nomer++;

   myFile = SD.open("temp.txt", FILE_WRITE);// открываем файл для записи, если файла нет, то создае его
   myFile.print(nomer);// запись
   myFile.print(" ");// запись

   myFile.print(time.day/10);myFile.print(time.day%10);myFile.print("-");
   myFile.print(time.month/10);myFile.print(time.month%10);myFile.print("-");
   myFile.print(time.year);myFile.print(" ");

   myFile.print(time.Hours/10);myFile.print(time.Hours%10);myFile.print("-");
   myFile.print(time.minutes/10);myFile.print(time.minutes%10);myFile.print("-");
   myFile.print(time.seconds/10);myFile.print(time.seconds%10);
   
   myFile.print(" t1 = ");myFile.println(temp1);
   myFile.print(" t2 = ");myFile.println(temp2);
   myFile.print(" t3 = ");myFile.println(temp3);
   myFile.print(" t4 = ");myFile.println(temp4);
   myFile.close();// закрываем файл


  row_excel++; // номер строки + 1
  Serial.print("DATA,TIME,"); // запись в excel текущей даты и времени
  Serial.print(temp1);
  Serial.print(",");
  Serial.print(temp2);
     Serial.print(",");
   Serial.print(temp3);
  Serial.print(",");
  Serial.print(temp4);
 
  Serial.print(",");
  Serial.println(row_excel);

  // если строк больше 50, то начинаем заполнять строки по новой
  if (row_excel > 50){
    row_excel = 0;
    Serial.println("ROW,SET,2");
  }
  delay(1000); // задержка

}

Чуть чуть отколхозил  скетч ,  теперь можно сохранять данные в Экселе.  Время задержки одна сек. просто для отладки и просмотра, а так как каждый выбирает свою судьбу и время сам. Спасибо уважаемый Админ.Жму руку!!!

39

Re: Измерение температуры (18B20) с записью данных на MicroSD

Попробуйте сделать так:

File myFile;

void loop(){

myFile = SD.open("temp.txt", FILE_WRITE);// открываем файл для записи, если файла нет, то создае его
   myFile.print(nomer);// запись
   myFile.print(" ");// запись

   myFile.print(time.Hours/10);myFile.print(time.Hours%10);myFile.print("-");
   myFile.print(time.minutes/10);myFile.print(time.minutes%10);myFile.print("-");
   myFile.print(time.seconds/10);myFile.print(time.seconds%10);

   myFile.print("A1  = ");myFile.println(tA1);
   myFile.print(" A2= ");myFile.println(tA2);
   myFile.print("A3 = ");myFile.println(tA3);
   myFile.print(" A4= ");myFile.println(tA4);
   myFile.close();// закрываем файл
//////////////////////////////////////////////////////

myFile = SD.open("temp1.txt", FILE_WRITE);// открываем файл для записи, если файла нет, то создае его
   myFile.print(nomer);// запись
   myFile.print(" ");// запись

   myFile.print(time.Hours/10);myFile.print(time.Hours%10);myFile.print("-");
   myFile.print(time.minutes/10);myFile.print(time.minutes%10);myFile.print("-");
   myFile.print(time.seconds/10);myFile.print(time.seconds%10);

   myFile.print("B1  = ");myFile.println(tB1);
   myFile.print(" B2= ");myFile.println(tB2);
   myFile.print("B3 = ");myFile.println(tB3);
   myFile.print(" B4= ");myFile.println(tB4);
   myFile.close();// закрываем файл

}