Stap 3: Matlab: laten we temmen het beest!
Ik neem hier aan dat u bekend met de Matlab-milieu, ten minste met de basis bent. Als mijn veronderstelling niet klopt, geen paniek, en neem een kijkje hier: Matlab voor beginners!
Ik zal de aanpak van de Matlab-kant op de volgende manier: Ik zal een enkel script .m bestand maken dat bevat alle functies die we gaan gebruiken. Op deze manier, zodra je de greep krijgt op is elke sectie van het script (MainScript), alles wat je hoeft te doen starten door het schrijven van zijn naam in de werkruimte, en plotseling zul je Arduino en uw PC keurig en gemakkelijk gegevens uit te wisselen! Zorg ervoor dat u alle drie documenten die ik hier heb bijgevoegd binnen dezelfde map die moet worden geselecteerd als de huidige map in het venster van de "Huidige map" in de hoofdweergave van Matlab opslaan! Als algemene regel die u niet vergeten moet dat Matlab heeft gemakkelijk toegang tot de functie die u zijn aanhalend binnen het hoofdscript, anders krijgt u een fout signaal van een functie die niet verklaard!
Wij zullen het script beginnen bij het opslaan van de naam van de seriële poort in de variabele beantwoorden. Zoals ik u eerder verteld, zorg ervoor dat u weet de exacte naam van de Arduino is aangesloten op poort. Met de nieuwe sectie zorgen wij voor de seriële communicatie-initialisatie. We gaan om te schrijven een functie-bestand met de naam setupSerial, die accepteren als input van de kop van de seriële poort, en geeft terug de seriële object arduino en de waarde van de "serialFlag" die ons vertelt dat de seriële-object is gemaakt.
handige tip: als je wat hulp met de syntaxis van de functie of met elke andere Matlab-opdracht nodig, aarzel niet om vragen van Matlab! U hoeft enkel te typen in het opdrachtvenster Matab, "help" gevolgd door het onderwerp dat u meer weten wilt over. Als het onderwerp bestaat, Matlab krijgt u een kort antwoord direct in de opdracht weduwe, anders kunt u de "help"-browser navigeren door te typen "doc" in de werkruimte en klik op invoeren.
Laten we doorgaan! Ik zal eind zal analyseren van de MainScript voordat de rekening houdend met de andere functies.
Het komt het hoofdstuk gewijd aan de grafische weergave van de gegevens: een figuur h is gemaakt, en een systeem van een x- en y-as en een lijn, die zal helpen ons visualiseren van de gegevens die wij van de sensor krijgen., zijn zo goed houden rekening mee dat elke keer dat u een object maken, ongeacht het type wellicht (seriële objecten een figuur, een GUI bezwaar... ecc) u maakt ook een aantal eigenschappen die zijn gekoppeld aan het. U kunt deze eigenschappen gebruiken Belfuncties of voorwaarde for-lussen maken (terwijl,... want, indien ecc). De "if(~exist('h','var'))..."-opdracht maakt meer zin nu?? NO? Luister: we willen om te controleren of de eigenschap var van de object- h gelijk aan nul! Als het het geval dat we moeten maken van het object van de figuur, sinds een 0 in de var -eigenschap, betekent dat de figuur nog niet bestaat!
Nu laten we komen bij de laatste sectie van het script. Hier heb je een paar regels die als de kern van het hele programma fungeren: met de lus "terwijl" gaan we naar Arduino verzenden met de opdracht van de "R", die staat voor "Hey u, lees de temperatuur voor mij en zenden mij het resultaat van uw lezing terug!". U zult merken dat we hebben een nieuwe functie binnen de while lus dat is readTemp, kort, het zorgt voor de bureaucratie die achter de seriële communicatie vanuit het oogpunt van Matlab ligt. Ik zal terugkomen op het toen ik de twee functies van het script zal analyseren. Een stukje informatie ontbreekt: de samplefrequentie, waartegen wij zouden willen krijgen temperatuur lezingen. Het wordt uitgedrukt door de opdracht "pause" aan het einde van de while lus! Als u een temperatuur waarde kiezen elk uur wilt, u moet schrijven pause(3600) (opdracht pause accepteren de parameter in seconden).
OK, nu laten we analyseren de twee functies:
setupSerial: dit maakt het seriële object Arduino aangesloten op de seriële poort beantwoorden. De opdracht om de seriële object te maken is gewoon naam-van-de-object serieel (naam-van-de-port) =. Zo simpel als dat! Merk op dat, als één van de eigenschap van de seriële object, wij stellen (met de opdracht set , gevolgd door de eigenschap waarvan de waarde we willen instellen) de baudrate van 9600 gelijk aan het instellen op de Arduino.
readTemp: aantal dingen moet u nu: Vergeet niet de opdrachten die wij op Arduino gebruikt om te schrijven naar en te lezen uit de seriële buffer, Serial.println en Serial.read? Hier zijn respectievelijk vervangen door fprintf en fscanf . Thats it. De syntaxis is gemakkelijk en u kunt het inchecken van Matlab help browser. fprintf objecten nodig hebt, als het eerste item, de seriële die we naar wilt schrijven, en als het tweede stuk van informatie het karakter wij zou willen verzenden (in ons geval "R", wat betekent dat voor ons "Lees"). fscanf wil het seriële object zo goed, en de indeling die wij willen de gegevens die moeten worden gevisualiseerd, in ons geval een floating point nummer aangegeven met de Zeppelin "%f" (DHT 22 temperatuur waarden worden herleid tot een tiende graad celsius).
Merk op dat het bedrag van de lezingen die zullen worden opgeslagen gelijk aan de waarde van de variabele "buf_len zullen" (de standaardwaarde in het script is 30, het op uw eigen gril veranderen!). Na de 30e lezing, worden nieuwe overschreven tijdens de eerste lezing in de reeks "tcdata", die alle waarden van de temperatuur in een chronologische volgorde bevat opgeslagen.