PROJETO ARDUSAT TRANSMISSOR/RECEPTOR

/*
PROJETO ARDUSAT TRANSMISSOR/RECEPTOR
inicialmente planejado com utilização do Atmega328
versão: 1.0
início do projeto: 31-10-2018
criador do projeto: pedroluand
licença de uso: restrito
contatos: pedroluand@gmail.com / pedroluand@hotmail.com / pedroluand@yahoo.com
*/

//bibliotecas em utilização:
#include <SD.h>                //biblioteca para cartao sd
#include <SPI.h>               //biblioteca para conexão spi
#include <Wire.h>              //biblioteca para conexão I2C
#include <Servo.h>             //biblioteca para servos
#include <EEPROM.h>            //biblioteca para eeprom interna
#include <LiquidCrystal_I2C.h> //biblioteca para display lcd com modulo I2C
#include <RF24.h>              //biblioteca para modulo transeptor nrf2401
#include <nRF24L01.h>          //biblioteca para modulo transeptor nrf2401
//#include <printf.h>          //biblioteca para modulo transeptor nrf2401
//#include <RF24_config.h>     //biblioteca para modulo transeptor nrf2401

//configurações gerais:
LiquidCrystal_I2C lcd(0x3F,2,1,0,4,5,6,7,3,POSITIVE); //configuração de endereço e pinagem do display lcd
#define BMP085_ADDRESS 0x77                           //endereço fisico do modulo gy88
const unsigned char OSS = 0;                          //configuração do modulo gy88
int ac1;          //configuração do modulo gy88
int ac2;          //configuração do modulo gy88
int ac3;          //configuração do modulo gy88
unsigned int ac4; //configuração do modulo gy88
unsigned int ac5; //configuração do modulo gy88
unsigned int ac6; //configuração do modulo gy88
int b1;           //configuração do modulo gy88
int b2;           //configuração do modulo gy88
int mb;           //configuração do modulo gy88
int mc;           //configuração do modulo gy88
int md;           //configuração do modulo gy88
long b5;          //configuração do modulo gy88

//RF24 radio(9,10);                 //pinos CE e CS respectivamente modulo NRF24l01
//const byte address[6] = "00001";  //endereço modulo NRF24l01

float voltagem = 0; //sensores de tensao bateria conectados na porta A0

File myFile;      //nome do arquivo criado no cartao data log

//configurações globais:
#define botao 8 //botão criado naporta d8
#define led 9   //led criado na porta d9

void setup() {
 // radio.begin();                   //inicia o modulo NRF24l01
 // radio.openWritingPipe(address);  //abre o endereço do modulo NRF24l01
 // radio.setChannel(100);           //canal de operação do modulo NRF24l01
 // radio.setDataRate(RF24_250KBPS); //taxa de tasferencia do modulo NRF24l01
 // radio.setPALevel(RF24_PA_MAX);   //nivel maximo do modulo NRF24l01
 // radio.stopListening();           //configuração do modulo NRF24l01
 
  lcd.begin(20,4);             //definição para uso do lcd 20 linhas 4 colunas
  Serial.begin(9600);          //velocidade de dados do monitor serial
  while (!Serial) {            //inicialização do cartão data log
  ;                            //inicialização do cartão data log
  }
  Wire.begin();                //inicia a biblioteca wire.h
  bmp085Calibration();         //calibração do modulo gy88

  pinMode(botao,INPUT_PULLUP);           //pino definido como entrada
  pinMode(led,OUTPUT);                   //pino definido como saída

  //teste inicial carregado somente ao ligar o equipamento
  Serial.println("teste inicial..."); //imprime a mensagem no serial monitor
  digitalWrite(led,HIGH);             //liga o led na porta 9
  delay(1000);                        //aguarda 1s
  digitalWrite(led,LOW);              //desliga o led
  Serial.println("teste concluido!"); //imprime a mensagem no serial monitor
 
   //verificação cartao sd incerido no data log
   if (!SD.begin(4)) {                     //verificação cartao sd data log incerido
   Serial.println("CARTAO NAO INSERIDO!"); //verificação cartao sd data log incerido
  // tone(10,800,1000);                      //verificação cartao sd data log incerido 
  // delay(1020);                            //verificação cartao sd data log incerido
  // lcd.print("CARTAO NAO INSERIDO!");      //verificação cartao sd data log incerido
   delay(2000);                            //verificação cartao sd data log incerido
  // lcd.clear();                            //verificação cartao sd data log incerido
   return;                                 //verificação cartao sd data log incerido
   }
    Serial.println("DATALOG INICIADO!");  //verificação cartao sd data log incerido
   // tone(10,300,200);                   //verificação cartao sd data log incerido
   // delay(150);                         //verificação cartao sd data log incerido
   // tone(10,200,200);                   //verificação cartao sd data log incerido
   // delay(150);                         //verificação cartao sd data log incerido
   // lcd.print("DATALOG INICIADO!");       //verificação cartao sd data log incerido
    delay(30000);                          //verificação cartao sd data log incerido
  }


void loop() {
    //configurações do modulo gy88
    float temperature = bmp085GetTemperature(bmp085ReadUT());  //calibração gy88
    float pressure = bmp085GetPressure(bmp085ReadUP());        //calibração gy88
    float atm = pressure / 101325;                             //calibração gy88
    float altitude = calcAltitude(pressure);                   //calibração gy88
    //As configurações acima devem permanecer no início do loop

    //teste temporario gy88
    Serial.println(altitude,2);
    Serial.println(temperature,2);
    Serial.println("---------------");
    delay(30000);
}

void bmp085Calibration()
    {
    ac1 = bmp085ReadInt(0xAA);
    ac2 = bmp085ReadInt(0xAC);
    ac3 = bmp085ReadInt(0xAE);
    ac4 = bmp085ReadInt(0xB0);
    ac5 = bmp085ReadInt(0xB2);
    ac6 = bmp085ReadInt(0xB4);
    b1 = bmp085ReadInt(0xB6);
    b2 = bmp085ReadInt(0xB8);
    mb = bmp085ReadInt(0xBA);
    mc = bmp085ReadInt(0xBC);
    md = bmp085ReadInt(0xBE);
    }
float bmp085GetTemperature(unsigned int ut){
    long x1, x2;
    x1 = (((long)ut - (long)ac6)*(long)ac5) >> 15;
    x2 = ((long)mc << 11)/(x1 + md);
    b5 = x1 + x2;
   
    float temp = ((b5 + 8)>>4);
    temp = temp /10;
   
    return temp;
    }
    long bmp085GetPressure(unsigned long up){
      long x1, x2, x3, b3, b6, p;
    unsigned long b4, b7;
   
    b6 = b5 - 4000;
    x1 = (b2 * (b6 * b6)>>12)>>11;
    x2 = (ac2 * b6)>>11;
    x3 = x1 + x2;
    b3 = (((((long)ac1)*4 + x3)<<OSS) + 2)>>2;
    x1 = (ac3 * b6)>>13;
    x2 = (b1 * ((b6 * b6)>>12))>>16;
    x3 = ((x1 + x2) + 2)>>2;
    b4 = (ac4 * (unsigned long)(x3 + 32768))>>15;
   
    b7 = ((unsigned long)(up - b3) * (50000>>OSS));
    if (b7 < 0x80000000) p = (b7<<1)/b4;
    else p = (b7/b4)<<1;
   
    x1 = (p>>8) * (p>>8);
    x1 = (x1 * 3038)>>16;
    x2 = (-7357 * p)>>16;
    p += (x1 + x2 + 3791)>>4;
   
    long temp = p;
    return temp;
    }
    char bmp085Read(unsigned char address)
    {
      unsigned char data;
      Wire.beginTransmission(BMP085_ADDRESS);
      Wire.write(address);
      Wire.endTransmission();
   
      Wire.requestFrom(BMP085_ADDRESS, 1);
      while(!Wire.available())
      ;
     
      return Wire.read();
      }
     
      int bmp085ReadInt(unsigned char address)
      {
        unsigned char msb, lsb;
        Wire.beginTransmission(BMP085_ADDRESS);
        Wire.write(address);
        Wire.endTransmission();
       
        Wire.requestFrom(BMP085_ADDRESS, 2);
        while(Wire.available()<2)
        ;
        msb = Wire.read();
        lsb = Wire.read();
       
        return (int) msb<<8 | lsb;
        }
       
        unsigned int bmp085ReadUT(){
          unsigned int ut;
          Wire.beginTransmission(BMP085_ADDRESS);
          Wire.write(0xF4);
          Wire.write(0x2E);
          Wire.endTransmission();
       
          delay(5);
 
          ut = bmp085ReadInt(0xF6);
          return ut;
          } 
          unsigned long bmp085ReadUP(){
           
            unsigned char msb, lsb, xlsb;
            unsigned long up = 0;
            Wire.beginTransmission(BMP085_ADDRESS);
            Wire.write(0xF4);
            Wire.write(0x34 + (OSS<<6));
            Wire.endTransmission();
           delay(2 + (3<<OSS));
            msb = bmp085Read(0xF6);
            lsb = bmp085Read(0xF7);
            xlsb = bmp085Read(0xF8);
           
            up = (((unsigned long) msb << 16) | ((unsigned long) lsb << 8) | (unsigned long) xlsb) >> (8-OSS);
            return up;
            }
            void writeRegister(int deviceAddress, byte address, byte val){
              Wire.beginTransmission(deviceAddress); 
              Wire.write(address);
              Wire.write(val);
              Wire.endTransmission();
              }
              int readRegister(int deviceAddress, byte address){
               
                int v;
                Wire.beginTransmission(deviceAddress);
                Wire.write(address);
                Wire.endTransmission();
               
                Wire.requestFrom(deviceAddress, 1);
               
                while(!Wire.available()) {
                 
                  }
                 
                  v = Wire.read();
                  return v;
                  }
                  float calcAltitude(float pressure)
                  {
                  float A = pressure/101325;
                  float B = 1/5.25588;
                  float C = pow(A,B);
                  C = 1 - C;
                  C = C /0.0000225577;
                  return C;
                  }   

Comentários

Postagens mais visitadas deste blog

Amplificador de 6W para módulos PLL FM, usando transistores C1970 e C1971 - Versão final 04-04-2022

Amplificador de RF 350mW com BD135 para modulos pll

Antena dipolo para transmissores FM