Digitala Projekt. Ljuskänslig riktningsautomatik. Rasmus Persson 890510-3571 - dt08rp9@student.lth.se Max Åkesson 880214-3936 - dt07ma4@student.lth.



Relevanta dokument
Växtviskaren EITF11 Digitala projekt VT15, I12

Effektpedal för elgitarr

Larmcentral. Digitala Projekt. Cecilia Olsson & Erika Björck Handledare: Bertil Lindvall LUNDS TEKNISKA HÖGSKOLA

Digitala Projekt(EITF40) - Larm

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

Digitala Projekt(EITF40) - Larm

Pulsmätare med varningsindikatorer

Digitala Projekt (EITF11)

Programmera en NXT Robot

DIGITALA PROJEKT Väderstation

Individuellt Mjukvaruutvecklingsprojekt

Digitala Projekt (EITF11) Hemlarm

Efter att du har installerat ExyPlus Office med tillhörande kartpaket börjar du med att göra följande inställningar:

EITF11. WormFight. Axel Eriksson, Felix Geuken Handledare: Bertil Lindvall EITF11

Guitar Tuner EITF11 Digitala Projekt, Projektrapport Elektro- och informationsteknik

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

Rapport. Fyra i rad-spel. Rapport Digitala Projekt EITF11 Grupp 9 Emma Rasmusson & Louise Ragnarsson Handledare: Bertil Lindvall

Thunder s Truck projektrapport

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

Statsbidrag för läxhjälp till huvudmän 2016

Du ska nu skapa ett litet program som skriver ut Hello World.

Bilen som inte kan krocka

Bruksanvisning - Spisvakt Prefi 2.3

Lunds Tekniska Högskola Elektro- och informationsteknik Digitala projekt (EITF11)

Dash and Dot. Svårighetsgraden bestämmer du själv genom att välja någon av av de 5 appar som är kopplade till Dash & Dot.

High Core Remote Car X8000 Cool

Fullför installation av ELIQ

[ÖVNINGSBANK] Sollentuna FK. Expressbollen

Feeding Daisy. EITF11 Lunds Tekniska Högskola. Grupp 12: Pontus Akervall Louise Landare Anton Schölin. En automatisk blomvattnare

Manual. Mini. En Joystickmus för styrning av datorer Point-it! Mini USB Point-it! Mini USB Kula

Temperaturmätare med lagringsfunktion DIGITALA PROJEKT EITF11 GRUPP 14, ERIK ENFORS, LUDWIG ROSENDAL, CARL MIKAEL WIDMAN

Design by. Manual Jossan.exe. Manual. till programmet. Jossan.exe. E-post:

Praktisk programmering

FRÅN A TILL Ö LäraMera Ab / och Allemansdata Ab / FRÅN A TILL Ö

Tentamen i Programmering grundkurs och Programmering C

Utveckla arbetsmiljö och verksamhet genom samverkan

ETSA01 Digitala Projekt (I) VT- 13. Projektarbete AC Handledare Bertil Lindvall

Skriva B gammalt nationellt prov

EITF40 - RFID-terminal. Joakim Marculescu (dt08jm6), Eric Johansson (dt08ej6)

Hävarmen. Peter Kock

Vad är det och hur definierar vi en Biblioteksfunktioner (math) Top-down-programmering lokala globala variabler Arrays som in-parametrar

Enkät i förskoleklass

KORTFATTADE REGLER MED VETT OCH ETIKETT I MATCHSPEL FÖR MOGEN UNGDOM

Lathund, procent med bråk, åk 8

Hur du arbetar med VFU-portfölj i Mondo. en lathund för student

Lunds Tekniska Högskola EITF11 Digitala projekt. Bandspelaren

Examensarbete är det en kurs? Inst. för Samhällsbyggnad 2009

Avsikt På ett lekfullt sätt färdighetsträna, utveckla elevers känsla för hur vårt talsystem är uppbyggt samt hitta mönster som uppkommer.

MINICODE CL INLÄGGNING AV PROGRAMMERINGSKOD OCH INITIERING

En lönerevision görs i flera steg; Initiering - Lönerevision Attestering - Skapa förmån - Uppdatera lön.

Administration Excelimport

Vi skall skriva uppsats

Användarmanual för kod- proxläsare MAX

Gissa det hemliga talet

Rallylydnad Nybörjarklass

Administratör Rollbeskrivning och stödjande instruktion. e-tjänst för ansökan om statsbidrag Senast uppdaterad:

ELEV- HANDLEDNING (Ansökan via webben)

DOP-matematik Copyright Tord Persson. Bråktal Läs av vilka tal på tallinjen, som pilarna pekar på. Uppgift nr

Sveriges Trafikskolors Riksförbund Film om körkort för nysvenskar Speakertext - Svensk

Virkade tofflor. Storlek & By: Pratamedrut. pratamedrut.se/blog/virkade tofflor 1

Modul 6: Integraler och tillämpningar

INSTITUTIONEN FÖR FYSIK OCH ASTRONOMI. Mekanik baskurs, Laboration 1. Bestäm tyngdaccelerationen på tre olika sätt

Två konstiga klockor

DIGITALA PROJEKT (EITF40) Fartmätare

Projektrapport - Roterande digital LED-klocka

Menys webbaserade kurser manual för kursdeltagare. Utbildningsplattform: Fronter

BÅGSKYTTEFÖRBUNDET MEMBER OF SVERIGES RIKSIDROTTSFÖRBUND AND FÉDERATION INTERNATIONALE DE TIR A L ARC

Webb-bidrag. Sök bidrag på webben Gäller från

Gemensam byggprocess, GBP

Föräldrar i Skola24. Schema

Boken om Teknik. Boken om Teknik är en grundbok i Teknik för åk 4 6.

ANVÄNDARHANDLEDNING FÖR

Manual Gamla Akka-plattan

Att komma igång. Vad är ett program? Kompilerande-Interpreterande Programmeringsmiljö Hello World! Att programmera och ett enkelt program

Lathund för överföring av rapporter och ljudfiler

TIMREDOVISNINGSSYSTEM

Digitala projekt Linjeföljande bil

Dina inloggningsuppgifter är samma som du använder för att logga in på skolans datorer.

OPTIMIZING THE LINE. CAB Group AB Stortorget 11, SE Örebro, Sweden Phone:

SOLCELLSBELYSNING. En praktisk guide. Råd & Tips SOLENERGI LADDA MED. Praktiska SÅ TAR DU BÄST HAND OM DIN SOLCELLSPRODUKT

Bygg ditt eget dataspel på sommarlovet!

RAPPORT: DIGITALA PROJEKT

EITF11 - Digitala projekt. Hastighetsmätare. Hugo Backmyr Mattias Karlsson

Omvandla Vinklar. 1 Mattematiskt Tankesätt

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

Rafiki Wa Kupanda. EITF11, Digitala projekt VT18. Linnea Håkansson, Anton Gunneberg, Ruben Schultz

konstanterna a och b så att ekvationssystemet x 2y = 1 2x + ay = b 2 a b

Sammanfattning av kursdag 2, i Stra ngna s och Eskilstuna

Koncept Katalog 2009

Summan av två tal är 38 och differensen mellan dem är 14. Vilka är talen? 2/0/0

Välkommen till ikanobank.se

Programmera LEGO NXT

Minoritetsspråk Åk 9

Utforska rymden med iphone

Repetitivt arbete ska minska

Texturbild. Lagerpaletten du kommer arbeta med ser du till höger. 1. Kopiera bakgrunden till ett nytt lager och gör den svartvit.

CAEBBK01 Drag och tryckarmering

Lagningsverktyg. Klonverktyg. Klonpanel. Att klona

Varför är det så viktigt hur vi bedömer?! Christian Lundahl!

Monteringsanvisning Garageport

Transkript:

Digitala Projekt Ljuskänslig riktningsautomatik av Rasmus Persson 890510-3571 - dt08rp9@student.lth.se Max Åkesson 880214-3936 - dt07ma4@student.lth.se Grupp 6 Handledare: Bertil Lindvall

1. Abstract This project resulted in a working prototype for an automatic photosensitive directioning. It was achieved by writing a requirements specification, drawing a model of the controller unit, constructing the controller unit and developing of software for the controller unit. The automatic photosensitive directioning rotates and tilts to maximize the light on the top plate. It is also possible to calibrate and manually control the apparatus. 2. Innehållsförteckning 1. Abstract 2. Innehållsförteckning 3. Inledning 3.1 Syfte 3.2 Mål 4. Metod 4.1 Kravspecifikation 4.2 Hårdvara 4.3 Mjukvara 4.4 Konstruktion 5. Resultat 6. Diskussion 7. Sammanfattning Appendix - Kod

3. Inledning 3.1 Syfte Detta projekt genomfördes i kursen digitala och analoga projekt. Valet av ljuskänslig riktningsautomatik gjordes för att det verkade intressant med en apparat som rörde på sig. Även processen att bygga upp en styrenhet från grunden med endast dess komponenter och sedan programmera den för att kontrollera en annan maskin var intressant. Det skulle även leda till insikt i hur analog till digital konvertering används tillsammans med andra funktioner som finns i processorer. Att genomföra ett projekt på egen hand innebär också att man lär sig vilka delar som ingår i ett projekt och hur man går till väga för att lösa de problem som uppstår. Det ska också syfta till att förbättra rapportskrivandet och presentation av genomfört projekt. 3.2 Mål Målet med projektet är att få riktningsautomatiken att hitta och rikta in sig mot en ljuskälla. Riktningsautomatiken ska även följa ljuskällan om den förflyttas. Detta uppnås genom att använda en processor som kör ett mindre program. Den ska även kunna kontrolleras och kalibreras via en knappsats. Information till användaren lämnas via lysdioder som kodar för olika lägen. 4. Metod Först skrivs en kravspecifikation där funktioner och krav fastställs för riktningsautomatiken. Därefter ska styrenheten skissas upp med alla kopplingar utritade. Konstruktionen byggs sedan enligt skissen; lödas, viras och testas så att allting fungerar. När konstruktionen är klar så kopplas den via en AVR JTAG MKII ihop med en dator som används för att skriva koden som processorn ska använda sig av. Efter att koden är komplett och testad så att riktningsautomatiken följer kravspecifikationen så är den redo för redovisning. 4.1 Kravspecifikation Riktningsautomatiken ska ställa in sig så att ljusintensiteten är så jämn över de fyra fototransistorerna som möjligt. Plattan ska gå att styra med knappsats. Med fyra knappar ska det gå att snurra och tilta. Vid ändläge för rotationen ska plattan snurra ett halvt varv tillbaka. Systemet ska via räknare hålla reda på positionen i tilt-led. Vid för lite ljus på plattana ska systemet gå till utgångsläget. Det ska finnas en knapp för att välja mellan automatisk styrning och manuell styrning via knappsats. Det ska finnas en återställningsknapp som ställer motorerna i utgångsläget. Extra: Det ska finnas en knapp där man kan välja om systemet ska söka efter maximal eller minimal ljusintensitet. 4.2 Hårdvara Hårdvaran som använts listas nedan med kort beskrivning. Riktningsautomatik med två stegmotorer, fem fototransistorer och tre ändlägesgivare. På institutionen finns en riktningsautomatik som är uppbyggd kring två stegmotorer vilka kan

rotera och tilta en platta på vilken fem fototransistorer sitter monterade. För att undvika överrotation och -tiltning sitter det tre ändlägesgivare, en för rotationen och två för tiltningen. ATmega16 är en 8 bitars processor som arbetar i upp till 16 MHz. Den innehåller 16 kb programminne och 1 kb arbetsminne. Den har även åtta A/D-omvandlare och tre räknare. 16-knappars knappsats valdes för att undvika att få för få knappar om en mindre knappsats hade valts. MM74C922 16-key encoder: för att läsa knappsatsen användes en knappenkoder som ger en fyrabitars utsignal som kodar för en knapp. Den ger även en data available -signal då en knapp trycks ner. Tre stycken lysdioder kommer att användas för att ge feedback till användaren; en röd, en gul och en grön. För att kommunicera med processorn användes en AVR JTAG MKII som kopplades in till datorn via USB. Den anslöts till processorn via fyra reserverade pinnar. Via JTAG går det att ladda över programmet till processorns programminne, läsa processorns register och stegvis exekvera programmet i felsökningssyfte. 4.3 Mjukvara Mjukvaran utvecklades i AVR Studio 4 som använde AVR JTAG MKII för att kommunicera med processorn. Där kördes debugging för att stegvis köra koden och se vad som blev fel. Det var också i AVR Studio 4 som koden kompilerades och överfördes till processorns programminne. Koden är uppbyggd av en main-metod som innehåller en oändlig loop där programmet snurrar runt så länge processorn är på. Vid uppstart utförs en kalibrering då ändläge och mittläge för rotation och tilt fastställs. Därefter hämtas värden från fototransitorerna som jämförs och resulterar i ett förflyttningssteg mot ljuset. Rotationsrörelsen har högst prioritet och när ljusintensiteten är jämn i rotationsled börjar tiltningen för att utjämna skillnader i tiltled. Ett avbrott genereras då en knapp på knappsatsen trycks ner. I avbrottsrutinen kontrolleras vilken knapp som blev nertryckt och koden kopplad till den knappen körs. Det finns åtta fungerande knappar; fyra funktionsknappar och fyra pilknappar. Den första funktionsknappen är Reset, som letar upp ett ändläge och ställer riktningsautomatiken i mittläge både för rotation och tiltning. Den andra knappen är Center som ställer riktningsautomatiken i mittläge utan att kalibrera mot ändpunkterna. De två sista knapparna används för att växla mellan automatisk och manuell styrning. Pilknapparna används för att rotera och tilta riktningsautomatiken manuellt. 4.4 Konstruktion Komponenterna monterades på ett kretskort. Drivspänningen och jordsladdarna lödades fast för att säkerställa hållbarheten på kopplingarna. Även motstånd, dioder och kondensatorer lödades fast för att inte trilla av kretskortet. Signalsladdarna virades kring pinnarna med en virpistol enligt tidigare fastställt kopplingsschema. Anslutning till riktningsautomatiken gjordes via en 20-pinnars flatkabel. Matspänningen till kretskortet är 5V och drivspänningen till stegmotorerna är 12V.

5. Resultat Genom att kolla de olika värdena för fototransistorerna bestäms i vilken riktning ljuset befinner sig. Plattan roterar mot de mest ljusintesiva fototransistorernas position gentemot varandra tills skillnaden ligger inom ett gränsvärde. Då är plattan riktad mot ljuset. På grund av fototransistorernas ojämna värden och känslighet för riktning fungerar programmet endast då ljuset är ganska starkt och inte har för stor vinkel mot plattan. Eftersom rotationerna görs en åt gången så blir förflyttning i mer än en dimension lite hackig. Den går med andra ord inte i diagonal riktning, utan stegar i de olika riktningarna en åt gången. Dioderna indikerar vad riktningsautomatiken gör för tillfället. Vid initiering så lyser alla dioderna samtidigt tills den är redo att användas. Vid normal automatisk styrning så lyser grön diod när maximal ljus har hittats, gul då den tiltar och röd då den roterar. Om grön och gul diod lyser samtidigt indikerar det att det är för lite ljus på fototransistorerna. Då manuell styrning används lyser den gröna och den röda dioden. Vid centrering blinkar dioderna i ordningen grön, gul, röd och då återställning utför så blinkar dioderna i ordningen grön, gul, röd, gul, grön. Grön Gul Röd Färdig X - - Tiltar - X - Roterar - - X För lite ljus X X - Manuell styrning X - X Reserverad - X X Initiering X X X Centrering 1 2 3 Återställning 1, 5 2, 4 3 Tabell 1: Förklaring till dioderna. 6. Diskussion Ett problem som uppstod var att värdena för ljusintensiteten endast varierar i intervallet mellan inget ljus och en övre gräns som bestäms med hjälp av resistanser. Resistanserna valdes så att intervallet för ljusstyrkan ligger kring normal kontorsbelysning. Det gör att om ljusintensiteten blir för låg så blir skillnaderna mellan fototransistorerna för små för A/D-omvandlingen att skilja på. Fototransistorerna är också väldigt rikningskänsliga så ljus som infaller med för stor vinkel registreras inte och leder därmed inte till någon justering. Det finns utrymme för optimering av den algoritm som används för att bestämma nästa förflyttning av plattan. Det skulle vara möjligt att justera steghastigheten beroende på

skillnaden mellan de olika fototransistorerna. Det går också att justera initieringsförfarandet så att rotation och tiltning utförs samtidigt och på så sätt påskynda initieringen. Det skulle vara möjligt att räkna ut positionen av ljuset beroende på värdena av fototransistorena, och på så sätt direkt rikta plattan mot ljuset. Det skulle dock antingen betyda att plattan inte är speciellt bra på att hitta ljuskällor som rör på sig eller att beräkningen av positionen måste upprepas med ett kort intervall. Det innebär att det inte skulle funnits någon skillnad alls mot nuvarande funktion, endast att mer beräkningar behöver utföras. 7. Sammanfattning Detta projekt har resulterat i en prototyp till en ljuskänslig riktningsautomatik. Det har åstadkommits genom att skriva en kravspecifikation, skissa en modell av styrenheten, konstruktion av styrenheten och utveckling av mjukvara som körs på styrenheten.

Appendix - Kod #include <avr/interrupt.h> #include <avr/io.h> #define F_CPU 8000000UL #include <util/delay.h> #include <stdio.h> #include <math.h> #define t 5.0 int halflap = 5; int rotation = 0; int tilthalf = 0; int angle = 0; int getadc(int pin); void CWrotate(double d); void CCWrotate(double d); void void tilta23(); void CheckEndpoint(int direction); void reset(); void center(); int main(void) Initialize pins for input and output ADCSRA = 0x80; DDRA = 0x70; PORTA = 0x70; DDRB = 0xff; PORTC = 0xff; PORTD = 0xff; DDRD = 0x00; int pt[4]; Initialize device and find endpoints and middle for rotation. double init = 5.0; while(!(pind&0x01)) CWrotate(init); halflap = 5; while(!(pind&0x01)) halflap++; halflap = halflap/2;

for (int n = halflap; n > 0; n--) CWrotate(init); rotation = halflap; Find endpoints and middle for tilt. while(!(pind&0x02)) while(!(pind&0x04)) tilta23(); tilthalf++; tilthalf = tilthalf/2; for (int n = tilthalf; n > 0; n--) angle = tilthalf; Main loop for running program in automatic mode. int total; while(1) for (int n = 0; n < 4; n++) pt[n] = getadc(n); total = (pt[0]+pt[1]+pt[2]+pt[3])/3; if (total < 50) while(rotation < halflap) CWrotate(t); PORTA = 0x30; while(rotation > halflap) CCWrotate(t); PORTA = 0x30; while(angle < tilthalf) tilta23(); PORTA = 0x30; while(angle > tilthalf) PORTA = 0x30; PORTA = 0x60; else if (((pt[1]+pt[2]) - (pt[0]+pt[3]) < total) && (pt[1]+pt[2] - (pt[0]+pt[3]) > -total)) PORTA = 0x20; if ((pt[0]+pt[1] - (pt[2]+pt[3]) < total) && (pt[0]+pt[1] - (pt[2]+pt[3]) > -total)) PORTA = 0x40; else if (pt[0]+pt[1] > pt[2]+pt[3])

if (!(PIND&0x02)) else angle = 0; PORTA = 0x40; else if (!(PIND&0x04)) tilta23(); else angle = tilthalf*2; PORTA = 0x40; else if (((pt[1]+pt[2]) > (pt[0]+pt[3])) && (angle > tilthalf)) PORTA = 0x10; CheckEndpoint(0); CCWrotate(t); else if (((pt[1]+pt[2]) < (pt[0]+pt[3])) && (angle < tilthalf)) PORTA = 0x10; CheckEndpoint(0); CCWrotate(t); else PORTA = 0x10; CheckEndpoint(1); CWrotate(t); Get value of A/D-conversion from pin pin int getadc(int pin) ADMUX = pin+32; ADCSRA = 0xc0; while (ADCSRA!= 0x90); return ADCH*4; Clockwise rotation void CWrotate(double d) rotation++; PORTB = 0x60; PORTB = 0xa0; PORTB = 0x90; PORTB = 0x50;

Counter clockwise rotation void CCWrotate(double d) rotation--; PORTB = 0x50; PORTB = 0x90; PORTB = 0xa0; PORTB = 0x60; Tilt towards the side with phototransistor 0 and 1 void tilta01() angle--; PORTB = 0x06; PORTB = 0x0a; PORTB = 0x09; PORTB = 0x05; Tilt towards the side with phototransistor 2 and 3 void tilta23() angle++; PORTB = 0x05; PORTB = 0x09; PORTB = 0x0a; PORTB = 0x06; * Checks to see if the rotational end point has been reached, and rotates to center * position if so.

void CheckEndpoint(int direction) int init = 5.0; if(pind&0x01) if(direction) for(int i = 0; i < halflap + 10; i++) else for(int i = 0; i < halflap + 10; i++) CWrotate(init); Interrupt routine. Check which button has been pressed. ISR(INT1_vect) int pin = PIND&0xf0; switch(pin) case 176: center(); break; case 240: reset(); break; case 48: PORTA = 0x50; while(1) if ((PIND&0xf0) == 0x20) break; if ((PIND&0xf0) == 0xb0) center(); if ((PIND&0xf8) == 0xf8) reset(); while((pind&0xf8) == 0x18) right button if(rotation < (halflap*2)) CWrotate(t); while((pind&0xf8) == 0x98) left button if(rotation > 0) CCWrotate(t); while((pind&0xf8) == 0x48) up button if (!(PIND&0x04))

default : break; tilta23(); while((pind&0xf8) == 0x58) down button if (!(PIND&0x02)) Resets the positional variables and centers all positions void reset() int count = 0; byte colors[4] = 0x10, 0x20, 0x40, 0x20; while(!(pind&0x01)) CCWrotate(t); PORTA = colors[(count/3)%4]; rotation = 0; while(rotation < halflap) CWrotate(t); PORTA = colors[(count/3)%4]; while(!(pind&0x02)) PORTA = colors[(count/3)%4]; angle = 0; while(angle < tilthalf) tilta23(); PORTA = colors[(count/3)%4]; PORTA = 0x40; Return to center both for tilt and rotation. void center() int count = 0; byte colors[3] = 0x40, 0x20, 0x10; if (rotation < halflap) while (rotation < halflap) CWrotate(t);

else PORTA = colors[(count/3)%3]; while (rotation > halflap) CCWrotate(t); PORTA = colors[(count/3)%3]; if (angle < tilthalf) while (angle < tilthalf) tilta23(); PORTA = colors[(count/3)%3]; else while (angle > tilthalf) PORTA = colors[(count/3)%3]; PORTA = 0x40;