Tag Archive | Bird Box

Bird Box 2.0 – Sensor

I den opprinnelige Bird Box POCen brukte jeg en billig parkeringssensor fra Kina. Sensoren er helt grei til det den er tenkt til, og det er å detektere ting som kan skade bilen hvis du kjører på det. Den sensorpakken er milevis unna de parkeringssensorene jeg har på min nyere Ford Focus. De er så gode at jeg har fått utslag i bilen når en katt har spankulert rundt den en mørk og stormfull kveld. Siden jeg ikke har noen planer om å anskaffe dyre moderne parkeringssensorer eller demontere de på bilen (jeg trenger dem nok på bilen i en «Bird Box»-hendelse uansett) så trenger jeg en mer egnet sensor. Noe av problemet med ultralydsensorer, som den kinesiske jeg har, er at den virker dårlig mot stoff, møbler og mindre objekter. Den fungerer utmerket mot større flater som vegger og dører. En liten nedtur under testingen var at den oppfattet et teppe hengende over en døråpning som en del av veggen. Siden Bird Box 2.0 skal være en ny og forbedret versjon så trenger jeg en sensor som er hakke kvassere. Valget falt på doppler radar. Nå tenker kanskje båtfolk at dette blir litt mye å bære rundt på, men frykt ikke. Doppler radarer finnes i en rekke størrelser og typer. Husk at Bird Box 2.0-løsningen skal monteres på f.eks. en hjelm. Man finner doppler radarer på AliExpress til noen få kroner. Dette er typisk HB100-moduler (continuous-wave radar, også kalt bare CW radar) og er designet for å måle hastigheter (dopplereffekt). De kan ikke brukes til å måle avstand uten at man virkelig har peilig på hva man driver med (og da er du trolig kapabel til å bygge din egen radar). Det man trenger er en frequency-modulated continuous-wave radar (også kalt FMCW radar). En FMCW radar-modul man gjerne kommer over på f.eks. AliExpress heter FM24-NP100. Disse koster fra 60 USD og oppover så det er ikke noe billige greier. Det fine med denne modulen er at grensesnittet er UART (57.6Kbit/s og 8-N-1) som gjør integrasjonen med MCUen enkel. Modulen bruker 5V(DC) (egentlig 4-8V) og 100mA (400mW). Frekvensen er mellom 24 og 24.25GHz (IEEE K band). Den måler fra 0.5m til 20m med en nøyaktighet på +/-10cm. Vitale mål er: 44 x 34 x 5 mm og veier rundt 8 gram. Grensesnittet støtter to protokoller for utdata. Den ene er avstand i cm og den andre spektrum data som gir et hav av muligheter for de virkelige innvidde. Jeg har lagt ut en manual (PDF) jeg fant på nett her. Vær oppmerksom på at der finnes en FMK24-A-serie med spesialiserte radarer f.eks. til droner (f.eks. til å måle høyde over bakken). Dere kan lese mer om disse radarene her.

Forsiden og baksiden på en FM24-NP100

  1. Innledning
  2. MCU
  3. Sensor (det er den du leser nå)
  4. GPS
  5. Display
  6. Oppsummering

This entry was posted on 10. juni 2019, in Blogg and tagged .

Bird Box 2.0 – MCU

Jeg har brukt MCUer til en rekke prosjekter opp gjennom åra. Jeg begynte med Microchip Technology sin PIC-familie og har vel vært innom de fleste eldre modellene. Multitasking kan være en tung programmeringsteknisk oppgave som de fleste som har jobbet med MCUer vet. Det var mer eller mindre en tilfeldighet at jeg i 2006 kom over en MCU som på mange måter endret hvordan jeg bygger MCU-prosjekter. Jeg snakker om Parallax Inc. sin P8X32A Propeller. Jeg har siden den gang aldri kjøpt noen annen MCU, og har for å være ærlig aldri hatt behov for noe annet heller. I august 2014 gjorde Parallax P8X32A Propeller hardwaren og verktøya om til open-source hardware og software under GNU General Public License (GPL) 3.0. Kort oppsummert så snakker vi om en MCU som er designet for å kjøre flere samtidige real-time oppgaver, uten bruk av interrupts eller et innebygget OS. Brikken har åtte 32-bit cores også kalt cog. Alle cogene har tilgang til alle de 32 I/O-pinnene og eget minne på 512 32-bit long words (2 KB) med instruksjoner og data. I tillegg har cogene tilgang til delte ressurser som minne (32 KB random-access memory (RAM); 32 KB read-only memory (ROM)) som er kontrollert via med en round-robin scheduling av en intern computer bus-kontroller kalt hub. Hver cog har også tilgang til to dedikerte hardware counter og en spesial video generator for å generere timing signaler for Phase Alternating Line (PAL), National Television System Committee (NTSC), Video Graphics Array (VGA), servo-kontroll, og annet. Propeller-brikken kan programmeres i assembly, C, eller i Spin. Spin er et  høynivå programmingsspråk laget av Parallax som generer bytecode som kjøres av en interpreter lastet inn på Propelleren. Jeg bruker selv C siden jeg kjenner det språket og det faktum at det finnes mye C-kode skrevet for andre MCUer der ute. Parallax har flere demokort ferdig med den elektronikken som kreves rundt en Propeller-brikke. Det er sjelden jeg trenger tilgang til veldig mange pinner så jeg sverger til Parallax Propeller Mini som er et lite kort (20.5 x 38.6 mm) med tilgang til 19 I/O-pinner, 64 KB EEPROM, og utbyttbar 5 MHz krystall. Kortet kan mates med 6.5 – 12 VDC @ 1A. Man trenger en Prop Plug i tillegg for å programmere Propelleren. For Bird Box 2.0-prosjektet bruker jeg en Propeller Mini. Jeg vil nå fortelle hvordan jeg bruker Propeller-brikken i prosjektet. Tanken er at hver enkelt av modulene som kobles til I/O-pinnene (bruker SPI) har programvare som kjører i sin egen cog. En cog (typisk cog 0) kjører hovedprogrammet eller det vi i C kaller main(). Dette programmet starter nye funksjoner i nye coger. Jeg kjører funksjonene som leser verdiene fra GPS-modulen i en egen cog. Jeg kan da styre hvor ofte dette skal skje helt uavhengig av resten systemet. Verdiene deles mellom cogene i globale variabeler. Funksjonen som leser signalet som kommer fra sensoren (dette var en parkeringssensor i den opprinnelige POCen) kjører også i en egen cog. Igjen oppdateres en global variabel med avstanden som sensoren måler. Og til slutt kjører funksjonene som leser verdiene i de globale variablene og presenterer informasjonen på et display i en cog. Etter at cog 0 (som kjører hovedprogrammet) har startet de andre cogene så har den egentlig ingenting mer å gjøre. Jeg kunne ha kjørt funksjonene for skjermbilde i denne cogen, men har heller valgt å sende ut verdiene på de globale variablene til et terminalvindu for lettere feilsøk. Propelleren gjør noe som egentlig er en svært komplisert multitask problemstilling om til noe veldig enkelt. Løp og kjøp folkens!

  1. Innledning
  2. MCU (det er den du leser nå)
  3. Sensor
  4. GPS
  5. Display
  6. Oppsummering

This entry was posted on 19. januar 2019, in Blogg and tagged .

Bird Box 2.0 – Innledning

Jeg sier det like godt med en gang. Nå kommer det et teknisk innlegg som forutsetter at man kan en del om digitalteknikk og C (programmeringsspråk). Jeg har fått en del henvendelser fra folk som ønsker en mer utdypende forklaring på hvordan jeg bygde POCen fra Bird Box-innlegget mitt. Siden jeg aldri var helt fornøyd med løsningen slik den ble har jeg bestemt meg for å begynne helt fra nytt. Jeg vil nå fortelle stegvis hvordan jeg bygger versjon 2.0 av løsningen. Denne gang har jeg tenkt å bruke en MCU og ikke en Raspberry Pi. Under finner dere linker til de ulike delene av prosjektet.

  1. Innledning (det er den du leser nå)
  2. MCU
  3. Sensor
  4. GPS
  5. Display
  6. Oppsummering

This entry was posted on 19. januar 2019, in Blogg and tagged .

Bird Box

Jeg så den mye omtalte Netflix-filmen «Bird Box» (2018) med Sandra Bullock for en stund siden. Bare så det er sagt så kommer det nå noen små spoilers for de som ikke har sett den. Hvis noen lurer så er filmen grei den, men jeg holder en finger på «A Quiet Place» (2018) som er litt i samme sjangeren. Dette har ikke noe med at jeg liker fantastiske Emily Blunt bedre enn Sandra, men rett og slett for at jeg synes «A Quiet Place» er mer spennende. Tilbake til Bird Box. Filmen handler om «slemminger» som får deg til å begå selvmord straks du ser dem. Så skal du overleve så er trikset å gå med bind for øyene som filmplakaten i dette innlegget hinter om. Å være blind har jo sine utfordringer når man skal navigere rundt i en apokalyptisk verden hvor alle rundt deg tar liv av seg. Historien går over flere år så karakterene får jo etterhvert mye erfaring med å være blind, men jeg synes ikke de har den rette lærekurven. De snubler og føler rundt seg meg hendene selv etter årevis med trening. Egentlig litt rart at karakterene ikke benytter seg av teknikker som blinde har brukt i årevis – nemlig mobilitetsstokk. Tilbake til sakens kjerne. Når jeg satt der i sofaen (med ei pils) og fulgte historien så gjorde jeg meg opp en del tanker om hvordan se uten å se. Det umiddelbare som slo meg var å se ting gjennom et videobilde gjerne med forsinkelse og med IR-lys. Dette ble raskt parkert da en som sitter og ser på nettopp videoovervåkning tar liv av seg. Jeg regner med at viltkamera/FLIR-kamera vil gi den samme selvmordseffekten selv om dette ikke nevnes i filmen hvis jeg husker rett i farta. Okey, hvis man ikke kan se med bilder da må man se med lyd var konklusjonen min. Filmen bekrefter akkurat dette da ingen av karakterene tar selvmord når de kikker på parkeringssensordisplayet i en bil de bruker. Jeg funderte en del på en teknisk løsning på problemet. Forresten så regnes mobilitetsstokk ikke som en teknisk løsning bare så det er sagt. Det var naturlig for meg å sette noen rammer basert på at jeg måtte klare meg med det jeg hadde i hus. Som Matt Damon sa i «The Martian» (2015): «I’m going to have to science the shit out of this.». Lydens hastighet i luft (i 22.2 °C som det var her på stua) er 344.8 m/s. Som de aller fleste av oss vet så er avstand = fart x tid og skal man måle et ekko så tar det dobbelt så lang tid. Hvis ekkotida måles i mikrosekunder og man ønsker å måle avstand i cm blir formelen slik:


s = avstand målt i cm.
c = lydens hastighet i luft (her 22.2 °C)
t = tid for ekko målt i mikrosekunder

Det man trenger nå er en eller helst flere lydsensorer, en dings til å gjøre beregningene og få presentert dataene på en fornuftig måte på et display. Det viste seg at jeg hadde alt jeg trengte liggende i boda mi. Jeg hadde kjøpt en billig parkeringssensorpakke fra Kina for et annet prosjekt som kunne passe her. Pakken kostet rett under $11 med frakt. Den består av fire sensorer (beregnet for å monteres i støtfanger på en bil), en kontrollboks (denne gjør beregningene over og sparte meg for mye arbeid. Omtales videre i innlegget som «kontroller».) og et simpelt display. Sensorene måler avstand fra 0 til 250 cm. At hele morroa går på 12V burde ikke komme som ei bombe siden dette er bilutstyr. I teorien kunne man nå ha montert sensorene på ei fjøl, koblet på et batteri og brukt det kjipe displayet til å navigere seg rundt. Problemet er at utforminga på displayet (se bildet under) ikke er optimal.

Det jeg trenger er å presentere data fra alle fire sensorer samtidig, og ikke bare høyre eller venstre side av bilen og et enkelt avstandstall. Spørsmålet nå er hva signal kontrolleren sender på monitor-porten til displayet. Jeg sjekket signalet med et digitalt oscilloskop og signalet så digitalt ut (som egentlig ikke er noen bombe) og innenfor spenningen som logikkanalysatoren min håndterer. Logikkanalysatoren genererte følgende diagram av signalet:

Systemet bruker PBM (pulsbreddemodulasjon) til kommunikasjonen. Pulser med kort pulsbredde er logisk 0, og pulser med lang pulsbredde er logisk 1. Det viser seg at det sendes en 3 byte stor pakke fra hver sensor. Den første byten forteller hvilken sensor det er og de to siste avstand i cm. Jeg fikk med andre ord data fra alle de fire sensorene ut på monitor-porten på en enkel måte. Jeg koblet monitor-porten på kontrolleren til en Raspberry Pi jeg hadde liggende. Det var ikke rare programmeringen som skulle til før jeg hadde et skjermbilde som jeg selv mener er mer intuitivt. Jeg har dessverre ikke noe godt bilde av skjermen (TV tilkoblet Raspberry Pien på HDMI), men jeg har tegnet en skisse som viser konseptet.

De fire hvite boksene representerer de ulike sensorene. Jo større en hvit boks er jo nærmere er man noe. Det man ser her er et bilde av hvordan det ser ut å kikke nedover en gang. Veggene på hver side er 50 cm unna og veggen i enden av gangen er ca 230 cm unna. De hvite boksene endrer størrelse avhengig av avstanden som sensorene måler til et objekt. Når jeg beveget meg nedover gangen ble de to boksene i midten større og større. Når jeg gikk forbi en døråpning kunne jeg se hvordan boksene endret seg i døråpningen. Får jeg tid så skal jeg montere alt på en hjelm. Utstyret vil bestå av et 12V litiumbatteri (lav vekt) og kontrolleren selvsagt. Det er mulig at jeg monterer batteri og kontroller-kortet i en mer sprutsikker boks som festes til hjelmen. Raspberry Pi (eller en annen mindre MCU f.eks. en Parallax Propeller Mini) med skjerm(er) monteres i en billig VR-brille for mobiltelefon. Sensorene monteres i front på hjelmen og vips så er man klar til dommedag!