PRE2Groep2 Experiment: Difference between revisions

From Control Systems Technology Group
Jump to navigation Jump to search
 
(2 intermediate revisions by the same user not shown)
Line 731: Line 731:
In het geval van de temperatuursensor, was 1 sample zelfs al genoeg.
In het geval van de temperatuursensor, was 1 sample zelfs al genoeg.


Vanuit de Arduino kwamen er elke 10ms een sample. In dit geval zou er dus in 300ms genoeg data verzameld kunnen worden voor een hokje van 9 bij 8.5 mm. In dit geval zou de robot per m^2 3921.56862744 seconde nodig hebben, oftewel een iets meer dan een uur en 5 min. Om ervoor te zorgen dat binnen 5 min toch zeker een gebied ter grootte van een paar duizend vierkante meter, zullen de hokjes van 0.0000765 m^2 naar 5m^2 moeten gaan.
Vanuit de Arduino kwamen er elke 10ms een sample. In dit geval zou er dus in 300ms genoeg data verzameld kunnen worden voor een hokje van 9 bij 8.5 mm. In dit geval zou de robot per m^2 3921.56862744 seconde nodig hebben, oftewel een iets meer dan een uur en 5 min. Om ervoor te zorgen dat binnen 5 min toch zeker een gebied ter grootte van een paar duizend vierkante meter onderzocht kan worden, zullen de hokjes van 0.0000765 m^2 vergroot moeten worden tot minimaal 5m^2 per hokje.


Een andere mogelijkheid is meer samples binnen te krijgen. Deze is zeker mogelijk, al is hier een krachtigere processor voor nodig, meer samples per seconde kan de Arduino niet verwerken.
Een andere mogelijkheid is meer samples binnen te krijgen. Dit is zeker mogelijk, al is hier een krachtigere processor voor nodig, meer samples per seconde kan de Arduino niet verwerken.


=Conclusies=
=Conclusies=
==Discussie betrouwbaarheid==
==Discussie betrouwbaarheid==
Door de data te verwerken en daarna te vergelijken met de bekende werelden kunnen er conclusies over de betrouwbaarheid getrokken worden.
Door de data te verwerken en daarna te vergelijken met de bekende werelden kunnen er conclusies over de betrouwbaarheid getrokken worden.
[[File:RIFD-500m1.png|right|thumb|300px|Figuur 1: RFID-signaalverschil in mV boven zwakste signaal]]
===RFID signaal===  
===RFID signaal===  
1. Het RFID signaal had een zwakke reactie, de verschillen tussen het hoogste signaal (hokje met een RFID-tag) en het laagste was maximaal 1,6169 mV.
1. Het RFID signaal had een zwakke reactie, de verschillen tussen het hoogste signaal (hokje met een RFID-tag) en het laagste was maximaal 1,6169 mV.
Line 751: Line 750:
===Hitte signaal===
===Hitte signaal===
- Het hitte signaal was betrouwbaar, maar ook op een afstand tot maximaal 16cm.
- Het hitte signaal was betrouwbaar, maar ook op een afstand tot maximaal 16cm.


==Conclusie Experiment en discussie uitbreiding==
==Conclusie Experiment en discussie uitbreiding==

Latest revision as of 03:47, 16 January 2015

Een essentieel onderdeel van ons project is de uitvoering van het experiment. Door in een versimpelde wereld op schaal ons project te testen krijgen we de nodige data om conclusies over de haalbaarheid van deze oplossing te trekken.

Onderzoeksplan

Inleiding

In het scenario is beschreven dat we de reddingsoperaties van gevaarlijke en zicht belemmerende situaties willen verbeteren doormiddel van een “Search-and-Rescue” robot. Dit zal gebeuren door middel van een autonome robot met een IR-sensor en een RFID-sensor. In ons onderzoek gaan wij er vanuit dat alle mensen in het bezit zijn van een of ander object met een RFID-chip.

Er kan dus alleen een mens op een bepaalde locatie aanwezig zijn als er een hitte-patroon(±37°C) en een RFID respons aanwezig is. In het onderzoek zal de werking van de gebruikte sensoren getest worden. We zullen ervan uitgaan dat de robot al (autonoom) kan beweging en zullen dus niet ingaan op de bewegingen van de robot. Hierbij zullen we omgevingsvariabele zoals luchtdruk, luchtvochtigheid etc. buiten beschouwing laten. Met een combinatie van een RFID antenne en IR sensor zullen we alle combinaties van hitte bronnen en RFID-tags waarnemen in een bepaald gebied. Het onderzoek zal uitgevoerd worden op kleine schaal. (Zie onderzoeksopstelling) Door middel van dit onderzoek zullen we proberen de volgende deelvragen te beantwoorden:

  • “Hoe kan je met RFID objecten lokaliseren?”
  • “Hoe kan een infrarood sensor mensen detecteren, zodat er zo min mogelijk false positive en false negative situaties zijn?”
  • “Hoe kan een RFID sensor en een infrarood sensor een mens detecteren, door middel van sensor fusion?”

Voorbereiding

Het systeem (bestaande uit een Arduino met een RFID Shield en een IR-sensor) is dusdanig geprogrammeerd dat deze RFID tags detecteren en de temperatuur kan op meten. De responses van deze sensoren worden doorgestuurd naar de computer. De robot zal de route die hij rijdt bepalen met een zoek algoritme. Wij gebruiken bij ons experiment een vrij simpel algoritme die één voor één alle plekken langs gaat.

Variabelen

Meetvariabelen

  • IR: Temperatuur
  • RFID: Signaalsterke

Omgevingsvariabelen

  • Omgevingstemperatuur

Materialen

De materialen gebruikt voor dit onderzoek zullen zijn:

  • Arduino (incl. RFID Shield en een IR Sensor)
  • RFID Tags
  • Hittebronnen (bekers met warm water)
  • Tape voor het maken van het grid

Onderzoeksopstelling

Voor dit experiment hebben we een Arduino uitgerust met een 13.56Mhz RFID shield,en een thermopile shield. Op een tafel zal een raster gemaakt worden, en in sommige hokjes van dit raster worden objecten neergelegd waarop (minstens een van) de sensoren reageren. Op basis van de afmetingen van de RFID tags maken we de hokjes 9 bij 8.5cm groot. Voor het experiment worden kartonnen bekertjes gevuld met warm water, en op een aantal van deze bekertjes hebben we RFID tags vastgeplakt. Ook zijn er bekers met RFID tag die niet gevuld worden, zodat alle mogelijke detectie waardes van de sensoren gedekt zijn (Alleen warmte, Alleen RFID, en zowel warmte als RFID). De Arduino wordt iedere keer met de hand naar een volgend hokje in het raster gebracht, waarna deze zijn metingen doet en doorgeeft aan een computer.

Uitvoering onderzoek

De versimpelde versie van de robot, bestaande uit de Arduino, zal de ‘tunnel’ betreden van hokje naar hokje verplaatst worden tot dat de robot op elke locatie van de ‘tunnel’ geweest is. Bij elk hokje wordt de signaalsterkte van de RFID tags en de temperatuur op gemeten. Hierbij wordt de robot naar de dichtstbijzijnde warmte bron gericht. We voeren elke situatie van het experiment 2 keer uit. De eerste keer verzamelen we per locatie 500 samples en de tweede keer verzamelen we per locatie 1000 samples. De volgende situaties nemen we in beschouwing:

Situatie 1

1 2 3 4 5 6 7 8 9 A B
8
7 RW4
6 RW2
5 W2 RW3
4 RW1
3 W3
2 W1 R1
1

Situatie 2

1 2 3 4 5 6 7 8 9 A B
8 RW3
7
6 W3 RW4
5 W2 R1
4
3 W1 RW2
2
1 RW1

Onderzoek verslaglegging

De data die tijdens het onderzoek onderzocht gaan worden zullen per hokje worden opgeschreven. Hierin zullen de volgende gegevens in worden opgeslagen:

Statische:

  • Afstand tot RFID tags
  • Afstand tot warmtebronnen

Variabele:

  • Signaalsterkte RFID ontvanger
  • Temperatuurmeter

Analyse

Als eerst kan er met de gegevens van het onderzoek bepaald worden of het mogelijk is om mensen te detecteren met een RFID shield, een IR sensor en een combinatie van deze sensoren. Verder zal er met deze gegevens uitgezocht worden wat de “False positives en de “False negatives” gaan zijn. Ook wordt hierbij duidelijk hoe dicht het object bij de robot moet zijn voor een trigger.

De gegevens zullen na het onderzoek door middel van Statistiek worden geanalyseerd om een uitkomst te kunnen geven van de betrouwbaarheid van dit onderzoek.

Aanpassingen in onderzoek

Aanpassingen in het onderzoek om eventuele onaanvaardbare uitkomsten te kunnen oplossen zijn:

  • Aanpassing van de ‘treshhold’ waardes
  • Aanpassing zoek-algoritmes


Arduino

We gebruiken een Arduino Mega uitgerust met een Adafruit PN532 NFC/RFID shield dat werkt op 13.56Mhz en een SparkFun Infrared Temperature Breakout - TMP006. De Sparkfun temperatuur sensor hebben we aangesloten zoals vermeld staat op de website van Sparkfun[1] (behalve dat we de kabels niet direct aan de Arduino aangesloten hebben, maar aan het RFID shield gesoldeerd hebben, waardoor we met behulp van SPI zowel het shield als de sensor kunnen aansturen), en we gebruiken de Sparkfun library[2] om hem eenvoudig aan te kunnen sturen. De library is voorzien van een handige functie die de gelezen temperatuur automatisch vertaald naar graden Celsius.

Het RFID shield hebben we grotendeels ook volgens de documentatie van de leverancier aangesloten[3], met uitzondering van de antenne. Deze wordt standaard niet aangesloten op een Arduino aangezien de SOC op de PN532 deze uitleest en de taak van communicatie met RFID tags in het geheel op zich neemt. Om dit te omzeilen hebben wij op het RFID shield zelf een kabel vastgesoldeert aan de RX pin van de antenne. Deze sluiten we vervolgens aan op een analoge input pin van onze Arduino en kunnen zo de voltages van de antenne direct aflezen. Adafruit heeft voor het RFID Shield een handige library[4] geschreven, die wij gebruiken om de RFID antenne te initialiseren voor communicatie met passive RFID tags.

De Arduino heeft zijn handen vol aan het continue inlezen van de antenne signalen, en niet genoeg geheugen om de signalen te kunnen verwerken. Daarom sturen we via USB alle signalen in realtime naar MATLAB op een van onze computers. in MATLAB worden alle data in matrices gezet, zodat we hier later analyses op kunnen uitvoeren.

Pin allocatie

De pins van de Arduino zijn als volgt in gebruik:

  • SCA : Zowel het PN532 RFID Shield als de TMP006 Thermopile
  • SCL : Zowel het PN532 RFID Shield als de TMP006 Thermopile
  • Aref : PN532 RFID Shield
  • Digital I/O 0-13 : PN532 RFID Shield
  • IOREF: PN532 RFID Shield
  • RESET: PN532 RFID Shield
  • 3V: PN532 RFID Shield
  • Vin: PN532 RFID Shield
  • Analog in 0-5: PN532 RFID Shield
  • Analog in 7: PN532 RFID Shield Antenne

Verder zijn zowel de thermopile als het RFID shield gekoppeld aan 5V en gnd op verschillende plaatsen. Deze pins zijn voor de PN532 tussen de Digital I/O en SCA, en tussen Vin en 3V. Voor de thermopile zijn deze onderaan het board, ground links en 5V rechts.

Overzicht Arduino pinouts

Broncode

De broncode om de signalen naar MATLAB te lezen bestaat uit 4 onderdelen:

  • De TMP006 library om temperatuur in te lezen[2]
  • De NFC Library om het RFID shield te gebruiken[4], met enkele aanpassingen
  • Het Arduino programma dat de samples verzamelt en naar de computer stuurt
  • Het MATlab script dat deze samples opvangt en in matrices stopt

Voor de code van de gebruikte libraries, zie de GitHub links in de bronnenlijst.

Arduino Programma

#include <Wire.h>
#include <Adafruit_NFCShield_I2C.h>
#include <math.h>
#include <stdint.h> 
#include "I2C_16.h"
#include "TMP006.h"

#define IRQ   (2)
#define RESET (3)  // Not connected by default on the NFC Shield
#define SAMPLES_PER_READING (10) // 1 - 255
uint8_t tempID = 0x40; // I2C address of TMP006, can be 0x40-0x47 (would have to wire the address pins)
uint16_t samples = TMP006_CFG_1SAMPLE; // # of samples per reading, can be 1/2/4/8/16

Adafruit_NFCShield_I2C nfc(IRQ, RESET);

void setup(void) {
  Serial.begin(115200);
  
  //init PN53x
  nfc.begin();
  
  //init tmp006
  config_TMP006(tempID, samples);
  
  uint32_t versiondata = nfc.getFirmwareVersion();
  if (! versiondata) {
    Serial.print("Didn't find PN53x board");
    while (1); // halt
  }

  // Got ok data, print it out!
  Serial.print("Found chip PN5"); 
  Serial.println((versiondata>>24) & 0xFF, HEX); 
  Serial.print("Firmware ver. "); 
  Serial.print((versiondata>>16) & 0xFF, DEC); 
  Serial.print('.'); 
  Serial.println((versiondata>>8) & 0xFF, DEC);

  // 0xFF = forever
  nfc.setPassiveActivationRetries(0xFF);

  // configure board to read RFID tags
  nfc.SAMConfig();

  Serial.println("Listening for an ISO14443A card");
  nfc.listenPassiveTarget(PN532_MIFARE_ISO14443A);
}

void loop() {  
  uint8_t i = 0;
  float samplestotal = 0.0;
  
  for(i = 0; i < SAMPLES_PER_READING; i++) {
    samplestotal += analogRead(7);
  }
  
  float sigstrength = samplestotal / SAMPLES_PER_READING; 
  
  float object_temp = readObjTempC(tempID);
  Serial.print(object_temp); 
  Serial.print(";");
  Serial.println(sigstrength);
}

Extra functie NFC library

Deze functie zorgt ervoor dat de RFID antenne permanent aan het meten is, waardoor wij vervolgens de mogelijkheid hebben (gebruikmakende van de kabel die we vanaf het RFID shield naar Analog in 7 hebben geleid) om de signaalsterkte direct af te lezen.

/* In header file */
boolean listenPassiveTarget(uint8_t cardbaudrate, uint16_t timeout = 0);

/* In CPP file */
boolean Adafruit_NFCShield_I2C::listenPassiveTarget(uint8_t cardbaudrate, uint16_t timeout) {
  pn532_packetbuffer[0] = PN532_COMMAND_INLISTPASSIVETARGET;
  pn532_packetbuffer[1] = 1;  // max 2 cards at once (untested)
  pn532_packetbuffer[2] = cardbaudrate;
  
  if (! sendCommandCheckAck(pn532_packetbuffer, 3, timeout))
  {
    #ifdef PN532DEBUG
	Serial.println(F("No card(s) read"));
	#endif
    return 0;  // no cards read
  }
  
  return 1;
}

MATlab code

Deze functie werd gebruikt voor het meten van <samples> samples in één cel in het raster (Werd dus voor iedere cel aangeroepen)

function [ RFIDvals, tempvals ] = readRFIDTemp( samples )
%READRFIDTEMP Summary of this function goes here
%   Detailed explanation goes here
  s = serial('COM3', 'BaudRate', 115200);
  RFIDvals = zeros(1, samples);
  tempvals = zeros(1, samples);

    try
        fopen(s);
        index = 1;
        while index <= samples
            [out, count] = fscanf(s, '%c');
            if count == 14
                %disp(out);
                st = strsplit(out, ';');
                %disp(st);
                if numel(st) == 2
                    tempvals(index) = str2num(st{1});
                    RFIDvals(index) = str2num(st{2});
                    index = index + 1;
                end
            end
        end
    catch err
        disp('Error while running script');
        disp(err);
    end
    fclose(s);
    delete(s);
    clear s;
end

Deze functie werd gebruikt voor tests van de sensoren, het weergeeft een live plot van de gemeten waarden.

function [] = readAndPlotValues( samples )
%UNTITLED Summary of this function goes here
%   Detailed explanation goes here

    i = 1;
    figure(1);  
    lHandle = line(nan, nan); %# Generate a blank line and return the line handle
    figure(2);
    llHandle = line(nan, nan); %# Generate a blank line and return the line handle
    while 1 == 1
        [rfid, tmp] = readRFIDTemp(samples);
        rfidMean = mean(rfid);
        tmpMean = mean(tmp);

        Y = get(lHandle, 'YData');
        Y = [Y rfidMean];
        X = get(lHandle, 'XData');
        X = [X i];
        
        set(lHandle, 'XData', X, 'YData', Y);
        drawnow();
        
        Y = get(llHandle, 'YData');
        Y = [Y tmpMean];
        X = get(llHandle, 'XData');
        X = [X i];
        
        set(llHandle, 'XData', X, 'YData', Y);
        drawnow();
        i = i + 1;
    end

end

Bronnen

Problemen tijdens experiment

Tijdens het uitvoeren van het experiment zijn we enkele onverwachte problemen tegengekomen.

RFID antenne te zwak

De RFID antenne die we gebruikt hebben bleek zeer zwak te zijn, en hierdoor konden we geen RFID signaal ontvangen op de afstand waarop we gehoopt hadden. Na wat experimenteren met de sensor is het gelukt om toch enigzins betrouwbare waardes af te kunnen lezen tot ongeveer 5 cm afstand. Hoewel dit nog steeds niet optimaal is, is het voldoende om het experiment toch uit te kunnen voeren.

Temperatuur bekertjes

De kartonnen bekertjes koelden zeer snel af wanneer we er warm water (ong. 60 graden celsius) in deden. Wanneer we een experiment uitvoerden met water dat net ingeschonken was, daalde de temperatuur tijdens het experiment van 50-60 graden naar 25-29 graden. Uiteindelijk hebben we besloten dat aangezien het verschil met de omgevingstemperatuur in alle gevallen groot genoeg was om het betrouwbaar te kunnen meten, we dit simpelweg over het hoofd zullen zien en alles boven de 26 graden als "mogelijk een mens" zullen beschouwen. In een echte situatie zal een mens natuurlijk nooit 50 graden of hoger als huidstemperatuur hebben, maar het zou triviaal zijn om een bovengrens te leggen aan de "toegestane mens temperatuur". Aangezien binnen de grenzen van ons experiment zich geen niet-menselijke objecten bevinden met een hoge temperatuur en een RFID signaal, hebben we besloten dat we zonder bovengrens kunnen werken.

De grote verschillen in temperatuur hebben natuurlijk wel een invloed in de fusion met de data van de RFID sensor. Dit zal dan ook softwarematig moeten worden gecorrigeerd, hierbij is er aangenomen dat het water met een geleidelijke snelheid afkoelt.

Resultaten

Figuur 1: RFID-signaal over 500 samples

De data verzameld door de Arduino kon niet direct gebruikt worden. Zoals zichtbaar in bijvoorbeeld figuur 1. Er is dus overduidelijk een soort van databewerking voor nodig, hiervoor zal MATLAB gebruikt worden.

Dataverwerking

RFID

In het geval van het RFID signaal was het zichtbaar dat het een vrij stabiel signaal bleek, met uitzondering van een aantal duidelijke meetfouten. Deze fouten pieken in alle gevallen naar beneden, en kunnen door het gebruik van lokale maxima eruit gefilterd worden. Daarna is gekozen voor het gebruik van het gemiddelde daarover. Omdat de verschillen tussen de waardes klein zijn t.o.v. (max. 16 mV) de absolute waarde (rond 2,9V) is de data genormaliseerd naar de laagste waarde in het raster.

Er is gekozen voor een aangepaste 'BAR3' functie om in een oogopslag de totale informatie te kunnen bekijken van een bepaald raster.

IR

Figuur 2: temperatuur over 500 samples met gemiddeldelijn

In tegenstelling tot het RFID signaal kon het signaal van de temperatuursensor al gedeeltelijk worden verwerkt door de Arduino, hierbij kwam een signaal binnen in graden Celsius. Dit bleef vrij constant over tijd en kon dus d.m.v. van de gemiddelde waarde bepaald worden. Ook hier is gekozen voor de aangepaste BAR3 functie.

MATLAB

Voor de verwerking zijn de volgende MATLAB-scripts geschreven:

  • RIFBAR Voor het plotten van de RIFD-data
function [G]= rifbar (numb, matf)
Y=riffind (numb, matf);
n=signal(Y,true);
B=n-min(n(:));
figure;
h = bar3(B,1);
title(matf);
colormap jet
colorbar 
shading interp
   for i = 1:length(h)
        zdata = get(h(i),'ZData');
        set(h(i),'CData',zdata)
        set(h,'EdgeColor','k') 
   end
end
  • TEMPBAR voor het plotten van de IR-data
function [n]= tempbar (numb, matf)
Y=tempfind (numb, matf);
n=signal(Y,false);
B=n-min(n(:));
figure;
h = bar3(B,1);
colormap jet
colorbar 
shading interp
   for i = 1:length(h)
        zdata = get(h(i),'ZData');
        set(h(i),'CData',zdata)
        set(h,'EdgeColor','k') 
   end
end
  • SIGNAL voor de verwerking van de signalen
function [n,m] = signal(Y,f)
s=zeros(100);
m=zeros(11,8,100);
n=zeros(11,8);
   for t=1:8
       for p=1:11
           for i=1:100
               r(i:i*5)=Y(p,t,i:i*5);
               if (f==true)
                   a=findpeaks(r);
                  
               else
                   a=r;
               end
               s(i)=mean(a);
               m(p,t,i)=s(i);
               n(p,t)=mean(s(i));
           end 
       end 
   end
end

Uitwerking

Door het gebruik van de bovenstaande MATLAB scripts komen voor de verschillende samples en werelden de volgende uitwerkingen. Hierbij is het xy-vlak het rasterveld en de z-as de waardes. Deze zijn bij de RFID in 10^-2 Volt en de IR in graden Celsius.

RFID Voor RFID Boven IR Voor IR Boven
Situatie 1

500 samples

RIFD-500m1.png RIFD112.png IR-500m1.png IR-500m1b.png
Situatie 1

1000 samples

RIFD-1000m1.png RIFD-1000m1b.png IR-1000m1.png IR-1000m1b.png
Situatie 2

500 samples

RIFD-500m2.png RIFD-500m2b.png IR-500m2.png IR-500m2b.png
Situatie 2

1000 samples

RIFD--1000m2.png RIFD--1000m2b.png IR-1000m2.png IR-1000m2b.png

Notes:

  • Door communicatiefouten van de Arduino en de RFID-shield is de data bij zowel de 2de (Situatie 1, 1000samples) als de 3de meting (Situatie 2, 500samples) van de RFID niet bruikbaar voor verdere verwerking. Gelukkig valt uit de ruwe data vanuit de Arduino op te maken dat het aantal samples weinig invloed heeft op de uitkomst. Er zal dus met de 1ste en 4de meting worden doorgewerkt.
  • Een zichtbare daling van de warmtepieken is zichtbaar. Dit komt overeen met de conclusie die tijdens het onderzoek getrokken werd.

Sensorfusie

Er zijn duidelijke pieken te zien bij een hittebron, en vrij duidelijke pieken te zijn bij een RFID-tag. Om iets over de gezamenlijke informatie te zeggen is ervoor gekozen om beide data uit te drukken in percentpunten en deze op te tellen, zo zullen de hokjes waar beide sensoren reageren de hoogste waarde aangeven, maar zullen ook de hokjes met één sensor goed zichtbaar blijven.

Correctie IR-sensor

Inclusief de correctie voor de koudere wordende bekertjes, ziet de data er in percentpunten voor IR als volgt uit.

IR Voor IR Boven
Situatie 1 IR-500m1p.png IR-500m1bp.png
Situatie 2 IR-1000m2p.png IR-1000m2bp.png

Samenvoegen Sensoren

Door de sinalen te combineren volgens de onderstaande MATLAB scripts kwamen we uit op de onderstaande gefuseerde plots

IR&RFID Voor IR&RFID Boven
Situatie 1 Fusion1.png Fusion12.png
Situatie 2 Fusion2.png Fusion22.png

FUSION voor de sensor-fusion

r1500=rifbar(numb,matf);
t1500=tempbar(numb,matf);
tr1500=(r1500+t1500)/2;
figure;
h = bar3(tr1500,1);
colormap jet
colorbar 
shading interp
   for i = 1:length(h)
        zdata = get(h(i),'ZData');
        set(h(i),'CData',zdata)
        set(h,'EdgeColor','k') 
   end

TEMPBAR' Voor de corrigeerden IR data in procentpunten

function [G]= tempbar (numb, matf)
Y=tempfind (numb, matf);
n=signal(Y,false);
B=n-min(n(:));
for i=1:11
  for q=1:8 
       c=B(i,q);
       B(i,q)=(0.1+i/10+q/30)*c;
   end
end
n1=max(B(:));
n2=min(B(:));
G=(B-n2)/(n1-n2); 
end 

RIFBAR Voor de RFID data in procentpunten

function [G]= rifbar (numb, matf)
Y=riffind (numb, matf);
n=signal(Y,true);
B=n-min(n(:));
n1=max(n(:));
n2=min(n(:));
G=(n-n2)/(n1-n2);
end

Vergelijking met situatie

Als de bovenstaande plotten worden vergeleken met de van tevoren opgestelde situaties kunnen we concluderen dat de hokjes met zowel IR en RFID het hoogste scoren en de andere hokjes vooral door de IR worden gedomineerd. Dit zien wij als een goede manier om eventuele false negatives doordat het RFID-signaal te laag was alsnog wordt opgevangen door het hittesignaal.

Tijdsduur

Figuur 3: Vergelijking van 30 samples en 500 samples (meting 1)

Het laatste resultaat dat uit de data kwam was dat het onnodig was om 500 tot 1000 samples te gebruiken, dit was voor de berekeningen natuurlijk fijn, maar de output van de RFID was na 30 samples al heel erg vergelijkbaar als bij 500 samples, zoals zichtbaar in figuur 3. De pieken verschillen op sommige plekken, maar in groten lijnen blijven de RFID-plekken duidelijk zichtbaar. In het geval van de temperatuursensor, was 1 sample zelfs al genoeg.

Vanuit de Arduino kwamen er elke 10ms een sample. In dit geval zou er dus in 300ms genoeg data verzameld kunnen worden voor een hokje van 9 bij 8.5 mm. In dit geval zou de robot per m^2 3921.56862744 seconde nodig hebben, oftewel een iets meer dan een uur en 5 min. Om ervoor te zorgen dat binnen 5 min toch zeker een gebied ter grootte van een paar duizend vierkante meter onderzocht kan worden, zullen de hokjes van 0.0000765 m^2 vergroot moeten worden tot minimaal 5m^2 per hokje.

Een andere mogelijkheid is meer samples binnen te krijgen. Dit is zeker mogelijk, al is hier een krachtigere processor voor nodig, meer samples per seconde kan de Arduino niet verwerken.

Conclusies

Discussie betrouwbaarheid

Door de data te verwerken en daarna te vergelijken met de bekende werelden kunnen er conclusies over de betrouwbaarheid getrokken worden.

RFID signaal

1. Het RFID signaal had een zwakke reactie, de verschillen tussen het hoogste signaal (hokje met een RFID-tag) en het laagste was maximaal 1,6169 mV.

2. Het RFID signaal gaf in het hokje met een RFID signaal een heel duidelijk signaal, het signaal in de hokjes eromheen (ong. 8cm afstand) gaf in de meeste gevallen een lager (maar zichtbaar) verschil.

3. Sommige hokjes kregen een heel onverwacht hoge of lage waarde, dit kan te wijden zijn aan:

a. Meetfouten.
b. Meerdere RFID-signalen van verschillende tags die met elkaar interfereren.
Radiogolven met dezelfde frequentie elkaar in tegen-fase kunnen uitdoven, kunnen golven in fase elkaar juist versterken.

Hitte signaal

- Het hitte signaal was betrouwbaar, maar ook op een afstand tot maximaal 16cm.

Conclusie Experiment en discussie uitbreiding

Ondanks de problemen en onverwacht zwakke RFID sensor hebben we toch nuttige conclusies kunnen trekken dankzij het experiment. Zoals de grafieken die gegenereerd zijn op basis van de meetresultaten van ons experiment laten zien is het aardig mogelijk om te bepalen op welke locaties er mensen zijn, gegeven dat deze een lichaamstemperatuur hebben die boven de omgevingstemperatuur zit, en ze een RFID tag bij zich hebben.

Kijkende naar de meetresultaten van ons experiment doet zich al snel de vraag voor hoe men op grotere afstanden RFID tags kan lezen. Dit hangt o.a. af van de frequentie, de grootte van de antenne, de grootte van de tag, en de sterkte van de stroom die door de antenne loopt. Bij ons experiment hebben we gebruik gemaakt van een RFID antenne en tags die werken op 13.56Mhz. Dit geeft een theoretische maximale leesafstand van 1.5 meter[1]. Onze antenne bleek hier helaas niet sterk genoeg voor. Dit is echter goed te verhelpen door gebruiken te maken van de (inmiddels zeer populaire)EPC Gen2 RFID tags[2]. Deze opereren op hogere frequenties, en maken bovendien niet meer gebruik van Near Field Communication (dit is datatransmissie op basis van het elektromagnetisch veld van de antenne, wij gebruikten dit in ons experiment) maar gebruiken radar technieken. hierdoor wordt de leesafstand dramatisch vergroot. Chris Paget stelt zelfs dat in theorie een leesafstand van meer dan 1.5km bereikt kan worden (alhoewel dit waarschijnlijk niet een mobiele installatie zou zijn).

Het lezen van de temperatuur ging prima op kleine schaal. Onze verwachting is dat het geen probleem is om gelijkwaardige al-dan-niet betere warmte sensoren te vinden voor afstanden tot 10 meter, bijvoorbeeld gebruikmakende van dezelfde technieken als een warmte camera of een warmte meetapparaat zoals de Extech VIR50 [3].


Bronnen

Verdere discussie

De grootte van het raster hebben wij in het experiment zo gekozen dat de Arduino goed in een hokje past. Dit uit comfort overwegingen tijdens het meten. Deze grootte hoeft echter niet vast te staan; We zouden de grootte kunnen proberen te bepalen naar de hand van enkele variabelen die per situatie anders kunnen zijn, bijvoorbeeld breedte/lengte van de ruimte waarin de robot gebruikt gaat worden. Ook kan de grootte samenhangen met het pathfinding algorithme; Stel dat de robot begint met zoeken in hele grote hokjes, en als in een van de grote hokjes een afwijkend signaal gedetecteerd wordt verandert de robot de grootte van de hokjes waarin hij gaat scannen en scant vervolgens nog een keer het grote hokje door om een preciezere locatie te kunnen bepalen. Op de vraag of er een optimale grote is voor de hokjes van het raster is dus niet een kort en eenvoudig antwoord te geven. Hiervoor zal apart onderzoek gedaan moeten worden.

Terug naar hoofdpagina