#1 2016-10-20 13:13:34

Saddamko
Учасник
Зареєстрований: 2016-10-20
Повідомлень: 23

Домашняя метеостанция, датчик BMP180 и TFT дисплей ST7735 на Arduino

BMP180 ST7735 Arduino
Для создания небольшой домашней метеостанции был использован датчик давления и температуры BMP180, для вывода информации использовался дисплей TFT  ST7735 и Arduino Mini Pro. Само устройство было помещено в коробочку для визиток из оргстекла.

station1s.jpg
station2s.jpg

В примере кода, который идет ниже по тексту, использовались следующие коммутации:

Дисплей подключен к пинам Ардуино так (cs к пину 10, dc к пину 9, rst к 8, gnd и power (3В!!!)  дисплея к сответствующим выводам питания).

/**********************************************************
 Bosch Pressure Sensor BMP085 / BMP180 readout routine
 for the Arduino platform.
  
 Compiled by Leo Nutz
 [url=http://www.ALTDuino.de]www.ALTDuino.de[/url]              
**********************************************************/
// 0.0075006375541921
#include <Wire.h>
#include "Barometer.h"
#include <Adafruit_GFX.h>    // Core graphics library
#include <Adafruit_ST7735.h> // Hardware-specific library
#include <SPI.h>

float temperature;
float pressure;
float atm;
float altitude;
Barometer myBarometer;

#define cs   10
#define dc   9
#define rst  8  // you can also connect this to the Arduino reset

 
Adafruit_ST7735 tft = Adafruit_ST7735(cs, dc, rst);


void setup()
{
 Wire.begin();                             // Activate I2C
 
 Serial.begin(9600);                       // Set up serial port

 myBarometer.init();                          // Initialize baro sensor variables
 delay(100);
   tft.initR(INITR_BLACKTAB);   // initialize a ST7735S chip, black tab
   tft.fillScreen(ST7735_BLACK);
   tft.setRotation(3);
}

void loop()
{
ShowInfo ();
 
}


void ShowInfo ()
{
   temperature = myBarometer.bmp085GetTemperature(myBarometer.bmp085ReadUT()); //Get the temperature, bmp085ReadUT MUST be called first
   pressure = myBarometer.bmp085GetPressure(myBarometer.bmp085ReadUP())*0.0075006375541921;//Get the pressure
   altitude = myBarometer.calcAltitude(pressure); //Uncompensated caculation - in Meters 
   atm = pressure / 101325; 
  
  Serial.print("Temperature: ");
  Serial.print(temperature, 2); //display 2 decimal places
  Serial.println("deg C");

  Serial.print("Pressure: ");
  Serial.print(pressure, 0); //whole number only.
  Serial.println(" mmHg");

  Serial.print("Ralated Atmosphere: ");
  Serial.println(atm, 4); //display 4 decimal places

  Serial.print("Altitude: ");
  Serial.print(altitude, 2); //display 2 decimal places
  Serial.println(" m");

  Serial.println();

  delay(1000); //wait a second and get values again.
  
    
    tft.fillRect (0,0, 160, 128,ST7735_BLACK);
    
    tft.setTextWrap(true);
    tft.setTextColor(ST7735_RED);
    tft.setTextSize(3);
    tft.setCursor(0, 0);
    tft.println("Hello!");

 tft.setTextColor(ST7735_BLUE);
 tft.setTextSize(2);


 tft.println("Temperature:");
 tft.setTextSize(2);
 tft.setTextColor(ST7735_YELLOW);
 tft.print(temperature, 2);
 tft.println(" C");


 tft.setTextColor(ST7735_GREEN);
 tft.setTextSize(2);
 tft.println("Pressure: ");
 tft.setTextColor(ST7735_CYAN);
 tft.setTextSize(2);
 tft.print(pressure, 2);
 tft.println(" mmHg");

 delay(5000);  
 // Delay between each readout
 
  tft.setTextColor(ST7735_GREEN);
  tft.setCursor(0, 20);
  tft.setTextSize(12);
  tft.fillRect (0,0, 160, 128,ST7735_BLACK);
  tft.println(temperature, 0);
  delay(2000);  
  tft.setTextColor(ST7735_WHITE);
  tft.setTextSize(8);
  tft.setCursor(0, 40);
  tft.fillRect (0,0, 160, 128,ST7735_BLACK);
  tft.println(pressure, 0);
  delay(2000);  
  
  testfillcircles(5, ST7735_BLUE);
  testdrawcircles(5, ST7735_WHITE);  
   delay(1000);
}


void testfillcircles(uint8_t radius, uint16_t color) {
  for (int16_t x=radius; x < tft.width(); x+=radius*2) {
    for (int16_t y=radius; y < tft.height(); y+=radius*2) {
      tft.fillCircle(x, y, radius, color);
    }
  }
}

void testdrawcircles(uint8_t radius, uint16_t color) {
  for (int16_t x=0; x < tft.width()+radius; x+=radius*2) {
    for (int16_t y=0; y < tft.height()+radius; y+=radius*2) {
      tft.drawCircle(x, y, radius, color);
    }
  }
}

Остання редакція Saddamko (2016-10-21 00:25:41)

Неактивний

#2 2016-10-21 09:49:35

jatnfjbu
Гість

Re: Домашняя метеостанция, датчик BMP180 и TFT дисплей ST7735 на Arduino

20

#3 2016-10-21 09:49:36

sdogmbjc
Гість

Re: Домашняя метеостанция, датчик BMP180 и TFT дисплей ST7735 на Arduino

20

#4 2017-02-01 17:10:38

edcop
Учасник
Зареєстрований: 2016-08-20
Повідомлень: 4

Re: Домашняя метеостанция, датчик BMP180 и TFT дисплей ST7735 на Arduino

Подскажите пожалуйста, как побороть мигания экрана при tft.fillScreen(ST7735_BLACK); или tft.fillRect (0,0, 160, 128,ST7735_BLACK);

Неактивний

#5 2017-02-01 19:18:01

vvr
Учасник
Зареєстрований: 2015-04-12
Повідомлень: 874

Re: Домашняя метеостанция, датчик BMP180 и TFT дисплей ST7735 на Arduino

избавьтесь от делеев в функции

Неактивний

#6 2017-02-01 20:29:10

edcop
Учасник
Зареєстрований: 2016-08-20
Повідомлень: 4

Re: Домашняя метеостанция, датчик BMP180 и TFT дисплей ST7735 на Arduino

vvr пише:

избавьтесь от делеев в функции

Был один в надписи заставки, закомментировал, не помогло. sad

Остання редакція edcop (2017-02-01 20:29:28)

Неактивний

#7 2017-02-01 20:43:10

vvr
Учасник
Зареєстрований: 2015-04-12
Повідомлень: 874

Re: Домашняя метеостанция, датчик BMP180 и TFT дисплей ST7735 на Arduino

ShowInfo ()
у вас там куча делеев

Неактивний

#8 2017-02-01 20:47:58

edcop
Учасник
Зареєстрований: 2016-08-20
Повідомлень: 4

Re: Домашняя метеостанция, датчик BMP180 и TFT дисплей ST7735 на Arduino

vvr пише:

ShowInfo ()
у вас там куча делеев

У меня в другом проекте нет делеев. А что с ShowInfo ()?

Неактивний

#9 2017-02-13 15:56:03

Cyber
Гість

Re: Домашняя метеостанция, датчик BMP180 и TFT дисплей ST7735 на Arduino

Для Вашего проекта хорошо бы вписался звуковой модуль с качественными готовыми словами http://cybervoice.inf.ua/prod_16d.html

#10 2018-07-24 04:30:37

кость
Гість

Re: Домашняя метеостанция, датчик BMP180 и TFT дисплей ST7735 на Arduino

Где взять библиотеку "Barometer.h" ?

Швидке повідомлення

Введіть повідомлення і натисніть Надіслати

Підвал форуму