Af Mads Obel Jensen, og Sebastian Stengade Christiansen

Opbygningen

Diagram

Diagrammet her viser konstruktionen af SuperCell 3000, robotten er bygget som en selvstyrende enhed, med muligheden for rotation af sejlet. Sejlet skal heri forstås som solcellen. Robotten består af simple komponenter, forbundet via et breadboard, og styret via en arduino uno.

Som set nedenunder indeholder robotten følgende:

  • Diode: en komponent som begrænser strømretningen igennem sig selv
  • Transistor: en komponent som åbner og lukker for strøm ved signal over gate
  • Modstand: en komponent som skaber et spændingsfald over sig selv, modstand måles i ohm.
  • Arduino Uno: programmerbar enhed, som kan styre og måle elektriske komponenter.
  • LDR: en Light dependent resistor, eller fotomodstand, er en komponent som hæver og sænker modstand afhængig af lysindfald.

Beskrivende

Systemet er opbygget af en Arduino Uno som står for at oversætte LDR input til en vurdering af rotationen af motoren. Rotationen af motoren opnås gennem vor H-bro, denne tillader strøm at løbe i den passende retning gennem motoren. Da motoren er en DC motor og derfor bare en elektromagnet tillader denne at lade strøm løbe i vilkårlig retning, hvilket sammen med en h-bro kan resultere i alternerende rotationsretning som drejer sejlet i den rette retning med optimalt lysindtag ifht arduinoens input målinger.

Opbygning overvejelser

Robotten/systemet skal have en spændende gearing, som nedtrapper rotations tempoet fra motoren, og ser interessant ud, naturligvis. 

Sejlet på robotten skal kunne dreje 180 grader omkring sin egen akse, uden besvær. Denne omdrejning bliver gjort mulig af de lange ledninger fra arduino og ud til sejlets fotomodstande. 

Hardwaren skal være kompakt, funktionel og overskuelig.

Gearing

Følgende gear tilhører robotten:

  • 1 / 3,5 bæltedrev
  • 16/24 tandhjul
  • 12/40 tandhjul
  • 24/60

Gear beregning:

(1*16*12*24) / (3,5*24*40*60) = 4608/201600 = 1/44

Denne gearing resulterer i et 1/44 forhold mellem motoren og det endelige gear, som er placeret under sejlet på robotten.

Motoren

Motoren sidder bagerst på systemet da den skaber rigelig plads til drive gearingen under overfladen. Den er en 9v Lego jævnstrømsmotor, og er fastspændt på robottens stæl for maksimal stabilitet.

En jævnstrømsmotor er som nævnt tidligere, en elektromagnet, vi kan derfor rotere både med og imod uret, da strøm kan ledes igennem motoren i vilkårlig retning. Retningen skaber rotationen i en jævnstrømsmotor. Effekten heri går til bevægelse, altså rotation, samt en smule effekt afsat som varme.

H-Broen

H-broen er opbygget af to forskellige slags transistorer, nogle modstande og et par dioder. 

Vi bruger to IRF9520 og to IRF510 transistorer. Disse er af typen Enhancement MOSFET, det er henholdsvis en P-channel og N-channel MOSFET. 

N-channel MOSFET’en der anvendes her er lukket når gate inputtet er mindre end eller lig 0V. P-channel MOSFET’en fungerer på den præcist omvendte måde, altså er denne åben når gate inputtet er mindre end eller lig 0V. De modstande der benyttes fungerer, som pull-down modstande, for at sikre at, når outputtet er LOW fra arduinoen, så vil værdien ikke “svæve” frit, men blive trukket, mod 0. Modstandenes størrelse kan derfor variere meget uden det har nogen betydning for disses funktion. Dioderne er isat for at sikre at strømmen ikke kan løbe tilbage i arduinoen og brænde denne af.

Når den ene port på arduinoen er HIGH vil den anden altid være LOW, dette resulterer i at vi kan skifte hvilken vej strømmen løber til og fra motoren. Er port 9(A0) fx HIGH, vil det åbne for P-channel MOSFET øverst i venstre hjørne og lukke for N-channel MOSFET nederst i venstre, dertil kommer at port 10(A1) vil være LOW vil det lukke for P-channel MOSFET øverst i højre hjørne og åbne for N-channel MOSFET nederst i højre, dermed vil strømmen altså løbe som de røde pile angiver. Og bytter man rundt på HIGH og LOW på portene på arduinoen, vil strømmen løbe som de blå pile angiver. De to ting der er mærket “R_PHOTO” er to fotomodstande.

Ydermere fungere h-broen som spændingsregulator, da vi herigennem kan lede 9v strøm fra batterier eller strømforsyning over source porten på RF9520 MOSFET, og aktivere gates med lavere spænding via arduino. Dette resulterer i at jævnstrømsmotoren drives af 9v igennem h-broen, som vi kontrollere via arduinoen med lavere spænding.

Sensorer

LDR eller fotomodstand er den eneste sensor som er benyttet da denne observerer lys i omverden, og repræsenterer dette som et tal ved digital read. Dette kan gøres da en fotomodstands modstand bliver påvirket af lysindfald på enheden, det betyder at materialet bliver mere ledende når lys rammer modstanden og mindre ledende ved lavt lys. 

Digital read vil læse modstanden over fotomodstanden ifht, lysforholdene, en høj værdi læst, betyder at der er lidt lyst, hvor en lav læsning betyder meget lys.

Fotomodstandene er placeret i toppen af solcellens segl som set på billeder og video. Herfra sidder de i hver sin side, i yderkanterne, da der her vil kunne måles maksimal forskel i modtand

Tabellen ovenfor viser forholdet mellem fototmodstandens indre modstand og lysforholdene målt i lux. Det fremgår klart heraf, at jo større lysindfald på fotomodstanden jo lavere modstand vil fotomodstanden have.

En oversyet dag vil måle imellem 1000 til 2000 lux, ifølge Wikipedia. Vi kan tage udgangspunkt i 1.000 lux, her vil modstanden i fotomodstanden beregnes således:

Rlrd= 500/lux = 500/1000 = 0.5k ohm

Altså vil modstanden i fotomodstanden være 500 ohm under overskyet dagslys.

Konstruktionsproblemer 

Formen har været stabil gennem processen, dog har gearingen forandret sig adskillige gange, dette skyldes at det har været problematisk at gøre den tilpas stabil og pålidelig under drift. 

H-broen har været det primære problem med projektet, da diagrammerne gjorde konceptet ret abstrakt. Dette har medført at opsætningen af denne har manglet muligheden for at bevæge motoren i begge retninger. Dette blev dog løst efter flere forsøg, da problemetet viste sig at være ledningsføringen.

Koden

Vi vil her forklare og præsentere koden for robotten. Se flowdiagram for det overordnede billede hvis nødvendigt.

Beskrivelse

Koden basere sig på blot på at læse den højre og venstre LDR, hvorefter den vil afgøre hvilken retning robotten skal rotere solcelle seglet for at optimere lys indtaget. Dette har naturligvis en vis tolerance, hvilket sørger for at den ikke konstant rotere, og kun under visse omstændigheder vurdere at en rotation er nødvendig. 

Det kan ses i koden at den variabel tolerance er vores overvejelser for robottens opførsel når solen går ned og står op. Den resulterer i en øget sensitivitet i robottens styresystem.

Så vidt muligt vil robotten rette sig imod lyset og vil blive mere tilbøjelig til at rotere, jo længere den har ventet. Når solen er stået ned bør forskellen på målingerne mellem de to fotomodstande være nul, og robotten vil derfor vente indtil solen igen er fremme.

Flow-diagram

Herunder kan ses et flowdiagram som viser styresystemets hoved loop, heri indgår læsninger af fotomodstande, og beslutningstagen ifht rotation, rotationsretning, eksekvering af rotation.

Implementation

int leftLDR = 0;
int rightLDR = 0;
int tol = 30;
  
void setup() {
 pinMode(3, OUTPUT);
 pinMode(5, OUTPUT);
 pinMode(A0,INPUT);
 pinMode(A1,INPUT);
 Serial.begin(9600);
}

void loop() {
  	readLeft();
  	readRight();

  	if(abs(rightLDR-leftLDR) > tol){
    		if(rightLDR - leftLDR > tol){
      			counterCW();
      			delay(100);
   	 }else if(leftLDR - rightLDR > tol){
     		 CW();
      		delay(100);
   	 }
 	 }else{
    		stand();
    		delay(1000);
  	}
 }

int readLeft(){
   	leftLDR = analogRead(A0);
}

int readRight(){
   	rightLDR = analogRead(A1); 
}

void stand(){
  	digitalWrite(5, LOW);
  	digitalWrite(3, LOW);
}
void CW(){
  	digitalWrite(3, HIGH);
  	digitalWrite(5, LOW);
}

void counterCW(){
  	digitalWrite(5, HIGH);
  	digitalWrite(3, LOW);
}

Test

En times test blev udført, hvoraf vi observerede at robotten indstiller sejlet vinkelret mod sollyset. Testen er foregået indendørs da batterierne på dette tidspunkt var flade, og hele robotten derfor blev drevet over arduinoen, som kræver USB forbindelse.

Under testen sås det at robotten indstiller sig hurtigt ved rotation efter solens lys i rummet, dog kan det ses at den tager fejl til tider, og over-rotere sejlet. Dette resulterer i at robotten lægger ud med at står lidt skævt, hvorefter den finder den rette vinkel over tid.

Konklusion

Robotten løser problemstillingen til en passende grad, da den rotere sig ifht. lyset med en variabel tolerance, dette betyder at sensitiviteten over lysindtag forskel kan forandres efter behov, hvilket vil medføre at robotten rotere oftere eller mere sjældent under forandrende lysforhold. Det betyder også at robotten vil stå stille når lysforholdene er ens over de to fotomodstande. Dette medfører også at den står stille efter solnedgang, dog vil den herunder være ekstra følsom overfor lys, og rotere ved lav tolerance.

Forbedringer

Robotten kan forbedres ved at implementere en orienteringssans, altså at robotten kan finde tilbage til udgangspunktet når solen går ned, så den kan vente på solopgangen. Dette skel ikke på nuværende tidspunkt, og har ikke en optimal løsning uden en stepper motor, som kan holde styr på antal bevægelser i præcise tal.

Robotten kan ydermere forbedres hvis den havde mulighed for at ændre indfaldsvinklen for lyset, Altså at tilte sejlet. Dette kan forbedre lysindtaget dramatisk, da den vil være bedre stillet.

Demo video

Leave a Reply