Погодная станция на а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(); //закрываем файл } }