Web-Enabled lui studie lichten Controller (4 / 4 stap)

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;

  1. 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.
  2. 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.
  3. 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.
  4. De code vervolgens controleert of de aanvraag van een client en leest geen tekens van een HTTP GET via een 'client.read()'.
  5. 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.
  6. 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.
  7. 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.
  8. 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

  1. Auto tijd instellen op begin. Of auto update regelmatig. Bespaart moetend dit handmatig doen.
  2. Weergave van de huidige status van elke vermelding op de webpagina.
  3. 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.
  4. Als 3 is gedaan, voeg dan een FTP-server zo webpagina's bijgewerkt en worden gemakkelijk geüpload.

Geleerde lessen

  1. Een Arduino Pro versie gebruiken zodat u uw eigen, betrouwbare verbindingslijnen kunt toevoegen.
  2. 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.

Gerelateerde Artikelen

OpenSprinkler: Open-source Web-enabled Sprinkler Valve Controller

OpenSprinkler: Open-source Web-enabled Sprinkler Valve Controller

overzichtIk ben trots om te introduceren OpenSprinkler: een open-source programmeerbare, web-enabled sprinkler valve controller. Het kan worden gebruikt om te plannen en te werken met standaard 24VAC sprinkler kleppen vaak aangetroffen in huishoudeli
Slimme Homer Web-enabled TV remote

Slimme Homer Web-enabled TV remote

Slimme Homer, een Web-enabled TV remote marionetSlimme Homer is een Web-enabled marionet dat op uw TV draait als Simpsons is ingeschakeld. Zoals Homer te lui om te surfen op het Web zelf is, controleert een script in de wolk de online TV-programma vo
PIGate, deur/gate opener van de garage van de web-enabled

PIGate, deur/gate opener van de garage van de web-enabled

Bouwen van een opener van de externe poort met behulp van een expressjs en een Raspberry PiintroductieEr is iets heel bevredigend over te klikken op een web-interface of het raken van een knop op een app en het zien van enkele fysieke gebeurtenis opt
Web-Enabled huis thermostaat (en huisautomatisering Hub)

Web-Enabled huis thermostaat (en huisautomatisering Hub)

Dit Instructable legt uit hoe ik WiFi toegelaten thermostaten gebouwd voor mijn huis. De thermostaten zijn programmeerbaar met 6 verschillende perioden tijdens de dag, hoewel steeds meer die op elk willekeurig nummer zou vrij onbeduidend. Ze kunnen w
Web-enabled Polar hartslagmeter

Web-enabled Polar hartslagmeter

Gebruik een Polar hartslagsensor, een goedkope hardwarekaart aangesloten via USB en een beetje van software om te zetten uw hartslag op het Web. De live-gegevens is geserveerd vanaf uw computer en toegankelijk gemaakt via de Yaler estafette (disclosu
Arduino standalone web-enabled bell

Arduino standalone web-enabled bell

geïnspireerd door deze post, mij wilden voor wekken een Arduino aangedreven Bel dat volledig standalone was.Met een beetje PHP en (desgewenst) sommige jQuery op een website, kunt u deze bell ring wanneer een specifieke actie wordt uitgevoerd.Deze sta
WEB-ENABLED ACHTERTUIN artillerie

WEB-ENABLED ACHTERTUIN artillerie

howdy iedereen! Dit instructable is eigenlijk het hoogtepunt van vele projecten van mij, in het verleden, maar ze allemaal zijn samen gebruikt hebben om iets echt cool te doen! in principe is het een kanon dat kan u meer controle over het web via een
Web-Enabled zwembad Control - Raspberry Pi

Web-Enabled zwembad Control - Raspberry Pi

Vorig jaar had ik een zwembad gebouwd. Het was spannend toen de zwembad bouwer heeft me laten zien dat de industrie zwembad had verplaatst naar het tijdperk van de informatietechnologie en nu bood Programmacontrole via het internet. Wordt een compute
Web-Enabled garagedeur (Raspberry Pi)

Web-Enabled garagedeur (Raspberry Pi)

Doel om een webpagina te maken op basis van garage deuropener die moeten achteraf aan de meeste standaard openers. Getest met circa 1990s Chamberlain 1/2 hp opener. Nam eenmaal deel uw garagedeur kan openen vanaf uw mobiele telefoon of computer.Raspb
Arduino Web ingeschakeld RGB verlichting

Arduino Web ingeschakeld RGB verlichting

ik heb net toevallig om te zien sommige grote strips van LED-verlichting als ik was het oppakken van sommige delen op Maplin die waren te koop (als ik me herinner juiste ze waren ongeveer £12 per ca. 2m strip) stuurprogramma voor de controller/was ec
Edwardian sterrenbeeld rok met Fairy lichten

Edwardian sterrenbeeld rok met Fairy lichten

Voor dit jaar Edwardian bal wilden mij voor wekken een jurk die doet denken aan een vintage nachthemel globe. Een hoepel rok maakt de structuur, fairy lichten verlichten de sterrenbeelden en een portemonnee (gemaakt van mijn praktijk stuk) voltooit d
Bouwen van een Web ingeschakeld deurslot met Rest API en Raspberry PI

Bouwen van een Web ingeschakeld deurslot met Rest API en Raspberry PI

In dit instructable, bouwen we een web-enabled elektronische deurslot vanaf nul RESTFUL API, knooppunt JS en Raspberry PI gebruikt om de web-service die wordt verbruikt door de mobiele app of een REST-client.De architectuur is verdeeld in twee 3 dele
Web gecontroleerde Valentine

Web gecontroleerde Valentine

met deze mix van software en hardware, kunt u een hart-versierd nacht licht van overal met internettoegang oplichten. Dus of je nog op het werk, in een café, thuis, of op uw (web-enabled) mobiele telefoon, kunt u vertellen uw Valentijn dat u bent nog
Web gecontroleerde Arduino LED

Web gecontroleerde Arduino LED

Dit instructable toont u hoe te bouwen een Web-enabled tri-color LED gebaseerd op een Arduino en de WIZnet Ethernet-shield, beheersbare vanuit elke webbrowser .Omdat de LED wordt blootgesteld kunnen door middel van een eenvoudige RESTful web-service