• Skip to primary navigation
  • Skip to content
  • Skip to primary sidebar
  • Skip to secondary sidebar

У Павла!

  • Контроллеры
    • Arduino
      • Приборы
      • Музыка
      • Проекты Arduino
      • Уроки Arduino
      • Игры на Arduino
      • Роботы на Ардуино
      • FLProg
    • Raspberry pi
      • Raspberry pi server
      • Проекты Raspberry pi
    • ESP
      • ESP8266
        • NodeMCU
      • ESP32
  • ЧПУ
  • 3d печать
  • Об авторе

Домашняя метеостанция на датчиках 433МГц

Июнь 9, 2017

Для данного проекта нам понадобится:

Приемник и передатчик на 433МГц в количестве 2 шт. http://ali.pub/1joehv

Arduino uno http://ali.pub/1joeoa

Arduino Mega http://ali.pub/1joeqf

Arduino nano http://ali.pub/1joes6

BME 280  http://ali.pub/1joewn

BMP180 http://ali.pub/1joey7

DS18b20 http://ali.pub/1jof0j

LCD nokia 5110  http://ali.pub/1jof7c

Давайте для начала рассмотрим схему подключения приемника

Из данной схемы видно какой пин датчиков к какому пину ардуино подключен.

В FLProg данная схема выглядит вот таким образом:

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

Скетч приемника:

 

#include <Adafruit_Sensor.h>

#include <VirtualWire.h>

#include <Adafruit_BME280.h>

#include <SPI.h>

#include <EasyTransferVirtualWire.h>

#include <LCD5110_Graph.h>

int out1;
int out2;
int out3;
int out4;
EasyTransferVirtualWire ET; 
struct SEND_DATA_STRUCTURE{
  //Struct can'e be bigger then 26 bytes for VirtualWire version
  int data1;
  int data2;
  int data3;
  int data4;
};
//give a name to the group of data
SEND_DATA_STRUCTURE mydata;
LCD5110 myGLCD(8,9,10,11,12);
extern uint8_t TinyFont[]; // Объявление трех внешних
extern uint8_t SmallFont[]; // массивов символов
extern uint8_t BigNumbers[];
bool en_str_214990099_1;
String in_str_214990099_1;
bool en_str_214990099_2;
String in_str_214990099_2;
bool en_str_214990099_3;
String in_str_214990099_3;
float Temperature_168723051_1;
float Pressure_168723051_1;
float Altitude_168723051_1;
float Humidity_168723051_1;
#define BME_SCK_168723051_1 13

#define BME_MISO_168723051_1 12

#define BME_MOSI_168723051_1 11

#define BME_CS_168723051_1 10

#define SEALEVELPRESSURE_HPA_168723051_1 (1013.25)

Adafruit_BME280 bme_168723051_1; // I2C
bool en_str_214990099_4;
String in_str_214990099_4;
void setup()
{
  ET.begin(details(mydata));
  vw_set_rx_pin(4);
  vw_set_ptt_inverted(true); // Required for DR3100
  vw_setup(2000);

  vw_rx_start();       // Start the receiver PLL running
    
 if ( 1 ) { 
  pinMode(13, OUTPUT); 
}
  randomSeed(analogRead(0));
myGLCD.InitLCD();
myGLCD.setContrast (60);   //   установка контраста



if (!bme_168723051_1.begin()) {
    Serial.println("Could not find a valid BME280 sensor, check wiring!");
    while (1);
}

}
void loop()
{




myGLCD.update();
delay (100); // Задержка 0.1 с
myGLCD.clrScr(); // Очистка экрана

en_str_214990099_1 = 1;
in_str_214990099_1 = ((String("Zal ")) + ((String(out1, DEC))));
if (en_str_214990099_1==1)
{
myGLCD.setFont(SmallFont);
myGLCD.print(in_str_214990099_1, 0, 10);
}
  //check and see if a data packet has come in. 
  if(ET.receiveData()){
 if ( 1 ) { 
digitalWrite(13, HIGH);
}
    out1 = mydata.data1;
    out2 = mydata.data2;
    out3 = mydata.data3;
    out4 = mydata.data4;

       if ( 1 ) { 
digitalWrite(13, LOW);
}

  }
  
  //you should make this delay shorter then your transmit delay or else messages could be lost
  delay(250);
en_str_214990099_2 = 1;
in_str_214990099_2 = ((String("spalnya ")) + ((String(out2, DEC))));
if (en_str_214990099_2==1)
{
myGLCD.setFont(SmallFont);
myGLCD.print(in_str_214990099_2, 0, 20);
}
en_str_214990099_3 = 1;
in_str_214990099_3 = ((String("kuhnya ")) + (( _floatToStringWitRaz(Temperature_168723051_1,2))));
if (en_str_214990099_3==1)
{
myGLCD.setFont(SmallFont);
myGLCD.print(in_str_214990099_3, 0, 30);
}
Temperature_168723051_1 = bme_168723051_1.readTemperature();
Pressure_168723051_1 = bme_168723051_1.readPressure() / 100.0F * 0.7500;
Altitude_168723051_1 = bme_168723051_1.readAltitude(SEALEVELPRESSURE_HPA_168723051_1);
Humidity_168723051_1 = bme_168723051_1.readHumidity();
en_str_214990099_4 = 1;
in_str_214990099_4 = String("METEOSTATION");
if (en_str_214990099_4==1)
{
myGLCD.setFont(SmallFont);
myGLCD.print(in_str_214990099_4, 5, 0);
}




}
String  _floatToStringWitRaz(float value, int raz)
{
 
  return String(value,raz);
}

 

Ссылка на проект в FLProg: https://yadi.sk/d/xaPb9cJv3JyG9p

Модуль LCD 5110 : https://yadi.sk/d/wxYROnHtvwjFE

Модуль BME 280: https://yadi.sk/d/V-yyGBC8vwjMp

Модуль приемника и передатчика 433МГц: https://yadi.sk/d/rgQ1TDXl3JyGPR

 

Теперь давайте рассмотрим схему подключения передатчика на DS18b20:

Из схемы видно что куда подключается.

Ссылка проект: https://yadi.sk/d/12b0tZG63JyGwK

 


#include <OneWire.h>
#include <EasyTransferVirtualWire.h>

#include <VirtualWire.h>

byte _d18x2x1Addr[8]={0x28, 0xFF, 0xCC, 0x27, 0x64, 0x16, 0x4, 0xA1};

OneWire _ow2(2);
bool in1;
float in2;
int in3;
int in4;
EasyTransferVirtualWire ET;
struct SEND_DATA_STRUCTURE{
//Struct can'e be bigger then 26 bytes for VirtualWire version
int data1;
int data2;
int data3;
int data4;
};
//give a name to the group of data
SEND_DATA_STRUCTURE mydata;
unsigned long _d18x2x1Tti = 0UL;
float _d18x2x1O = 0.00;
void setup()
{
ET.begin(details(mydata));
vw_set_tx_pin(12); //установка пина, к которому подключен data-вход передатчика
vw_set_ptt_inverted(true); // Required for DR3100
vw_setup(2000);

if ( 1 ) {
pinMode(13, OUTPUT);
}
randomSeed(analogRead(0));

}
void loop()
{

in1 = 0;
in2 = (_d18x2x1O);
in3 = 0;
in4 = 0;
mydata.data1 = in1;
mydata.data2 = in2;
mydata.data3 = in3;
mydata.data4 = in4;
if ( 1 ) {
digitalWrite(13, HIGH);
}

ET.sendData();

if ( 1 ) {
digitalWrite(13, LOW);
}

delay(1000);
if(_isTimer(_d18x2x1Tti, 1000)) {
_d18x2x1Tti = millis();
_d18x2x1O= _readDS18_ow2(_d18x2x1Addr, 0);}
}
bool _isTimer(unsigned long startTime, unsigned long period )
{
unsigned long currentTime;
currentTime = millis();
if (currentTime>= startTime) {return (currentTime>=(startTime + period));} else {return (currentTime >=(4294967295-startTime+period));}
}
float _convertDS18x2xData(byte type_s, byte data[12])
{
int16_t raw = (data[1] << 8) | data[0];
if (type_s)
{
raw = raw << 3;
if (data[7] == 0x10) { raw = (raw & 0xFFF0) + 12 - data[6]; }
}
else
{
byte cfg = (data[4] & 0x60);
if (cfg == 0x00) raw = raw & ~7; else if (cfg == 0x20) raw = raw & ~3; else if (cfg == 0x40) raw = raw & ~1;
}
return (float)raw / 16.0;
}
float _readDS18_ow2(byte addr[8], byte type_s)
{ byte data[12];
byte i;
_ow2.reset();
_ow2.select(addr);
_ow2.write(0xBE);
for ( i = 0; i < 9; i++) {
data[i] = _ow2.read();}
_ow2.reset();
_ow2.select(addr);
_ow2.write(0x44, 1);
return _convertDS18x2xData(type_s, data);}

 

Ну и схема передатчика на BMP180:

В схеме также показано какой пин куда подключается.

Ссылка на проект: https://yadi.sk/d/6iRGWq-z3JyHPG

 


#include <Wire.h>
#include <EasyTransferVirtualWire.h>

#include <VirtualWire.h>

#include <BMP085.h>
BMP085 _bmp085 = BMP085();
long _bmp085T = 0;

int in1;
int in2;
int in3;
int in4;
EasyTransferVirtualWire ET;
struct SEND_DATA_STRUCTURE{
//Struct can'e be bigger then 26 bytes for VirtualWire version
int data1;
int data2;
int data3;
int data4;
};
//give a name to the group of data
SEND_DATA_STRUCTURE mydata;
unsigned long _bmp0851Tti = 0UL;
void setup()
{
Wire.begin();
_bmp085.init();
ET.begin(details(mydata));
vw_set_tx_pin(12); //установка пина, к которому подключен data-вход передатчика
vw_set_ptt_inverted(true); // Required for DR3100
vw_setup(2000);

if ( 1 ) {
pinMode(13, OUTPUT);
}
randomSeed(analogRead(0));

}
void loop()
{if(_isTimer(_bmp0851Tti, 1000)) {
_bmp0851Tti = millis();
_bmp085.getTemperature(&_bmp085T);
}

in1 = (_bmp085T)/(10);
in2 = 0;
in3 = 0;
in4 = 0;
mydata.data1 = in1;
mydata.data2 = in2;
mydata.data3 = in3;
mydata.data4 = in4;
if ( 1 ) {
digitalWrite(13, HIGH);
}

ET.sendData();

if ( 1 ) {
digitalWrite(13, LOW);
}

delay(1000);
}
bool _isTimer(unsigned long startTime, unsigned long period )
{
unsigned long currentTime;
currentTime = millis();
if (currentTime>= startTime) {return (currentTime>=(startTime + period));} else {return (currentTime >=(4294967295-startTime+period));}
}

Демонстрация работы данной программы можно увидеть в видео приведенном в конце статьи.

Видео:

  • Нравится

Primary Sidebar

Поиск

Новые записи

  • Подключение к raspberry pi через USB-ttl адаптер
  • Гирлянда на адресных светодиодах ws2812b и arduino
  • Снежинка на arduino и светодиодной ленте ws2812
  • Подключение термистора к arduino.
  • Термостат с регулировкой температуры до 1000 С° с помощью модуля MAX6675, реле и arduino.

Метки

Loading

Arduino attiny84 BH1750 Blynk buzzer CNC DS18b20 esp8266 Ethernet FLProg Games GSM HC-06 HC-SR04 HC-SR501 ir isd1820 L298N LM335 MAX7219 MQ-2 neopixel NEOWAY M590 Nextion nodemcu processing raspberry pi Relay RFID SD card Servo sharp ThingSpeak ws2812 Влажность Датчик звука Сигнализация Температура ЧПУ диод кнопка монитор порта уроки фоторезистор часы 3d печать (1)
Arduino (82)
ESP (2)
ESP32 (1)
ESP8266 (13)
FLProg (10)
NodeMCU (7)
Raspberry pi (5)
Raspberry pi server (2)
Uncategorized (2)
Игры на Arduino (3)
Музыка (1)
Приборы (1)
Проекты Arduino (53)
Проекты Raspberry pi (1)
Роботы на Ардуино (1)
Уроки Arduino (14)
ЧПУ (3)

Подписаться на YouTube!

Группа в ВК

Secondary Sidebar

Свежие записи

  • Подключение к raspberry pi через USB-ttl адаптер
  • Гирлянда на адресных светодиодах ws2812b и arduino
  • Снежинка на arduino и светодиодной ленте ws2812
  • Подключение термистора к arduino.
  • Термостат с регулировкой температуры до 1000 С° с помощью модуля MAX6675, реле и arduino.

Copyright_У Павла! © 2019 ·