Погодная станция на аtmega2560 и не только.
- Войдите на сайт для отправки комментариев
Первоначально, идея заключалась в следующем.
Измерять гравитационный фон с помощью такого устройства

Только к концу маятника приспособить датчик малых перемещений и записывать изменяемые данные в электронный самописец..
Первонаяально использовался вот этот проект.
Проблем с ним было много.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 ..
Так же можно подключать дисплеи всех видов и размеров...имея описание соответствующих библиотек.
Далее можно организовать беспроводную сеть с одним из датчиков,передачу данных на сервер,измерять напряжение и ток батареек,или от сети,вести мониоринг всех процессов,записывая все данные на СД карту.
После ,файл,образованный на СД,можно мпортировать в Эксель,для построения графиков.
Код ,конечно написан внавал,но он работает, и занимает 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(); //закрываем файл
}
}