Arduino och Matlab: Låt dem prata med seriell kommunikation! (3 / 4 steg)
Steg 3: Matlab: Låt oss tämja odjuret!
Här antar jag att du är bekant med Matlab miljön, åtminstone med grunden. Om mitt antagande är fel, inte panik, och ta en titt här: Matlab för nybörjare!
Jag ska ta itu med Matlab sida på följande sätt: Jag kommer att skapa en enda .m skriptfil som kommer att innehålla alla funktioner vi kommer att använda. På detta sätt, när du får grepp på är varje avsnitt av skriptet (MainScript), allt du behöver göra starta den genom att skriva sitt namn i arbetsytan, och plötsligt har du Arduino och din dator utbyta data fint och enkelt! Se till att du sparar alla tre dokument jag har bifogat här inne i samma mapp som skall väljas som den aktuella mappen i fönstret "Nuvarande mapp" i huvudvyn för Matlab! Som regel måste du komma ihåg att Matlab har tillgång enkelt funktionen du citerar inuti huvudsakliga skriptet, annars får du ett fel signal på en funktion som inte deklareras!
Skriptet startar vi med att spara serieport namnet i den variabla comPort. Som jag sa innan, se till att du vet det exakta namnet på den port Arduino är ansluten till. Med det nya avsnittet hand vi tar om seriell kommunikation initieringen. Vi kommer att skriva en funktion fil med namnet setupSerial, som accepterar som indata rubriken seriell port, och ger tillbaka seriella objekt arduino och värdet "serialFlag" som berättar att det seriella objektet har skapats.
nyttig spets: om du behöver lite hjälp med funktionen syntax eller med något annat kommando för Matlab, tveka inte att be Matlab! Du behöver bara skriva in i kommandofönstret Gerda, "hjälp" följt av det ämne du vill veta mer om. Om ämnet finns, Matlab ger dig ett kort svar direkt i kommandot änka, annars kan du navigera "hjälp webbläsaren" genom att skriva "doc" i arbetsytan och klicka på Ange.
Låt oss gå vidare! Jag kommer slutar analysera MainScript innan du tar i beaktande de andra funktionerna.
När det gäller avsnittet ägnas åt grafisk visualisering av data: en siffra h skapas, och ett system med en x- och y-axeln och en linje, som kommer att hjälpa oss att visualisera data vi får från sensor., skapas också hålla i minnet att varje gång du skapar ett objekt, oavsett dess typ kan vara (seriella objekt en figur, en GUI objekt... ecc) du skapar också ett antal egenskaper som är associerade till den. Du kan använda dessa egenskaper att anropa funktioner eller skapa villkor för loopar (medan, för om... ecc). Kommandot "... if(~exist('h','var'))" mer meningsfullt nu?? Nej? Lyssna: vi vill kontrollera om egenskapen var av objektet h är lika med noll! om det är så vi måste skapa objektet figur, sedan 0 i egenskapen var , betyder att siffran inte finns ännu!
Nu låt oss kommer till den sista delen av skriptet. Här har du några rader som fungerar som kärnan i hela programmet: med "medan" loop vi ska skicka till Arduino kommandot "R", som står för "Hej du, läsa temperaturen för mig och skicka mig tillbaka resultatet av din läsning!". Du kommer att märka att vi har en ny funktion inuti while loop som är readTemp, kort, det kommer att ta hand om den byråkrati som ligger bakom den seriell kommunikationen från Matlab synvinkel. Jag kommer att återkomma till det när jag ska analysera de två funktionerna i skriptet. En bit av information saknas: samplingsfrekvens, som vi skulle vilja få temperaturavläsningar. Det uttrycks av kommandot "paus" i slutet av while loop! Om du vill välja en temperaturvärde varje timme, du måste skriva pause(3600) (paus kommandot accepterar parametern i sekunder).
OK, nu Låt oss analysera de två funktionerna:
setupSerial: detta skapar objektet seriell comPort Arduino ansluten till den seriella porten. Kommandot för att skapa det seriella objektet är helt enkelt namn-av-den-objekt = följetong (namn-av-den-port). Så enkelt är det! Observera att, som en av egenskapen för det seriella objektet, vi sätter (med kommandot set , följt av egenskapen vars värde vi vill ange) vilket baudvärde för 9600 lika med som anges på Arduino.
readTemp: några saker du behöver nu: kom ihåg de kommandon som vi använde på Arduino att skriva till och läsa från det seriella buffert, Serial.println och Serial.read? Här ersätts av fprintf och fscanf respektive. Det var allt. Syntaxen är lätt och du kan kontrollera det i Matlab Hjälpbläddraren. fprintf kräver, som den första posten, det seriella objekt vi vill skriva till, och som den andra biten av information karaktären vi vill skicka (i vårt fall "R" vilket innebär att vi "Läsa"). fscanf vill följetong objektet också, och det format som vi vill att data ska visualiseras, i vårt fall ett flytande punkt nummer anges med simbol "%f" (DHT 22 temperatur värden matchas till en tiondels grad celsius).
Observera att mängden avläsningar som kommer att sparas kommer att vara lika med värdet av variabeln "buf_len" (Standardvärdet i skriptet är 30, ändra det på egna infall!). Efter 30: e behandlingen den nya som kommer att skrivas över vid den första behandlingen lagras i matrisen "tcdata", som kommer att innehålla alla temperatur värden i kronologisk ordning.