Thanks to visit codestin.com
Credit goes to www.scribd.com

0% found this document useful (0 votes)
10 views8 pages

Cansat Code Sample

The document is an Arduino sketch that interfaces with various sensors including an MPU9250, BMP180, DHT11, and GPS to collect environmental data such as temperature, pressure, altitude, and humidity. It processes this data and outputs it via serial communication and an XBEE module, while also having the capability to log data to an SD card. The code includes functions for initializing sensors, reading data, and handling GPS information.

Uploaded by

hurdle907
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
10 views8 pages

Cansat Code Sample

The document is an Arduino sketch that interfaces with various sensors including an MPU9250, BMP180, DHT11, and GPS to collect environmental data such as temperature, pressure, altitude, and humidity. It processes this data and outputs it via serial communication and an XBEE module, while also having the capability to log data to an SD card. The code includes functions for initializing sensors, reading data, and handling GPS information.

Uploaded by

hurdle907
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 8

#include <Wire.

h>
#include <MPU9250_asukiaaa.h>
#include <TinyGPSPlus.h>
#include <SoftwareSerial.h>
#include <SPI.h>
#include "DHT.h"
#include <SD.h>

#include <SFE_BMP180.h>
#define seaLevelPressure_hPa 1013.25
SFE_BMP180 pressure;
//void bmpinit(void);
//float getalti(void);
//float getpr(void);
//float gettemp(void);
//void checkgps(void);
//void displayInfo();

MPU9250_asukiaaa mySensor;
TinyGPSPlus gps;
SoftwareSerial ss(8, 9);
DHT dht(2, DHT11);
SoftwareSerial xb(7,6);
//File dataFile;

float latt,lngt,galti;
unsigned int t,ct;

double baseline;

void setup()
{
xb.begin(9600);
ss.begin(9600);
Serial.begin(115200);
if (!SD.begin(10))
Serial.print('f');
xb.print('f');

mySensor.beginAccel();
mySensor.beginGyro();
dht.begin();
bmpinit();
baseline=getpr();
Serial.println(baseline);
}

void loop()

{
unsigned int t,ct;
float aX,aY,aZ,gX,gY,gZ;
ct=millis();
checkgps();

float T=gettemp();
float P=getpr();
float a=getalti();
float battery = analogRead(A1)*(25.0/1024.0);

/// IMU///////////////////////////

if (!mySensor.gyroUpdate()) {
gX = mySensor.gyroX();
gY = mySensor.gyroY();
gZ = mySensor.gyroZ();}

if (!mySensor.accelUpdate()) {
aX = mySensor.accelX();
aY = mySensor.accelY();
aZ = mySensor.accelZ();}

////////////// SERIAL MONITOR//////////////////////


Serial.print(battery); Serial.print(F(","));
Serial.print(latt, 6); Serial.print(F(","));
Serial.print(lngt, 6); Serial.print(F(","));
// Serial.print("24.860966"); Serial.print(F(","));
// Serial.print("66.990535"); Serial.print(F(","));
Serial.print(T,1);Serial.print(F(","));
Serial.print(P,1);Serial.print(F(","));
Serial.print(a);Serial.print(F(","));
Serial.print(dht.readHumidity()); Serial.print(F(","));
Serial.print(aX); Serial.print(F(","));
Serial.print(aY); Serial.print(F(","));
Serial.print(aZ); Serial.print(F(","));
Serial.print(atan2(aX, aY) * 180 / 3.142); Serial.print(F(","));
Serial.print(gX); Serial.print(F(","));
Serial.print(gY); Serial.print(F(","));
Serial.print(gZ); Serial.print(F(","));
Serial.println(ct-t);

////////////////////SD CARD/////////////////////////////////

// dataFile = SD.open("hassan.txt", FILE_WRITE);


// if(dataFile)
// {
// Serial.println("writing log: ");
// dataFile.print(battery); dataFile.print(F(","));
// dataFile.print(latt,6); dataFile.print(F(","));
// dataFile.print(lngt,6); dataFile.print(F(","));
//// dataFile.print("24.960966"); dataFile.print(F(","));
//// dataFile.print("66.996375"); dataFile.print(F(","));
// dataFile.print(T,1);dataFile.print(F(","));
// dataFile.print(P,2);dataFile.print(F(","));
// dataFile.print(a);dataFile.print(F(","));
// // dataFile.print(dht.readHumidity()); dataFile.print(F(","));
// dataFile.print(aX); dataFile.print(F(","));
// dataFile.print(aY); dataFile.print(F(","));
// dataFile.print(aZ); dataFile.print(F(","));
// //dataFile.print(atan2(aX, aY) * 180 / 3.142); dataFile.print(F(","));
// dataFile.print(gX); dataFile.print(F(","));;
// dataFile.print(gY); dataFile.print(F(","));
// dataFile.print(gZ); dataFile.print(F(","));
// dataFile.println(ct-t);
// dataFile.close();
// }

/////////////////// XBEE //////////////////////////

xb.print(battery); xb.print(F(","));
if(latt>20)
{
xb.print(latt,6); xb.print(F(","));
xb.print(lngt,6); xb.print(F(","));
}
else
{
xb.print("24.860966"); Serial.print(F(","));
xb.print("66.990535"); Serial.print(F(","));
}
xb.print(T,1); xb.print(F(","));
xb.print(P,1); xb.print(',');
xb.print(a); xb.print(F(","));
xb.print(dht.readHumidity()); xb.print(F(","));
xb.print(aX); xb.print(F(","));
xb.print(aY); xb.print(F(","));
xb.print(aZ); xb.print(F(","));
xb.print(atan2(aX, aY) * 180 / 3.142); xb.print(F(","));
xb.print(gX); xb.print(F(","));
xb.print(gY); xb.print(F(","));
xb.print(gZ); xb.print(F(","));
xb.println(ct-t);
t=ct;
delay(100);
}

//xb.print("24.860966"); xb.print(F(","));
//xb.print("66.990535"); xb.print(F(","));

///
FUNCTIONSSSSSWS////////////////////////////////////////////////////////////////////
///

void checkgps(void)
{

while (ss.available() > 0)


if (gps.encode(ss.read()))
displayInfo();
}
void displayInfo()
{

if (gps.location.isValid())
{
latt=gps.location.lat();
lngt=gps.location.lng();
galti=gps.altitude.meters();
}
else
{
Serial.print(F("INVALID"));
}

void bmpinit(void)
{
if (pressure.begin())
Serial.println("BMP180 init success");
else
{
// Oops, something went wrong, this is usually a connection problem,
// see the comments at the top of this sketch for the proper connections.

Serial.println("BMP180 init fail\n\n");


while(1); // Pause forever.
}
}

float getalti(void)
{
char status;
double T,P,p0,a;

// Serial.println();
status = pressure.startTemperature();
if (status != 0)
{
// Wait for the measurement to complete:
delay(status);
status = pressure.getTemperature(T);
if (status != 0)
{
// Print out the measurement:
//Serial.print("T");
// Serial.println(T,2);

// Serial.print(" deg C, ");


// Serial.print((9.0/5.0)*T+32.0,2);
// Serial.println(" deg F");

// Start a pressure measurement:


// The parameter is the oversampling setting, from 0 to 3 (highest res,
longest wait).
// If request is successful, the number of ms to wait is returned.
// If request is unsuccessful, 0 is returned.

status = pressure.startPressure(3);
if (status != 0)
{
// Wait for the measurement to complete:
delay(status);

// Retrieve the completed pressure measurement:


// Note that the measurement is stored in the variable P.
// Note also that the function requires the previous temperature
measurement (T).
// (If temperature is stable, you can do one temperature measurement for a
number of pressure measurements.)
// Function returns 1 if successful, 0 if failure.

status = pressure.getPressure(P,T);
if (status != 0)
{
// Print out the measurement:
// Serial.print("P");
// Serial.println(P,2);
//Serial.print(" mb, ");
// Serial.print(P*0.0295333727,2);
//// Serial.println(" inHg");
a = pressure.altitude(P,baseline);
//a= a*3.28084,0;
// Serial.print("H");
//Serial.println(a,0);
// Serial.print(" meters, ");
// Serial.println(a*3.28084,0);
// Serial.println(" feet");
}
else Serial.println("error retrieving pressure measurement\n");
}
else Serial.println("error starting pressure measurement\n");
}
else Serial.println("error retrieving temperature measurement\n");
}

delay(10); // Pause for 5 seconds.


return a;
}
float getpr(void)
{
char status;
double T,P,p0,a;

// Serial.println();
status = pressure.startTemperature();
if (status != 0)
{
// Wait for the measurement to complete:
delay(status);
status = pressure.getTemperature(T);
if (status != 0)
{
// Print out the measurement:
//Serial.print("T");
// Serial.println(T,2);

// Serial.print(" deg C, ");


// Serial.print((9.0/5.0)*T+32.0,2);
// Serial.println(" deg F");

// Start a pressure measurement:


// The parameter is the oversampling setting, from 0 to 3 (highest res,
longest wait).
// If request is successful, the number of ms to wait is returned.
// If request is unsuccessful, 0 is returned.

status = pressure.startPressure(3);
if (status != 0)
{
// Wait for the measurement to complete:
delay(status);

// Retrieve the completed pressure measurement:


// Note that the measurement is stored in the variable P.
// Note also that the function requires the previous temperature
measurement (T).
// (If temperature is stable, you can do one temperature measurement for a
number of pressure measurements.)
// Function returns 1 if successful, 0 if failure.

status = pressure.getPressure(P,T);
if (status != 0)
{
// Print out the measurement:
// Serial.print("P");
// Serial.println(P,2);
//Serial.print(" mb, ");
// Serial.print(P*0.0295333727,2);
//// Serial.println(" inHg");
//a = pressure.altitude(P,1013.25);
// Serial.print("H");
//Serial.println(a,0);
// Serial.print(" meters, ");
// Serial.println(a*3.28084,0);
// Serial.println(" feet");
}
else Serial.println("error retrieving pressure measurement\n");
}
else Serial.println("error starting pressure measurement\n");
}
else Serial.println("error retrieving temperature measurement\n");
}

delay(10); // Pause for 5 seconds.


return P;
}

float gettemp(void)
{
char status;
double T,P,p0,a;

// Serial.println();
status = pressure.startTemperature();
if (status != 0)
{
// Wait for the measurement to complete:
delay(status);
status = pressure.getTemperature(T);
if (status != 0)
{
// Print out the measurement:
//Serial.print("T");
// Serial.println(T,2);

// Serial.print(" deg C, ");


// Serial.print((9.0/5.0)*T+32.0,2);
// Serial.println(" deg F");

// Start a pressure measurement:


// The parameter is the oversampling setting, from 0 to 3 (highest res,
longest wait).
// If request is successful, the number of ms to wait is returned.
// If request is unsuccessful, 0 is returned.

status = pressure.startPressure(3);
if (status != 0)
{
// Wait for the measurement to complete:
delay(status);

// Retrieve the completed pressure measurement:


// Note that the measurement is stored in the variable P.
// Note also that the function requires the previous temperature
measurement (T).
// (If temperature is stable, you can do one temperature measurement for a
number of pressure measurements.)
// Function returns 1 if successful, 0 if failure.

status = pressure.getPressure(P,T);
if (status != 0)
{
// Print out the measurement:
// Serial.print("P");
// Serial.println(P,2);
//Serial.print(" mb, ");
// Serial.print(P*0.0295333727,2);
//// Serial.println(" inHg");
// a = pressure.altitude(P,1013.25);
// Serial.print("H");
//Serial.println(a,0);
// Serial.print(" meters, ");
// Serial.println(a*3.28084,0);
// Serial.println(" feet");
}
else Serial.println("error retrieving pressure measurement\n");
}
else Serial.println("error starting pressure measurement\n");
}
else Serial.println("error retrieving temperature measurement\n");
}

delay(10); // Pause for 5 seconds.


return T;
}

You might also like