Radíme si navzájem

Datum
Vložil
Titulek

Re: MPU-6050

Třeba si z toho něco vybereš.
// ALARM - odeslani SMS
#include "Wire.h"
#include "Math.h"
#include "I2Cdev.h"
#include "MPU6050.h"
#include <LiquidCrystal.h> // import knihovny DISPLEJE
LiquidCrystal lcd (12, 13, 8, 9, 10, 11); // piny displeje UNO - RS, E, D4, D5, D6, D7
// LiquidCrystal lcd (51, 53, 48, 50, 52, 49); // piny displeje MEGA -
#define napajeni1 2 // napajeni UGM1
#define vstup1 3 // vstup UGM1 negovany

// vytvoříme objekt s názvem
MPU6050 akcelerometr;

const float pi = 3.141592;
const int pocet_vzorku = 10; // pocet vzorku mereni pro vyhodnoceni
// pojmenovani promenych
int ax, ay, az;
float x, y, z;
int pocet;
float _angle_x, angle_x, _angle_y, angle_y;
long ax_p, ay_p, az_p;
float pamet_x, pamet_y; // pamet pocatecni polohy
float pom1f;
int pom1i, pom2i;

void setup()
{
lcd.begin(16,4); // parametry displeje
// inicializace I2C
Wire.begin();
// zvolime vyssi rychlost pro seriovy port
Serial.begin(38400);
// inicializace akcelerometru
akcelerometr.initialize();
// Kdyz to hodi chybu vypiseme hlasku
if (akcelerometr.testConnection());
Serial.println("Spojeni OK...");
pinMode(napajeni1,OUTPUT); // napajeni UGM1
pinMode(vstup1,OUTPUT); // vstup do UGM1
digitalWrite(napajeni1,0); digitalWrite(vstup1,0);
delay(10000);
zjistiSklonNaklon();
pamet_x = angle_x;
pamet_y = angle_y;
}

void loop()
{
zjistiSklonNaklon();
displej1();
pom1f = abs(pamet_x - angle_x);
if (pom1f > 2 ) // hranice prekroceni
digitalWrite(napajeni1,1);

pom1f = abs(pamet_y - angle_y);
if (pom1f > 2 ) // hranice prekroceni
digitalWrite(napajeni1,1);

if (digitalRead(napajeni1))
{
udalost1();
// delay(1000);
zjistiSklonNaklon();
pamet_x = angle_x;
pamet_y = angle_y;
}
}

void displej1()
{
lcd.clear();
lcd.setCursor(0, 0); lcd.print(" X = "); lcd.print(angle_x);
lcd.setCursor(0, 1); lcd.print(" Y = "); lcd.print(angle_y);
}

void zjistiSklonNaklon()
{
// zjisti vsechny hodnoty z akcelerometru
akcelerometr.getAcceleration(&ax, &ay, &az);
pocet = 0;
ax_p = 0;
ay_p = 0;
az_p = 0;
{
ax_p = ax_p + ax;
ay_p = ay_p + ay;
az_p = az_p + az;
pocet++; // scitame pocet vzorku
}
while(pocet > pocet_vzorku);

// zjistime prumerne hodnoty
x = ax_p/pocet_vzorku;
y = ay_p/pocet_vzorku;
z = az_p/pocet_vzorku;
// vypočteme sklon a náklon
angle_x = atan2(x, sqrt(square(y) + square(z)) )/(pi/180);
angle_y = atan2(y, sqrt(square(x) + square(z)) )/(pi/180);
}

void udalost1()
{
delay(20000); // pro prihlaseni UGM do site
digitalWrite(vstup1,1); // zmena vstupu UGM1 pro odeslani SMS
delay(2000);
digitalWrite(vstup1,0);
delay(20000);
digitalWrite(napajeni1,0); // nevypinat napajeni pokud ma byt zameritelne
}

Zpět na diskuzi

Vyhledávání

arduino8.cz © 2015 Všechna práva vyhrazena.