OAMK / Tekniikan yksikkö MITTAUSTEKNIIKAN LABORATORIOTYÖOHJE TYÖ 9 MITTAUSTIEDON KERUU JA KÄSITTELY Heikki Kurki
TEHTÄVÄN MÄÄRITTELY TEORIA VÄLINEET Työn tehtävänä on tutustua mittausjärjestelmään, jossa kerätään tietoa jännitesignaalista ottamalla siitä näytteitä sopivin väliajoin. Kerätty mittausdata siirretään PC:lle, jossa sitä käsitellään ja jalostetaan. Näytteenotto tehdään Arduinolla. Sen analogiasisääntuloon voidaan tuoda nollatasoon nähden maksimissaan 5 V suuruinen jännite. Arduinoon ladataan näytteenottoa varten ohjelma, jonka parametrejä asettelemalla voidaan vaikuttaa näytteenottotaajuuteen. Ohjelman perusversiossa kerätään 100 näytettä, jonka jälkeen seuraavien 4 sekunnin aikana skaalatut mittaustiedot siirretään PC:lle jatkokäsittelyyn. Mittausdatan jatkokäsittely voidaan toteuttaa joko Excelillä tai Matlabin avulla. Palauta mieleen digitaalisen signaalinkäsittelyn kurssilta näytteenottoon liittyviä asioita: näytteistys laskostuminen vaihtojännitesignaalin huippu-, keski- ja tehollisarvo vaihtosähkösignaalin taajuusspektrianalyysi, FFT ja DFT Muodosta tietokoneeseen valmiudet liittää siihen Arduino-tietokone ja Selvitä Arduinon näytteenotto-ohjelman toimintaperiaate. (ks LIITE) - Arduino, joka on liitetty PC:een - signaaligeneraattori - volttimittari - työkalut ja johtimet signaalin kytkemiseksi Arduinon analogiasisäänmenoon TEHTÄVIEN SUORITUS TEHTÄVÄ 1 Lataa Arduinon ajuri PC:hen Lataa näytteenotto- ohjelma Arduinoon Liitä signaaligeneraattori Arduinoon siten, että näytteenotto on mahdollista.kiinnitä huomiota siihen, että mitattavan signaalin maataso (GND) on vakaa. Liitä yksi GND-liittimistä suoraan signaaligeneraattori tai oskilloskoopin runkoon. Asiaa edistää myös se, että PC:n syöttö otetaan samasta ryhmäjohdosta kuin sign gener. ja skooppi saavat syöttönsä. (USBin kautta yhteys myös maatasoon.)
Käytettävät signaalit a) sinisignaali, taajuus voi vaihdella b) kanttiaaltoa, taajuus voi vaihdella c) kolmioaaltoa, taajuus voi vaihdella MUISTA ETTÄ SISÄÄNMENON MAKSIMIJÄNNITE ON 5 VOLTTIA! TYÖSELOSTUS LÄHTEET: LIITTEET: Tarkista, että näytejonot saadaan siirretyksi PC:lle. Kun olette ottanut näytteet a b ja c, niitä voidaan alkaa käsittelemään. Piirrä kuvaajat Selvitä vaihtojännitesignaalin huippu-, keski- ja tehollisarvo Tee vaihtosähkösignaalien taajuusspektrianalyysi, DFT TEHTÄVÄ 2 Korota signaaligeneraattorissa lähtevän signaalin taajuutta. Selvitä, mihin näyttenottotaajuuteen asti Arduinon ominaisuudet riittävät. Selvitä sen perusteella, kuinka suuri mittaus signaalin taajuus voi olla. Tee signaaleille (ainakin yksi) spektrianalyysi (Matlabissa fft-funktio). Esitä työselostuksessa työn kulku ja saadut mittaustulokset. Arduinoa koskeva verkkomateriaali Digitaalisen säädön perusteet-kurssin aineisto (Jaakko Kaski, linkkejä ohjelmassa) Näytteenoton ja tiedonsiirron lähdekoodi LIITE ARDUINON NOPEUSTESTIN KOODI // ARDUINON NOPEUSTESTIN KOODI // TÃ llã ohjelmalla luetaan tunnetun taajuuden jã nnitettã ja selvitetã Ã n, // mikã nã ytteistystaajuus toteutui kun mittaus tehdã Ã n mahdollisimman nopeasti // Ohjelman pohjaksi on otettu Arduinon InOutSerial ja muokattu siitã // These constants won't change. They're used to give names // to the pins used: const int analoginpin = A0; // Analog input pin that the potentiometer is attached to //const int analogoutpin = 9; // Analog output pin that the LED is attached to
double sensorvalue = 0; // value read from the InPin // int outputvalue = 0; // value output to the PWM (analog out) int mittapisteita = 100; // Mà à ritellã à n kerã ttyjen mittapisteiden lkm Aseta myã s seuraavalle riville double tulokset[100]; // Tulostaulukko int indeksi = 1; int kierros = 1; // Yhteyden alustus, ei kannattane koskea: void setup() { // initialize serial communications at 9600 bps: Serial.begin(9600); // Ohjelman suoritus alkaa tã stã. Ohjelma pyã rii silmukassa. // Arduino suorittaa ladattua ohjelmaa heti kun se jã nnitettã saa. // Edes tietokoneesta irrotus ei nollaa ohjelmaa, vaan se jatkaa // mittaamista kun kytketã à n uudelleen. void loop() { while ((indeksi < mittapisteita)) { // while-silmukassa ollaan niin kauan, ettã taulukko tulee tã yteen // jos otat liian paljon mittapisteitã, tulee ylivuoto ja mittaus menee sekaisin // ts. lukujen pitã à mahtua Arduinon muistiin... puretaan sitten viiveen aikana // sarjaportin kautta tiedostoon. // read the analog in value: sensorvalue = analogread(analoginpin); // Skaalataan luettu sensoriarvo Volteiksi. // 0 on 0V ja 1023 on 5V ja jako on lineaarinen: // Jos mittaus on liian hidas, laskuosan voi tuoda silmukasta ulos ja // saa hieman lisã nopeutta... silloin tarvit uuden silmukan joka tekee muunnoslaskennan tulokset[indeksi] = sensorvalue; // map it to the range of the analog out: // outputvalue = map(sensorvalue, 0, 1023, 0, 255); // change the analog out value: //analogwrite(analogoutpin, outputvalue); indeksi++; // kierros++; // while-silmukan jã lkeen palautetaan indeksit alkuperã isiksi // kierros = 1; indeksi = 1; while ((indeksi < mittapisteita)) { // Serial.print("\t tulokset = "); // Skaalataan luettu sensoriarvo Volteiksi. // 0 on 0V ja 1023 on 5V ja jako on lineaarinen: tulokset[indeksi] = tulokset[indeksi] * 5.0 / 1023.0; // Tulostetaan taulukon alkiosta voltit sarjaportille: Serial.println(tulokset[indeksi]); // Sarjaporttia voidaan lukea tiedostoon PuTTy:llà tai suoraan Matlabiin. // indeksi++; // kierros++;
Serial.println("Purskejako"); // while-silmukan jã lkeen palautetaan indeksit alkuperã isiksi // kierros = 1; indeksi = 1; // wait 10 milliseconds before the next loop // for the analog-to-digital converter to settle // after the last reading: delay(4000); /* %Matlab-koodi, jolla voi sarjaporttia lukea. Koodi ei ole aivan loppuun asti viilattu %ja taisi olla joky try-funktio joka ei kaada Matlabia vaikka ohjelma keskeytyy... %Matlabin saa kã yntiin ohjeilla: %http://www.oamk.fi/~jkaski/digitaalisen_saadon_perusteet/matlabin%20 k%c3%a4ynnistysohje.pdf %kã yttis: opiskelija %salis: arvosana5 %Varmista "Sarjatesti.m" -ohjelmalla, mitã olet sarjaportista saamassa %Sitten olet valmis lukemaan lukujonoa sisã à n Matlabiin: %Esimerkissà on viive 0.4s, koska Arduion-koodissakin oli vastaava viive %Ohjelmaa ei kannata keskeyttã Ã, koska jos COM-yhteys jã à sulkematta, %joudut buuttaamaan koneen. Kà ytã sellaista silmukan loppuarvoa, ettã %jaksat odottaa loppuun saakka. clear for k=1:30 s = serial('com4'); fopen(s); fprintf(s,'*idn?'); out = fscanf(s) B(k,1)=str2num(out(1,10:12)); %Kentà t tã ytyy sovittaa oikeaan kohtaan out-tulostetta B(k,2)=str2num(out(1,23:26)); fclose(s) delete(s) clear s if k<=10 figure(1); l=1:k; plot(l,b(:,1),l,b(:,2)); if k>10 figure(1); l=(k-9):k; plot(l,b((k-9):k,1),l,b((k-9):k,2)); pause(0.4) dlmwrite('sarjaporttidata.txt',b); %Sensoridata, outputdata %PuTTy taas tallentaa sarjaportin tiedot tiedostoon ja toimii ohjeilla: %http://www.oamk.fi/~jkaski/digitaalisen_saadon_perusteet/arduino/put TY_ohje.doc */