Stap 4: Software Details
Introductie
De software werd uiteindelijk gecompileerd en getest met behulp van de Arduino IDE 1.6.5.
Om te gaan u moet de volgende bibliotheken gemaakt door Paul Stoffregen;
DS1307RTC.h bibliotheek
https://github.com/PaulStoffregen/DS1307RTC
Time.h bibliotheek
https://github.com/PaulStoffregen/time
Niet vertrouwd met het installeren van Arduino bibliotheken? Ga hier voor volledige instructies;
https://www.Arduino.CC/en/Guide/libraries
Operatie
-Startup
Op de software opstarten vooruitgangsbalk de Ethernet-shield met waarden voor; HTTP poort (80), MAC-adres (DEADBEEFFEED), IP-adres (haar 192.168.1.177, geen DHCP), Gateway IP-adres (hier Router is 192.168.1.1) en subnetmasker (hier klasse C, 255.255.255.0) en begint de server 'server.begin()'.
Alle adressen zijn IPv 4.
De code vervolgens de sectie van de lus van de Arduino software kader worden ingevoerd.
-Loop
De software wordt uitgevoerd de volgende acties op elke opeenvolgende pass van de lus;
- In de uitvoer van temperatuursensor via A0 'sensorPin' lezen en converteren naar graden C. Als de berekende waarde groter dan het niveau van de 'OVER_TEMP is' al de relaisuitgangen zijn uitgeschakeld en een over temperatuur vlag is ingesteld. Dit vermindert Vermogensdissipatie in de serverbehuizing. De vlag wordt later gebruikt om de opmaak van de HTML-code die door de client, triggering een waarschuwingsbericht worden weergegeven.
- De software vervolgens logt de huidige tijd 'RTC.read(on_timer)' en leest de status van de input knoppen via indirecte Boolean vlaggen; 'SwanLightButtonState', 'TopShelfButtonState' en 'UnderDeskButtonState'. De tijd van dit lezen 'GlobalTimeCurrent' wordt vervolgens vergeleken met 'GlobalElapsedTime'. Als 'HOURS_DELAY' + 'MINUTES_DELAY' heeft overschreden de lichten zal automatisch afsluiten. Deze code is niet-blokkerende dus <> = Client prestaties kunt de Arduino te besteden meer tijd toezicht voor HTTP verbindingsaanvragen en verbetering van de webserver. Deze 'verblijf op timer' kan worden uitgebreid door een druk op de knop (via web-pagina of vak knop) van een knop, vorming van terugstelbare monostabiele functionaliteit.
- Elke feitelijke knop input wordt dan sequentieel gecontroleerd via een 'digitalRead()', 'SwanLightButton', 'TopShelfButton' of 'UnderDeskButton' pin verwijzingen gebruiken. De code voor deze toepassingen de oproep van de 'millis()' maken software switch-stuiteren. Hier schakelaar-stuiteren opzettelijk is uitgebreid om te voorkomen dat per ongeluk activeren. Het functionaliteit is ontwikkeld om te schakelen van het licht als permanent gehouden in de aan-positie. Dit dient drie doeleinden; 1: slechts één keuzerondje is nodig om te zetten/van de respectieve licht, 2: dit vermindert het aantal nodige ingangen gebruikt op de Arduino, 3: waarschuwt de gebruiker als een toets per ongeluk ingedrukt als het geval indien iets zwaar wordt geplaatst op het vak knop voor onbewust zou zijn (ik leunde dit door ervaring). Nogmaals zijn deze vertraging oproepen niet-blokkerende.
- De code vervolgens controleert of de aanvraag van een client en leest geen tekens van een HTTP GET via een 'client.read()'.
- Als de HTTP-aanvraag voltooid is, beëindigd door '\n' de software reageert met een reeks 'client.println()' opdrachten. Elk van die bevattende een HTML opgemaakt reactie, vorming van de 'Studie Light' web-pagina in de cliënt, met inbegrip van tijd, datum, temp (of boven tijdelijke waarschuwing), s/w versie, nog op tijd, enz. U ziet vanaf de bovenkant van de code ik voegde de reactie van de compiler die aangeeft hoeveel programmageheugen en dynamisch geheugen beschikbaar was. De Ethernet-bibliotheek is vrij geheugen 'honger', dus u moet zich bewust zijn van de codegrootte van uw. Meest efficiënte om gebruik te maken van de beschikbare niet-vluchtig geheugen dat ik omringd elke tekenreeks 'client.println()' met de 'F()' macro zodanig dat zij zouden worden opgeslagen in flash en zonder te hoeven programmeren ruimte.
- Aan het einde van de reactie van de GET-verzoek wordt gecontroleerd om te zien of is vraagt de client een tijd wijzigen 'strHTTPTimeLiteral', een datum wijzigen strHTTPDateLiteral Als dit het geval is wordt de RTC dienovereenkomstig bijgewerkt.
- Tot slot wordt nagegaan om te bepalen als een verandering van licht status heeft aangevraagd het webinterface, als dus de respectieve indirecte Boolean flags zijn bijgewerkt ('SwanLightButtonState', 'TopShelfButtonState', 'UnderDeskButtonState') samen met de corresponderende pin Arduino uitvoer correct rijden de bijbehorende estafette.
- Lus herhaalt.
.
Berekening van de temperatuur met de MCP9700
Vanuit het gegevensblad van de fabrikanten geeft de MCP9700 een verandering van de uitvoer van 10mV/DegC. De vergelijking voor de berekening van de reactie is Vout Tc = * Ta + Vout0C. (of y = mx + c) Waarin Tc (Temp Coeff) is 10mV/DegC, Ta de ambient temp wordt gemeten, Vout0C is de output van de MPC9700 bij 0 graden C.
Dus wordt temp berekend als volgt; TemperatureDegC = ((sensorValue * (5.0/1024.0))-0.5)/0.01
Andere items te overwegen
- Auto tijd instellen op begin. Of auto update regelmatig. Bespaart moetend dit handmatig doen.
- Weergave van de huidige status van elke vermelding op de webpagina.
- Verbeteren van de HTML-code. Eventueel herschrijven gebruik van pagina's van de Ethernet-Shield aan boord uSD kaart voorgeschoteld. Letterlijke tekenreeksen de hardcoded is niet een bijzonder efficiënte methode om te gebruiken.
- Als 3 is gedaan, voeg dan een FTP-server zo webpagina's bijgewerkt en worden gemakkelijk geüpload.
Geleerde lessen
- Een Arduino Pro versie gebruiken zodat u uw eigen, betrouwbare verbindingslijnen kunt toevoegen.
- Besteden meer tijd aan het leren van HTML. Ik bedrogen en gebruikt WireShark om na te gaan precies wat er gaande was over de Ethernet zodat ik kon bedenken wat er in de Ethernet-shield gebeurde. De Arduino IDE is vrij goed om te gaan, maar jammerlijk ontoereikend is om te debuggen met. Tenzij u gebruiken 'print' verklaringen willen. Ik weet niet.
.
.
Tot slot, als altijd, de code, schakeldiagram, constructie details etc. vindt u gratis te gebruiken in welke manier zie je past (enkel Maak een vermelding van mij), maar ze komen niet-ondersteunde.
.
Gelukkig uitvinden.