Oppsummering fra team magicMirror


Heisann! Da er prosjektet ved veis ende og vi har lært veldig mye!

Speilet vårt fungerte tildels som vi ønsket, selv om vi har møtt på en del problemer på veien. Blant annet var det faktisk et stort problem med klokken på raspberryen, heldigvis lot dette seg fikse med en modul som sjekket klokken mot internett.

I tillegg ble vi nødt til å kjøre Python-scriptet vårt i flere prosesser eller tråder. Dette var fordi vi ønsket å kunne kontrollere skuffene utenom interfacet til speilet. Dette bøy også på litt problemer i starte, men etter grundig research kom det i orden! (:D)

Vårt kanskje aller største problem er nøyaktigheten til OpenCV og ansiktsgjenkjenning-programmet. Dette virker veldig unøyaktig, dessverre. Vi har fått den til å skille mellom Stian og John Morgan, og det virker som den klarer det i mange av tilfellene. Dersom vi bruker et annet rom, eller bare forandrer litt på lyset (i forhold til bildene i “databasen”) blir den usikker og feilmarginen blir vesentlig høyere! Dette er nok datas største forbedringspotensiale.

Programmet starter selvsagt ved boot, så dersom noe skulle skje, er der bare å dra ut – og plugge inn igjen strømkontakten. Dette er gjort for at vi ikke har mulighet til å koble til tastatur eller mus, og fordi systemet blir smartere, fordi det kjører av seg selv.

Vi fikk også litt arduino-erfaring av prosjektet. Dette fordi det også krevde litt arduino-kode og forståelse for at raspberry pien skulle kunne operere arduinoen rett fra et python-script.

I ettertid vil jeg påstå at det var litt dumt at vi ikke koblet i et trådløst tastatur + mus til Raspberrien. Skulle det oppstå problemer eller behov for å endre koden er vi pr. tid avhengige av å skru opp hele speilet – fjerne skjermen –  jobbe på arduino + rpi. I alt: 14 skruer. Mange småting kunne enkelt blitt fikset ved å bruke skjermen gjennom speilet.

Kort om koden.

Som nevnt er hovedscriptene som kjører ved boot, starter programmer, styrer arduino – laget i Python. Selve interfacet til speilet er laget i Javascript i sammarbeid med CSS. Electron er brukt for å sikre miljøet programmet kjører i. Under følger en link til gitHub hvor koden ligger tilgjengelig.

(Link til kode finner du her)

Elektro

Hovedansvaret til oss i elektro var først og fremst steppermotorene. Dette krevde sin tid, da ingen av oss hadde rørt en Arduino på noen år, og vi holdt på en stund men en mindre motor for å finne ut at den ikke ville rikke på skapdørene. Heldigvis, med små modifikasjoner av koden kunne de større og krafitgere motorene brukes akurat som de gamle.

Koden bruker et publisert bibliotek for akselerasjon av steppermotorer som finnes her , og har handlinger som utføres etter spesielle krav. Vi skulle også finne en måte å tilføre strøm til alle komponentene på. Her kunne vi selvfølgelig gjort det avansert, som å lage egne spenningsomformere, men for enkelthetens skyld valge vi å bruke det mest kompakte som allerede finnes på markedet: ladere. Med dette kunne vi benytte oss av en 3 veis forgreningskontakt, å bruke 230V spenningskilde som finnes i alle hus. Dette var fint fordi skjermen som brukes krever 230V inn, laderen får 230V inn og 5V/2,4A ut, noe som kreves for å drifte rasberryen, og til slutt omforming av 230V til 12V/1.5A for å gi motorene det de trengte.

Vi har fått et godt innblikk i hvordan det er å jobbe som ingeniører. Spesielt utfordringer man møter på. Prosessen handlet ikke bare om å drive motorene eller hvordan vi skulle tilføre strøm til systemet, men det hele var et tett samarbeid med maskin for å løse designutfordringer som tilfredsstilte både elektronikken og funksjonen til skapet. Vi måtte også samarbeide med data for å flette funksjoner sammen, og at det hele ble kontrollert av én master.

Maskin

Mye morsom maskin-jobb i dette prosjektet. Ekstra moro er det at slutt-produktet vårt er slik vi tegnet det i SolidWorks helt i starten. Vi har bygget det etter våre egne tegninger, og det viste seg å fungere veldig greit.

Vi har selvfølgelig også støtt på noen problemer. For eksempel hadde vi litt trøbbel med skinnene og skuffene. Vi var nødt til å slipe litt mer på kanten så skuffene fikk gå uforhindret inn igjen.

Vi har lært mye om at ting svært ofte kan se enkelt og pent ut i 3D, men når det skal maskineres og produseres er både metodene og utstyret som benyttes helt avgjørende for sluttresultatet

Motorene er plassert nederst i skapet med hjul som dytter på undersiden av skuffen (som er belagt med anti-skli tape) dette har skjedd i samarbeid med elektrostudentene som sikret at motorer satt rett, gjorde jobben sin og fungerte som de skulle.

Vi hadde et tett samarbeid med data slik at designet på det brukeren ser skulle gå i ett fra både fysisk design og UI. Dette var selvsagt utfordrende, men veldig spennende og lærerikt for begge retninger.

Utvikling og planer videre:

I starten hadde vi selvsagt mange andre ideer også. For eksempel ønsket vi å ha en nettradio koblet til interfacet. Her følger en liste over ideer vi hadde, og som er mulig som utvidelse av produktet:

  • Musikk
  • Radio
  • Interaktive widgets
  • Været
  • 9gag
  • Facebook
  • Nettaviser
  • Justerbart speil (justerer seg opp og ned etter personens høyde *
  • Interaktive skuffer 
  • Høytallere
  • Kamera
  • Mikrofon
  • Integrert Spotify
  • Bluetooth
  • Nett-tilgang
  • Påminnelse om å pusse tenner/ta medisiner
  • Speilet skal ikke kunne åpnes/brukes hvis det kommer uvedkommende personer inn på badet
  • Youtube
  • Lys som skifter farge (LED)
  • Siri-integret/Google Now
  • Svare på meldinger ved hjelp av tale
  • Hvis noen banker på badedøra så får du opp bilde av hvem som står der

 

Konklusjon:

Vi har som nevnt lært utrolig mye fra prosjektet. Vi fikk ekstremt frie tøyler, noe som i seg selv er ganske uvant i en studentsituasjon. Grunnen til vi har lært så mye, er fordi vi har vært veldig flinke på å inkludere alle fagretninger i alle prosesser. Elektro har bistått veldig med montering og bygging av skapet, data-studentene har fått litt elektro-erfaring samtidig som vi også har fått være med å bygge konstruksjonen og maskingutta har lært en del programmering og fylt på kunnskapen sin på arduino. Alle har interessert seg for de andre fagretningene og jeg tror virkelig at læringsutbytte har vært større på grunn av dette.

Til slutt noen bilder:

20161207_181226-min
Raspberry Pi og Arduino pent plassert
20161207_181649-min
Motor til skuff
20161207_181949-min
Teamwork: siste finish
20161207_182510-min
Ferdig! Mangler bare speil-plate
20161207_183140-min
Pålegging av speil-platen! Ser virkelig bra ut

 

15320371_1426634200710636_2099870867_n
Bilde av produkt i monteringsanvisning
15354111_10209763838671562_1074923521_o
magicMirror

 

~Team magicMirror

Magic Mirror – hva skjuler seg bak speilet?

Et magisk speil er et speil som er så mye mer enn et speil. Det er et speil som kan kommunisere med deg. Vi vil vise dere hva som skjuler seg bak speilet.

2016-12-07-21-29-43

Som dere ser så er det supert til å ta selfier med, men det kan så mye mer.

2016-12-08-04-39-37

Øverst er det en skjerm som kan vise viktig informasjon valgt spesifikk for deg. Det er to skuffer som er motorisert. Nederst er drivverket.

2016-12-07-18-12-35-1

Bak skjermen ser hjernen til speilet, en Raspberry Pi. Under seg har den slave, en Arduino. Strømforsyningen er plassert for seg selv.

2016-12-07-18-12-45-1

Motoroppsettet består av en driver for steppermotor og steppermotoren. Ønsker du å lese mer om dette, ser vår tidligere post her

Følg med – snart kommer det store nyheter.

Operasjonsbeskrivelse og mye mer

Her kommer en operasjonsbeskrivelse for deg som har lyst til å se hvordan vi satt sammen våres temposcope. Filene til Solid Works og 2D-tegninger ligger i linken under (ps. den må kopieres og limes inn i nettleseren).

I samme link ligger også sammenstillingsvidioer for den som har lyst til å se. Passer fint å bruke sammen med operasjonsbeskrivelsen.

https://l.facebook.com/l.php?u=https%3A%2F%2Fdrive.google.com%2Fdrive%2Ffolders%2F0Bx9bWc6go6aMT2FHR1JOZTB0ajg%3Fusp%3Dsharing&h=GAQEO08Rs

Kretser, sensorer og driverkretser.

ELEKTRONIKKEN I PROSJEKTET

Her kommer en sårt etterlengtet oppdatering fra den mystiske elektronikkgjengen i prosjektet iGrow. Siden vi har egen lab hjemme med det vi trenger av utstyr har vi de fleste tirsdager prioriotert å styre på der. Denne posten skal forsøke å vise arbeidet som ligger bak den ferdige prototypen.

aktiv-kobling2

Målet med prosjektet er å gi kunden et produkt som gjør at plantestell er en saga blott. Det å kunne løsrive seg fra vannesykluser, reise bort på ferie uten bekymring for plantenes ve og vel eller om man rett og slett er litt distrè er ikke lenger et problem for en planteeier. Systemet skal ivareta planten og gi den det klimaet den trenger. For å oppnå dette trenger vi noen sensorer.

  • Sensorer

FSR – Force sensitiv resistor

Dette er en variabel motstand som øker eller minsker motstanden relativt til kreftene den opplever å bli utsatt for. Den er fin til for eksempel si noe om vekten til en gjenstand.

fetch-php

Sensoren fungerer ved at to lage er adskilt og ved å presse dem sammen minsker motstanden i komponenten. Denne egenskapen utnytter vi til å si noe om vekten til en gjenstand, i dette tilfellet en potteplante. Siden den er en variabel motstand så lager vi en spenningsdeler med en 10k motstand og FSR. Vi kobler oss da på mellom dem og måler spenningen som endres pver 10k motstanden.

Bruken av denne ga oss muligheten til å forbedre våre algoritmer for vanning. Proben vi måler jordfuktighet med er ikke veldig nøyaktig og ved å la den fungere mer eller mindre som en bryter. Om proben sier at det er tørt OG FSR sier at vekten er liten er det tid for vanning. Om vekten er høy og proben sier den er tørr så får den ikke vanne da vekten skyldes vannet.

Soilhumidity probe

Dette er også en variabel motstands sensor som endrer motstanden basert på ledevnen mellom to ledere som ikke har kontakt. Ved å putte sensoren i et medium som har ledeevne kan vi si noe om EC(electricity conductivity).

moisture_sensor

Det vi måler er rett og slett hvor mye motstand som befinner seg mellom de to lederne. Ved å bruke denne egenskapen kan vi si noe om fuktigheten i jord. Tørr jord leder vann dårlig, men vår jord leder vesentlig bedre. Dette gjør at vi kan differensiere mellom tørt og vått medium. Denne er også satt opp i en spenningsdeler for å måle spenningendringen i spenningsdeleren. Spenningsdeleren er satt sammen av senoren og en 650k motstand. Det er dette vi bruker for å si noe om tilstanden i mediumet.

Da vi forsket på denne sensoren fikk vi svært ustabile verdier ut. Dette var hovedgrunnen til at vi valgte å implementere FSR sensoren. Ved å software smoothe verdiene til jordproben kan vi få litt bedre resultater ut. Dette ble løst med en for-løkke som regner ut snittverdien av et gitt antall målinger istedet for å stole på tallet fra en avlesning. Om man i tillegg avveier for vekt vil resultatet resultatet bli bra.

Temperature/RH-sensor

Temperatur sensoren vår er en DHT sensor vi hadde liggende som har både temperatur og relativ luftfuktighetsmåler. Den måler fuktighet ved hjelp av en kondensator og temperatur ved bruk av en thermistor, en temperaturavhengig motstand.

humidity-temperature-sensor-dht22-500x500

Når temperaturen i omgivelsene til thermistoren endrer seg vil motstanden også endre seg proporsjonalt til denne endringen tilnærmet linjært. Dette blir omformet til et digitalt signal vi mottar som ferdig temperatur.

Underveis i prosjektet oppdaget vi at vi ikke kom til å kunne påvirke relativ luftfuktighet i boksen og tok da avgjørelsen å sløyfe denne sensoren helt.

Vi hadde mye erfaring med temperatursensorer fra før, både gjennom fag på skolen og ved hobbyprosjekter, som førte til en enkel og ukomplisert implementering av sensoren. Vi har valgt å plassere denne sensoren ved utgangen til utsugsviften slik at vi får en tempearturavlesning som er optimal for å si noe om tilstanden til iGrow.

PIR-sensor

PIR står for passive infrared-detector. Den fungerer ved at et pyroelement “ser” gjennom en segmentert optisk linse. Pyroelementet kan se infrarødt lys, eller med andre ord varme. Når en person beveger seg innenfor det segmenterte området vil pyroelementet se varmen fra denne personen og undersøker om det er bevegelse ved å sjekke om flere segmenter blir “påvirket” av hendelsen.

400px-pir_motion_sensor_module

Vi bruker PIR sensoren til å regulere lyset i boksen. En plante “ser” ikke grønt lys. Dette gjør at vi kan spare energi ved å ikke bruke dette lysspekteret i det hele tatt når vi ikke har glede av det. Lyset blir da lilla, noe som ikke alltid er så ønskelig i et hjem. Derfor dimmer lyset fra lilla til hvitt når det er mennesker i rommet hvor planten står, eller skrur på det grønne spekteret også.

  • Aktuatorer

Servo-motor

En konstant magnet børste DC-motor er benyttet i kretsen som aktuator. Denne ble nødvendig da vi ønsket å skjule vannearmen mest mulig når den ikke var i bruk. Løsningen ble å løfte den frem ved bruk ved hjelp av en servomotor. Denne armen var i utgangspunktet ment drevet med tre servomotorer. Men stadig forenkling av oppgaven og redusert kompleksitet førte til at vi kune benyttet oss av en. Dette gjør også at driverkretsen til motoren er litt overkill, men da vi brukte mye tid på å forske frem en stabil DC til DC omformer så valgte vi å bruke den likevel. Servo-motoren har innebygget logikk slik at det bare er å sette 12V,  jord og signal på pinnene, virkelig “plug and play”.

Vi forsket også på hvordan man skulle kunne få en servo-motor til ikke være begrenset til 180 grader, men kunne rotere rundt fritt så mange ganger den vil. Jakob kastet seg på oppgaven med iver. Forsøket var vellykket, men ble dessverre ikke implementert. Se bilder fra forsøket.

servomotorpot2

For å kunne lukke boksen etter endt operasjon måtte vi bytte ut potentiometeret med ett nytt for å få plass.

nypotservo2

Den mekaniske sperren borres vekk:

servomod2

Kabinettvifter

For å regulere varmen inne i boksen er en effektiv måte å gjøre det på å skifte ut luften i boksen. Denne temperatureguleringen er proporsjonal med temperaturavviket fra ønsket verdi. Vi har plassert en vifte til innsug og en til utsug. Disse vil vekselvis bli aktivert og PWM styrt til ønsket hastighet ved behov. Viftene var allerede utstyrt med en egen pinne og logikk for PWM styring. Dette gjorde at vi slapp å leke med slitsom problematikk med å telle RPM på viften ved egen software. Dette er vanskelig siden man PWM`er motoren. Dette gjør at et eventuelt tachometer, som teller rising eller falling edge, vil telle langt flere omdreininger enn de som har funnet sted.

Pumpe

Dette er mer eller mindre en servo-motor som er koblet opp som pumpe. Denne pumpen bringer vannet fra vanntanken i kabinettet, til robotarmen som igjen vanner planten. Denne er drevet av en H-bro som vi fant ferdig produsert for formålet. Til forskjell fra servp-motoren har ikke denne innebygget logikk og denne ekstra driver kretsen er nødvendig for at det skal fungere.

RGB LED-strips

Til belysning av planten ønsket vi å benytte oss av forskjellige lysspekter til froskjellige formål for å optimalisere plantens forhold. Som tidligere forklart så “ser” ikke planten grønt lysspekter, dette sammen med at vi vil ha et system som lar seg tilpasse nesten enhver plante, gjør at vi valgte RGB lys. Remser med RGB lys er tilgjengelig i forkjellige oppløsninger, altså antall LED per meter, og med forskjellige egenskaper. Den kan være vanntett, komme med ferdig dobbelsidig teip og mange andre mer eller mindre vesentlige forskjeller.

LED stripsene som ble handlet inn var av den rimelige typen siden man skal lage en prototyp og “proof of concept” er tilstrekkelig. LED stripsene trekker også vesentlig mer strøm enn det en Arduino Mega kan levere så derfor må disse også ha en egen driver krets. Denne driverkretsen består av en effekt-MOSFET koblet inn på hver enkelt farge og den er igjen PWM styrt av Arduinoen. Slik kan man dimme lyset og bestemme farge.

Under test undersøkte vi om ønsket lysspekter fremgikk slik vi ønsket, se bilder.

Lilla vekstlys

hvittlys2

  • Driver kretser

Effekt-MOSFET

Da en RGB strip kan trekke ganske mye mer strøm enn det som tillates gjennom en Arduino må man legge til en driverkrets. Driverkretsen til LED-stripsene består som nevnt av tre effekt  MOSFETs som styrer mengden strøm og spenning ut til hvert enkelt fargesegment i RGB stripsen.

Disse effekt MOSFETs ble handlet inn i siste liten og sparte oss masse ufornuftig tull.

Buck-converter

For å omforme et DC nivå til et annet kan man ikke som ved AC  bare bruke en trafo så er det løst. Grunne til dette er at AC signaler kan passere relativt uhindret gjennom kondensatorer av en gitt størrelse basert på når jeg brukte sist,

Spenningsdelere

Dette er den enkleste driverkretsen jeg vet om. Man måler rett og slett spenningen ut ved å ølegge til  noe.

  • kretskortutlegg

Kretsen starter ved at vi fører strøm inn fra ett veggadapter som transformerer spenningen fra veggstøpsel til 12V. Denne 12V blir da fordelt fra en koblingsboks til Arduinoen, buck-converteren, H-broa og LED-stripsene. Buck-convertern omformer spenningsnivået fra 12V til stabile 5V og leverer det til servo-motoren.

Alt av tillegskretser, med unntak av H-broa og buck-convertern er implementert ved å lage et eget prototype kretskort.

Kretskort

Kretsutlegg

Vi bestemte oss for å forsøke samle mest mulig av dillekretsene på et prototypekretskort. Dette er planlagt, koblet og loddet av oss, se tegning for mer info.

 

 

Applikasjonen

Litt konkret om bluetooth:
Bluetooth består av forskjellige komponenter, dette er de viktigste:

BluetoothAdapter
Setter opp en local Bluetooth radio, denne radioen er et møtepunkt for all Bluetooth interaksjon.

BluetoothDevice Setter opp en Bluetooth enhet som andre enheter som enten kan paire seg med, eller bli paired til. Vi bruker denne til å spørre om å koble til en annen enhet ved hjelp av en «BluetoothSocket»

BluetoothSocket
Koblingspunktet som tillater applikasjonen og sende/motta data mellom to enheter gjennom en InputStream og en OutPutStream.

BluetoothServerSocket
I bluetoothens verden gir vi roller til enhetene som er tilkoblet til hverandre, den ene er en master, og har rollen som server. Denne serveren lytter etter innkommende enheters request til tilkobling, og returnerer en tilkoblet bluetoothSocket når pairingen er akseptert. Det betyr også at vi har en klient (server/klient). Klienten er enheten som sender denne socket request til serveren.

Applikasjonen
Applikasjonen er skrevet i C# med Xamarin som interface mellom Android(Java) og C#(Xamarin). Applikasjonen inkluderer metoder som initialiserer Bluetooth-komponentene ovenfor, og setter de sammen ved hjelp av objekter og arv.

WelcomeHome Produkt video

 

Vi har fått ferdigstilt en demo av WelcomeHome systemet. Denne lar deg kontrollere dørlåsen din ved hjelp av knock-knock pattern, bluetooth og manuelt hvis du måtte ønske det. Det er verdt å merke seg at dette fortsatt er en demo, og mangler derfor litt funksjonalitet i forhold til å bli det komplette systemet WelcomeHome er designet til å være.