Arduino GPRS väderstation - del 1 (22 / 23 steg)

Steg 22: MEGA 2560 fullständiga koden

< p > / / slav se bifogas textfil för fullständiga detaljer. < br > #include
#include "Adafruit_FONA.h"
#include
#include
#include
#include
#include
#include "DHT.h"
#define FONA_RX 2
#define FONA_TX 10
#define FONA_RST 4
#define ONE_WIRE_BUS_PIN 11
#define DHTPIN 4
#define DHTTYPE DHT11 / / DHT 11
#define DHTTYPE DHT22 / / DHT 22 (AM2302), AM2321
Stift 5 //Sends ett samtal tillbaka signal till master när framgångsrika dataöverföringen.
DHT dht (DHTPIN, DHTTYPE);
OneWire oneWire(ONE_WIRE_BUS_PIN);
DallasTemperature sensorer (& oneWire);
DeviceAddress Probe01 = {0x28, 0xFF, 0xA3, 0x4D, 0x00, 0x16, 0x03, 0xEC}; Detta är adresserna till temp sonderna DS18B20
DeviceAddress Probe02 = {0x28, 0x4E, 0xCA, 0x80, 0x04, 0x00, 0x00, 0xA0};
DeviceAddress Probe03 = {0x28, 0x7C, 0x8A, 0x5D, 0x05, 0x00, 0x00, 0xFD};
CONST long illrar = 179224;
int n = 0;
int z = 0;
int fukt = 0;
osignerade långa heatindex = 0;
osignerade långa fuktighet = 0;
osignerade långa tempDHT22 = 0;
osignerade långa vindhastigheten = 0;
osignerade långa windgust = 0;
osignerade långa avWindPulseRate = 0;
osignerade långa maxWindPulseRate = 0;
osignerade långa regn = 0;
osignerade långa windDirection = 0;
osignerade långa windway = 0;
osignerade långa moistureValue = 0;
osignerade långa tryck = 0;
osignerade långa volt = 1200; multiplicerat med 100.
osignerade långa tempint;
osignerade långa tempout;
osignerade långa tempsoil;
osignerade långa previousMillis = 0;
CONST långa intervall = 10000;
Detta är en stor buffert för svar
char replybuffer [255];
Sträng initiativtagare, dataString;
CONST char webadress [180] = "http://www.goatindustries.co.uk/weather/send.php?";
char url [180];
#include
SoftwareSerial fonaSS = SoftwareSerial (FONA_TX, FONA_RX);
SoftwareSerial * fonaSerial = & fonaSS;
Adafruit_FONA fona = Adafruit_FONA(FONA_RST);
Adafruit_BMP085_Unified bmp = Adafruit_BMP085_Unified(10085);
uint8_t readline (char * buff, uint8_t maxbuff, uint16_t timeout = 0);
uint8_t typ;
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void setup() {
Serial.BEGIN(115200);
pinMode (5, OUTPUT); Skickar ett samtal tillbaka signalen till master när framgångsrika dataöverföringen.
pinMode (6, OUTPUT); Återställer FONA
digitalWrite(6,LOW);
fördröjning (1000);
digitalWrite(6,HIGH);
fördröjning (100);
digitalWrite(6,LOW);

DHT.BEGIN();
IF(!bmp.BEGIN())
{
/ * Ett problem upptäcka BMP085... kolla dina anslutningar * /
Serial.Print (Ooops, ingen BMP085 upptäckt... Kontrollera dina ledningar eller I2C ADDR!");
While(1);
}

Wire.BEGIN(9);
Wire.onReceive(receiveEvent);

tag (!. Seriell); Använd detta för att inleda programmet vid öppning av seriell monitor. Ta bort i normal drift.
Serial.println F ("FONA grundläggande test").
Serial.println (F ("initierar... (Kan ta 3 sekunder) "));
sensors.BEGIN(); Temperaturgivare DS18B20.
sensors.setResolution (Probe01, 11); Var på pinne 10 i version 09
sensors.setResolution (Probe02, 11);
sensors.setResolution (Probe03, 11);
fonaSerial -> begin(4800);
om (! fona.begin(*fonaSerial)) {
Serial.println (F ("kunde inte hitta FONA"));
samtidigt (1).
}
typ = fona.type();
Serial.println (F ("FONA är OK"));
Serial.Print F ("hittade").
Växla (typ) {
fall FONA800L:
Serial.println F ("FONA 800L"). bryta;
fall FONA800H:
Serial.println F ("FONA 800H"). bryta;
fall FONA808_V1:
Serial.println F ("FONA 808 (v1)"). bryta;
fall FONA808_V2:
Serial.println F ("FONA 808 (v2)"). bryta;
fall FONA3G_A:
Serial.println F ("FONA 3G (amerikansk)"). bryta;
fall FONA3G_E:
Serial.println F ("FONA 3G (Europeiska)"). bryta;
standard:
Serial.println(F("???")); bryta;
}
networkStatus(); Kontrollera att nätverket är tillgänglig. Hem är bra.

FONA test genom att skriva ut modulen IMEI nummer.
char imei [15] = {0}. MÅSTE använda en 16 tecken buffert för IMEI!
uint8_t imeiLen = fona.getIMEI(imei);
om (imeiLen > 0) {
Serial.Print ("modul IMEI:"); Serial.println(IMEI);
}
Serial.println("");
Serial.println ("Kontrollera att GPRS är avstängd till att börja med...");
fona.setGPRSNetworkSettings(F("pp.vodafone.co.uk"), F("wap"), F("wap")); Ändra dessa inställningar! (Nätverk APN, användarnamn, lösenord)
fördröjning (1000);
Stänga av GPRS:
om (! fona.enableGPRS(false))
Serial.println F ("No - det gick inte att stänga av").
Serial.println har ("om raden ovan säger OK, då GPRS bara varit avstängd");
fördröjning (1000);

Serial.println("");
Serial.println ("väntar på data från i2c...");
Serial.println("");
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void loop() {
om (z > 0) / / denna loop initieras om z är större än 1. Värdet på z ges av kvitto
{/ / i2c data. Det måste finnas en andra z utvärderingen att fona att slå på sin GPRS
networkStatus(); och förhindra förlust av data i tidslucka.
volt = analogRead (0) * 4.688; Alla decimaler konverteras till heltal som vi inte vill skicka decimalen karaktär via HTTP.

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Läst temperatur eller fuktighet tar cirka 250 millisekunder!
Sensormätningar kan också vara upp till 2 sekunder "gamla" (det är en mycket långsam sensor)
flyta h = dht.readHumidity();
Läs temperatur som Celsius (standard)
flyta t = dht.readTemperature();
Läs temperatur som Fahrenheit (isFahrenheit = true)
flyta f = dht.readTemperature(true);
fördröjning (3000);
Kontrollera om någon läser misslyckades och avsluta tidigt (för att försöka igen).
om (isnan(h) || isnan(t) || isnan(f)) {
Serial.println ("kunde inte läsa från DHT sensorn!");
hemkomst.
}
Beräkna Värmeindex i Fahrenheit (standard)
flyta hif = dht.computeHeatIndex (f, h);
Beräkna Värmeindex i Celsius (isFahreheit = false)
flyta hic = dht.computeHeatIndex (t, h, false);
fukt = h;
tempDHT22 = t;
heatindex = hic;
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
sensors_event_t händelse;
bmp.getEvent(&event);
om (event.pressure)
{
Tryck = (event.pressure) * 100;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

sensors.requestTemperatures(); DS18B20s
vindhastigheten = avWindPulseRate * 20;
windgust = maxWindPulseRate * 20;
Windway = windDirection;
fukt = moistureValue * 1,08;

printData(); Skriver ut alla data till följetong för felsökning.

Serial.Print (F ("FONA >"));
turnOnGPRS();
turnOnGPRS();

Läs webbadress
uint16_t statuscode;
int16_t längd;
char url [180];
flushSerial();
weatherData();
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Detta är där data sammanställs i en karaktär...
dataString = initieraren + webadress + "vindhastigheten =" + vindhastigheten + "& windgust =" + windgust + "& windway =" + windway + "& tempout =" + tempout + "& tempsoil =" + tempsoil + "& regn =" + regn + "& luftfuktighet =" + fuktighet + "& Tryck =" + tryck + "& volt =" + volt + "& fukt =" + fukt + "& tempint =" + tempint + "& illrar =" + jaga ut;
int n = dataString.length();
Serial.Print ("sträng att skicka:"); Serial.println(dataString);
Serial.Print ("storleken på sträng:"); Serial.println(n);
Bygger tecknet url:
för (int aa = 0; aa < = n; aa ++)
{
URL [aa] = dataString [aa];
}
Serial.Print ("Character data att skicka:"); Serial.println(URL);
Serial.println("");
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
... och som skickas ut via HTTP till en PHP-fil som heter send.php redo att ta emot den.
Serial.Print ("Skicka url... ");
Serial.Print ("sammanställt url är:"); Serial.println(URL);
Serial.println(F("***"));
om (! fona. HTTP_GET_start(URL, &StatusCode, (uint16_t *) & längd)) {
Serial.println("failed!");
}
medan (längd > 0) {
samtidigt (fona.available()) {
char c = fona.read();
Serial.Write är för långsam, ska vi skriva direkt till seriell register!
#if defined(__AVR_ATmega328P__) || defined(__AVR_ATmega168__)
loop_until_bit_is_set (UCSR0A, UDRE0); / * Vänta tills data registrera tomma. */
UDR0 = c;
#else
digitalWrite 5, hög, Ringa tillbaka till Master säga att överförings var framgångsrik.
Tone(7,((Windway*15)+400),1000);
noTone(7);
Serial.write(c);
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#endif
längd--;
om (! längd) bryta;
}
}
Serial.println(F("\n***"));
Fona. HTTP_GET_end();
Serial.println ("vänta 10 sekunder...");
Delay(500);
digitalWrite (5, låg).
fördröjning (10000);

Stänga av GPRS:
om (! fona.enableGPRS(false))
Serial.println F ("No - det gick inte att stänga av").
Serial.println ("GPRS avstängd?");
Serial.println ("väntar på data från i2c...");

spola input
flushSerial();
samtidigt (fona.available()) {
Serial.write(Fona.Read());
}
z = 0;
}
}
Slutet av huvudloop.
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Funktioner:
void flushSerial() {
samtidigt (Serial.available())
Serial.Read();
}
char readBlocking() {
tag (!. Serial.available());
återvända Serial.read();
}
uint16_t readnumber() {
uint16_t x = 0;
char c;
medan (! isdigit (c = readBlocking())) {
Serial.Print(c);
}
Serial.Print(c);
x = c - '0';
medan (isdigit (c = readBlocking())) {
Serial.Print(c);
x * = 10;
x += c - '0';
}
återvändande x;
}
uint8_t readline (char * buff, uint8_t maxbuff, uint16_t timeout) {
uint16_t buffidx = 0;
booleska timeoutvalid = sant;
om (timeout == 0) timeoutvalid = false;
medan (sant) {
om (buffidx > maxbuff) {
Serial.println(F("Space"));
bryta;
}
samtidigt (Serial.available()) {
char c = Serial.read();
Serial.Print (c, HEX). Serial.Print("#"); Serial.println(c);
om (c == '\r') fortsätta;
om (c == 0xA) {
om (buffidx == 0) / / den första 0x0A ignoreras
fortsätta;
timeout = 0; den andra 0x0A är slutet av raden
timeoutvalid = sant;
bryta;
}
buff [buffidx] = c;
buffidx ++;
}
om (timeoutvalid & & timeout == 0) {
Serial.println(F("timeout"));
bryta;
}
Delay(1);
}
buff [buffidx] = 0; null sikt
återvända buffidx;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void receiveEvent (int byte) {/ / kontrollera att beställningen är densamma i master och slav.
Delay(10);
maxWindPulseRate = Wire.read();
Delay(10);
windDirection = Wire.read();
Delay(10);
regn = Wire.read();
Delay(10);
avWindPulseRate = Wire.read();
Delay(10);
moistureValue = Wire.read();
Delay(10);
z = 1;
fukt = moistureValue;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void printSoilTemperature(DeviceAddress deviceAddress)
{
float temp = sensors.getTempC(deviceAddress);
tempsoil = temp * 100;
om (tempsoil ==-127.00)
{
Serial.Print ("fel få temperatur");
}
annat
{
Serial.Print(tempsoil); Serial.Print ("grader C * 100");
}
}
void printOutsideTemperature(DeviceAddress deviceAddress)
{
float temp = sensors.getTempC(deviceAddress);
tempout = temp * 100;
om (tempout ==-127.00)
{
Serial.Print ("fel få temperatur");
}
annat
{
Serial.Print(tempout); Serial.Print ("grader C * 100");
}
}
void printInsideTemperature(DeviceAddress deviceAddress)
{
float temp = sensors.getTempC(deviceAddress);
tempint = härda;
om (tempint ==-127.00)
{
Serial.Print ("fel få temperatur");
}
annat
{
Serial.Print(tempint); Serial.Print ("grader CC * 100");
}
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void networkStatus()
{
Läs nätverk/cellulär status
uint8_t n = fona.getNetworkStatus();
Serial.println("");
Serial.Print F ("Network status").
Serial.Print(n);
Serial.Print (F(":"));
om (n == 0) Serial.println F ("inte registrerad").
om (n == 1) Serial.println F ("registrerad (hem)").
om (n == 2) Serial.println F ("inte registrerade (söka)").
om (n == 3) Serial.println(F("Denied"));
om (n == 4) Serial.println(F("Unknown"));
om (n == 5) Serial.println F ("registrerad" roaming").
Serial.println ("nätverksstatus måste vara" registrerad""hem"i raden ovan");
Serial.println("");
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void turnOnGPRS()
{
Serial.println ("nu försöker aktivera GPRS...");
om (! fona.enableGPRS(true))
Serial.println F ("No - det gick inte att slå på").
Serial.println ("GPRS är på om raden ovan visar"OK"");
Serial.println ("vänta i 10 sekunder för att se till att GPRS är på...");
fördröjning (10000);
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void printData()
{
Serial.Print ("Probe01 (utanför) temp:");
printOutsideTemperature(Probe01);
Serial.println();
Serial.Print ("Probe02 (jord) temp:");
printSoilTemperature(Probe02);
Serial.println();
Serial.Print ("Probe03 (tempint) temp:");
printInsideTemperature(Probe03);
Serial.println();
Serial.Print ("Main batterispänning:"); Serial.println(volts);
Serial.Print ("i2c maxWindPulseRate:"); Serial.println(windgust); Inte kalibrerat ännu.
Serial.Print ("i2c avWindPulseRate:"); Serial.println(windspeed);
Serial.Print ("i2c windDirection:"); Serial.println(windDirection);
Serial.Print ("i2c regn:"); Serial.println(Rain);
Serial.Print ("i2c moistureValue:"); Serial.println(moistureValue);
Serial.Print ("lufttryck:"); Serial.Print(Pressure); Serial.println ("hPa * 100");
Serial.Print ("luftfuktighet:");
Serial.Print(humidity);
Serial.println ("% \t");
Serial.Print ("DHT22 temp:");
Serial.Print(tempDHT22);
Serial.println ("* C");
Serial.Print ("Värmeindex:");
Serial.Print(heatindex);
Serial.println ("* C");
Serial.println("");
} < /p >

Se Steg
Relaterade Ämnen

Infraröd Sensor guidade Arduino kontrollerade L293D Robot (del 2)

Här är del 2 av Arduino kontrollerade L293D Robot.Del 2 innehåller IR Sensors.This ingår i en serie av instructables leder till en rad efterföljare Robot.QRD1114 Infrarödsensor kopplad till ArduinoSteg 1: Ledningar IR sensorn till ArduinoNegativ från...

Arduino kontrollerade L293D Robot (del 1 - Update 1.0)

Här är del 1 av Arduino och L293D Robot.This är en del av en serie av instructables leder till en rad efterföljare Robot.Detta är en grundläggande Robot gjorde genom att styra två motorer via L293D chip genom en Arduino ombord.Jag har gjort detta pro...

Lärande Arduino grunderna till barnvakten - del 01 "Blink" eller "Internet"

du har köpt din första Arduino eller du planerar att få denna stora lilla enhet? Obi Wan skulle säga: "det är bra. Du har tagit ditt första steg in i en större värld." Samma sak för mig! Grattis! Ser du, när du behärskar grunderna, du har så kul...

Remote control via GPRS/GSM SMS(Arduino)

fjärrkontroll, särskilt när detta nr ethernet och Wifi i den utomhus, har varit en mycket djupgående saker tidigare. När jag var barn, bilden jag alltid som jag har en utrustning som kan styra alla vitvaror. Nu, detta blir verklighet, med Arduino och...

DIY Arduino och Raspberry Pi väderstation och webbserver

Detta är ett projekt som kommer att ta temperaturen med TMP36 IC temperaturgivare och en Arduino ombord. Dessa data kommer att sända över följetong till Raspberry Pistyrelsen redigerar en webbsida att Raspberry Pi är värd för sig själv. För detta pro...

Cloud trattar - Arduino väderstation

Enkla Arduino Uno väderstation med Ethernet web access använder cheep Maplin sensorer :) se PDF för beskrivning och Arduino kod. Du behöver 1 Arduino Uno och Ethernet shield + några remsor en bröd och halvpension att ansluta upp sensorer. Det kommer...

Arduino mark sond med DS18B20 och DIY fukt hårdvara

Som en fanatisk trädgårdsmästare eller professionella jordbrukare att veta miljömässiga villkoren i vår jord är ovärderlig. Självklart, vi kan inte mäta antalet maskar eller bitar av organiska humus, men vi kan mäta temperatur och fukt innehåll verkl...

Ställa in en A100LK vindmätaren på en Arduino

Någon tänker installera en vindkraftgenerator, eller ens en hel flock av vindkraftverk, skulle göra klokt att övervaka den föreslagna platsen för minst ett helt år innan spendera ett öre mer på hårdvara. Detta är vad A100LK är utformad för.Det första...

Como controlar un LED remotamente con Arduino y Ubidots

Luego de realizar esté handledning podrás controlar el encendido o apagado de actuador un remotamente, desde la plataforma de Ubidots. Sv éste caso usaremos un LED por facilidad, synd emabrgo podrás extender éste handledning, en pojkflicka, en cualqu...

Hackgyver väderstation

Sedan en tid på min hackerspace, en av vår medlem (futex) gjorde en väderstation med en Raspberry Pi.Efter som tittar på hans arbete hade jag idén att göra en men istället för att använda en RPi som plateform jag har fokuserat mitt arbete på Arduino,...

Arduino Firefly-programmerad lysdioder på handgjorda tovade Tote Bag

Detta var mitt första projekt som krävs för kodning. Min idé var att skapa en tovad väska som hade några lysdioder som skulle tona in och tona ut slumpmässigt, som eldflugor. Det skulle vara ganska och inte alltför nördig, så jag arbetade hårt på tov...

Arduino Powered "Scotch Mount" Star Tracker för fotografering

Jag lärde mig om Scotch montera när jag var yngre och gjorde en med min pappa när jag var 16. Det är ett billigt och enkelt sätt att komma igång med fotografering, att täcker grunderna innan du får i de komplicerade teleskop frågor av främsta fokus,...

Ansluta en väderstation till Internet saker

Hej och Välkommen med till de stegvisa instruktionerna för att göra din Davies väderstation del av Sakernas Internet våra Intel ICRI kit.Med hjälp av detta kit kommer du att kunna ansluta din Davies väderstation till en Intel Galileo, vilket innebär...

Enkel automatisk flytta Robot använder arduino & L293d IC

detta är en grundläggande Robot drivs av en arduino och vad den gör är att det bara strövar runt och följa en cirkulärbana genom standardkod men du kan ändra koden för att ändra sökvägen lätt. Det är ett enkelt projekt som alla kan bygga. . Så om du...

OHMMETER använder ARDUINO

Enohmmeter är en enhet som kan mäta motstånd.De flesta gånger nu, ohmmetrar är inte fristående enheter men visas som en av typ av mätanordning bland många i en multimeter. En avancerad multimeter, skulle i dag ha en ohmmeter, voltmeter, amperemeter,...

Kontroll Arduino fungerar med en USB-styrenhet, ingen lödning krävs-jag gjorde det på TechShop

tidigare i år bestämde jag mig att det skulle vara kul att använda min kabelanslutna Xbox 360-handkontrollen för att styra Arduino projekt - i det här fallet en RGB LED. Den vanligaste metoden att göra det innebär dock att komma åt elektroniken inuti...

LEDDE matrisen med Arduino

Hola, jag är Javier från Makespace Madrid. Förra veckan anordnade vi en meetup att spela med LED matriser och Arduinos. Detta var del av "La noche de la electrónica con Jameco"Detta instructable är baserat på verkstaden. Den använder en enda led...

Arduino & sony ericsson: gsm sköld hacka

Hej! Ett tag sedan jag ville fjärråtkomst till min arduino för att styra I/O pins, jag gillade verkligen arduino GSM sköld eftersom det skulle tillåta mig att kontrollera min arduino från var som helst i världen. Men sådan en sköld tyvärr kommer inte...

ArduDroid: En enkel 2-vägs Bluetooth-baserade Android Controller för Arduino

UPPDATERINGAR:19 nov. 2031: yttrande: fantastiska synergin mellan Arduino & Android.30 oktober 2013: Andruino är nu officiellt ARDUDROID och snart blir tillgängligt på Google Play. Denna namnändring att undvika konflikt med en annan app på Google Pla...