”SUNTRON” – Portefølje 1 – April 2016

 

Gruppemedlemmer; Asge Matthiesen og Anne-Katrine Egsvang

 

  1. Hvordan ser systemet ud?

Systemet er kort beskrevet opbygget af nogle hardware elementer beskrevet længere nede og Lego. Se nedenstående billeder;

20160331_124249_25876793350_o20160331_124254_25544897264_o 20160331_124300_25876795470_o

  1. Hvorfor er systemet/robotten opbygget som den er ift. at løse opgaven?

 

  • Hvilke tanker ligger bag ved opbygningen?

De tanker der ligger bagved selve opbygningen af robotten, er at vi fik til opgave at bygge en solcellestyrring som drejer en solcelle efter solens lys med en motor for at optimere udnyttelsen af solens energi – og derfor var det vores tanke at bygge noget der kunne bevæge sig 180 grader. Til dette benyttede vi forskellige lego komponenter. Det første skridt vi tog var at bygge selve hardware delen, og derefter lego delen. Grunden til denne rækkefælge, var bl.a. at vi skulle benytte en del hardware til opgaven, og hellere ville bygge vores robot op efter at have tilsluttet de ledninger og delkomponenter der nu skulle benyttes. Da dette var gjort, byggede vi selve den del der skulle rotere, hvor vores breadboard med lyssensorerne skulle placeres på. Da denne del var færdig, valgte vi at bygge gearingen til dette, således at vores roteringshastighed af denne del blev mere kontrolleret. Dernæst byggede vi en ”gear-kasse” uden om gearingen, da dette var med til at stabilisere vores robot yderligere. Tilsidst byggede vi en kasse til selve vores Arduino Uno, af æstetiske årsager.

  • Er der nogen gearing?

 

Ja. Vi byggede en gearing og tilsluttede denne direkte til vores motor for at få en mere kontrolleret hastighed på vores robot. Denne består af 4 store tandhjul og 3 små. Og blev implementeret i vores ”gear-kasse”.

 

  • Hvor er motoren placeret og hvorfor der?

Motoren blev placeret eksternt på vores ”gear-kasse” – og grunden til dette valg, at den ikke blev indbygget i selve ”gear-kassen” var at vi hurtigt erfarede, at den skulle kunne tilsluttes hurtigt og nemt, og ligeledes tages fra igen – og da vi havde nogle udfordringer med løse forbindelser var dette at foretrække, således at denne ikke skulle skilles af hele tiden. Endvidere blev motoren tilsluttet gearingen direkte, da vi på denne måde fik en mere kontrollabel reaktion gennem vores gearing.

 

  • Hvilke sensorer er benyttet og hvor er de fysisk placeret på robotten?

Vi har benyttet 2 lyssensorer – som blev placeret på toppen af vores breadboard – disse blev placeret med relative mellemrum, og med to forskellige vinkler, for at kunne opfange så meget sol som muligt. Desuden placerede vi dem helt oppe på toppen af robotten, igen for at komme så meget fri af alt som muligt, for at kunne fange så megen lys som muligt.

 

  • Har det været problemfrit at opbygge robotten eller har den ændret form/sensor-placeringer flere gange?

Det har været en udfordring at bygge robotten, og den har ændret form en del gange undervejs, og én af vores største problemer var vores vægtfordeling, da den konstruktion vi valgte, gjorde at breadboardet med sensorerne havde en stor overvægt, hvilket havde en stor indflydelse på vores gearing, da de tandhjul vi havde brugt ikke kunne balancere overvægten, og derfor tog det en del tid af få dette justeret ind, således at dette passede. Vi fandt relativt hurtigt en løsning på at stabilisere selve breadboardet med sensorer således at denne var ret fast og god, så denne del blev ikke ændret meget på. Igen var det selve stabiliseringen af toppen ift. gearingen der gav en del udfordringer.

  1. Hvordan er robottens hardware sammensat?

Vi har brugt et Arduino Motor Sheild, som gør det muligt at køre to DC motorer sammen med Arduino UNO boardet, og kontrollere retning og hastighed af disse.
I vores tilfælde har vi kun påsat en motor via port A, der har tilkobling til Digital 12, som ses på billedet nedenunder til højre. Denne motor er tilkoblet et gear-system med tandhjul i forskellige størrelser, som skal ændre den rotationsenergi, der umiddelbart påsættes fra motoren/koden, for at gøre rotationsenergien for selve opbygningen af solcellen mere kontrollerbar. Gearingen sidder i gearkassen under solfangeren, som ses på næste billede til højre. Gearingen er tilkoblet solfangeropbygningen i den anden ende, sådan så solfangeren kan rotere med motoren. Solfangeren er vinklet 45 grader, så pladen vender ”opad” mod himlen. På solfangeren, som består af vores breadboard og Lego, er der tilkoblet to lysdioder (Port A), som er i stand til at opfange lys. Disse har hver deres resistans (B) tilkoblet, for at afsætte noget effekt og holde målingerne nogenlunde konstante.

Billede1 Billede2

  • Diagramtegning;

 

  1. Motor shield påføres Arduino Boardet:

Billede5

  1. Motoren påføres port A:

Billede3

  1. Lysdioderne (grøn/A1 og blå/A0) påsættes breadboardet med tilsvarende resistorer (rød). Der tilsættes en strøm på 5V (gul) og Ground (orange).

Billede4

 

  • Billede af robot med betegnelser på de enkelte delkomponenter;

Denne del har vi beskrevet og illustreret i afsnit 3. Her ses de delkomponenter vi har benyttet og hvordan de er sammensat.

  1. Hvordan er robottens opførsel implementeret?

Robottens opførsel er implementeret på den måde, at når robottens lyssensorer opfanger lys fra den side den ene lyssensor er monteret på vil den dreje mod lyset. Dvs. hvis den skulle opfange lys fra højre side, vil den derfor dreje mod højre og ligeledes mod venstre når den opfanger lys fra venstre side af. De overordnede opførsler for robotten er at den gerne skulle rotere mod solen, når der kommer sol fra en given side, hvilket betyder at den vil følge solens bane i løbet af en almindelig dag.

  • Lav et flow diagram der beskriver robottens opførsel.

Billede6

  • Kode + Beskrivelse;
    const int
    
    PWM_A   = 3,
    
    DIR_A   = 12,
    
    BRAKE_A = 9,
    
    ldrPin1 = 0,
    
    ldrPin2 = 1;
    
    
    
    
    
    void setup() {
    
      pinMode(ldrPin1, OUTPUT); //enables ldrPin1
    
      pinMode(ldrPin2, OUTPUT); //enables ldrPin2
    
      // Configure the A output
    
      pinMode(BRAKE_A, OUTPUT);  // Brake pin on channel A
    
      pinMode(DIR_A, OUTPUT);    // Direction pin on channel A
    
    
    
      // Open Serial communication
    
      Serial.begin(9600);
    
      Serial.println("Motor shield DC motor Test:\n");
    
    }
    
    int rate1 = 0;
    
    int rate2 = 0;
    
    
    
    void loop() {
    
    
    
    
    
    // Set the outputs to run the motor forward
    
      int rate1 = analogRead(ldrPin1); // read the analog input
    
      digitalWrite(ldrPin1, LOW);
    
    
    
      int rate2 = analogRead(ldrPin2); // read the analog input
    
      digitalWrite(ldrPin2, LOW);
    
    
    
    if (rate2 - rate1 > 125) {
    
        digitalWrite(BRAKE_A, LOW);  // setting brake LOW disable motor brake
    
        digitalWrite(DIR_A, HIGH);   // setting direction to HIGH the motor will spin forward
    
    
    
        analogWrite(PWM_A, 50);     // Set the speed of the motor, 255 is the maximum value
    
        Serial.println("A1 størst");
    
      }
    
    
    
      else if (rate1 - rate2 > 125) {
    
        digitalWrite(BRAKE_A, LOW);  // setting brake LOW disable motor brake
    
        digitalWrite(DIR_A, LOW);   // setting direction to LOW the motor will spin backward
    
    
    
        analogWrite(PWM_A, 50);     // Set the speed of the motor, 255 is the maximum value
    
        Serial.println("A0 størst");
    
      }
    
      else {
    
        digitalWrite(BRAKE_A, HIGH);  // setting brake LOW disable motor brake
    
        digitalWrite(DIR_A, LOW);   // setting direction to HIGH the motor will spin forward
    
    
    
        analogWrite(PWM_A, 0);     // Sets motor speed to 0
    
    
    
      }
    
    }

     

  • Beskrivelse af koden;

Vores if-sætninger har en bestemt værdi stående (125), som vores målinger skal være større end, før at der sker en rotation. Dette tal er kun brugt for at forsøgene med lyssensorerne blev mere effektive. Her kunne man lave en værdi alt efter hvilken tid på dagen det er. Hvis det fx er nat, skal robotten ikke rotere. Hvis det er dag, skal robotten rotere mest optimalt. Dette krævede mere tid for os at måle, og vi har derfor valgt at lade de 125 stå som de er ind til videre.

  • Hvilke udfordringer har der været ift. at få koden til at virke?

De udfordringer der har voldt størst problemer ved at få koden til at virke har primært været, at vi ikke kunne få motoren til at dreje mod venstre, og vi brugte en del tid på at få dette til at fungere, men det viste sig at vi havde lavet nogle forkerte definitioner i vores kode ift. de porte vi benyttede, men da vi fik dette til at virke var det som sådan den eneste del der voldte os problemer.

  1. Konklusion;

Konklusionen på vores projekt, må være at vi har fået bygget en robot, der opfylder kravene stillet til denne opgave, da vi skulle bygge en solcellestyrring som drejer en solcelle efter solens lys med en motor for at optimere udnyttelsen af solens energi – og dette har vi opnået. Ift. forbedring kunne man godt forbedre selve designet af robotten, da denne stadig er en anelse ustabil hvis den skulle kunne benyttes til udendørs brug. Desuden skulle der nok bygges en mere holdbar løsning til selve Arduino delen og motoren i form af noget beskyttelse, igen hvis den skulle kunne holde til udendørs brug. Man kunne desuden godt lave en udvidet udgave hvor man evt. benyttede flere lyssensorer for at få en mere nøjagtig vinkling af solen, og derfor mere udbytte af denne, da man med to sensorer har et begrænset område man kan opfange lyset fra.

  1. Video – se vedhæftning.

Leave a Reply