Arduino nano, ads1115, lcd2004, rtc ds1307, SD card shield, 8-16ch adc data logger

preview_player
Показать описание

Рекомендации по теме
Комментарии
Автор

/*
Arduino nano, ads1115, lcd2004, ds1307, SD card, data logger 8-16ch
set for arduino ide. tools -> board -> arduino nano. tools -> CPU "Atmega328 old bootloader".
*/

#include <SPI.h>
#include <Wire.h>
#include <RTClib.h>
#include <SD.h> ; //
#include <Adafruit_ADS1015.h>
Adafruit_ADS1115 ads1(0x48); // указываем переменную модуля ADC и его адрес
Adafruit_ADS1115 ads2(0x49); // указываем переменную модуля ADC и его адрес
#include <LiquidCrystal_I2C.h>

#define MOSIpin 11 // For SD card
#define MISOpin 12 // For SD card
const int chipSelect = 10; // CS pin for the SD card


RTC_DS1307 RTC; //Говорим библиотеке часов что будем обращаться к ним через переменную Rtc
char TmeStrng[] = "0000/00/00, 00:00:00"; //19 ascii characters
//#define DS1307_I2C_ADDRESS 0x68


void setup() {
Serial.begin(9600); // Open serial communications and wait for port to open:
ads1.begin(); // инициализируем АЦП 1
ads2.begin(); // инициализируем АЦП 2
lcd.begin(20, 4); // initialize the lcd for 20 chars 4 lines, turn on backlight
lcd.setBacklight (HIGH); // яркость

ads1.setGain(GAIN_TWOTHIRDS); // GAIN_ONE = 1x gain +/- 4.096V
ads2.setGain(GAIN_TWOTHIRDS); // GAIN_TWOTHIRDS = 2/3x gain +/- 6.144V

// lcd.print(now.unixtime() / 86400L);// (TmeStrng)
// lcd.print(TmeStrng);//
lcd.print("Data Logger 8channel");// вывод текста в дисплей
delay(2000);
lcd.clear(); // очистка дисплея

// lcd.setCursor(0, 0); lcd.print("a> c b> v"); // set position cursor
// lcd.setCursor(0, 1); lcd.print("c> v d> v");
// lcd.setCursor(0, 2); lcd.print("e> v f> v");
// lcd.setCursor(0, 3); lcd.print("g> v h> v");

pinMode(2, OUTPUT);
pinMode(3, OUTPUT); // For alarm
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
pinMode(10, OUTPUT); // For SD card
pinMode(11, OUTPUT);
pinMode(12, OUTPUT);
pinMode(13, OUTPUT); // встроенный светодиод (D13)


// SD card
Wire.begin(); // start the i2c interface
RTC.begin(); // start the RTC
// RTC.adjust(DateTime((__DATE__), (__TIME__))); //(устанавливаем RTC при загрузке скетча, если надо)

Serial.print("Find SD card: ");
if (!SD.begin(10)) {
Serial.println("Card failed");
return;
}

Serial.println(" SD card OK");
//————-print a header to the data file———-
File dataFile = SD.open("datalog.csv", FILE_WRITE);
if (dataFile) { // if the file is available, write to it:
dataFile.println("Nano Logger (andrey 2019)"); // эта строка будет в начале текста в файле
dataFile.close();
}
else {
Serial.println("file error"); // if the file isn’t open, pop up an error:
}


} // end of setup

void loop()
{

//
DateTime now = RTC.now(); //this reads the time from the RTC
sprintf(TmeStrng, "%02d/%02d/%02d, %02d:%02d:%02d", now.year(), now.month(), now.day(), now.hour(), now.minute(), now.second()); // [added seconds]

// ADC set
int16_t adc0, adc1, adc2, adc3; // Определяем переменную 16-бит для считывания 16-ти разрядов АЦП.
int16_t adc4, adc5, adc6, adc7; // Определяем переменную 16-бит для считывания 16-ти разрядов АЦП.
adc0 = ads1.readADC_SingleEnded(0); // Считываем полученные значения с АЦП с нулевого канала и записываем в переменную.
adc1 = ads1.readADC_SingleEnded(1);
adc2 = ads1.readADC_SingleEnded(2);
adc3 = ads1.readADC_SingleEnded(3);
adc4 = ads2.readADC_SingleEnded(0);
adc5 = ads2.readADC_SingleEnded(1);
adc6 = ads2.readADC_SingleEnded(2);
adc7 = ads2.readADC_SingleEnded(3);

// ADC -> units convert
float lcdout1 = map(adc0, 16150, 16660, 3500, 2200) / 100.0; // считаем. max.t ADC, лед.t ADC, LCD шкала лед, LCD шкала max
float lcdout2 = map(adc1, 16000, 16500, 3500, 2000) / 100.0; // считаем. ADC min, max, LCD min, max
float lcdout3 = map(adc2, 16000, 16500, 3500, 2000) / 100.0;
float lcdout4 = map(adc3, 16000, 16500, 3500, 2000) / 100.0;
float lcdout5 = map(adc4, 16000, 16500, 3500, 2000) / 100.0;
float lcdout6 = map(adc5, 16000, 16500, 3500, 2000) / 100.0;
float lcdout7 = map(adc6, 16000, 16500, 3500, 2000) / 100.0;
float lcdout8 = map(adc7, 16000, 16500, 3500, 2000) / 100.0;

// LCD settings:
lcd.setCursor(0, 0); // устанавливаем курсор на 0 символ, 0 строку (счет от 0)
lcd.print(TmeStrng);
lcd.setCursor(0, 1);// устанавливаем курсор на 0 символ, 1 строку (счет от 0)
lcd.print(lcdout1, 2);// Переменная для вывода на LCD. К-во знаков после запятой
lcd.setCursor(7, 1);
lcd.print(lcdout2, 2);
lcd.setCursor(14, 1);
lcd.print(lcdout3, 2);

lcd.setCursor(0, 2);
lcd.print(lcdout4, 2);
lcd.setCursor(7, 2);
lcd.print(lcdout5, 2);
lcd.setCursor(14, 2);
lcd.print(lcdout6, 2);

lcd.setCursor(0, 3);
lcd.print(lcdout7, 2);
lcd.setCursor(7, 3);
lcd.print(lcdout8, 2);
lcd.setCursor(14, 3);
lcd.print(lcdout5, 2);

// out pin logic setting
if (lcdout1 > 21) digitalWrite(2, HIGH); //Включаем встроенный LED при превышении
else digitalWrite(2, LOW); // Выключаем, если меньше
if (lcdout1 > 22) digitalWrite(3, HIGH); //Включаем встроенный LED при превышении
else digitalWrite(3, LOW); // Выключаем, если меньше
if (lcdout1 > 23) digitalWrite(4, HIGH); //Включаем встроенный LED при превышении
else digitalWrite(4, LOW); // Выключаем, если меньше
if (lcdout1 > 24) digitalWrite(5, HIGH); //Включаем встроенный LED при превышении
else digitalWrite(5, LOW); // Выключаем, если меньше
if (lcdout1 > 25) digitalWrite(6, HIGH); //Включаем встроенный LED при превышении
else digitalWrite(6, LOW); // Выключаем, если меньше
if (lcdout1 > 26) digitalWrite(7, HIGH); //Включаем встроенный LED при превышении
else digitalWrite(7, LOW); // Выключаем, если меньше
if (lcdout1 > 27) digitalWrite(8, HIGH); //Включаем встроенный LED при превышении
else digitalWrite(8, LOW); // Выключаем, если меньше
if (lcdout1 > 28) digitalWrite(9, HIGH); //Включаем встроенный LED при превышении
else digitalWrite(9, LOW); // Выключаем, если меньше
if (lcdout1 > 29) digitalWrite(10, HIGH); //Включаем встроенный LED при превышении
else digitalWrite(10, LOW); // Выключаем, если меньше


// Serial.print(now.unixtime() / 86400L);
// Serial.println();
// Serial.print("RTC utc Time: ");
// Serial.print(now.unixtime());
// Serial.print("RTC time: ");
//Serial.println(TmeStrng); //
// Serial.print(" adc0 "); // текст перед выводом переменной
Serial.println (adc0); //записываем в Serial порт значения считанные из АЦП
//Serial.print(lcdout2 ); //записываем переменную в Serial порт
// Serial.println(" end ");
// Serial.println();

//Construct a data string to write to ВµSD card
String dataString = ""; //this erases the previous string
// dataString += String("hello "); // этот текст будет в начале каждой строки
dataString += TmeStrng;
dataString += ", "; // разделяем запятыми
dataString += String(lcdout1 );
dataString += ", ";
dataString += String(lcdout2 );
dataString += ", ";
dataString += String(lcdout3 );
dataString += ", ";
dataString += String(lcdout4 );
dataString += ", ";
dataString += String(lcdout5 );
dataString += ", ";
dataString += String(lcdout6 );
dataString += ", ";
dataString += String(lcdout7 );
dataString += ", ";
dataString += String(lcdout8 );



//——– write the data to the SD card ——–

File dataFile = SD.open("data00.csv", FILE_WRITE); // Если все хорошо и файл существует, то записываем строку:
if (dataFile) {
dataFile.println(dataString);
dataFile.close(); // закрываем файл, или данные в нем не появятся

Serial.println(dataString); // Публикуем в мониторе порта файл, для отладки SD_card
}
else {
Serial.println("file error"); // если файл не открылся, печатаем ошибку:
}
delay(1000); // write data every 1 seconds
} // END of the MAIN LOOP

MrAnd
Автор

can i measure +3.3v to -3.3v using diffrential inputs

rajeshkolhe