Giroscop MPU-6050 + Processing

Giroscoapele ne ajuta de determinam orientarea unui corp solid in spatiu. In tutorialul de astazi ne vom axa pe citirea inclinarii corpului solid  pe urmatoarele axe: ruliu, giratie, tangaj.

Vom afisa interactiv folosind un Arduino Nano si un giroscop MPU-6050 orientarea in spatiu al ansamblului din figura de mai jos:

Image

 

Cablarea este urmatoarea:

– in caz ca nu se vede INT de la MPU se leaga la pinul digital 2 de pe Nano. Daca folositi alta placa aveti grija sa determinati care pin corespunde intreruperii #0. Arduino Nano are pinul 2 care corespunde intreruperii #0(zero).

wiring

Pasi pentru proiect:

1. Se descarca libraria, codul arduino si codul processing de AICI

2. Se pune libraria in C:\Program Files (x86)\Arduino\libraries. In caz ca ati instalat in alta cale, cautati folderul de librarii.

3. Se instaleaza Processing 2 de AICI

In codul arduino am mai definit niste linii de cod ca atunci cand giratia este de 93 grade sa aprinda un led. Astfel sa stiu ca am “lock” pe giratie si avionul/racheta/vaporul are orientare in directia dorita.

 

Rezultat video:

AICI

Advertisements

Masurarea temperaturii si umiditatii cu DHT11

In primul rand trebuie spus ca pe piata veti gasi o gama larga de senzori DHT11. De la senzor cu 4 picioruse in care trebuie sa puneti niste rezistente pe un breadboard, pana la senzor cu 3 pini, lipit pe o placuta cu rezistentele necesare. In acest tutorial vom folosi unul cu toate lipiturile deja facute.

Asadar inainte de a incepe aveti grija la pinii senzorului: + GND si S(sau data).

Specificatii:

  • Model: senzor DHT11
  • Gama de transmitere a semnalului: 20m
  • Domeniu de măsurare umiditate: 20 – 95% RH
  • Eroare de măsurare umiditate: + / -5%
  • Interval de măsurare a temperaturii: 0 – 50 ° C
  • Eroare de măsurare a temperaturii: + / -2 ° C
  • Tensiunea de operare: 3.3 – 5V
  • Tipul de ieșire:  ieșire digitală
  • Dimensiunea plăci mici PCB: 3.2 x 1.4cm
  • Greutate neta: 8g

Dupa ce l-am cablat si programat, termometrul de camera arata 21 C, iar senzorul arata pe seriala 23 C.  Deci este in regula, respecta specificatiile.

Daca nu il folositi in aplicatii unde masurarea temperaturii trebuie sa fie cat mai exacta, il recomand, caci este foarte usor de folosit si cablat. O varianta mai buna este DHT22.

Image

Image

 

Cod:

//Celsius to Fahrenheit conversion
double Fahrenheit(double celsius)
{
return 1.8 * celsius + 32;
}

// fast integer version with rounding
//int Celcius2Fahrenheit(int celcius)
//{
// return (celsius * 18 + 5)/10 + 32;
//}

//Celsius to Kelvin conversion
double Kelvin(double celsius)
{
return celsius + 273.15;
}

// dewPoint function NOAA
// reference: http://wahiduddin.net/calc/density_algorithms.htm
double dewPoint(double celsius, double humidity)
{
double RATIO = 373.15 / (273.15 + celsius); // RATIO was originally named A0, possibly confusing in Arduino context
double SUM = -7.90298 * (RATIO – 1);
SUM += 5.02808 * log10(RATIO);
SUM += -1.3816e-7 * (pow(10, (11.344 * (1 – 1/RATIO ))) – 1) ;
SUM += 8.1328e-3 * (pow(10, (-3.49149 * (RATIO – 1))) – 1) ;
SUM += log10(1013.246);
double VP = pow(10, SUM – 3) * humidity;
double T = log(VP/0.61078); // temp var
return (241.88 * T) / (17.558 – T);
}

// delta max = 0.6544 wrt dewPoint()
// 5x faster than dewPoint()
// reference: http://en.wikipedia.org/wiki/Dew_point
double dewPointFast(double celsius, double humidity)
{
double a = 17.271;
double b = 237.7;
double temp = (a * celsius) / (b + celsius) + log(humidity/100);
double Td = (b * temp) / (a – temp);
return Td;
}

#include <dht11.h>
dht11 DHT11;
#define DHT11PIN 2

void setup()
{
Serial.begin(9600);
Serial.println(“DHT11 TEST PROGRAM “);
Serial.print(“LIBRARY VERSION: “);
Serial.println(DHT11LIB_VERSION);
Serial.println();
}

void loop()
{
int chk = DHT11.read(DHT11PIN);
switch (chk)
{
case DHTLIB_OK:
//Serial.println(“OK”);
break;
case DHTLIB_ERROR_CHECKSUM:
Serial.println(“Eroare de Checksum”);
break;
case DHTLIB_ERROR_TIMEOUT:
Serial.println(“Eroare de Time out”);
break;
default:
Serial.println(“Eroare necunoscuta”);
break;
}

Serial.print(“Umiditate (%): “);
Serial.print((int)DHT11.humidity); //Serial.print((float)DHT11.humidity, 2);
Serial.write(” “);
Serial.print(“Temperatura (oC): “);
Serial.println((int)DHT11.temperature); //Serial.println((float)DHT11.temperature, 2); //cu zecimle
//Serial.write(” “);
//Serial.print(“Temperatura (oF): “);
//Serial.println(Fahrenheit(DHT11.temperature), 2);
/*
Serial.print(“Temperatura (K): “);
Serial.println(Kelvin(DHT11.temperature), 2);

Serial.print(“Dew Point (oC): “);
Serial.println(dewPoint(DHT11.temperature, DHT11.humidity));

Serial.print(“Dew PointFast (oC): “);
Serial.println(dewPointFast(DHT11.temperature, DHT11.humidity));
*/
delay(1000);
}

Libraria si codul sursa pe care le-am folosit:  aici.

Tutorial avansat: aici. -> este in engleza, pentru eventuale informatii folositi formularul de contact de pe magazinul online ArduHobby.