Teknisk dokumentation



Relevanta dokument
Övningsuppgifter STYRNING - i Mikrodatorteknik för U2 2010

LiTH Lab1: Asynkron seriell dataöverföring via optisk länk Laboration 1. Asynkron seriell dataöverföring via optisk länk

Enchipsdatorer med tillämpningar LABORATION 7, ROBOT

Systemskiss. Joachim Lundh TSRT10 - SEGWAY 6 december 2010 Version 1.0. Status:

Övningsuppgifter i Mikrodatorteknik för U2

RemoteBud. Inlämnas: Patrik Johnsson, e01pjo Viktor Karlsson, e01vk

Konstruktion av en radiostyrd legobil. Digitala projekt av Arbon Vata Leonardo Vukmanovic Amid Bhatia

Före Kravspecifikationen

Digitala projekt - Radiostyrd bil

Innehållsförteckning. Figur- och tabellförteckning. Figure 1 Blockschema över hårdvaran...4 Figure 2 Blockschema över programet...

'HOWHQWDPHQ 6\VWHPNRQVWUXNWLRQ

Legorobot. Lär dig programmera en legorobot. Teknikåttan Ola Ringdahl Lena Kallin Westin

Testspecifikation. Henrik Hagelin TSRT10 - SEGWAY 6 december 2010 Version 1.0. Status:

Provmoment: Ladokkod: Tentamen ges för: Tentamen TE111B El3. Namn: Personnummer: Tentamensdatum: Tid: 14:00-18:00.

Högskolan i Halmstad Digital- och Mikrodatorteknik 7.5p. Lista på registeruppsättningen i PIC16F877A Datablad TTL-kretsar 74-serien

Systemskiss. LiTH Autonom bandvagn med stereokamera Gustav Hanning Version 1.0. Status. TSRT10 8Yare LIPs. Granskad

Digital Projekt EDI 021 Konstruktion av talande nummerpresentatör VT1 2004

Föreläsningsanteckningar till Konstruktionsmetoder

Vad är en UART? Universal Asynchronous Receiver Transmitter parallella seriella parallell åttabitars signal mest signifikant bit

Mekanisk solros, Digitala projekt(edi021) Kristoer Nordvall, Stefan Windfeldt, Inlämmnad: 4 december 2006

LiTH. WalkCAM 2007/05/15. Testplan. Mitun Dey Version 1.0. Status. Granskad. Godkänd. Reglerteknisk projektkurs WalkCAM LIPs

LiTH Autonom styrning av mobil robot Testplan Version 1.0 TSRT71-Reglertekniskt projektkurs Anders Lindgren L IPs

Lego Robot [ ] [ ] [ ]

Realtidsprogrammering. En introduktion Implementering (med exempel från PIC)

AVR 3 - datorteknik. Avbrott. Digitala system 15 hp. Förberedelser

Laboration 4: Knappstuds Drivrutiner för att eliminera störningar.

Systemskiss. Redaktör: Anders Toverland Version 1.0. Status. LiTH Fordonssimulator. Granskad Godkänd. TSRT71 Anders Toverland

ATU. Användarmanual. Larmöverföringsenhet Firmware Version

Laboration i digitalteknik Introduktion till digitalteknik

Datorprojekt, del 1. Digitala system 15 p

AVR 5. Styrning av trafikljus. Digitala system 15 p

Instruktion Basketboll

Programexempel 1 AND-funktionen

Accelerometer. Rikard Ekström Mattias Kindborg. Informationsteknologi Lunds Universitet

LiTH Autonom styrning av mobil robot Projektplan. Martin Elfstadius & Fredrik Danielsson. Version 1.0

Laboration i digitalteknik

Laboration i digitalteknik Speciella sekvenskretsar

Laboration nr2 med enchipsdatorn PIC-16F877

Digitala Projekt(EITF40) - Larm

Ett urval D/A- och A/D-omvandlare

REV 3. Användarmanual

Datorteknik 2 (AVR 2)

Testplan. Redaktör: Sofie Dam Version 0.1. Status. Planering och sensorfusion för autonom truck Granskad Dokumentansvarig - Godkänd

Användarhandledning. Redaktör: Jenny Palmberg Version 1.0. Status. LiTH Fordonssimulator. Granskad Godkänd. TSRT71 Jenny Palmberg

General Purpose registers ALU I T H S V N Z C SREG. Antag att vi behöver skriva in talet 25 till register R18

Digitala Projekt (EITF11)

Elektronisk timer. Ställa in aktuell tid. Inställning av vinter-/sommartid. Använda klockan tillsammans med ugnen. Ställa in tillagningstiden

Växtviskaren EITF11 Digitala projekt VT15, I12

Goda råd till de som ska utföra ett liknande projekt (från KMM 2016)

Laboration 2 i Datorteknik- Assemblerprogrammering II

Laboration 2 i Styrteknik

Systemskiss. Självetablerande sensornätverk med 3G och GPS. Version 0.2. Christian Östman Datum: 15 maj 2008

Styrning från telefon. Styrning mellan två Robofonsändare. Styrning via SMS. Styrning via dator

Enchipsdatorer med tillämpningar LABORATION 6, ROBOT

Roboten. Sida 1 av 11

Montering av Wisp628.

EV3 Roboten. Sida 1 av 13

Systemskiss Minröjningsbandvagn

Användarhandledning. Redaktör: Patrik Molin Version 1.0. Mobile Scout. Status. LiTH Granskad Godkänd. TSRT71 Patrik Molin

Lösningsföslag till Exempel på tentamensuppgifter i Digitalteknik I

LABORATIONER I DIGITALTEKNIK. Laboration 3 Speciella sekvenskretsar

CE_O6. Parallell in/utmatning (I/O). Förberedelser till laboration nios2io.

Monterings råd till ditt nya Larm Dokumentet hjälper dig att göra en bra montering med högsta säkerhet.

Testprotokoll. Redaktör: Sofie Dam Version 0.1. Status. Planering och sensorfusion för autonom truck Granskad Dokumentansvarig - Godkänd

LARMANLÄGGNING. Digitala Projekt, EITF11. Oskar von Knorring Emin Karimov Henrik Akej Handledare: Bertil Lindvall

Konstruera, styra, reglera och programmera en röd tråd F-9

Lista på registeruppsättningen i PIC16F877A Datablad TTL-kretsar 74-serien

TSIU05 Digitalteknik. LAB1 Kombinatorik LAB2 Sekvensnät LAB3 System

PlantPuppy Räddaren för den som inte kan hålla växterna vid liv

Kravspecifikation. LiTH Segmentering av MR-bilder med ITK Anders Eklund Version 1.0. Status

Testplan. Flygande Autonomt Spaningsplan. Version 1.0. Dokumentansvarig: Henrik Abrahamsson Datum: 14 mars Status.

Ansvarig lärare: Olof Andersson, Telefon (besöker skrivsalen)

HANDHAVANDE LARMIA DUC LS 920

Rapport Digitala Projekt EITF11 Grupp 4 Axel Sundberg, Jakob Wennerström Gille Handledare: Bertil Lindvall

Blackstar KTL-2002C. Delar & Komponenter MANUAL SVENSKA

Snake. Digitala Projekt (EITF11) Fredrik Jansson, I-12 Lunds Tekniska Högskola,

DIGITALA PROJEKT Väderstation

Design av inbyggda system

Effektpedal för elgitarr

KALKYLATOR LABORATION4. Laborationens syfte

Projektplan. LiTH Segmentering av MR-bilder med ITK Anders Eklund. Version 1.0. Status. Bilder och grafik projektkurs, CDIO MCIV LIPs

Laboration 5. Temperaturmätning med analog givare. Tekniska gränssnitt 7,5 p. Förutsättningar: Uppgift: Temperatur:+22 C

LABORATION. Datorteknik Y

ESIM364. Inkopplingsanvisning

TENTAMEN Datorteknik (DO2005) D1/E1/Mek1/Ö1

Systemskiss. LiTH. Autopositioneringssystem för utlagda undervattenssensorer Erik Andersson Version 1.0. Status

Servicemanual. Autonomous Pallet System 800 Prototyp. Utfärdat:

Lösningar till tentamen i EIT070 Datorteknik

Träff 1 - Introduktion

Försättsblad till skriftlig tentamen vid Linköpings Universitet

Tentamen i Digitalteknik, EIT020

Välkomna till KMM! KMM. KMM - lärandemål Efter fullgjord kurs ska ni bland annat kunna:

Digitala projekt, EDI021 Rapport Handledare: Bertil Lindvall

Design av inbyggda system

Edison roboten som går at bygga ihop med LEGO

LEGO Energimätare. Att komma igång

K3-SMS Fjärrstyrning Bruksanvisning

Robotfotboll med Arduino

PGC: Läser från fotocell och lackar efter avläst. Läser från fotocell och lackar efter programerat. Detaljräknare

S3 DATOR DATIORINKREMENTALGIV

Transkript:

Linköpings tekniska högskola 2003-12-09 Institutionen för systemteknik (ISY) Teknisk dokumentation Platon en härligt gul sexbent robot Projektgrupp 15 Jessica Heyman Version 1.1 Granskad Godkänd Status Konstruktion med mikrodatorer Projektgrupp 15 - Platon LIPs Dokumentansvarig: David Landén martenson+stalin@lysator.liu.se Sida 1

Platon 2003-12-09 PROJEKTIDENTITET Projektgrupp 15 Platon Linköpings tekniska högskola, ISY Gruppdeltagare Namn Ansvar Telefon E-post Johan Rees Projektledare 070 249 91 52 johre469@student.liu.se David Landén Dokumentansvarig 013 473 18 18 davla185@student.liu.se Pia Fåk Designansvarig, hårdvara 073 698 68 78 piafa456@student.liu.se Jessica Heyman Leveransansvarig 070 391 83 14 jeshe852@student.liu.se Mattias Lennartsson Testansvarig 073 767 12 15 matle017@student.liu.se Johan Mårtenson Designansvarig, mjukvara 073 931 98 96 johma196@student.liu.se E-postlista för hela gruppen martenson+stalin@lysator.liu.se Kund Tomas Svensson Kursansvarig Tomas Svensson, Olle Seger Handledare Anders Nilsson Konstruktion med mikrodatorer Projektgrupp 15 - Platon LIPs Dokumentansvarig: David Landén martenson+stalin@lysator.liu.se Sida 2

Platon 2003-12-09 Innehåll 1 INLEDNING... 5 1.1 Tidigare dokument... 5 1.2 Definitioner... 5 2 ÖVERSIKT AV SYSTEMET... 6 2.1 Fysisk uppbyggnad... 6 2.2 Ingående moduler... 6 2.2.1 Kommunikation mellan moduler... 7 3 FJÄRRSTYRNINGSENHET... 7 3.1 Inledande beskrivning av fjärrstyrningsenheten... 7 3.2 Mjukvara... 8 3.2.1 Signal från IR-detektor... 10 3.2.2 Signal från tryckknapp... 11 3.3 Kommunikation... 11 3.3.1 Informationsöverföring inom fjärrstyrningsenheten... 11 3.3.2 Gränssnitt mot andra enheter... 12 3.4 Störningar... 12 4 STYRENHET... 12 4.1 Inledande beskrivning av styrenheten... 12 4.2 Mjukvara... 13 4.2.1 Styrlogik... 13 4.2.2 Steglogik... 16 4.3 Kommunikation... 17 4.3.1 Informationsöverföring inom styrenheten... 17 4.3.2 Gränssnitt mot andra enheter... 18 5 SENSORENHET... 19 5.1 Inledande beskrivning av sensorenheten... 19 5.2 Mjukvara... 19 5.2.1 Sensorer... 20 5.3 Gränssnitt mot andra enheter... 20 5.3.1 Insignaler... 20 5.3.2 Utsignaler... 21 5.3.3 Signalprioritet... 22 5.3.4 Display... 22 5.4 Sensorer... 22 5.4.1 Hårdvara... 22 5.4.2 Namngivning... 22 6 ANVÄNDARHANDLEDNING... 23 7 REFERENSER... 24 Bilagor 1 Hårdvarulista A1 Kretsschema för fjärrstyrningsenheten B1 Kretsschema för styrenheten C1 Kretsschema för sensorenheten A2 Assemblerkod för fjärrstyrningsenheten B2 Assemblerkod för styrenheten C2 Assemblerkod för sensorenheten Konstruktion med mikrodatorer Projektgrupp 15 - Platon LIPs Dokumentansvarig: David Landén martenson+stalin@lysator.liu.se Sida 3

Platon 2003-12-09 Dokumenthistorik Version Datum Förändringar från föregående version Utförda av Granskad 0.1 2003-12-01 Första utkast Jessica Heyman Pia Fåk, Johan Rees, David Landén 1.0 2003-12-05 Ny programkod för styr- och sensorenhet Förtydliganden och layoutkorrigeringar Jessica Heyman Pia Fåk 1.1 2003-12-09 Tillägg av bild på framsida, i inledning och i avsnitt 2.2.1 Jessica Heyman Rättning av småfel Konstruktion med mikrodatorer Projektgrupp 15 - Platon LIPs Dokumentansvarig: David Landén martenson+stalin@lysator.liu.se Sida 4

Platon 2003-12-09 1 Inledning På uppdrag av beställaren Tomas Svensson har vi i projektgrupp 15, Platon, konstruerat en liten sexbenig robot som återfinns i figur 1.1. Denna kan styras manuellt med fjärrkontroll, men kan också autonomt ta sig genom en labyrint hjälp av ultraljudssensorer. Detta dokument beskriver i detalj hur vår robot är konstruerad och hur den ska användas. I avsnitt två ges en översiktlig bild av roboten, som följs av detaljerna i de tre ingående modulerna fjärrstyrning, styrning och sensorer i avsnitt tre, fyra respektive fem. I anslutning till modulbeskrivningarna förklaras också hur de olika modulerna kommunicerar med varandra. Slutligen finns en användarmanual till konstruktionen i avsnitt sex. Figur 1.1 Fotografi på Platon en härligt gul sexbent robot. 1.1 Tidigare dokument Inom ramen för projekt Platon har vi tidigare tagit fram en kravspecifikation, en systemskiss och en designspecifikation. Detaljer om samtliga återfinns i referenslistan i slutet av denna dokumentation. 1.2 Definitioner Följande begrepp används i detta dokument: Platon, roboten autonomt läge den sexbeniga robot vi har konstruerat det läge då Platon utan hjälp från användaren hittar rätt väg genom en labyrint. Konstruktion med mikrodatorer Projektgrupp 15 - Platon LIPs Dokumentansvarig: David Landén martenson+stalin@lysator.liu.se Sida 5

Platon 2003-12-09 2 Översikt av systemet Detta avsnitt behandlar roboten som helhet: dess huvudsakliga delar och grovt deras gränssnitt mot varandra. 2.1 Fysisk uppbyggnad Robotens grundbyggsten är ett robotskelett som har sex styrbara ben och rörligt huvud. På robotens kropp sitter ett virkort, där alla komponenter som behövs för manövrering och navigation har fästs. Virkortet matas med 7.5 V spänning från sex uppladdningsbara batterier som ligger mellan robotkroppen och virkortet. Figur 2.1 Blockschema: översiktlig vy av systemet. 2.2 Ingående moduler Roboten Platon är uppbyggd av tre moduler: Fjärrstyrningsenhet som gör det möjligt för användaren att ge styrkommandon till roboten med hjälp av en fjärrkontroll. Styrenhet som med hjälp av kommandon från de övriga enheterna styr benen så att roboten rör sig åt rätt håll. Konstruktion med mikrodatorer Projektgrupp 15 - Platon LIPs Dokumentansvarig: David Landén martenson+stalin@lysator.liu.se Sida 6

Platon 2003-12-09 Sensorenhet som känner av robotens omgivning och skickar information om denna till styrenheten. Modulerna beskrivs mer ingående i avsnitt tre, fyra respektive fem. 2.2.1 Kommunikation mellan moduler Informationsöverföring sker enbart mellan sensor- och styrenhet samt mellan fjärrstyrnings- och styrenhet. Mellan sensor- och styrenhet sker dubbelriktad kommunikation med fyra bitar till styrenheten från sensorenheten och två bitar från styr- till sensorenhet enligt figur 2.2. Med hjälp av dessa bitar skickar sensorenheten information till styrenheten om nödvändiga riktningskorrigeringar eller om en korsning hittats, och i så fall även vilken typ av korsning det rör sig om. Utförligare beskrivning finns i avsnitt 4.3. styrenhet sensorenhet Figur 2.2 Mellan styr- och sensorenhet skickas två bitar från styrenheten till sensorenheten och fyra bitar åt andra hållet. Mellan fjärrstyrningsenheten och styrenheten sker enbart enkelriktad informationsöverföring. Med virade kopplingstrådar skickar fjärrstyrningsenheten fyra bitar till styrenheten, där tre bitar kodar för ett kommando och den fjärde är en strobe som anger att fjärrstyrningsenheten skickar en ny signal. Vidare beskrivning av de tre informationsbitarna och när stroben läggs på finns i avsnitt 3.4.2. Sammanfattningsvis har alla tre moduler mycket enkla gränssnitt, vilket gör att de enkelt kan bytas ut. 3 Fjärrstyrningsenhet 3.1 Inledande beskrivning av fjärrstyrningsenheten Då roboten inte är i autonomt läge, kan den styras manuellt med en enkel fjärrkontroll. En användare kan då ge följande kommandon: gå framåt gå bakåt Konstruktion med mikrodatorer Projektgrupp 15 - Platon LIPs Dokumentansvarig: David Landén martenson+stalin@lysator.liu.se Sida 7

Platon 2003-12-09 sväng höger sväng vänster stanna autonomt läge på/av ljudsignal Fjärrkontrollen sänder ut IR-signaler till roboten enligt fjärrkontrollens i förhand inställda protokoll. IR-detektorn tar emot dessa signaler och omvandlar dem till elektriska signaler, som skickas till signalbehandlingsenheten. Till denna enhet kommer också en signal från en tryckknapp som används för i- och urkoppling av autonomt läge. De inkomna signalerna tolkas i signalbehandlingsenheten och då roboten inte är i autonomt läge skickas de vidare till styrenheten i form av styrkommandon i samtliga fall utom då den mottagna signalen beskriver användarkommandot ljudsignal. Då användaren ger kommandot ljudsignal tutar signalbehandlingsenheten nämligen själv med summern, utan att styrenheten är inblandad. När signalbehandlingsenheten tar emot kommandot autonomt läge på/av, antingen via tryckknapp eller fjärrkontroll, kommer även en lysdiod att tändas eller släckas (beroende på om läget slås av eller på) samtidigt som ett kommando skickas till styrenheten. Alla komponenter finns närmare beskrivna i bilaga 1 och hur de är anslutna till varandra illustreras i bilaga A1. Figur 3.1 Översiktlig vy över fjärrstyrningsenheten. 3.2 Mjukvara För att kunna ta emot signaler, tolka dessa, sända ut styrkommandon samt styra lysdiod och summer, krävs förstås mjukvara i mikrokontrollern. Dess funktion är schematiskt illustrerad i figur 3.1 och beskriven nedan, medan den fullständiga assemblerkoden återfinns i bilaga A2. Konstruktion med mikrodatorer Projektgrupp 15 - Platon LIPs Dokumentansvarig: David Landén martenson+stalin@lysator.liu.se Sida 8

Platon 2003-12-09 Figur 3.2 Flödesschema för fjärrstyrningsenheten. Efter en kort initieringssekvens som konfigurerar portar och olika avbrott, väntar mikrokontrollern i en loop. Denna loop kan avbrytas av två saker: en fallande flank på insignalen från IR-detektorn eller en ändring av insignalen från tryckknappen. Nästan all signalbehandling sker således i avbrottsrutiner, men då mikrokontrollern är så pass snabb i förhållande till hur mycket data den ska behandla är detta inget problem. Konstruktion med mikrodatorer Projektgrupp 15 - Platon LIPs Dokumentansvarig: David Landén martenson+stalin@lysator.liu.se Sida 9

Platon 2003-12-09 3.2.1 Signal från IR-detektor Då användaren trycker på en knapp på fjärrkontrollen, kommer ett pulståg från IR-detektorn in till signalbehandlingsenheten. Beroende på vilken knapp användaren har tryckt på har detta pulståg olika utseende enligt tabell 3.1. Knapp Bitmönster gå framåt 00T11111 001010 gå bakåt 00T11111 001111 sväng höger 00T11111 001011 sväng vänster 00T11111 001101 stanna/filosofera 00T11111 001001 autonomt läge på/av 00T11111 110011 ljudsignal 00T11111 001000 T står för toggle-bit och ett mellanrum mellan meta- och signaldata har lagts till för tydlighet Tabell 3.1 Bitmönster för IR-signaler sedan de konverterats till digitala signaler. De elektriska signalerna genererar ett avbrott, som i sin tur startar en timer (i subrutinen IRKOM) och konfigurerar mikrokontrollern att lyssna efter denna timers avbrott. Ungefär en åttondel in i perioden för nästkommande bit hos den inkommande signalen ger den satta timern ett avbrott, och dess avbrottsrutin (TMRAVB) börjar exekvera. Denna bestämmer först med hjälp av två inre räknare, en för metadata och en för signaldata, vilket av dessa den inkommande biten hör till och lagrar signalens värde i korresponderande register. Därefter kollar den om det var den sista biten i signalen som just mottogs, i vilket fall den anropar en subrutin som kollar om signalen är giltig (SIGKOLL) och i så fall skickar den om roboten inte är i autonomt läge med hjälp av en annan subrutin (SKICKA). I annat fall sätter den om timern för att generera ett nytt avbrott då nästa bit ligger på ingången. En signal bedöms som giltig om dess metadata är korrekt och dess signaldata motsvarar koden för en knapp som mikrokontrollern lyssnar efter. Metadata är korrekt om det består av i tur och ordning två nollor som är synkbitar, en togglebit med godtyckligt värde och till sist fem ettor, allt enligt fjärrkontrollens inställda protokoll (se bilaga 1). De signaldata som mikrokontrollern anser giltiga utgörs av de sex sista bitarna i tabell 3.1, det vill säga de knappspecifika koderna för de knappar som används för att ange gå framåt, gå bakåt, sväng höger, sväng vänster, stanna, autonomt läge på/av och ljudsignal. Då en signal som mottagits från IR-detektorn bedömts som giltig, skickar fjärrstyrningenheten signaler till styrenheten, dioden och summern enligt tabell 3.2. Konstruktion med mikrodatorer Projektgrupp 15 - Platon LIPs Dokumentansvarig: David Landén martenson+stalin@lysator.liu.se Sida 10

Platon 2003-12-09 Användarkommando Autonomt läge på Åtgärd Autonomt läge av gå framåt ingen skicka 001 till styrenheten gå bakåt ingen skicka 010 till styrenheten sväng höger ingen skicka 011 till styrenheten sväng vänster ingen skicka 100 till styrenheten stanna/filosofera ingen skicka 101 till styrenheten autonomt läge på/av byt till tillstånd autonomt läge av släck lysdiod skicka 000 till styrenheten byt till tillstånd autonomt läge på tänd lysdiod skicka 000 till styrenheten ljudsignal tuta! (signal till summern) tuta! (signal till summern) Tabell 3.2 Kommandon med bitmönster från fjärrstyrningsenheten. De åtgärder som mikrokontrollern utför kommer enligt ovanstående tabell att vara olika beroende på vilket tillstånd roboten befinner sig i (autonomt läge på eller av) och vilket kommando det är frågan om. Eftersom autonomt läge enbart kan slås på och av via fjärrstyrningsenheten har denna en inre tillståndsvariabel, onoff i registret statreg, som alltid berättar om roboten befinner sig i autonomt läge eller inte. Denna variabel används då signalbehandlingsenheten ska bestämma vad som ska skickas: om roboten är autonom ska enbart kommandona autonomt läge på/av samt tuta göra att ett kommando skickas, medan alla giltiga signaler gör att ett kommando skickas till antingen styrenheten eller tutan då autonomt läge är avslaget. 3.2.2 Signal från tryckknapp Den tryckknapp som finns monterad på virkortet har samma funktion som knappen autonomt läge på/av på fjärrkontrollen. Robotens autonoma läge kan således stängas av via fjärrkontrollen för att sedan sättas på med tryckknappen, och vice versa. Då tryckknappen trycks ner genereras ett avbrott, som tas om hand i en avbrottsrutin (TRYCKAVB). Denna gör precis samma sak som rutinen SIGKOLL då insignalen från IR-detektorn kodat för autonomt läge på/av, det vill säga släcker eller tänder lysdioden, togglar det inre tillståndet och skickar kommandot autonomt läge på/av till styrenheten. 3.3 Kommunikation 3.3.1 Informationsöverföring inom fjärrstyrningsenheten Mellan fjärrkontroll och IR-mottagare sker överföring av data med hjälp av IRsignaler och mellan IR-mottagare och signalbehandlingsenhet finns enkla kopplingstrådar. De IR-signaler som, sedan de konverterats till elektriska Konstruktion med mikrodatorer Projektgrupp 15 - Platon LIPs Dokumentansvarig: David Landén martenson+stalin@lysator.liu.se Sida 11

Platon 2003-12-09 signaler av IR-detektorn, bedöms som giltiga av signalbehandlingsenheten finns i tabell 3.1. Också tryckknapp, diod, samt summer är anslutna till signalbehandlingsenheten på enklast möjliga sätt direkt till ett ben på signalbehandlingsenheten. 3.3.2 Gränssnitt mot andra enheter Fjärrstyrningsenheten kommunicerar enkelriktat med styrenheten genom virade kopplingstrådar. Informationsöverföringen består av fyra bitar, där tre av dessa utgör en binär kodning för sex olika kommandon som användaren kan ge roboten via fjärrkontrollen enligt tabell 3.2. Då fjärrenheten mottagit en signal från användaren, läggs aktuellt kommando på tre trådar till styrenheten, och precis därefter ges en strobe på den fjärde tråden. Stroben genererar ett avbrott i styrenheten, som då läser av de tre andra trådarna. Dessa tre trådar behåller sitt värde mellan det att två kommandon skickas, men då ingen ny strobe ges kommer inte styrenheten att läsa av dem och deras värde är således ointressant. Pinnummer för de tre informationsbitarna och stroben återfinns i bilaga A1. 3.4 Störningar I vanliga miljöer finns IR-ljus som ibland genererar en puls från IR-detektorn. Denna puls sätter igång signalavkodningen i fjärrstyrningsenheten precis som en giltig signal från fjärrkontrollen, men sannolikheten är mycket låg att en störning ska ha samma värden som en giltig signal vid samtliga tider då signalen avläses. Sannolikheten finns dock, och därför skickar aldrig fjärrstyrningsenheten iväg något kommando till styrenheten såvida den inte tagit emot samma signal från IR-detektorn två gånger i rad. Då varje knapptryckning på fjärrkontrollen oftast genererar fler än tre upprepningar av knappens IR-signal, påverkar inte detta handhavandet av fjärrkontrollen utan är bara en extra felkontroll. Även om mikrokontrollerna inte kommer att skicka några signaler till styrenheten, sin diod eller sin tuta på grund av störningar, leder dessa dock till att mikrokontrollern sätter igång inläsningen av en signal och läser in tretton bitar. Detta gör att användaren ibland måste upprepa sin knapptryckning för att roboten ska reagera i en miljö med mycket störningar. 4 Styrenhet 4.1 Inledande beskrivning av styrenheten Styrenhetens uppgift är att ta emot signaler från fjärrstyrningsenheten samt sensorenheten och därefter bestämma hur roboten ska gå och röra benen på ett sådant sätt att roboten förflyttar sig på önskat sätt. Enheten kan befinna sig i fjärrstyrt eller Konstruktion med mikrodatorer Projektgrupp 15 - Platon LIPs Dokumentansvarig: David Landén martenson+stalin@lysator.liu.se Sida 12

Platon 2003-12-09 autonomt läge och läser då information från fjärrstyrningsenheten respektive sensorenheten. För att få en enkel och tydlig uppdelning inom modulen används två kretsar. En, kallad steglogik, som genom tre servon kontrollerar benens rörelser och en, kallad styrlogik, som hanterar vägval samt kommunikation med de andra modulerna. Uppdelningen bör framgå tydligt ur figur 4.1. Fjärrstyr Styrlogik Sensor Steglogik Servo 1 Servo 2 Servo 3 Ben VF, VB Ben VM, HM Ben HF, HB Figur 4.1 Interface mellan de olika delarna av styrenheten. VF, HM står för Vänster Fram, Höger Mitten och så vidare. 4.2 Mjukvara 4.2.1 Styrlogik Styrenheten kan befinna sig i två olika lägen autonomt eller fjärrstyrt. Mjukvaran är uppbyggd av en loop enligt figur 4.2. En gång i varje varv i denna loop kontrolleras vilket av lägena enheten befinner sig i. Konstruktion med mikrodatorer Projektgrupp 15 - Platon LIPs Dokumentansvarig: David Landén martenson+stalin@lysator.liu.se Sida 13

Platon 2003-12-09 Figur 4.2 Flödesschema över styrenheten (se tabell 4.4 för förklaring av signalerna A1 och A2). Då styrenheten befinner sig i fjärrstyrt läge skickas det kommando som läses in från fjärrstyrningsenheten vidare till steglogiken som sedan gör att roboten går på motsvarande sätt. Då styrenheten befinner sig i autonomt läge läses signaler från sensorenheten. Dessa signaler kan vara av tre typer: ingen korrigering behövs korrigering behövs korsning hittad Då ingen korrigering behövs fortsätter roboten rakt fram. Om korrigering behövs utförs denna. Korrigeringen kan vara av två olika typer enligt figur 4.3 och enligt sväng höger sväng vänster Konstruktion med mikrodatorer Projektgrupp 15 - Platon LIPs Dokumentansvarig: David Landén martenson+stalin@lysator.liu.se Sida 14

Platon 2003-12-09 Figur 4.3 Förklaring av riktningskorrigeringarna: höger/vänster. Då korsning hittats kommer sensorenheten senare även skicka signaler om vilken typ av korsning det är. Mer om detta i avsnitt 4.3.2.2. De olika korsningstyperna återfinns i figur 4.4. Figur 4.4 Sju korsningstyper. Den algoritm med vilken roboten autonomt ska ta sig genom labyrinten är mycket enkel. Roboten följer alltid labyrintens högerkant, vilket betyder att den förr eller senare alltid kommer till målet. Tabellen nedan visar vilken åtgärd som vidtas vid de olika typerna av korsningar för att åstadkomma denna algoritm. Korsningstyp vänstersväng högersväng T-korsning framåt-höger korsning framåt-vänster korsning återvändsgränd fyrvägskorsning mål Åtgärd sväng vänster sväng höger sväng höger sväng höger gå rakt fram vänd 180 o sväng höger stanna Tabell 4.1 Åtgärder vid de åtta olika korsningstyperna. Konstruktion med mikrodatorer Projektgrupp 15 - Platon LIPs Dokumentansvarig: David Landén martenson+stalin@lysator.liu.se Sida 15

Platon 2003-12-09 4.2.2 Steglogik Steglogiken tar emot signaler från styrlogiken och skickar sedan ut pulsbreddsmodulerande signaler, PWM-signaler, till de tre servona som i sin tur får benen att röra på sig på motsvarande sätt. Steglogiken är programmerad att utföra 11 olika rörelser enligt tabell 4.2. Rörelse Används i läge Kodning stanna fjärr/auto 0000 gå framåt fjärr/auto 0001 gå bakåt fjärr 0010 sväng vänster fjärr 0011 sväng höger fjärr 0100 snurra vänster 0101 parallellförflyttning höger auto 0110 parallellförflyttning vänster auto 0111 snurra höger 1000 snurra 90 o höger auto 1001 snurra 90 o vänster auto 1010 Tabell 4.2 Steglogikens olika rörelser. De rörelser som inte används av någon modul är endera till för testsyfte eller används för att utföra de andra rörelserna. Dessa förflyttningar använder sig i sin tur av följande sex subrutiner: Subrutin höger upp vänster upp höger fram vänster fram höger bak vänster bak Beskrivning höger sida av roboten pressas upp från marken vänster sida av roboten pressas upp från marken både det främre och det bakre benet på höger sida flyttas till sitt främre läge. både det främre och det bakre benet på vänster sida flyttas till sitt främre läge båda benen på höger sida flyttas bak båda benen på vänster sida flyttas bak Tabell 4.3 Steglogikens sex subrutiner. Tack vare denna abstraktion fås lätt en bra överblick över koden och det är lätt att lägga till nya rörelsemönster. Servona fungerar på så sätt att en pulsbreddsmodulerad signal med perioden 20 ms och pulslängd mellan 0,5 och 2,5 ms anger servots läge. Förflyttning mellan ändlägena motsvarar en vridning av servot på ungefär 180 o. För att Konstruktion med mikrodatorer Projektgrupp 15 - Platon LIPs Dokumentansvarig: David Landén martenson+stalin@lysator.liu.se Sida 16

Platon 2003-12-09 ställa servot i ena ändläget måste alltså en 0,5 ms lång puls skickas upprepade gånger med periodtiden 20 ms, enligt figur 4.5. Figur 4.5 Servots läge beroende på den pulsbreddsmodulerade signalen. Då det räcker att roboten kan flytta benen mellan de båda ändlägena kodar vi PWM-signalen så att den endast kan ha två diskreta pulslängder, motsvarande de båda ändlägena. I kretsen använder vi två räknare som räknar upp från 0 till 255. De båda räknarna genererar avbrott vid något värde X, samt vid maxvärdet 255. För räknare nummer 1 är X lika med 243 och för räknare 2 är det 253. På så sätt skapar vi 2 PWM-signaler, som figur 4.6 visar. Dessa signaler har de båda önskade pulslängderna och kan därmed ställa servona i de båda ändlägena. Figur 4.6 Den pulsbreddsmodulerade signalens utseende beroende på räknarens X-värde. Nu behöver vi alltså bara ange vilken av de båda PWM-signalerna som skall skickas till vilket servo. Detta gör vi genom att sätta eller nollställa tre register som svarar mot de tre servona. Dessa register ändras sedan av subrutinerna i tabell 4.3. På så sätt rör roboten på benen och kan gå. 4.3 Kommunikation 4.3.1 Informationsöverföring inom styrenheten Det inre gränssnittet i styrenheten är en enkelriktad trebitars kommunikation från styrlogiken till steglogiken. Styrlogiken skickar ständigt någon av de elva signalerna i tabell 4.2. För varje varv i steglogikens huvudloop läses signalerna in och motsvarande rörelse utförs. Konstruktion med mikrodatorer Projektgrupp 15 - Platon LIPs Dokumentansvarig: David Landén martenson+stalin@lysator.liu.se Sida 17

Platon 2003-12-09 4.3.2 Gränssnitt mot andra enheter 4.3.2.1 Fjärrstyrningsenhet styrenhet Fjärrstyrningsenheten skickar signaler till styrenheten enligt tabell 3.2. Dessa signaler läses sedan in av styrenheten på varje nedåtgående flank på den strobe som finns mellan fjärrstyrning- och styrenheten. När signalen från fjärrstyrningsenheten till styrenheten är 000 byter styrenheten mellan fjärrstyrt och autonomt läge, enligt avsnitt 4.2.1. I fjärrstyrt läge lyssnar styrenheten av alla fjärrstyrningsenhetens signaler och agerar utifrån dessa. I autonomt läge lyssnar enheten dock endast efter signalen 000 autonomt läge på/av. 4.3.2.2 Sensorenhet styrenhet Kommunikationen mellan sensorenheten och styrenheten består av två bitar från styrenheten till sensorenheten samt fyra bitar åt det motsatta hållet. Tabell 4.4 förklarar betydelsen av de olika bitarna. Bit Betydelse Riktning A1 leta efter korsning och behov av korrigering från styrenhet A2 roboten befinner sig i en korsning som ska undersökas från styrenhet B1 typ av signal som skickas 1 betyder korrigeringstyp 0 betyder korsningstyp till styrenhet B2 B5 kod för korrigeringstyp eller korsningstyp till styrenhet Tabell 4.4 Beskrivning av signalerna mellan sensorenhet och styrenhet. Kommunikationen går till så att då roboten befinner sig i en korridor sätts bit A1 hög och sensorenheten börjar leta efter korsningar eller riktningskorrigeringar. Allt enligt flödesschemat i figur 4.2. Behövs en korrigering sätts A1 låg så att sensorenheten slutar leta efter korrigeringar och korsningar. Därefter utför styrenheten den nödvändiga korrigeringen och A1 sätts åter hög. På detta sätt uppstår inte problem med att sensorenheten skickar korrigeringssignaler som beror på korrigeringen. Om sensorenheten hittar en korsning sätts även där A1 låg. Roboten går sedan ungefär 15 cm in i korsningen så att sensorenheten lättare kan avgöra vilken typ av korsning roboten står i. A2 sätts hög så att sensorenheten vet att den skall bestämma korsningstyp. När den gjort detta och styrenheten tagit emot signalen sätts A2 låg. Styrenheten förflyttar sedan roboten på det sätt som beskrivs av algoritmen i avsnitt 4.2.1. Styrenheten förflyttar även roboten ungefär 20 cm in i den korridor som ligger efter korsningen. Detta för att sensorenheten inte ska bli störd av den tidigare korsningen. Slutligen sätts A1 hög och sensorenheten börjar återigen söka efter riktningskorrigeringar och korsningar. Konstruktion med mikrodatorer Projektgrupp 15 - Platon LIPs Dokumentansvarig: David Landén martenson+stalin@lysator.liu.se Sida 18

Platon 2003-12-09 5 Sensorenhet 5.1 Inledande beskrivning av sensorenheten Sensorenhetens uppgifter är att meddela styrenheten om en ny korsning upptäckts, vilken typ av korsning det är samt om kurskorrigering behövs. Styrenheten meddelar sensorenheten vad den är intresserad av just nu, antingen korrigera och finna korsning, eller avgöra korsningstyp. Korrigeringssignaler för korrigering åt vänster och höger beräknas och skickas till styrenheten då roboten befinner sig alltför nära en vägg och signaler för korsningar beräknas då en korsning upptäckts. Utsignaler från sensorenheten är uppdelade i två grupper. Den första gruppen är typ av korsning, den andra är hitta korsning eller korrigera. Sensorenheten har tre sensorer till hjälp och en mikrodator för att samordna dem. 5.2 Mjukvara Då signalen A1 eller A2 är hög läses sensorerna av en efter en. Detta görs i en avbrottsrutin till timer1 som räknar upp sexton bitar med åtta MHz. I detta läge är mätningen på vilket markeras med att variabeln MATNING_PA har värdet 256. När alla sensorer är avlästa körs en rutin UPPD_UTV (uppdatera utvärde) denna körs också kontinuerligt av timer1 då mätningen är avstängd. Varje gång UPPD_UTV körs undersöks invärden från styrenheten och det avgörs om mätningen ska fortsätta vara på, stängas av eller kanske sättas på. Exakt hur sensorerna läses av återfinns i avsnitt 5.2.1. Varje gång rutinen UPPD_UTV körs finns alltså tre korrekta mätvärden till hands, alternativt att de inte finns om mätningen är avstängd. I det sista fallet görs bara den tidigare nämnda undersökningen sedan avslutas rutinen. Dessa tre utvärden behandlas på följande sätt. Om A1 är hög: De tre sista bitarna i en variabel (MAT_BYTE) sätts till höga respektive låga beroende på om sensorn har en vägg eller inte framför sig. Framåt betraktas ett eko med avståndet < 30 cm som en vägg, åt sidorna mätvärde < 50 cm. Sedan mappas dessa bitmönster om till en signal (korsningstyp). Denna signal skrivs sedan till utporten. Om A2 är hög: Mätvärdena undersöks efter lämpliga utsignaler efter signalernas prioritet (se avsnitt 5.3.3). Signalerna bestäms av följande krav och gränser: Korsning höger/vänster: sidorna > 50 cm åt något håll Korrigering: sidorna <15 cm och avståndet minskar, eller sidorna < 5 cm Återvändsgränd: framåt < 30 cm Konstruktion med mikrodatorer Projektgrupp 15 - Platon LIPs Dokumentansvarig: David Landén martenson+stalin@lysator.liu.se Sida 19

Platon 2003-12-09 5.2.1 Sensorer För att läsa av sensorerna används en timer (timer0) som räknar upp åtta bitar med klockans sexton MHz. När sensorn ska läsas av skickas först en triggersignal till den aktuella sensorn som ska mätas av. Medan signalen skickas loopar processorn i en loop som inte gör någonting en liten tid. Detta eftersom pulsen inte behöver vara så speciellt lång. Sedan startas timern och tidigare mätvärden nollställs. Även ett värde TID_START nollställs. När timerrutinen sedan körs kontrollerar den om signalen echo-out (se avsnitt 5.4.1) är hög. Är den hög räknas mätvärdet upp med ett steg. Variabeln till TID_START sätts också till 255 om den inte redan är det. Är signalen däremot låg antas dessa två fall vara möjliga: 1. Pulsen har inte kommit ännu. 2. Pulsen har passerat och mätningen är klar. För att särskilja dessa värden undersöks värdet av TID_START. Om TID_START har värdet 255 antas mätningen vara klar och timern stängs samt om alla mätningar från sensorerna är klara uppdateras utvärdet till styrenheten. Har TID_START värdet 0 återgår datorn till att vänta på en puls från sensorerna. Kommer ingen puls återgår datorn till att vänta. Ett problem med våra ultraljudssensorer är att de inte ger något stabilt värde. Det verkar som att de har en tendens att ge ett felaktigt mätvärde lite då och då. Detta är inte bra i vårt fall eftersom om en korsning undersöks felaktigt kommer roboten kanske inte att kunna hitta ut ur labyrinten. För att undvika detta gör vi tre mätningar per sensor i rad och beräknar medelvärdet av de två mätningar som ger närmast mätvärde. Differensen mellan mätvärdena beräknas, det finns alltså tre möjliga differenser. De två mätvärden som har lägst differens väljs och medelvärdet av dem beräknas. Denna behandling ger ett mycket stabilt mätvärde. 5.3 Gränssnitt mot andra enheter 5.3.1 Insignaler Sensorenheten har två insignaler från styrenheterna, A1 och A2. När styrenheten vill ha information om vilken typ av korsning roboten befinner sig i så sätter den signalen A2 hög. Sensorenheten läser då av sensorerna och när den sedan har fått mätvärdet från alla sensorer beräknar den vilken korsning roboten befinner sig i och sätter det som utvärde. Utvärdet kommer sedan att uppdateras kontinuerligt ända tills att signalen A2 går låg igen. Den kommer då att sätta 0 0000 som utsignal efter en kortare tid. När roboten går i en av labyrintens korridorer och styrenheten vill veta om korrigering är nödvändig eller om roboten kommit till en korsning sätts signalen A1 till hög. Roboten kommer då kontinuerligt att uppdatera utvärdet och om den upptäcker att korrigering behövs, sätta signal för detta, samma sak Konstruktion med mikrodatorer Projektgrupp 15 - Platon LIPs Dokumentansvarig: David Landén martenson+stalin@lysator.liu.se Sida 20

Platon 2003-12-09 om roboten kommer till en korsning. Signalen för korrigering försvinner då roboten står rätt i korridoren igen. 5.3.2 Utsignaler Styrenheten har en uppsättning signaler som kan skickas till styrenheten. Dessa representeras med ett bitmönster. Signalerna kan delas in i två grupper: korsningstyp korrigeringstyp eller hittad korsning. Den första biten beskriver vilken typ av signal som skickas, 0 betyder grupp ett, 1 betyder grupp två. Själva signalen representeras sedan med ett fyrabitars tal. Signalerna ur grupp ett är svar på signalen A2 från styrenheten och signaler ur grupp två svar på signalen A1. Grupp ett, som skickas då styrenheten vill undersöka vilken typ av korsning det är, finns i tabell 5.1, medan grupp två, som skickas då styrenheten vill leta efter korsning eller få signal för korrigering, åskådliggörs i tabell 5.2. Korsningstyp Bitmönster felmeddelande, okänd korsning. 0 0000 återvändsgränd 0 0001 vänsterkorsning 0 0010 högerkorsning 0 0011 T-korsning (höger-vänster korsning) 0 0100 framåt-vänster korsning 0 0101 framåt-höger korsning 0 0110 fyrvägskorsning 0 0111 Den första biten i bitmönstret betecknar grupp: 0 står för grupp ett Tabell 5.1 Korsningssignaler från sensorenheten till styrenheten. Korrigering/finn korsning Bitmönster ingen korrigering 1 0000 korrigera vänster 1 0001 korrigera höger 1 0010 hittat en korsning 1 1111 Den första biten i bitmönstret betecknar grupp: 1 står för grupp två Tabell 5.2 Korrigeringssignaler från sensorenheten till styrenheten. Konstruktion med mikrodatorer Projektgrupp 15 - Platon LIPs Dokumentansvarig: David Landén martenson+stalin@lysator.liu.se Sida 21

Platon 2003-12-09 5.3.3 Signalprioritet När sensorenheten går i en korridor och söker efter en korsning eller korrigering en situation där det både behöver skickas en korrigeringssignal och signal för korsningtyp uppstå. För att kunna hantera detta har de olika signalerna ur grupp två olika prioritet. Inträffar två situationer samtidigt väljs den signal som har högst prioritet. Prioritet: 1. Korsning funnen 2. Korrigering 3. Återvändsgränd 5.3.4 Display Eftersom sensorenheten inte ger ett lika konkret resultat som styrenheten eller fjärrstyrenheten har vi utrustat den med en display för att återge vad sensorenheten ger för utsignaler. Detta underlättar testning av roboten och kontroll av sensorenhetens resultat. Vi har därför valt att bygga in en display bestående av ett sjusegment. Detta är inkopplat med ett motstånd på 120 ohm för att begränsa strömmen samt en avkodare och tolv stycken inverterare. Signalen som avkodas är de fyra signalbitarna som kommer från sensorenheten. 5.4 Sensorer 5.4.1 Hårdvara Vårt sensorsystem består av tre ultraljudssensorer av typen SRF04, en placerad längst fram på roboten och en på vardera sida av roboten. Sensorerna har förutom en pinne för 0V/+5V även två pinnar för avläsning av sensorerna. Den ena kallas trigger-input och den andra för echo-out. För att läsa av sensorn skickar man först en kort puls till trigger-input. Sensorn skickar då i väg en puls av ultraljud som sedan reflekteras om det är något framför sensorn. Strax efter att pulsen skickas i väg sätts echo-out till hög av sensorn. Denna stannar sedan hög tills att sensorn får tillbaka ultraljudspulsen från något reflekterande objekt eller tills att mätningen gör en time-out. För att läsa av sensorerna används en åttabitars port på PIC:en. De lägsta bitarna är signalerna till triggeroutput och de höga är echo-out signalen från sensorerna. Denna port är alltså både en in- och utport. De höga bitarna input och de låga output. 5.4.2 Namngivning Sensorerna har vi namngivit med siffror. Den högra sensorn har fått nummer 1, den vänstra nummer 2 och den främre sensorn har fått nummer 3, allt enligt figur 5.1. Konstruktion med mikrodatorer Projektgrupp 15 - Platon LIPs Dokumentansvarig: David Landén martenson+stalin@lysator.liu.se Sida 22

Platon 2003-12-09 3 2 1 Figur 5.1 Placering av sensorer på roboten. 6 Användarhandledning Platon är en sexbent robot utförd i härligt gul plast. Roboten kan användas i två olika lägen ett manuellt läge, där användaren kontrollerar dess beteende med hjälp av kommandon från en fjärrkontroll, och ett autonomt läge, i vilket roboten kan söka sig igenom en labyrint på egen hand. En översiktlig vy över den fjärrkontroll som används för att styra roboten visas i figur 6.1. I tabell 6.1 ges en förklaring av de kommandoknappar som behövs för att styra Platon. Figur 6.1 Fjärrkontrollen och dess knappar (se även tabell 6.1). Knapp nr Kommando 1 autonomt läge på/av 2 VCR (sätter fjärrkontrollen i rätt läge) 3 sväng vänster 4 gå framåt 5 sväng höger 6 stanna/filosofera 7 gå bakåt 8 Ljudsignal Tabell 6.1 Förklaring av knappar och kommandon (se även figur 6.1). Innan Platon startas, bör man förvissa sig om att fjärrkontrollen befinner sig i rätt läge genom att trycka på knappen VCR på fjärrkontrollen. Sedan startas roboten med hjälp av skjutomkopplaren längst fram på virkortet på robotens rygg. Om allting står rätt till tänds då Konstruktion med mikrodatorer Projektgrupp 15 - Platon LIPs Dokumentansvarig: David Landén martenson+stalin@lysator.liu.se Sida 23

Platon 2003-12-09 en liten röd diod strax intill omkopplaren. Skjutomkopplaren och dioden är markerade i figur 6.2 nedan. Figur 6.2 Platon sedd uppifrån. Roboten styrs i sitt manuella läge genom fjärrkontrollen. Genom knapptryckningar kan man då styra roboten. När man tryckt ner till exempel gå framåt en gång, kommer sedan roboten att fortsätta gå framåt tills ett annat kommando, till exempel stanna eller sväng vänster ges. Undantaget från denna regel är kommandot ljudsignal. När Platon mottar detta kommando, ger han en kort ljudsignal. Detta kommando påverkar inte robotens rörelser på något sätt. I vissa miljöer kan det finnas mycket störningar från till exempel lysrör. Då kan det vara svårt att få Platon att reagera på kommandon. Det lönar sig då att vara envis och trycka in rätt knapp ett antal gånger tills kommandot går fram. Knappen kan även hålls in kontinuerligt. Vill man att Platon ska söka sig igenom en labyrint, bör man först se till att han står rakt framför labyrintens ingång. Därefter väljer man autonomt läge, antingen med hjälp av knappen autonomt läge på/av på fjärrkontrollen eller med den knapp på roboten som har motsvarande funktion. När autonomt läge är valt, lyser den stora röda dioden på robotens virkort. Knappen och dioden finns utmärkta i figur 6.2. Medan roboten befinner sig i autonomt läge reagerar den endast på kommandona ljudsignal och autonomt läge av från fjärrkontrollen. För att åter välja manuellt läge, trycker man bara ännu en gång på knappen på fjärrkontrollen eller roboten. Den stora dioden kommer då att släckas. 7 Referenser Designspecifikation, Landén, David, 2003. Kravspecifikation, Rees, Johan, 2003. Systemskiss, Fåk, Pia, 2003. Konstruktion med mikrodatorer Projektgrupp 15 - Platon LIPs Dokumentansvarig: David Landén martenson+stalin@lysator.liu.se Sida 24

Bilaga 1 Hårdvarulista Fjärrstyrningsenhet fjärr1. en generell fjärrkontroll av modell BW0368 Remotec inställd på det Sonyprotokoll som specificeras i den tekniska beskrivningen av fjärrkontrollen fjärr2. en IR-mottagardiod från Everlight av modell IRM-86901S fjärr3. en mikrokontroller från Microchip av modell PIC16F870 med tillhörande fördröjd reset som består av två kondensatorer och en resistor. fjärr4. en tryckknapp fjärr5. en röd lysdiod med tillhörande motstånd fjärr6. en summer fjärr7. en avstudsarkrets till tryckknappen 74LS00 Sensorenhet sensor1. ultraljudssensor från Devantech av modell SRF04 sensor2. sensor3. sensor4. en mikrokontroller från Microchip av modell PIC16F870 sensor5. ett sjusegment från Everlight av typen ELS-515EWA sensor6. en BCD till sjusegment avkodare 74LS47 sensor7. två 6x inverterare 74LS04 sensor8. ett motstånd 150 ohm Styrenhet styr1. styr2. styr3. en AVR Atmel Mega16 till styrlogik, en AVR Atmel Mega16 till steglogik samt ett robotskelett med förmonterade servon och ben. Samtliga enheter kommunicerar med varandra med hjälp av rättframma tråddragningar. Samma sorts informationsöverföring används även inom enheterna då olika komponenter anslutits till varandra, så när som på fjärrkontrollen och IR-detektorn som naturligtvis skickar och tar emot signaler i form av IR-ljus. I bilagorna A1, B1 och C1 visas hur de olika enheternas komponenter är anslutna till varandra.

Bilaga A1 Kretsschema för fjärrstyrningsenheten

Bilaga B1 Kretsschema för styrenheten Styrkommando från fjärrenhet Styrkommando till sensorenhet A1 A2 Strobe från fjärrenhet Styr1: styrlogik 15 16 17 18 40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 19 22 20 21 Styrkommando från sensorenhet B5 B4 B3 B2 B1 Styr2: steglogik 15 16 17 18 40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 19 22 20 21 Styr3: servon

Bilaga C1 Kretsschema för sensorenheten

Bilaga A2 Assemblerkod för fjärrstyrningsenheten ************************************************************** PROGRAM fjarr Version 1.0 Skapare Pia Fåk och Jessica Heyman, grupp15 Skapad 2003-11-07 Ändringar 2003-11-10 CLRF PORTA får porta att fungera 2003-11-11 tutkod tillagd 2003-11-12 skickar 000 på porta även vid autonomt läge av 2003-11-27 skickar stoppkod till styrenhet vid uppstart ************************************************************** Programmet ska ta emot signaler från en IR-diod och skicka data till styrmodulen, samt sköta om tändning och släckning av diod, tutning, signaler från tryckknapp m.m. Version 1.0: programvaran används i färdig robot Programmet fungerar under förutsättning att de IR-signaler som inkommer till enheten till någorlunda stor del består en viss delmängd av signalerna i RC5-protokollet TITLE "fjarr" LIST P=16F870, F=INHX8M #INCLUDE "P16F870.INC" CONFIG _XT_OSC & _WDT_OFF & _PWRTE_ON ************************************************************** Definition av konstanter ************************************************************** Konstanter som motsvarar specifika bitar i registren KNAPP EQU 7 bitar i ut- och ingångar IRDET EQU 0 STYR0 EQU 0 STYR1 EQU 1 STYR2 EQU 2 STROBE EQU 3 TUTA EQU 1 DIOD EQU 5 ONOFF EQU 0 inre tillstånd SECOND EQU 1 vill vi ha en likadan signal eller ej? TOGG EQU 5 förra togglebiten Egendefinierade registernamn STATREG EQU 0x20 autonomt läge av/på lagras här COMMAND EQU 0x21 här bor det som ev. ska skickas COUNTM EQU 0x22 räknar hur många metabitar vi fått COUNTS EQU 0x23 räknar hur många signalbitar vi fått SIGNAL EQU 0x24 viktig insignal från IR-detektorn META EQU 0x25 register för intstoppning av metadata LASTSIG EQU 0x26 den förra signalen ligger här LJUD EQU 0x27 här lägger vi ett ljud COUNTL EQU 0x28 räknar hur många tut vi tutat signalbitsmönster STANNA EQU b'00001001' FRAM EQU b'00001010' BAK EQU b'00001111' VANSTER EQU b'00001101' HOGER EQU b'00001011' TUT EQU b'00001000' AUTON EQU b'00110011'

************************************************************** Program-yta ************************************************************** Start av program-yta ORG 0x00 GOTO MAIN Gå till huvudprogram ORG 0x04 GOTO ISR Gå till avbrottsrutin ************************************************************** Avbrottsrutiner IRKOM TMRAVB TMR1AVB TRYCKAVB som använder SKICKA och SIGKOLL ************************************************************** -------------------------------------------------------------- Subrutin IRKOM anropas när en IR-signal först börjar komma in till processorn Sätter igång en timer för att börja sampla signalen, stänger av vidare avbrott pga av fallande flanker på RB0 IRKOM BCF STATUS,RP0 byt till bank 0 BCF STATUS,RP1 bank 0, ju. BCF INTCON,INTE INTE några fler RB0-avbrott MOVLW b'00000000' 0 = lite mindre än 5T TMR0 till TMR0! BCF INTCON,T0IF cleara TMR0-avbrottsflaggan så att inget gammal skräp avbryter oss BSF INTCON,T0IE nu börjar vi lyssna efter TMR0-avbrott BCF INTCON,INTF cleara RB0-avbrottsflagga RETURN -------------------------------------------------------------- -------------------------------------------------------------- Subrutin TMR1AVB Sköter om tutningen. ge 1 eller 0 till summer beroende på ljudregistrets LSB stäng av vidare TMR1-avbrott om ljudsignal har getts färdigt TMR1AVB bestäm ljud, LSB i LJUD ger 1=tut, 0=inget BCF PIR1,TMR1IF RRF LJUD,1 rotera ljudsignal BTFSS STATUS,C roterat ut en etta? GOTO NOLLA ja, en etta, tuta etta BSF PORTB,TUTA etta => tut! GOTO DONE NOLLA BCF PORTB,TUTA nolla, tuta inte DONE BCF STATUS,C nolla carryn RRF COUNTL,1 rotera räknaren, roterar in 0 BTFSS STATUS,C färdigtutad? RETURN ej färdigtutad, bara att fortsätta färdigtutat, stäng av timer1 BCF PORTB,TUTA stäng av tutan, för nu är den färdig BCF T1CON,TMR1ON stäng av TMR1, färdiguttimrad! BSF STATUS,RP0 bank1 BCF PIE1,TMR1IE stäng av TMR1-avbrott också, för säkerhets skull BCF STATUS,RP1 bank0 RETURN -------------------------------------------------------------- -------------------------------------------------------------- Subrutin TMRAVB Sköter det mesta av inläsningen av en IR-signal Rutinen läser av RB0, och lagrar undan värdet och räknar upp hur många gånger det skett. Är det metadata som kommer, läggs det i registret META, annars lägger man det i DATA. Har vi samplat signalen 14 ggr är vi färdiga. Då

stänger vi av TMR0 och kollar om vi kanske har något att skicka till styrenheten. Annars sätts timern igen och förloppet kommer att upprepas. IN: RB0 - signalen seriellt UT: skickar via subrutin SKICKA kommando till styrenheten. TMRAVB BCF STATUS,RP0 Byt bank! BCF STATUS,RP1 Bank 0. BCF STATUS,C se till att carryn är 0. RRF COUNTM,0 låtsasuppdatera räknare BTFSS STATUS,C kolla vad carryn blev GOTO METADAT det är ju metadata som kommer nu! SDATA BTFSS PORTB,IRDET är det månne en etta vi har? GOTO INTEOR2 nä, då ORAR vi inte. COUNTS,0 Flytta countervärdet till W IORWF SIGNAL,1 ORA W med SIGNAL INTEOR2 BCF STATUS,C carryn måste vara noll RRF COUNTS,1 ROTERA! BTFSS STATUS,C colla carryn! GOTO SCHLUT inte färdigmottagen signal än SIGREDY CALL SIGKOLL signal färdigmottagen, kolla om vi tycker om den CLRF META nolla META för nu har den använts färdigt CLRF SIGNAL nolla SIGNAL för den är lika färdig som META MOVLW b'10000000' Metaräknaren ska förstås vara åtta, COUNTM på ett mystiskt vis. MOVLW b'00100000' Signalräknaren ska förstås vara fem, COUNTS på ett mystiskt vis, den med. BCF INTCON,T0IE stäng av vidare TMR0-interrupt BCF INTCON,INTF cleara RB0-avbrottsflaggan BSF INTCON,INTE sätt på vidare RB0-avbrott GOTO SCHLUT METADAT RRF COUNTM,1 uppdatera räknaren på riktigt BTFSS PORTB,IRDET kolla om vi har en etta att stoppa in GOTO SCHLUT COUNTM,0 flytta countervärdet till W IORWF META,1 ORA W med META. SCHLUT MOVLW d'36' 36! TMR0 till TMR0! BCF INTCON,T0IF cleara flaggan RETURN -------------------------------------------------------------- -------------------------------------------------------------- Subrutin TRYCKAVB Anropas vid tryck på tryckknappen. När man släpper upp knappen kommer ett "extra" avbrott, som ska ignoreras Om riktigt avbrott: toggla autonomt läge på/av i STATREG, Om ON: tänd diod, skriv i COMMAND, skicka. Om OFF: släck diod. TRYCKAVB BCF STATUS,RP0 byt till bank 0 BCF STATUS,RP1 BTFSC PORTB,KNAPP om biten är ett, är avbrottet falskt GOTO SLUT avbrottet falskt, gör inget mer! BTFSS STATREG,0 kolla hälsan GOTO ON Den var satt och tjock! stäng av autonomt läge OFF BCF PORTA,DIOD släck dioden! BCF STATREG,ONOFF byt den mentala hälsan, nu är vi oautonoma MOVLW b'00000000' skriv i command-reg! COMMAND gör det på riktigt CALL SKICKA skicka. OBS! görs efter att vi stängt av autonomt läge GOTO SLUT sätt på autonomt läge ON BSF PORTA,DIOD tänd dioden! MOVLW b'00000000' skriv i command-reg! COMMAND gör det på riktigt CALL SKICKA skicka. OBS! görs innan vi sätter på autonomt läge BSF STATREG,ONOFF nu är vi autonoma SLUT BCF INTCON,RBIF cleara tryckavbrottsflaggan

BCF INTCON,T0IF cleara TMR0-avbrottsflaggan RETURN -------------------------------------------------------------- -------------------------------------------------------------- Subrutin SIGKOLL Tittar på mottaget signaldata och kontrollerar om det är vettigt, dvs metadata stämmer och signalen är någon vi lyssnar efter. Är signalen vettig, läggs data i registret COMMAND, varpå detta skickas mha SKICKA-rutinen. Utom om det är tutkommandot som kommer in, då startas tutningen. Är signalen inte vettig, skrotas den bums. SIGKOLL META,0 lägg META i W ANDLW b'11011111' Cleara togglebiten SUBLW b'00011111' "jämför" BTFSS STATUS,Z var de lika? GOTO SKROT nä, då skrotar vi värdet BRA BTFSS META,TOGG TOGGLE tjock? GOTO SMAL MOVLW b'10000000' Tal att ora med IORWF SIGNAL,1 ORA in den där ettan SMAL SIGNAL,0 stoppa SIGNAL i W SUBWF LASTSIG,0 "jämför" BTFSC STATUS,Z feeeeett GOTO KOLLIK Vi har just haft en sån! Kolla om de ska vara lika SIGNAL,0 lägg den i W igen. LASTSIG Stoppa W (SIGNAL) i LASTSIG för framtida bruk BSF STATREG,SECOND Vi vill att nästa signal som kommer ska se likadan ut GOTO SKROT Vi är inte intresserade av en signal som inte har kommit en gång redan KOLLIK BTFSS STATREG,SECOND är det så att signalerna ska vara lika? GOTO SKROT det ska de inte, så vi slänger signalen BCF STATREG,SECOND nu ska signalerna inte vara lika längre! HITTA BCF SIGNAL,7 återställ signal (ta bort togglebiten) MOVLW STANNA Stoppa in testvärde i W SUBWF SIGNAL,0 "jämför" BTFSC STATUS,Z lika? GOTO STOP men gör stop då! MOVLW FRAM Stoppa in testvärde i W SUBWF SIGNAL,0 "jämför" BTFSC STATUS,Z lika? GOTO FORWARD men gör forward då! MOVLW BAK Stoppa in testvärde i W SUBWF SIGNAL,0 "jämför" BTFSC STATUS,Z lika? GOTO BACK men gör back då! MOVLW VANSTER Stoppa in testvärde i W SUBWF SIGNAL,0 "jämför" BTFSC STATUS,Z lika? GOTO LEFT men gör left då! MOVLW HOGER Stoppa in testvärde i W SUBWF SIGNAL,0 "jämför" BTFSC STATUS,Z lika? GOTO RIGHT men gör right då! MOVLW TUT Stoppa in testvärde i W SUBWF SIGNAL,0 "jämför" BTFSC STATUS,Z lika? GOTO HORN men gör horn då! MOVLW AUTON Stoppa in testvärde i W SUBWF SIGNAL,0 "jämför" BTFSC STATUS,Z lika? GOTO INDEPEN men gör indepen då! GOTO SKROT STOP MOVLW b'00000101' stoppkommandot in i W COMMAND in i COMMAND CALL SKICKA

RETURN FORWARD MOVLW b'00000001' stoppkommandot in i W COMMAND in i COMMAND CALL SKICKA RETURN BACK MOVLW b'00000010' stoppkommandot in i W COMMAND in i COMMAND CALL SKICKA RETURN LEFT MOVLW b'00000100' stoppkommandot in i W COMMAND in i COMMAND CALL SKICKA RETURN RIGHT MOVLW b'00000011' stoppkommandot in i W COMMAND in i COMMAND CALL SKICKA RETURN HORN MOVLW b'11111011' ljudsignal består av 6 tut LJUD in i ljudregistret MOVLW b'10000000' räknare COUNTL in i ljudräknaren sätt timer att timra ut om 0,26 s CLRF TMR1L nollställ TMR1 CLRF TMR1H nollställ hela TMR1 MOVLW b'00000001' prescale=4, TMR1=on T1CON in i kontrollregistret BCF PIR1,TMR1IF cleara TMR1-avbrottsflaggan BSF INTCON,PEIE enabla perifera avbrott (TMR1) BSF STATUS,RP0 bank1 MOVLW b'00000001' enabla TMR1-avbrott på riktigt PIE1 in i kontrollregistret, oxå. BCF STATUS,RP0 bank0 RETURN INDEPEN BTFSC STATREG,ONOFF autonomt läge på? GOTO PA japps, gå till PA för att stänga av sätt på autonomt läge AV BSF PORTA,DIOD tänd dioden, för vi var av MOVLW b'00000000' autonomt läge på in i W COMMAND in i COMMAND CALL SKICKA skicka iväg också BSF STATREG,ONOFF sätt på. OBS! skicka autonomt PÅ först! RETURN stäng av autonomt läge PA BCF PORTA,DIOD släck dioden BCF STATREG,ONOFF stäng av autonomt läge, för vi var på! MOVLW b'00000000' autonomt läge på in i W COMMAND in i COMMAND CALL SKICKA skicka iväg också. OBS! skicka autonomt av efteråt! RETURN SKROT RETURN nä, precis. Inget var det. -------------------------------------------------------------- -------------------------------------------------------------- Subrutin SKICKA Lägg ut det som finns i COMMAND på STYR0-2 för att inte ändra värdena som ligger i PORTA i onödan, vidtas visst krångel SKICKA BTFSC STATREG,ONOFF om vi är autonoma, skicka ej GOTO NEJ vi var autonoma och struntar i att lyssna JA MOVLW b'11111000' stoppa en AND-vektor i W ANDWF PORTA,1 se till att det bor nollor på rätt postioner i PORTA COMMAND,0 stoppa värdet i COMMAND i W IORWF PORTA,1 skriv rätt värden till PORTA BCF PORTA,STROBE Stroba! NOP här har vi en massa NOPar