Dataöverföring av icke-internet ansluten solvärmesystem med Arduino, PHP och MySQL
Beskrivning
Syftet med denna arduino projekt är att förvärva och överföra data via GSM-nätet. Fördelen är att kunna samla in data (till exempel övervakning av en sol anläggning) även om det finns ingen svårt kabelansluten Internetanslutning.
Detta är hur det fungerar:
- En värdet avläses arduinos analog ingång A0 (i detta fall temperatur)
- GSM modemet startas och en anslutning upprättas.
- pass.php blir kallade och värde och säkerhet datanyckeln överförs till skriptet.
- Skriptet sparas värdet, IP-adressen och den aktuella servertiden i databasen.
- Arduino väntar för ett visst intervall innan du upprepar.
- Data kan ritas i ett diagram med plot.php eller skrivs till en CSV-fil med csv.php
Koden var inspirerad av och innehåller utdrag från:
Arduino Daten-logger (MySQL/PHP) av Poldi
Hur att stoppa gsm.begin() av Anders Hedberg
Material
Hårdvara
- Arduino (Leonardo)
- GSM sköld
- 10 kiloohm termistor
- 10 kiloohm resistor
- SIM-kortet (APN information krävs)
Programvara
- Arduino IDE
- XAMPP
- JpGraph
Buggar
Ungefär var 10: e anslutningsförsöket misslyckas. Det är okänt om felet är relaterat till tjänsteleverantören eller om andra faktorer påverkar detta beteende (kanske väder?). Om du har erfarenheter om detta problem är du välkommen att lämna en kommentar.
Förbättringspotentialen
Regelbundna tidsintervall
För närvarande definieras tidsvärde som hör till mätningen när mätningen skrivs till databasen. Eftersom den tid att bygga upp anslutningen till GSM-nätet varierar, är tidsintervall oregelbunden.
För att uppnå exakt tidsintervall en programvara lösning som beskrivs här eller en verklig tid klocka utbrytning kunde användas.
Spara energi
Eftersom GSM-modem drivs hela tiden och bygger upp anslutningar ofta, lösningen är snarare energi krävande. Att spara energi och därför förbättra varaktigheten när drivs av ett batteri, mätningarna kan lagras i en matris och få upp i en bunt. Detta skulle tillåta GSM sköld att stänga för det mesta men kräver också en metod för att bestämma tid lokalt på arduino. Förhoppningsvis skulle denna lösning också lösa felet på samma gång.