From 0e9e14e0ab047f568b95fe056bf9ba6a8aa7c9b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20L=C3=B8vbr=C3=B8tte=20Olsen?= Date: Tue, 10 May 2016 21:40:27 +0200 Subject: [PATCH] Create Rapport.md --- .../Ultrasonic-Distance/Rapport.md | 48 +++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 School/vg1/Dataelektronikk/Ultrasonic-Distance/Rapport.md diff --git a/School/vg1/Dataelektronikk/Ultrasonic-Distance/Rapport.md b/School/vg1/Dataelektronikk/Ultrasonic-Distance/Rapport.md new file mode 100644 index 0000000..f4e3f43 --- /dev/null +++ b/School/vg1/Dataelektronikk/Ultrasonic-Distance/Rapport.md @@ -0,0 +1,48 @@ +#Prosjekt Rapport + +Produsert av: [Joakim Pettersvold (Joakim1999)](https://github.com/joakim1999) og [Daniel Løvbrøtte Olsen (Dali99)](https://github.com/dali99) + +Ansvarlig lærer: Frank Roy Jensen + +Denne rapporten blir skrevet for en obligatorisk prosjektoppgave vi har fått i faget Data og Elektronikk. Vi valgte å lage en avstandsmåler. + +# Materiell +Til dette prosjektet visste vi at vi trengte: +* Ultrasoniske sensor (HC-SR04) +* En mikrokontroller (Arduino Uno) +* Et serielt display (QAPASS 1602A med I2C chip) +* Ledere + +#Oppbygning +Det første vi gjorde var å koble vcc og gnd på den ultrasoniske sensoren og vcc og gnd på I2C kretsen til hver sin 5V og ground på Arudionoen. +Deretter koblet vi fra SDA og SCL fra I2C kretsen til A4 og A5 på Arduinoen. +Skjermen vi har valgt er egentlig SPI, men siden det hadde krevd mye mer GPIO valgte vi å bruke I2C. +I2C er en kommunikasjonsprotokoll som lar oss gjøre om to analoge signaler til SPI, dette reduserer båndbredden, men den største sakningen ligger i skjermen. + +#Feilsøkning +Å få til dette prosjektet gikk relativt smertefritt og gikk også relativt raskt. +Likevel var det ting som måtte feilsøkes. +Det første problemet vi støtte på var at den serielle skjermen skrudde seg på men ikke viste noe tekst, selv om den var programmert til å gjøre det. +Vi prøvde å feilsøke kildekoden for å se om det var noe feil med den, men vi kunne ikke finne noen feil. +Vi fant ut etter å se veldig nøye på displayet at teksten faktisk sto der men at kontrasten var veldig dårlig. +Vi visste ikke hvordan vi kunne endre kontrasten før etter litt da vi fant ut at det var et lite potensiometer på I2C kretsen. +Når vi justerte potensiometeret kom teksten frem med en gang. + +Den andre feilsøkingen vi måtte gjøre var når den serielle skjermen viste helt feil resultater. +Etter litt tenkning kom vi frem til at skjermen ikke ble ble tømt automatisk og at det var derfor det tredje tallet “ghostet”, altså forble på skjermen. +Dette gjorde at hvis du målte noe som var 100+cm langt, ville den siste nullen forbli når du målte neste objekt, som kansje bare er 3cm, resultatet var at det så ut som 300cm. +Vi fant også ut at vi ikke hadde en funksjon for å tømme skjermen i programmet vårt. +Vi eksperimenterte litt med hvordan vi skulle få til dette. +Først printet vi 16 mellomrom til skjermen mellom hver skriving, men dette var veldig tregt. +Bare tre mellomrom fungerte mye bedre, men vi så irriterende blinking. +Da slo det oss å bruke “sprintf format spesifikatorer”. “sprintf” er en standard funksjon som lar deg printe tekst eller tall til en peker, og spesifikatorene lar deg for eksempel polstre tall til å ha nuller foran. +Så i stedet for 1, blir det 001, og i stedet for 10 blir det 010. +Dette lar oss bare printe en gang til skjermen, men fortsatt oppdatere alle tre sifferene. + +Etter det var det bare noen justeringer igjen. +Vi så at målingen dirret, dette ble løst ved å ta median målingen av fem målinger i stedet for å vise “real time” måling. +Det går fortsatt rast nok til at det ikke merkes, og reduserte skjerm blinke problemet enda mer. + +#Krav +* [NewPing](https://bitbucket.org/teckel12/arduino-new-ping/ vi har brukt v1.7) +* [NewLiquidCrystal](https://bitbucket.org/fmalpartida/new-liquidcrystal/wiki/Home)