GPS Ublox Neo-6M cu Arduino Uno

Pe piata, desi au acelasi nume, aceste GPS-uri pot varia ca specificatii. Asadar, fiti atenti la specificatii sa nu aveti surprize. Veti gasi variante care functioneaza la 3V si altele, ca cel pe care il voi prezenta, care functioneaza la tensiuni cu plaja 3-5V.

Modulul GPS este unul foarte usor de cablat, avand numai 4 pini: Rx, Tx, Vcc, GND. Daca sunteti in casa puneti-l langa un geam, pentru a putea citi streamurile de date NMEA. Eu nu am reusit sa-l fac sa prinda semnalul din casa. In momentul cand citeste streamurile un led verde functioneaa intermitent.

Caracteristici:

  • Alimentare:  3V-5V
  • Model: GY – GPS6MV2
  • Modul cu antena de ceramică, semnal puternic
  • EEPROM salveaza datele parametrilor de configurare, atunci când alimentarea e oprita
  • Are baterie pentru backup de date
  • Ledul de semnal care se aprinde intermitent
  • Rata baud implicită: 9600 baud
  • Compatibilă cu diverse module de control de zbor
  • Dimensiunea modulului 25 mm x35 mm/0.98” x1.37” (inch) (aprox)
  • Dimensiunea antenei: 25x 25 mm/0.98” x0.98”

Astfel, avem 2 cazuri de GPS, avand acelasi nume, dar specificatii diferite:

1) la varianta cu 3V va trebui la montaj sa folositi divizorul de tensiune astfel incat sa nu ardeti modulul. Cablarea exact ca in imaginea de mai jos.

uno_neo6mv2

 

2. La varianta cu plaja intre 3-5 V cablarea este fara niciun rezistor, astfel:

Vcc GPS – 5V pe placa

GND GPS – GND pe placa

Rx GPS – Tx pe placa (pin 3 pe placa)

Tx GPS – Rx pe placa (pin 4 pe placa)

Am pus si niste imagini orientative.

ImageImage

 

Descarcati biblioteca tinyGPS sau tinyGPS++.

Codul aici.

Rezultatele se gasesc in acelasi folder unde este si codul pentru share.

1

 

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.