PF4 Augmentet Reality & Internet of Things

Studerende: Mette Tanggaard Ohlsen, Ling Siu Chang & Natascha Denise Grønlie

Dropbox linkhttps://www.dropbox.com/sh/gfio6r72581t0vl/AAANxNhU_DRfLPVAe7ddfHyia?dl=0

 

Beskrivelse

Denne applikation er en videreudviklet version af portefølje 3.

Ideen med denne applikation er, som i portefølje 3, at illustrere hvordan lys og temperatur hænger sammen. I applikationen er der en isterning der smelter, hvis temperaturen stiger og ændres tilbage til dens originale form når temperaturen falder igen. Under isterningen er der en vandpyt som bliver større når isterningen smelter og mindre igen når isterningen fryses igen. Vandpyttens størrelse afhænger af, hvor høj en værdi tryksensoren har. I portefølje 3 ændrede baggrunden sig ift. hvor meget lys LDR-sensoren modtog, dette har vi ikke med i denne version. I denne version af applikationen er der en plade hvor isterningen er placeret som skifter farve i stedet for baggrunden. Dette har vi gjort da denne opgave gik ud på at få AR implementeret. Pladen ændrer baggrundsfarve fra mørkeblå til lyseblå afhængig af, hvor meget lys LDR-sensoren modtager. Til applikationen har vi lavet et dokument hvor image-tagget er på. Image-tag er en tegning af en isterning, hvor isterningen vil blive projekteret ned gennem computerens camera. På dokumentet er der yderligere to tegninger. En tegning af en sol og et termometer hvor sensorerne er placeret. Ved solen er LDR-sensoren sat fast og en tryksensor ved termometeret. Øverst på venstre hjørne står værdierne for temperaturen og lyset.

Foto af det fysisk system med skriftlig forklaring

I vores første version (portefølje 3) gjorde vi brug af en lyssensor til at måle lys-niveauet, og en temperatursensor til at måle temperaturen. Vi har i denne version valg at gøre brug af en tryksensor, i stedet for en temperatursensor for hurtigere at kunne få feedback. Vi har valgt en tryksensor, da den er nem at manipulere til at give forskellige sensorværdier. Og der er hurtigere feedback i modsætning til en temperatursensor, der kun reagerer på ændringer i temperaturen. Vi har valgt at bibeholde vores lyssensor, da den er nem at få til at vise forskellige værdier, ved blot at holde en hånd over den.

 

AR tags

Det billede vores applikation reagerer på er en stregtegning af en isterning, som vi selv har tegnet. Vi har valgt dette da vi synes der er sammenhæng mellem billedet og det vores applikation viser. Derudover er der på papiret med billede-tagget også en tegning af en sol, hvor lyssensoren er placeret, for at vise hvad den gør. Og en tegning af et termometer ved tryksensoren(der viser “temperaturen”), for at vise hvad den gør. Vi har valgt at sætte illustrationer på sensorerne for at give et bedre indblik i hvad de måler.

 

Hvordan mikser I den virkelige verden med den virtuelle? Hvilke AR platform understøtter I?

Vi mikser den virtuelle verden med den virkelige verden, idet vores applikation projekterer en virtuel isterning, ud i den virkelige verden ved brug af vores image-tag af en isterning. Den virtuelle isterning viser hvordan lys- og temperaturforhold er i forhold til, hvor tegningen befinder sig, da sensorerne sidder fast på papiret med tegningen.

Vores applikation kan pt. kun køre på en computer, da det ikke er lykkes os at få overført data fra Arduinoen til en smartphone.

 

Screendumps fra den kørende applikation

Input fra lyssensoren bliver vist i form af farven på pladen hvor isterningen er placeret, dette skal illustrerer himlen. Når der er lys bliver farven lyseblå, og mørkeblå når der ikke er lys. Input fra tryksensoren visualiseres i form af størrelsen på isterningen, og den vandpyt der er placeret under den. Størrelsen af dem er baseret på tryk-værdien, når det er en høj værdi så bliver størrelsen mindre.

Derudover bliver temperatur- og lysværdi præsenteret på skærmen. Temperaturen er dog tryk-værdien, som så er mappet til temperatur og lysværdien er også en mappet værdi.

Forskellen mellem portefølje 3 og denne portefølje er, at vi i denne her har valgt at illustrerer himlen ved en plade hvor isterningen er placeret på. Dette har vi gjort, da vi har implementeret AR, hvilket gøre at baggrunden bliver til den virkelige verden og ikke længere den blå baggrund vi havde med før.

 

Video

Kodehighlights

void loop(){
lightValue = analogRead(lightPin); 
tempValue = analogRead(tempPin);

lightValue = map(lightValue, 0, 1023, 0, 255); 
Serial.print(lightValue);
Serial.print(",");

tempValue = map(tempValue, 0, 1023, 10, 30);
Serial.println(tempValue);

Koden fra vores Arduino der læser input til vores lightPin og temptPin. Den mapper lightValue så værdierne mellem 0 og 1023 svarer til værdier mellem 0 og 255. Den skriver derefter lightValue til serial porten, efterfulgt af et komma, der bruges til at separerer værdier i Unity. TempValue er inputtet fra tempPin, der kommer fra en tryksensor, vi har derfor valgt at mappe værdierne så 0 (ingen tryk) svarer til 10, og mest tryk svarer til 30. Det har vi gjort da vi mener det er et passende område til at repræsentere temperatur, og målinger fra vores temperatursensor i vores PF3 gav input mellem 14 og 24 grader.

		rawDataString =  sp.ReadLine();

		string[] dataInput =  rawDataString.Split(',');
		lightValue = float.Parse (dataInput [0]);
		Debug.Log (lightValue);
		tempValue = float.Parse (dataInput [1]);
		Debug.Log (tempValue);
		float newY = (100 - (tempValue*2)) / 1000F;
		float newPlaneXY = (tempValue/15)/10;
					
		iceCube.transform.localScale = new Vector3(0.1f, newY, 0.1f);
		waterPlane.transform.localScale = new Vector3(newPlaneXY, newPlaneXY, 0.1f);
		float red = (lightValue/255f)/2;
		float blue = lightValue/255f;
		float green = (lightValue/255f)/2;

		colorPlane.GetComponent<Renderer>().material.color = new Color(red,green,blue,0f);

		text.text = "Temperatur: " + tempValue + "\n Lys: " + lightValue;
	}

Data fra serial porten læses ind som en string kaldet rawDataString. Derefter splitter vi den ved komma “,”, og sætter hver del ind i et array af strings. Vi parser index 0 til en float kaldet lightValue, og index 1 til en float kaldet tempValue. Vi bruger tempValue til at beregne floats, newY og newPlaneXY. NewY bliver sat som iceCubes lokale skalering på y-aksen. newPlaneXY bliver sat som x og y skaleringen på waterPlane. Disse objekter er importeret fra blender og deres akser er derfor roteret så y og z er byttet om. Vi bruger lightValue til at beregne en værdi mellem 0 og 1, (vi kunne have mappet dette i Arduinoen). Vi deler red og green værdierne med 2, da vi gerne vil have at farven er mere blå end de andre. Derefter sætter vi colorPlanes material.color med de nye værdier.

Vi ændre teksten på skærmen så de nye målte værdier vises.

 

 

Leave a Reply