Погодная станция на аtmega2560 и не только.

Нет ответов
kirass
Offline
Зарегистрирован: 15.03.2015

Первоначально, идея заключалась в следующем.

Измерять гравитационный фон с помощью такого устройства

Только к концу маятника приспособить датчик малых перемещений и записывать изменяемые данные  в электронный самописец..

Первонаяально использовался вот этот проект.

Проблем с ним было много.Attiny85 имеет малую память(8к), а по USB не всегда коннектица.

Прмеры графиков

Код почему-то постоянно сбивался..Но он прослужил достаточно времени и сделал свою работу...

Затем понял значение Ардуино....

А задачи расширились,как и возможности Адуин.

Научиться снимать показания с любых датчиков , записывать их в память SD, и выводить данные на дисплей в реальном времени,управлять нагрузкой...

В проекте использовались следующие компоненты.

1.Атмега2560 R3

2.TFT LCD Mega shield 2.2( преобразователь 5-3.3)

3.TFT_320QVT(320х240) – на чипе SSD1289 и SD картой.

Все вместе.

http://ru.aliexpress.com/item/3-2-TFT-LCD-Touch-TFT-3-2-Shield-Funduino-...

4.DHT22

https://github.com/adafruit/DHT-sensor-library

5.BMP185

https://github.com/adafruit/Adafruit-BMP085-Library

6.Tyny RTC3107

https://github.com/adafruit/RTClib

7.HC-SR04

https://github.com/JRodrigoTech/Ultrasonic-HC-SR04

Шрифты можно выбрать любые и поместить их в стандартную библиотеку UTFT

Марки дисплеев могут быть любыми в соответствии с данной библиотекой UTFT ..

Так же можно подключать дисплеи всех видов и размеров...имея описание соответствующих библиотек.

Работа с UTFT

Далее можно организовать беспроводную сеть с одним из датчиков,передачу данных на сервер,измерять напряжение и ток батареек,или от сети,вести мониоринг всех процессов,записывая все данные на СД карту.

После ,файл,образованный на СД,можно мпортировать в Эксель,для построения графиков.

Код ,конечно написан внавал,но он работает, и занимает 56 кб..

Чуть позже покажу,как на мой взгляд,лучше устанавливать время на модулях часов

#include <SD.h> //Импорт необходимых библиотек
#include<SPI.h> 
#include <UTFT.h>  
#include "Wire.h"    // I2C 
#include "Adafruit_BMP085.h"  
#include "DHT.h" 
#include "RTClib.h"
//#include "Ultrasonic.h"
// DHT Sensor Setup
#define DHTPIN 19 // Датчик на пин 19
#define DHTTYPE DHT22 // Это тип датчика.Можно заменить на DHT11
DHT dht(DHTPIN, DHTTYPE); // инициализация
Adafruit_BMP085 mySensor;  // создание объекта
//Ultrasonic ultrasonic(12, 13);
extern uint8_t Ubuntu[];
extern uint8_t arial_bold[];
//extern uint8_t SevenSegNumFont[];
RTC_DS1307 RTC;
UTFT myGLCD(ITDB32S,38,39,40,41); 

float tempC;  //  переменная температура C
//float tempF;  //
float pressure; //пменная давления
 
int chipSelect = SS; //выбор чипа СД карты
File mySensorData; //данные для записи на карту

 
void setup(){

  Serial.begin(9600); //включаем серийный монитор
mySensor.begin();   //инициализация 
myGLCD.InitLCD();
RTC.begin();
Wire.begin();
  myGLCD.clrScr();
  dht.begin(); 
//RTC.adjust(DateTime(__DATE__, __TIME__));
pinMode(53, OUTPUT); //вывод данных на карту
SD.begin(SS); //инициализация СД карты
}
 
void loop() {
DateTime now = RTC.now();  
float h = dht.readHumidity(); 
float t = dht.readTemperature(); 
//float dist_cm = ultrasonic.Ranging(CM);
tempC = mySensor.readTemperature(); //  чтение температуры BMP180
//tempF = tempC*1.8 + 32.; // конвертация температуры
pressure=mySensor.readPressure()/133.33; //читаем давление
int sensorValue = analogRead(A0);
float voltage = sensorValue * (5.0 / 1023.0);
mySensorData = SD.open("PTData.txt", FILE_WRITE);
if (mySensorData) {

myGLCD.setColor(VGA_WHITE);/рисуем на дисплее и выводим переменные
myGLCD.setBackColor(0, 0, 0);
myGLCD.setFont(arial_bold);  
 myGLCD.print(String(tempC), 194, 8); 
 myGLCD.print("T1", 154, 8);
 myGLCD.print("C ", 275 , 8);
 myGLCD.setColor(VGA_AQUA);
 myGLCD.print("P", 154, 30);
 myGLCD.print("mH", 282, 30);
myGLCD.print(String(pressure), 186, 30); 
myGLCD.setColor(VGA_RED);
 myGLCD.print(String(voltage), 210, 51);
myGLCD.print("Bat", 154, 51);
myGLCD.print("v", 280, 51); 
myGLCD.setColor(VGA_LIME);
myGLCD.print(String(h), 194, 72);
myGLCD.print("H", 154, 72);
myGLCD.print("%", 275, 72);
myGLCD.setColor(VGA_YELLOW);
myGLCD.print(String(t), 194, 95);
myGLCD.print("T2", 154, 95);
myGLCD.print("C", 275, 95); 
myGLCD.setColor(VGA_SILVER);
myGLCD.drawLine(10,115,310,115);
myGLCD.drawLine(10,120,310,120);
myGLCD.drawLine(145,0,145,120);
myGLCD.setFont(Ubuntu);
myGLCD.setColor(VGA_YELLOW);



myGLCD.print(String(now.year(), DEC), 155, 130);
myGLCD.print("/", 130, 130);
myGLCD.print(String(now.month(), DEC), 95, 130);
myGLCD.print("/", 65, 130);
myGLCD.print(String(now.day(), DEC), 20, 130);
//

myGLCD.print(String(now.hour(), DEC), 20, 170);
myGLCD.print(":", 80, 170);
myGLCD.print(String(now.minute(), DEC), 100, 170);
myGLCD.print(":", 160, 170);
myGLCD.print(String(now.second(), DEC), 200, 170);
//
mySensorData.print(tempC);                             //записываем даннные на карту
mySensorData.print(",");                               
mySensorData.print(pressure);
mySensorData.print(","); 
mySensorData.print(h);
mySensorData.print(",");
mySensorData.println(voltage);
delay(1000); //Pause between readings.
 
mySensorData.close();                                  //закрываем файл
}
}