Porteføljeopgave 1

Navn på robotsystemet: SolcelleRobot

Navne på gruppemedlemmerne: Mia Mathiesen & Christina Nielsen, Velfærdsteknologi 6. semester

Systemets udseende

Motoren er placeret på en plade der udgør fundamentet for robotten og sørger for at robotten står stabilt. På motorens roterende akse er der monteret det mindst mulige tandhjul, for at kunne lave en så høj gearing som muligt, da motoren bedst kører med en høj hastighed og i længere tid og systemet helst kun skal rotere en lille vinkel pr. gang for at følge solen. Det lille tandhjul (1) trækker et større tandhjul (2), der er koblet sammen med et andet tandhjul (3), som trækker det største tandhjul (4), som roterer en vinklet plade, hvor LDR modstandene er påsat. På denne måde fås den lavest mulige gearing. Når der anvendes mange tandhjul, som ikke passer helt sammen, kan der opstå slør og motoren skal yde en større kraft for at få alle tandhjulene til at rotere. Da motoren ikke er så kraftig, er der benyttet så få tandhjul som muligt, der fortsat giver en lav gearing (gearing 8:40), og systemet er samtidig konstrueret så simpelt som muligt.

Sensorer

Til opbygningen af solcellesystemet er der benyttet to lyssensorer (LDR modstande), som er modstande, der ændre deres resistans i forhold til lysstyrken, de påføres. Når lysstyrken øges, vil resistansen falde, og omvendt. For at udnytte LDR’ens egenskab til at ændre resistans i takt med lysstyrke, benyttes en spændingsdeler for hver sensor, hvor modstanden, der anvendes til dette, sættes til 110 kohm. Spændingen over hver LDR ændres, når resistansen ændres og måles af arduinoen, som ved hjælp af en A/D converter omskriver spændingen til et 10-bit digitalt signal (i intervallet 0-1023), der beskriver lysstyrken. Som nævnt tidligere er de to sensorer placeret på en vinklet plade på toppen af systemet. Pladen er vinklet for at kunne få så direkte sollys som muligt og samtidig er pladen placeret øverst for at undgå, at dele af systemet skygger for sensorerne. Der er placeret en plade mellem de to sensorer, for at kunne registrere når solens lys har “drejet sig”, hvorved der vil komme skygge på den ene sensor. Systemet skal derefter rotere omkring en lodret akse for igen at få lige meget lys på begge sensorer.

 

Problemområder

Det blev først forsøgt at bygge et system med kun to tandhjul, men da det var nødvendigt med en højere gearing, blev konstruktionen ændret til den endelige. Det var nødvendigt at benytte så bøjelige ledninger som muligt for ikke at begrænse systemets mulighed for at rotere. Udover dette er opbygningen gået problemfrit både i forhold til systemets komponenter og hardware.

 

Robottens opførsel

Systemet fungerer ved først at tjekke om der er lys (hvor lys er defineret til at være et signal over 100) og om den ene sensor registrerer en højere lysstyrke end den anden (højere end 20). Der tjekkes kun om den ene sensor registrerer en højere lysstyrke, da solen kun bevæger sig i en retning. Hvis der ikke er lys og signalet dermed er under 100, vil variablen n øges med 1. Hvis der fortsat ikke er lys, vil variablen stige og når den overstiger 10 (for at sikre at det er nat og ikke en fejl), vil robotten rotere 180 grader mod uret og starte forfra efter et delay svarende til nattens længde. Hvis der er lys vil variablen n initialiseres til 0 og hvis der samtidig er en lysforskel over 20, vil robotten rotere en lille vinkel med uret. Denne løkke vil fortsætte indtil forskellen er under 20.

Flow-diagram

Blokdiagram

Arduino kode

int sensorPin1 = A1; //input pin for LDR1
int sensorPin2 = A2; //input pin for LDR2
int sensorValue1 = 0; //variabel til opbevaring af output fra LDR1
int sensorValue2 = 0; //variabel til opbevaring af output fra LDR2
int diff=0; //variabel til differensen mellem LDR1 og LDR2
int n=0; //variabel til optælling for nat
const int PWM_A=3; //output pin for motorhastighed 
const int DIR_A=12; //output pin for motorens omdrejningsretning
const int BRAKE_A=9; //output pin for motorens bremsekraft


void setup() {

Serial.begin(9600); //Opretter serielforbindelse 
pinMode(BRAKE_A, OUTPUT); //Brake pin på kanal A
pinMode(DIR_A, OUTPUT); //Direction pin på kanal A

}

void loop() {
delay(1000); //Sætter delay på 1000, for at for-løkken kører en gang i sekundet
sensorValue1 = analogRead(sensorPin1); //læser værdien fra LDR1
sensorValue2 = analogRead(sensorPin2); //læser værdien fra LDR2
Serial.print(sensorValue1); //Printer værdien fra LDR1 på skærmen
Serial.print('\t');
Serial.print(sensorValue2); //Printer værdien fra LDR2 på skærmen
Serial.print('\t');
Serial.println(n); //Printer variablen n på skærmen
diff=sensorValue1-sensorValue2; //Beregner differensen mellem værdierne fra LDR1 og LDR2


if (diff>20 && sensorValue1>100 && sensorValue2>100) //if-else-statement, tjekker om der er lys (100 sættes som tærskelværdien mellem nat og dag) og om differensen er større end 20
{
digitalWrite(BRAKE_A, LOW); //Sætter brake til LOW 
digitalWrite(DIR_A, HIGH); //Sætter omdrejningsretningen til HIGH, moteren roterer mod uret
analogWrite(PWM_A, 255); //Motorens hastighed sættes til 255, som er den højeste hastighed
delay(5); //Holder motoren på fuld hastighed i 5 milisekunder
analogWrite(PWM_A, 0); //Motorens hastighed sættes til 0
digitalWrite(BRAKE_A, HIGH); //Sætter brake til HIGH
delay(5); //Holder brake i 5 milisekunder
}

if (sensorValue1<100 && sensorValue2<100) //if-else-statement, tjekker om der er lys (100 sættes som tærskelværdien mellem nat og dag)
{
n++; //n øges med 1
}
else
{
n=0; //n initialiseres til 0
}

if (n>10) //if-statement, tjekker om n er større end 10
{
digitalWrite(BRAKE_A, LOW); //Sætter brake til LOW
digitalWrite(DIR_A, LOW); //Sætter omdrejningsretningen til LOW, motoren roterer med uret
analogWrite(PWM_A, 255); //Motorens hastighed sættes til 255
delay(1700); //Der sættes et delay på 1700, som passer med en rotation på 180 grader ved den valgte hastighed
analogWrite(PWM_A, 0); //Motorens hastighed sættes til 0
n=0; //n initialiseres til 0
delay(5000); //Sætter delay på 5000, som svarer til "nattens længde", rigtig burde det være et delay på omkring 28000000 milisekunder
}
}

 

 

Udfordringer

Det har været en udfordring at justere hastigheden og længden motoren skulle køre for at få de ønskede rotationsvinkler. Den ønskede rotation tilbage til startpositionen, kunne være udført ved at benytte en knap, der indikerede når den var nået tilbage. 

Konklusion

Robotten løser opgaven ved at følge lyset og tage hensyn til når solen går ned ved at rotere tilbage til startpositionen og er klar, når solen står op. Robotten kunne forbedres ved, at den også tog hensyn til solens placering på himlen (om den stod højt eller lavt), ved at kunne rotere omkring en vandret akse. Den kunne også forbedres ved at tage hensyn til hvor solen stod op og gik ned, i stedet for kun at rotere de faste 180 grader om natten. Derudover kunne robotten forbedres ved at blive bygget mere stabil og undgå slør. Det ville samtidig forbedre systemet at have en lavere gearing, da rotationen derved ville være nemmere at styre. Der kunne vælges lavere modstande, så inputværdien nemmere kunne bevæge sig i et større interval.

 

Billeder af systemet

 

Demo

Flytter sig med solen

IMG_1688

Nat – Kører tilbage til start position, klar til morgen

IMG_1690

Leave a Reply