spybot - webbstyrd robot med...

26
TVE-F 17011 juni Examensarbete 15 hp Augusti 2017 Spybot - Webbstyrd robot med värmesensor Konstruktion av fjärrstyrd robot och tillhörande hemsida Tim Melcherson Anna Gustavsson Albin Gideonsson

Upload: others

Post on 24-May-2020

8 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Spybot - Webbstyrd robot med värmesensoruu.diva-portal.org/smash/get/diva2:1131185/FULLTEXT01.pdf · Spybot - Webbstyrd robot med värmesensor Konstruktion av fjärrstyrd robot och

TVE-F 17011 juni

Examensarbete 15 hpAugusti 2017

Spybot - Webbstyrd robot med värmesensor Konstruktion av fjärrstyrd robot och tillhörande

hemsida

Tim MelchersonAnna GustavssonAlbin Gideonsson

Page 2: Spybot - Webbstyrd robot med värmesensoruu.diva-portal.org/smash/get/diva2:1131185/FULLTEXT01.pdf · Spybot - Webbstyrd robot med värmesensor Konstruktion av fjärrstyrd robot och

Teknisk- naturvetenskaplig fakultet UTH-enheten Besöksadress: Ångströmlaboratoriet Lägerhyddsvägen 1 Hus 4, Plan 0 Postadress: Box 536 751 21 Uppsala Telefon: 018 – 471 30 03 Telefax: 018 – 471 30 00 Hemsida: http://www.teknat.uu.se/student

Abstract

Remote controlled robot with heat sensor

Tim Melcherson, Anna Gustavsson, Albin Gideonsson

I detta projekt byggdes en fjärrstyrd robot som styrs över Wi-Fi, och streamar video till användaren av vad den ser. Som komplement körs även en temperatursensor för att utöka robotens möjlighet att känna av sin omgivning. Huvudkomponenten är en Raspberry PI 3 modell B, där all kod för styrning och hemsidekontrollerna körs. Resultatet är en robot som kan styras utanför synhåll och kan sända tillbaka en stabil kameraström så länge den är kopplad till ett stabilt nätverk. Dessvärre sjunker resultatet i takt med nätverkskvalitén. Vid ett svagare nätverk blir det långa laddningstider för kameraströmmen vilket leder till att roboten blir mindre responsiv. Det tillsammans med den förlorade kameraströmmen resulterar i att roboten är obrukbar. Vid tillräckligt svaga nätverk, eller vid nätverksproblem kommer roboten repetera sin sista order tills dess att kontakt är återupprättad.

ISSN: 1401-5757, TVE-F 17011 juniExaminator: Martin SjödinÄmnesgranskare: Ken WelchHandledare: Jörgen Olsson och Uwe Zimmermann

Page 3: Spybot - Webbstyrd robot med värmesensoruu.diva-portal.org/smash/get/diva2:1131185/FULLTEXT01.pdf · Spybot - Webbstyrd robot med värmesensor Konstruktion av fjärrstyrd robot och

1 Populärvetenskaplig beskrivningSyftet med detta projekt var att bygga en fjärrstyrd robot. Roboten är markburen ochhar en värmekamera och en vanlig kamera som båda streamar till en webbsida. Frånwebbsidan sker även användares navigering av roboten genom en virtuell knappsats.Målet är att kunna använda roboten för att söka igenom utrymmen utan att fysisktbefinna sig i dem. Detta är en funktion som är mycket användbar i dagens samhälle inommånga områden; radiostyrda drönare, polisens bombrobotar eller NASA:s Mars Rover.Alla utgår från samma princip om att kunna navigera runt och sända information tillanvändaren, men består av mer eller mindre avancerade tekniker.

2

Page 4: Spybot - Webbstyrd robot med värmesensoruu.diva-portal.org/smash/get/diva2:1131185/FULLTEXT01.pdf · Spybot - Webbstyrd robot med värmesensor Konstruktion av fjärrstyrd robot och

Innehåll1 Populärvetenskaplig beskrivning 2

2 Introduktion 42.1 Avgränsning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

3 Teori 43.1 Microkontroller . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

3.1.1 Raspberry pi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43.1.2 Raspbian . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

3.2 Språk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53.2.1 Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53.2.2 HTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63.2.3 CSS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63.2.4 Javascript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

3.3 Utvecklingsmiljö . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63.3.1 Atom . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63.3.2 IDLE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

4 Utförande 64.1 Programmering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

4.1.1 Styrning av roboten . . . . . . . . . . . . . . . . . . . . . . . . . . 74.1.2 Styrning från webbsida . . . . . . . . . . . . . . . . . . . . . . . . 74.1.3 Kamerastream . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74.1.4 Värmekamera . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

4.2 Koppling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84.3 Montering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

5 Resultat 9

6 Diskussion 136.1 Problem under arbetets gång . . . . . . . . . . . . . . . . . . . . . . . . 136.2 Förbättringsmöjligheter . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

7 Slutsats 14

3

Page 5: Spybot - Webbstyrd robot med värmesensoruu.diva-portal.org/smash/get/diva2:1131185/FULLTEXT01.pdf · Spybot - Webbstyrd robot med värmesensor Konstruktion av fjärrstyrd robot och

2 IntroduktionPlanen var att bygga en robot och skapa en hemsida för styrning av denna. Robotenhar ett par olika möjliga appliceringsområden, men dess huvudfunktion är att den gördet möjligt att undersöka platser utan att själv fysiskt vara närvarande. Detta kan varaanvändbart om man till exempel vill genomsöka en byggnad i en nödsituation såsom enbrand, eller vara närvarande vid situationer utan att behöva lämna sitt hem.

Roboten har fem huvuddelar; en kropp, ett Raspberry Pi-kretskort, en motorlösningför styrning, en kamera och en värmesensor. Kroppen består av en utsågad plastskivamed borrade hål för att fästa komponenter. Roboten rör sig med hjälp av ett styrandehjulpar med ett släpande stödhjul baktill. Det styrande hjulparet består av en DC-motorför vardera hjul som styr hastigheten för hjulet. Svängning sker genom att höger ochvänster hjul slås på eller av. Signalerna till detta kommer från kretskortet. Som kretskortvaldes Raspberry Pi 3 modell B då det var lättillgängligt, relativt billig och har mångafunktioner. Programmeringen av kretskortet gjordes i Python. Från Raspberry Pi-kortetgår sedan signalerna till en motorkontroller, som skickar in ström i motorerna. RaspberryPi eller Raspberry Pi-kort är ett ord som hädanefter förkortas RP i rapporten då detförekommer ofta.

För att kommunicera med roboten har en hemsida programmerats, med en live-videofeed från kameran samt en feed från värmekameran. Från hemsidan kommer man kunnastyra roboten med hjälp av en virtuell knappsats. RP:n agerar server och hemsidan an-vänder denna som värd. För att komma åt kortet utifrån och kunna skicka kommandonupprättas en Secure Shell(SSH)-anslutning av användaren över kortets aktuella nätverk.Slutligen slås roboten på och av genom en fysisk knapp på strömkällan.

2.1 Avgränsning

Roboten kommer inte att ha autonom styrning utan detta ses som en möjlig uppgradering,för närvarande styrs den endast av användaren via hemsidan. Roboten kommer inte attkunna göra något utöver det som är specificerat i ovanstående beskrivning.

3 TeoriFör genomförande av projektet var en del programmeringsspråk nödvändiga och samtligages en kort introduktion i detta avsnitt, samt de viktigare fysiska komponenterna.

3.1 Microkontroller

3.1.1 Raspberry pi

Den microkontoller som användes för detta project var en RP 3 Model B. Anledningentill detta var att RP var en lättillgänglig komponent, men även för att det finns mycketdokumentation för olika sorters projekt som involverar dessa. Detta var hjälpsamt föratt få en överblick av hur allt fungerade. Tillgängligheten på tillbehör såsom kamera

4

Page 6: Spybot - Webbstyrd robot med värmesensoruu.diva-portal.org/smash/get/diva2:1131185/FULLTEXT01.pdf · Spybot - Webbstyrd robot med värmesensor Konstruktion av fjärrstyrd robot och

och motorkontroller var även den god. Ett alternativ som utforskades var att iställetanvända en Arduino, som också är en microkontroller som egentligen lämpar sig bättreför motorstyrning. Det var dock lämpligare att använda en RP då Arduino har mindreprocessorkraft, vilket inte passar bra till ett projekt som använder en kameraström. Attsända video till en webbsida kräver mycket beräkningar från en dator, så det alternativsom hade störst och starkast processor valdes till projektet.

3.1.2 Raspbian

Raspbian är ett Linux-baserat operativsystem som är utvecklat specifikt för RP, och harstöd för programmering i flera språk, inklusive Python. I detta projekt användes Raspbiansom operativsystem för microkontrollern, mest för att det var enkelt, gratis och hade alltsom behövdes.

3.2 Språk

Då projektet kräver flera olika olika typer av programmering för att både robotens, webb-sidan och länken däremellan ska fungera som planerat så användes flera olika program-meringsspråk. En kort sammanfattning av dessa ges nedan.

3.2.1 Python

Python användes främst för att styra det fysiska, då det hade ett bra inbyggt stöd föratt styra en RP:s input/output-pinnar. Det är också ett bra språk att använda i kombi-nation med webbsidor och sågs därför lämpligt. Programstrukturen i Python är till stordel objektorienterad, där roboten representeras av ett objekt som i sin tur har två mo-torobjekt kopplade till sig. Styrkoden styr, baserat på vad roboten får som input, vilkenpin som ska slås på eller av. I Python-koden finns också stöd för webbsidan, kameranoch värmekameran med hjälp av Flask och I2C. I Python finns det också stöd för någotsom kallas PWM, eller Pulse Width Modulation". PWM innebär att pulser i form avfyrkantsvågor skickas till motorerna. Fyrkantsvågen har två lägen som motsvarar av ochpå, den dynamiska regleringen ligger i att det går att justera tiden då pulsen ska vara ipå-läge respektive av-läge. Genom att minska tiden då motorn är på minskas också dentotala effekten och hastigheten kan på så sätt regleras.[2][3]

Flask Flask är ett enkelt framework i Python som stöttar och förenklar kommunikationmellan webbapplikationer. I detta projekt används Flask för att sätta upp en server.På den servern ligger sedan fyra adresser, en för hemsidan, en för videokameran, enför värmekameran och en för styrningen. Under dessa adresser ligger sedan de Python-metoder som styr varje del, och dessa kan endast köras genom att kalla på rätt adress,vilket görs av HTML och Javascript-koden som hemsidan består av.

I2C I2C, även känt som SMBus, är en form av kommunikation mellan enheter somsitter på samma kretskort.[1] Det är den form av kommunikation som värmekameranutnyttjar och implementeras med hjälp av en matningsspänning, en jordning, en kontaktför dataöverföring kallad SDA och en för klockcykel kallad SCL.

5

Page 7: Spybot - Webbstyrd robot med värmesensoruu.diva-portal.org/smash/get/diva2:1131185/FULLTEXT01.pdf · Spybot - Webbstyrd robot med värmesensor Konstruktion av fjärrstyrd robot och

3.2.2 HTML

HTML står för HyperText Markup Language och är det språk som bygger upp innehål-let i en strukturerad hemsida i grunden genom att rendera element såsom bilder ellerlistor. HyperText står specifikt för funktionen att länka till andra hemsidor, vilket är enfundamental funktion för informationsspridningen på internet.[8][9]

3.2.3 CSS

CSS är det som tar en HTML-sida och ger det en grafisk struktur. Element tilldelas olikaattribut som utformar utseendet.[10][11]

3.2.4 Javascript

För att skapa interaktiva funktioner på en hemsida behövs Javascript. Javascript är ettobjektorienterat, funktionellt programmeringsspråk för att implementera funktioner hosen hemsida. Element kan tilldelas funktioner vid olika typer av anrop.[13] Javascript äranvändbart för att skicka information till och från en hemsida som ska användas till någotoch med hjälp av Javascript kan datakommunikation mellan hemsida och server göras påen mängd olika sätt. Ett användbart koncept kallas AJAX, vilket står för AsynchronousJavaScript And XML. Genom att göra AJAX-requests kan data skickas till en serverför att uppdatera en sida utan att behöva ladda om sidan tack vare den asynkronafunktionen.[4] Ett format för att göra detta kallas JSON, vilket står för JavaScript ObjectNotation.

3.3 Utvecklingsmiljö

3.3.1 Atom

Atom är den utvecklingsmiljö som använts, då det är den stöttar alla programmerings-språk som används i projektet. Det mesta av projektets kod skrevs i Atom, med småändringar gjorda i IDLE.

3.3.2 IDLE

IDLE är Pythons egna utvecklingsmiljö. Den användes mest till att justera och felsökakod mellan tester på roboten, då Atom inte fanns installerat i Raspbian.

4 UtförandeUtförandet bestod av två delar, dels programmeringen av RP:n, och dels byggandet ochkopplingen av den fysiska roboten.

6

Page 8: Spybot - Webbstyrd robot med värmesensoruu.diva-portal.org/smash/get/diva2:1131185/FULLTEXT01.pdf · Spybot - Webbstyrd robot med värmesensor Konstruktion av fjärrstyrd robot och

4.1 Programmering

4.1.1 Styrning av roboten

Motorerna som användes i projektet har två inputs, en för drivspänning och en för jord.Motorkontrollern tar däremot tre inputs per motor, då denna också har en enable, somstyr huruvida en motor är på eller inte. För att aktivera dessa används en sats av if-elseif, som tar in textsträngar och från dem bestämmer vilken motor som ska drivas åt vilkethåll. Strängarna ges som forward, left, right, back, on och off, där on och off endast styrom motorernas enable är på eller av, då detta ger ett sätt att stänga av motorerna medanprogrammet körs.

För att svänga roboten så drivs ena motorn framåt och den andra släpar efter, vilketger en hastighetssänkning i svängar. Detta gör svängarna mer kontrollerade än om moto-rerna roterar samtidigt åt motsatta håll. Från början var målet att använda Pulse WidthModulation, även kallad PWM, för detta ändamål. PWM implemeterades men visade sigvara för opålitligt för att vara praktiskt, och ersattes av en enklare lösning baserat påantagandet om bara en motor körs så borde roboten röra sig hälften så snabbt som närbåda motorerna körs. Denna form av hastighetsstyrning visade sig vara fullt funktions-duglig och försöken med PWM övergavs.

För att kunna starta roboten och servern trådlöst användes SSh. SSh är en förkortning förSecure Shell och implementerades med hjälp av ett program kallat PuTTY. Programmetupprättar en länk mellan en dator, som har PuTTY installerat, och en RP eller liknande,som har stöd för SSh. PuTTY krävde endast IP-adressen för RP:n samt dess användar-namn och lösenord. Datorn hade sedan kontroll över RP:n och kunde köra de script somkrävdes för att roboten skulle fungera.

4.1.2 Styrning från webbsida

Bredvid kameraströmmen skapades en virtuell knappsats med en knapp för framåt, väns-ter, höger, stopp och back. Även knappar för på och av lades till. Genom att klicka på enknapp skickas en ändring av URLen genom ett javascriptkommando. Denna ändring upp-fattas sedan av en Python-klass på RP:n och sparar dem som textsträngar. Strängarnaanvänds sedan på det sätt som är beskrivet ovan i stycket om styrning av roboten.

4.1.3 Kamerastream

För att strömma video användes Flask som är ett serversystem som förenklar kommunika-tion mellan Python-kod och webbsidor. Kameraströmmen sattes upp via Flask inbyggdasystem för att skicka objekt partiellt. Koden för detta kopierades till stor del från ettprogram[5] skrivet av Miguel Grinberg, som han hade lagt upp i samband med en förkla-ring på hur man använder Flask[7] för att strömma video. Denna kod gjorde i stort settdet som behövdes för projektet och var väldigt lätt att implementera tillsammans medstyrningen.

7

Page 9: Spybot - Webbstyrd robot med värmesensoruu.diva-portal.org/smash/get/diva2:1131185/FULLTEXT01.pdf · Spybot - Webbstyrd robot med värmesensor Konstruktion av fjärrstyrd robot och

4.1.4 Värmekamera

Värmekameran är uppdelad i ett 8x8-rutnät av temperatursensorer. Varje sensor läser avsin del av kamerans synfält och returnerar den genomsnittliga temperaturen i den delen.Baserat på kamerans uppbyggnad skapades kod för att bygga upp ett likadant rutnät påhemsidan via Javascript. Ett annat script skickar även en begäran till Pythonkoden somska returnera temperaturerna. Via I2C läses värmekamerans rutnät av genom Pythonoch alla temperaturer lagras i en lista. Då begäran kommer in från hemsidan konverterasPython-listan till ett JSON-objekt och returneras. På hemsidan sparas temperaturer-na i en JavaScript-array. Arrayen skickas sedan in i en sista funktion som subtraherartemperaturen från ett fixt värde. Differensen används för att bestämma färgen på denkorresponderande rutan. Det resulterar i ett rutnät där mörkare röd motsvarar en högretemperatur.

4.2 Koppling

Från RP:s GPIO-pinnar kopplades 11 sladdar. Bland dessa gick 7 till ingångarna påmotorkontrollern, 3 för vardera motor samt en för jordning, dessa placeras vid input1-4 samt enable A och B i figur 1, jord går till pin 8. Resten av sladdarna gick tillvärmekameran, som använde I2C och då tar en 3, 3 V matningsspänning, en jord, en sladdför dataöverföring och en för klockcykel. Utöver GPIO-pinnarna användes också RP:skamerakontakt, som kopplades till en PiNOIR-kamera. Bland de sladdar som kopplas devanliga GPIO-pinnarna så är det endast de som går till värmekameran som måste placeraspå specifika platser, förutom att alla jord måste gå till jord-pinnar. Värmekameran kopplastill pin 1 för matningsspänning, och till 3 och 5 för SDA respektive SCL.[12]

Figur 1: Beskrivning av en l298n motorkontrollers olika inputs och outputs.[14]

Motorkontrollern placerades sedan i mitten av en kopplingsbräda, så kallad bread-board", som visas i figur 2. Mellan matspänningen till motorkontrollern och motorkon-

8

Page 10: Spybot - Webbstyrd robot med värmesensoruu.diva-portal.org/smash/get/diva2:1131185/FULLTEXT01.pdf · Spybot - Webbstyrd robot med värmesensor Konstruktion av fjärrstyrd robot och

trollern själv kopplas två kondensatorer till jord. Vid outputs 1, 2, 3 och 4 i figur 1 kopplasin- och utspänning till motorerna.

Figur 2: Så här såg kopplingsplattan ut i slutet av projektet.

4.3 Montering

För att montera ihop robotens alla delar sågades en bottenplatta av plast ut. RP:n ladesi en 3D-utskriven ask, designad med hål för alla kablar, som skruvades fast på bottenplat-tan. På asken fästes en liten, också 3D-utskriven, ställning för video- och värmekameror-na. Kopplingsbrädan fästes i framänden av plattan och strömförsörjningen monterades ibakänden. Motorerna och hjulen monterades långt fram på sidorna, och släphjulet mon-terades i mitten längst bak. Alla delar fästes med endera skruvar eller buntband, förutomkopplingsbrädan, då denna levererades med tejp på baksidan och därmed kunde klistrasfast direkt på bottenplattan. Robotens utformning kan ses i figur 3, 4 och 5.

5 ResultatResultatet av projektet är en slutprodukt i form av en robot samt en hemsida för styrningav denna. På hemsidan visas en kontinuerlig ström från robotens kamera samt från dessvärmekamera, och den har knappar för styrningen av roboten. Robotens strömtillförselkommer från en powerbank med två outputs, varav en försörjer RP:n med ström och endriver motorkontrollern och därigenom också motorerna. Total strömtillförsel för robotenuppgår till 2,1 A, varav 1,8 A går åt till att strömförsörja RP:n och 0,3 A går åt tillmotorerna.

9

Page 11: Spybot - Webbstyrd robot med värmesensoruu.diva-portal.org/smash/get/diva2:1131185/FULLTEXT01.pdf · Spybot - Webbstyrd robot med värmesensor Konstruktion av fjärrstyrd robot och

Figur 3: Roboten från sidan.

10

Page 12: Spybot - Webbstyrd robot med värmesensoruu.diva-portal.org/smash/get/diva2:1131185/FULLTEXT01.pdf · Spybot - Webbstyrd robot med värmesensor Konstruktion av fjärrstyrd robot och

Figur 4: Roboten framifrån.

11

Page 13: Spybot - Webbstyrd robot med värmesensoruu.diva-portal.org/smash/get/diva2:1131185/FULLTEXT01.pdf · Spybot - Webbstyrd robot med värmesensor Konstruktion av fjärrstyrd robot och

Figur 5: Roboten från sidan men med en annan vinkel.

Roboten kan startas och styras från en dator, om datorn i fråga har stöd för SSh, idetta fall hanteras SSh-anslutningen av programmet PuTTY. Det går förmodligen attanvända vilket WiFi-nätverk som helst, men vi har bara testat med Mobile Hotspot frånen smartphone då det var enklast att testa i labbet. Roboten har inte testats i totaltmörker, men då kameran inte har något IR-filter så bör den kunna se i mörker som enmänniska inte kan se i. Här nedan i figur 6 syns en bild från hemsidan under en test-körning i Ångströms korridorer. Värmesensorn representeras av den röda rutan bredvidkameraströmmen, i det här fallet en slät röd färg då den endast ser rumstemperaturen.

Figur 6: Hemsidan som roboten styrs från.

12

Page 14: Spybot - Webbstyrd robot med värmesensoruu.diva-portal.org/smash/get/diva2:1131185/FULLTEXT01.pdf · Spybot - Webbstyrd robot med värmesensor Konstruktion av fjärrstyrd robot och

6 Diskussion

6.1 Problem under arbetets gång

Från början var planen att styra roboten genom en switch-case-sats, men sedan upptäck-tes att switch-satser inte existerar i Python. Problemet löstes istället med en if-else if-sats.Ursprungsplanen som växte fram i ett tidigt skede var att använda PWM för styrningenav strömtillförseln till motorerna, som beskrivet i sektionen för motorstyrning. Detta vi-sade sig vara instabilt och fungerade inte särskilt bra för oss och vi misstänker att det ärför att RP inte har ett särskilt bra stöd för denna typ av signalstyrning. Det kan säkertspela in att vi även programmerat något på fel sätt. Det är möjligt att detta fungerarbättre i Arduino än vad det gör i RP då Arduino är bättre optimerat för motorstyrning.

Något som fördröjde projektet under några dagar var att vår RP visade tecken på attvara väldigt varm och detta efter endast 10-15 minuters användning. Vi felsökte menlyckades inte riktigt hitta problemet och fick hjälp av vår handledare Uwe att installeraen kylfläns på processorn. Vi kom fram till att processorn var den komponent som varvarm genom att känna på den. Detta känns inte helt oväntat då mycket processorkraftgår åt till beräkningsarbetet för att koda videofiler. Efter ett tag kunde vi inte längrestarta RP:n och fick inte upp någon bild även om den gick igång. En ny RP köptes därförin.

6.2 Förbättringsmöjligheter

Roboten blir opålitlig då nätverket den är uppkopplad till är svagt, och kamerastreamenbryts. Vid tillräckligt dålig uppkoppling så tappar roboten helt kontakten med hemsidanoch upprepar sin sista order tills den får slut på ström eller uppkopplingen blir bättre.På grund av detta anses roboten inte vara lämpad att lämnas ensam. För att lösa dettaskulle man kunna använda någon form av uppkoppling som inte förlitar sig på en statiskip-adress och sedan koppla roboten till 4G-nätverket.

Det hade troligtvis varit enklare att kontrollera styrningen om den hade skett via pil-tangenterna på en dator, men då hade det inte varit möjligt att styra roboten från ensmartphone. Idealt hade varit om vi hade två varianter av styrning som kunde användasomväxlande, en för smartphones och en för datorer med tangentbord.

Något vi undersökte en hel del var hur roboten skulle navigera fysiskt. En idé var attanvända ett DC-servo för att kontrollera svängning av hjulen och en DC-motor för attdriva dem, lite mer likt en bil. Detta hade säkert blivit en elegantare lösning men ocksåmer komplicerad och därför togs beslutet att använda en DC-motor för vardera av hju-len och använda ett släpande stödhjul. I början av projektet diskuterades det även omautonom styrning var ett alternativ. Tanken var då att roboten skulle köra framåt av sigsjälv och ha funktioner för att registrera hinder och undvika dessa. Detta lades iställetsom ett möjligt förbättringsprojekt då lite mer erfarenhet av robotkonstruktion krävs föratt åstadkomma detta.

13

Page 15: Spybot - Webbstyrd robot med värmesensoruu.diva-portal.org/smash/get/diva2:1131185/FULLTEXT01.pdf · Spybot - Webbstyrd robot med värmesensor Konstruktion av fjärrstyrd robot och

Vi hade gärna använt en bättre värmekamera, med högre upplösning och längre räckvidd,men det visade sig vara omöjligt med den budget vi hade för projektet. Värmekamerormed hög upplösning är väldigt dyra. Det hade också varit bra om vi hade haft tid attockså montera en IR-ledlampa som skickar ut infrarött ljus så att kameran kan se i detinfraröda spektrumet. Det blev inte så, då resten av projektet tog lite mer tid än vi hadeförväntat oss.

7 SlutsatsProjektet kan anses framgångsrikt då slutprodukten mer eller mindre representerar grund-tanken till projektet och är funktionsduglig. Mycket ny kunskap om dels konstruktion menäven själva delen som skulle kunna summeras som Internet of Things, kommunikationenmed hårdvaran, har erhållits. Att även få in hemsidekonstruktion som en del av projektetvar ett lyckat inslag då kunskap av detta är meriterande.

Referenser[1] https://www.i2c-bus.org/i2c-bus/

[2] https://www.arduino.cc/en/Tutorial/PWM, 2017-05-19 14:00

[3] http://www.electronics-tutorials.ws/blog/pulse-width-modulation.html, 2017-05-1914:00

[4] https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Objects/JSON, 2017-05-21 14:30

[5] https://github.com/miguelgrinberg/flask-video-streaming 2017-05-21 16:07

[6] https://www.w3schools.com/ 2017-05-21 16:00

[7] https://blog.miguelgrinberg.com/post/video-streaming-with-flask 10/5 2017

[8] https://developer.mozilla.org/en-US/docs/Web/HTML, 2017-05-21, 16:00

[9] https://www.w3schools.com/html/html_intro.asp, 2017-05-21 16:00

[10] https://developer.mozilla.org/en-US/docs/Web/CSS, 2017-05-21, 17:00

[11] https://www.w3schools.com/css/css_intro.asp, 2017-05-21, 17:00

[12] https://pinout.xyz/ - 2017-05-22 11:30

[13] https://developer.mozilla.org/sv-SE/docs/Web/JavaScript, 2017-05-21 14:30

[14] https://www.sparkfun.com/datasheets/Components/General/L298N.pdf 2017-05-29

14

Page 16: Spybot - Webbstyrd robot med värmesensoruu.diva-portal.org/smash/get/diva2:1131185/FULLTEXT01.pdf · Spybot - Webbstyrd robot med värmesensor Konstruktion av fjärrstyrd robot och

Appendix

Python:

import timeimport i oimport thread ingimport picamera

class Camera ( object ) :thread = None # background thread t ha t reads frames from

cameraframe = None # current frame i s s t o r ed here by background

threadl a s t_acce s s = 0 # time o f l a s t c l i e n t acces s to the camera

def i n i t i a l i z e ( s e l f ) :i f Camera . thread i s None :

# s t a r t background frame threadCamera . thread = thread ing . Thread ( t a r g e t=s e l f . _thread

)Camera . thread . s t a r t ( )

# wait u n t i l frames s t a r t to be a v a i l a b l ewhile s e l f . frame i s None :

time . s l e e p (0 )

def get_frame ( s e l f ) :Camera . l a s t_acce s s = time . time ( )s e l f . i n i t i a l i z e ( )return s e l f . frame

@classmethoddef _thread ( c l s ) :

with picamera . PiCamera ( ) as camera :# camera se tupcamera . r e s o l u t i o n = (320 , 240)camera . h f l i p = Fal secamera . v f l i p = Fal se

# l e t camera warm upcamera . start_preview ( )time . s l e e p (2 )

stream = io . BytesIO ( )

15

Page 17: Spybot - Webbstyrd robot med värmesensoruu.diva-portal.org/smash/get/diva2:1131185/FULLTEXT01.pdf · Spybot - Webbstyrd robot med värmesensor Konstruktion av fjärrstyrd robot och

for f oo in camera . capture_continuous ( stream , ’ jpeg ’ ,use_video_port=

True ) :# s to r e framestream . seek (0 )c l s . frame = stream . read ( )

# re s e t stream fo r next framestream . seek (0 )stream . t runcate ( )

# i f t he r e hasn ’ t been any c l i e n t s ask ing f o rframes in

# the l a s t 10 seconds s top the threadi f time . time ( ) − c l s . l a s t_acce s s > 10 :

breakc l s . thread = None

import RPi .GPIO as GPIO

class Engine ( object ) :""" doc s t r i n g forEngine . """

# de f i n e pin as an ins tance v a r i a b l e f o r Enginedef __init__ ( s e l f , pin1 , pin2 , enable , name) :

#superEngine , s e l f ) . __init__()s e l f . pin1 = pin1s e l f . pin2 = pin2s e l f . enable = enables e l f . name = name# s e l f .PWM = 0

#setup s t u f fGPIO. setwarn ings ( Fa l se )GPIO. setmode (GPIO.BCM)

GPIO. setup ( s e l f . pin1 , GPIO.OUT)GPIO. setup ( s e l f . pin2 , GPIO.OUT)GPIO. setup ( s e l f . enable , GPIO.OUT)#s e l f .PWM = GPIO.PWM( s e l f . enab le , 100)#s e l f .PWM. s t a r t (0)

GPIO. output ( s e l f . pin1 , GPIO.LOW)GPIO. output ( s e l f . pin2 , GPIO.LOW)GPIO. output ( s e l f . enable , GPIO.LOW)

16

Page 18: Spybot - Webbstyrd robot med värmesensoruu.diva-portal.org/smash/get/diva2:1131185/FULLTEXT01.pdf · Spybot - Webbstyrd robot med värmesensor Konstruktion av fjärrstyrd robot och

# Methods f o r c o n t r o l l i n g engine d i r e c t i o ndef on ( s e l f ) :

#s e l f .PWM. ChangeDutyCycle (100)GPIO. output ( s e l f . enable , GPIO.HIGH)GPIO. output ( s e l f . pin1 , GPIO.LOW)GPIO. output ( s e l f . pin2 , GPIO.LOW)

print ( s e l f . name + ’ . on ’ )

def o f f ( s e l f ) :#s e l f .PWM. ChangeDutyCycle (0)GPIO. output ( s e l f . enable , GPIO.LOW)GPIO. output ( s e l f . pin1 , GPIO.LOW)GPIO. output ( s e l f . pin2 , GPIO.LOW)print ( s e l f . name + ’ . o f f ’ )

def forward ( s e l f ) :GPIO. output ( s e l f . pin1 , GPIO.HIGH)GPIO. output ( s e l f . pin2 , GPIO.LOW)

print ( s e l f . name + ’ . forward ’ )

def backward ( s e l f ) :GPIO. output ( s e l f . pin1 , GPIO.LOW)GPIO. output ( s e l f . pin2 , GPIO.HIGH)print ( s e l f . name + ’ . backward ’ )

def stop ( s e l f ) :GPIO. output ( s e l f . pin1 , GPIO.LOW)GPIO. output ( s e l f . pin2 , GPIO.LOW)print ( s e l f . name + ’ . hold ’ )

from f l a s k import Flask , render_template , Responsefrom eng ine import Enginefrom camera_pi import Camera#from camera import Camerafrom time import s l e e pimport smbus

app = Flask (__name__)bus = smbus .SMBus(1 )i2c_slave_address = 0b1101000# I n i t i a l i z e the l e f t and r i g h t eng inesl e f tEng in e = Engine (23 , 24 , 13 , " l e f t " )r ightEng ine = Engine (7 , 8 , 12 , " r i g h t " )temp_on = False

17

Page 19: Spybot - Webbstyrd robot med värmesensoruu.diva-portal.org/smash/get/diva2:1131185/FULLTEXT01.pdf · Spybot - Webbstyrd robot med värmesensor Konstruktion av fjärrstyrd robot och

@app . route ( "/" )def index ( ) :

"""Home page """return render_template ( ’ spybot_homepage . html ’ )

def gen ( camera ) :"""Video streaming genera tor func t i on """while True :

frame = camera . get_frame ( )y i e l d (b ’−−frame\ r \n ’

b ’ Content−Type : ␣ image/ jpeg \ r \n\ r \n ’ + frame + b ’ \r \n ’ )

@app . route ( ’ / video_feed ’ )def video_feed ( ) :

"""Video streaming route .Put t h i s in the src a t t r i b u t e o f an img tag . """

return Response ( gen (Camera ( ) ) ,mimetype=’ mult ipart /x−mixed−r ep l a c e ; ␣

boundary=frame ’ )##bus . wr i te_byte ( i2c_slave_address ,0 x80 )##whi l e temp_on :## for i in range (64) :# tempdata :## temp = bus . read_byte ( i2c_slave_address )<<4## temp +=bus . read_byte ( i2c_s lave_address )<<12## pr in t ( temp/64)## #pr in t ( tempdata )## s l e e p (1)

@app . route ( "/<act ion>" )def go ( ac t i on ) :

# I f ac t i on i s s e t to on , turn on the eng ines .i f ac t i on == ’ on ’ :

l e f tEng in e . on ( )r ightEng ine . on ( )temp_on = True

# I f ac t i on i s s e t to forward , d r i v e the robo t forward .i f ac t i on == ’ forward ’ :

#le f tEng i n e .PWM. ChangeDutyCycle (100)#r igh tEng ine .PWM. ChangeDutyCycle (100)l e f tEng in e . forward ( )r ightEng ine . forward ( )

18

Page 20: Spybot - Webbstyrd robot med värmesensoruu.diva-portal.org/smash/get/diva2:1131185/FULLTEXT01.pdf · Spybot - Webbstyrd robot med värmesensor Konstruktion av fjärrstyrd robot och

# I f ac t i on i s s e t to l e f t , turn the robo t l e f t .i f ac t i on == ’ l e f t ’ :

#le f tEng i n e .PWM. ChangeDutyCycle (30)#r igh tEng ine .PWM. ChangeDutyCycle (30)#l e f tEng i n e . backward ()r ightEng ine . forward ( )

# I f ac t i on i s s e t to r i g h t , turn the robo t r i g h t .i f ac t i on == ’ r i g h t ’ :

#le f tEng i n e .PWM. ChangeDutyCycle (30)#r igh tEng ine .PWM. ChangeDutyCycle (30)l e f tEng in e . forward ( )#righ tEng ine . backward ()

# I f ac t i on i s s e t to stop , brake the robo t .i f ac t i on == ’ stop ’ :

l e f tEng in e . stop ( )r ightEng ine . stop ( )

# I f ac t i on i s s e t to o f f , turn o f the eng ines .i f ac t i on == ’ o f f ’ :

l e f tEng in e . o f f ( )r ightEng ine . o f f ( )temp_on = False

return render_template ( ’ spybot_homepage . html ’ )

i f __name__ == ’__main__ ’ :app . run ( host=’ 0 . 0 . 0 . 0 ’ , debug=True , threaded=True )

HTML:

<!DOCTYPEHTML>

<html>

<head><t i t l e>SpyBot</ t i t l e><l ink rel=" s t y l e s h e e t " type=" text / c s s " href=" con t r o l s . c s s " /><meta name="viewport " content="width=device−width , ␣ i n i t i a l −

s c a l e =1.0"><meta charset="UTF−8">

<script src="// ajax . goog l e ap i s . com/ ajax / l i b s / jquery /1 . 9 . 1 /jquery . min . j s "></ script>

</head>

<body>

19

Page 21: Spybot - Webbstyrd robot med värmesensoruu.diva-portal.org/smash/get/diva2:1131185/FULLTEXT01.pdf · Spybot - Webbstyrd robot med värmesensor Konstruktion av fjärrstyrd robot och

<div class=" conta ine r "><div class="stream" style=’height : 480 px ; width : 640 px ; ’>

<img src="{{␣ ur l_for ( ’ video_feed ’ ) }}"></div><div class=" r i g h t s i d e ">

<div class=" i r s qua r e " id="temp"></div>

<div class="buttons "><div class="toprow">

<button class=" forwardbtn " onclick="sendAction ( ’forward ’ ) ">Forward</button>

</div>

<div class="bottomrow"><button class=" l e f t b t n " onclick="sendAction ( ’ l e f t ’ ) ">

Le f t</button><button class=" stopbtn " onclick="sendAction ( ’ stop ’ ) ">

Stop</button><button class=" r ightbtn " onclick="sendAction ( ’ r i ght ’ ) "

>Right</button></div>

<div class="bottomestrow"><button class="backbtn" onclick="sendAction ( ’ back ’ ) ">

Back</button></div><div class="onof f row ">

<button class="onbtn" onclick="sendAction ( ’ on ’ ) ">On</button>

<button class=" o f f b tn " onclick="sendAction ( ’ o f f ’ ) ">Off</button>

</div></div>

</div></div>

<script type=" text / j a v a s c r i p t ">var tempList = [ ] ;

f unc t i on update ( ) {var tempUpdate = s e t I n t e r v a l ( tempRequest , 1000) ;var gridUpdate = s e t I n t e r v a l ( tempGrid , 1000) ;

}

func t i on genDivs ( ) {

20

Page 22: Spybot - Webbstyrd robot med värmesensoruu.diva-portal.org/smash/get/diva2:1131185/FULLTEXT01.pdf · Spybot - Webbstyrd robot med värmesensor Konstruktion av fjärrstyrd robot och

var e = document . getElementById ( "temp" ) ;f o r ( var i = 0 ; i < 8 ; i++) {

var row = document . createElement ( " div " ) ;row . className = "row" ;for (var x = 1 ; x <= 8 ; x++) {

var c e l l = document . createElement ( " div " ) ;c e l l . className = " gr id square " ;c e l l . id = ( i ∗ 8) + x ;row . appendChild ( c e l l ) ;

}e . appendChild ( row ) ;

}}

func t i on tempRequest ( ) {$ ( func t i on ( ) {

$ . getJSON( ’/_temp ’ , f unc t i on (data ) {tempList = data . tempA ;

}) ;}) ;

}

func t i on tempGrid ( ) {for (var i = 1 ; i <= 64 ; i++) {

var e = document . getElementById ( i ) ;e . style . backgroundColor = "rgb (255 , " + (255 − 5∗ tempList

[ i ] ) + " , " + (255 − 5∗ tempList [ i ] ) + " ) " ;}

}

func t i on sendAction ( act ) {$ ( func t i on ( ) {

var a = act ;$ . a jax ({

dataType : " j son " ,u r l : "/_action" ,data : {

a}

}) ;}) ;

} ;

window . onload = genDivs ( ) , update ( ) ;</script>

21

Page 23: Spybot - Webbstyrd robot med värmesensoruu.diva-portal.org/smash/get/diva2:1131185/FULLTEXT01.pdf · Spybot - Webbstyrd robot med värmesensor Konstruktion av fjärrstyrd robot och

</body>

</html>

CSS:

html {he ight : 100%;over f l ow : hidden ;font−f ami ly : Copperplate , "Copperplate Gothic Light " , f antasy ;

}

body {margin : 0 ;padding : 0 ;p e r s p e c t i v e : 1px ;transform−s t y l e : preserve−3d ;over f low−x : hidden ;over f low−y : auto ;background−image : u r l ( " . . / green−space−wallpaper −1. jpg ") ;background−attachment : f i x e d ;background−po s i t i o n : c en t e r ;background−r epeat : no−r epeat ;background−s i z e : cover ;

}

@media (min−width : 1010px ) {. conta ine r {

d i sp l ay : f l e x ;}

}

. stream {d i sp l ay : f l e x ;padding : 10px ;

}

. stream img {width : 100%;he ight : 100%;

}

. r i g h t s i d e {d i sp l ay : f l e x ;f l e x−d i r e c t i o n : column ;

}

22

Page 24: Spybot - Webbstyrd robot med värmesensoruu.diva-portal.org/smash/get/diva2:1131185/FULLTEXT01.pdf · Spybot - Webbstyrd robot med värmesensor Konstruktion av fjärrstyrd robot och

. i r s qua r e {dispay : f l e x ;padding : 10px ;margin−bottom : 50px ;

}

. row {d i sp l ay : f l e x ;f l e x−d i r c t i o n : row ;

}

. g r id square {he ight : 20px ;width : 20px ;

}

. buttons {d i sp l ay : f l e x ;padding : 10px ;f l e x−d i r e c t i o n : column ;j u s t i f y−content : f l e x−end ;width : 330px ;

}

. toprow {d i sp l ay : f l e x ;f l e x−d i r e c t i o n : row ;j u s t i f y−content : c en t e r ;he ight : 50px ;

}

. bottomrow {d i sp l ay : f l e x ;f l e x−d i r e c t i o n : row ;j u s t i f y−content : c en t e r ;he ight : 50px ;

}

. bottomestrow {d i sp l ay : f l e x ;f l e x−d i r e c t i o n : row ;j u s t i f y−content : c en t e r ;he ight : 50px ;

}

. onof f row {

23

Page 25: Spybot - Webbstyrd robot med värmesensoruu.diva-portal.org/smash/get/diva2:1131185/FULLTEXT01.pdf · Spybot - Webbstyrd robot med värmesensor Konstruktion av fjärrstyrd robot och

d i sp l ay : f l e x ;f l e x−d i r e c t i o n : row ;j u s t i f y−content : space−between ;he ight : 50px ;margin−top : 20px ;

}

. forwardbtn {border : none ;cu r so r : po in t e r ;background−c o l o r : rgba (100 , 100 , 100 , 0 . 7 ) ;c o l o r : white ;text−a l i g n : c en t e r ;width : 100px ;

}

. l e f t b t n {border : none ;cu r so r : po in t e r ;background−c o l o r : rgba (100 , 100 , 100 , 0 . 7 ) ;c o l o r : white ;text−a l i g n : c en t e r ;width : 100px ;order : 1 ;

}

. stopbtn {border : none ;cu r so r : po in t e r ;background−c o l o r : rgba (100 , 100 , 100 , 0 . 7 ) ;c o l o r : white ;text−a l i g n : c en t e r ;width : 100px ;order : 2 ;

}

. r i gh tbtn {border : none ;cu r so r : po in t e r ;background−c o l o r : rgba (100 , 100 , 100 , 0 . 7 ) ;c o l o r : white ;text−a l i g n : c en t e r ;width : 100px ;order : 3 ;

}

24

Page 26: Spybot - Webbstyrd robot med värmesensoruu.diva-portal.org/smash/get/diva2:1131185/FULLTEXT01.pdf · Spybot - Webbstyrd robot med värmesensor Konstruktion av fjärrstyrd robot och

. onbtn {border : none ;cu r so r : po in t e r ;background−c o l o r : rgba (50 , 205 , 50 , 0 . 7 ) ;c o l o r : white ;text−a l i g n : c en t e r ;width : 100px ;order : 1 ;

}

. backbtn {border : none ;cu r so r : po in t e r ;background−c o l o r : rgba (100 , 100 , 100 , 0 . 7 ) ;c o l o r : white ;text−a l i g n : c en t e r ;width : 100px ;order : 2 ;

}

. o f f b tn {border : none ;cu r so r : po in t e r ;background−c o l o r : rgba (205 , 50 , 50 , 0 . 7 ) ;c o l o r : white ;text−a l i g n : c en t e r ;width : 100px ;order : 3 ;

}

. r i gh tbtn : hover , . l e f t b t n : hover , . stopbtn : hover , . forwardbtn :hover ,

. onbtn : hover , . o f f b tn : hover , . backbtn : hover {background−c o l o r : rgba (256 , 256 , 256 , 0 . 7 ) ;

}

25