Hola, con un amigo estamos trabajando para hacer una estación meteorológica y para ello utilizamos un modulo gps Neo 6M, un barómetro bmp180 y un sensor de humedad dht22. El problema es que no podemos hacer que los sensores trabajen juntos, probándolos uno por uno si funcionan, pero cuando el GPS recibe alimentación, los sensores bmp180 y dht22 dejan de trabajar.
El GPS lo tenemos por software serial en un arduino Mega 2560.
¿Ustedes creen que si lo mandamos a un puerto serie dedicado este problema se solucionaría o que otras alternativas nos ofrecen?
Y porque no usasa una fuente de 5V externa y alimentas todos los sensores con algo que no sea el mismo Arduino porque obviamente ese módulo GPS te esta tirando la alimentación abajo o sea consume tanto que el Arduino no puede sostener el funcionamiento de todos los sensores y el suyo propio.
Busca cuanto consume. Usa una fuente de 5V externa, aliméntalo con dicha fuente, deja todo como esta salvo la alimentación de 5V y comparte GND con el Arduino y todo irá de maravillas.
Ya hemos intentado anteriormente con la fuente, cuando el gps comienza a arrojar los datos se detiene todo lo demas. Te muestro la programación por si crees que hay algo mal. Gracias por su atención.
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <SoftwareSerial.h>//incluimos SoftwareSerial
#include <TinyGPS.h>//incluimos TinyGPS
#include <Wire.h>
#include <Adafruit_BMP085.h>
TinyGPS gps;//Declaramos el objeto gps
SoftwareSerial serialgps(11, 10); //Declaramos el pin 4 Tx y 3 Rx
//Declaramos la variables para la obtención de datos
int year;
byte month, day, hour, minute, second, hundredths;
unsigned long chars;
unsigned short sentences, failed_checksum;
LiquidCrystal_I2C lcd(0x27, 20, 4); // set the LCD address to 0x27 for a 16 chars and 2 line display
Adafruit_BMP085 bmp;
void setup()
{
Serial.begin(115200);//Iniciamos el puerto serie
serialgps.begin(9600);//Iniciamos el puerto serie del gps
//Imprimimos:
Serial.println("");
Serial.println("GPS GY-GPS6MV2 Leantec");
Serial.println(" ---Buscando senal--- ");
Serial.println("");
lcd.init(); // initialize the lcd
lcd.init();
// Print a message to the LCD.
lcd.backlight();
if (!bmp.begin()) {
Serial.println("Could not find a valid BMP085 sensor, check wiring!");
while (1) {}
}
}
void loop()
{
while (serialgps.available())
{
int c = serialgps.read();
if (gps.encode(c))
{
float latitude, longitude;
gps.f_get_position(&latitude, &longitude);
Serial.print("Latitud/Longitud: ");
Serial.print(latitude, 5);
Serial.print(", ");
Serial.println(longitude, 5);
gps.stats(&chars, &sentences, &failed_checksum);
Serial.print("Temperature = ");
Serial.print(bmp.readTemperature());
Serial.println(" *C");
Serial.print("Pressure = ");
Serial.print(bmp.readPressure() / 100);
Serial.println(" hPa");
Serial.print("Altitude = ");
Serial.print(bmp.readAltitude());
Serial.println(" meters");
Serial.print("Real altitude = ");
Serial.print(bmp.readAltitude(101500));
Serial.println(" meters");
Serial.println();
lcd.setCursor(3, 0);
lcd.print(latitude, 5);
lcd.setCursor(2, 1);
lcd.print(longitude, 5);
lcd.setCursor(0, 2);
lcd.print(bmp.readPressure() / 100);
lcd.setCursor(2, 3);
lcd.print(bmp.readTemperature());
}
}
}