Gå til innhold
Presidentvalget i USA 2024 ×

Mitt arduino prosjekt, nedkjøling av soverom, trenger innspill


Anbefalte innlegg

Hei,

 

jeg har nå nylig begynt å lære meg med Arduino. Jeg er utdannet ingeniør, men har ikke dyp erfaring med elektronikk. Forstår det grunnleggende.

 

Så til prosjektet. Jeg har tenkt meg ut et prosjekt for å kjøle ned soverommet mitt. Dette ved hjelp av Arduino nano, to temperature sensorer, en motor og to vifter.

 

Vinduet jeg ønsker å åpne er et liggende rektangel som er hengslet i toppen. Tanken er da at f.eks om det er kaldere ute enn inne skal vinduet åpnes.

 

Dette er den uferdige koden jeg har skrevet

 

 

 

int temp_in = X;

int temp_out = X;

int fan_in = X;

int fan_out = X;

int motor = X;

 

void setup()

{

pinMode(temp_in, INPUT);

pinMode(temp_out, INPUT);

pinMode(fan_in, OUTPUT);

pinMode(fan_out, OUTPUT);

pinMode(motor, OUTPUT);

}

 

void loop()

{

if (temp_in < temp_out)

{

// [Close window]

}

 

else if (temp_in == temp_out)

{

// [Do nothing]

}

 

else if (temp_in > temp_out && [Clock between 19-23])

{

// Open window & start 2x fan

digitalWrite(fan_in, HIGH);

digitalWrite(fan_out, HIGH);

}

 

else if (temp_in > temp out)

// Open window

 

delay(100000);

}

 

 

 

Som man ser i koden mangler jeg en del, noe fordi jeg er usikker på hva jeg skal bruke av utstyr og noe fordi jeg rett og slett ikke vet. De komponentene jeg har klart å finne til nå er:

 

- http://shop.ehobby.n...e9a1042b8c637c2

 

- http://shop.ehobby.n...products_id=113

 

- http://www.komplett....aspx?sku=461444

 

Altså mangler jeg motor og strømtilførsel.

 

Det jeg kunne tenkt meg noen innspill på:

 

- Hvordan strømtilførsel kan jeg bruke? Ønsker helst ikke batteri da jeg må skifte hyppig. Tenker å kjøre 5v på systemet om det er mulig.

 

- Motor, det trengs ikke en veldig sterk motor, men den må klare å dytte 20-30cm. Her sliter jeg med å finne en god løsning.

 

- Klokke, om du ikke har sett i koden ønsker jeg kun at viftene skal gå mellom 19-23, hvordan løser jeg det?

 

- Spørsmål til koden jeg har skrevet, i den ene else if, så settes viftene på. Vil de aldri skru seg av slik koden står nå?

 

Håper noen tar seg tid og orket til å hjelpe meg, hadde vært morsomt å fått det til og gitt en hel del læring!

Lenke til kommentar
Videoannonse
Annonse

Hmm hvis du skal ha åpent vinduet når det er kaldere ute enn inne er det vel strengt tatt ikke mye vits med ett i vindu ?

 

Fra spøk til alvor. Har lite peiling på kode (ikke koda noe særlig siden Amiga var tingen)

 

Forslag til motor: Hva med en vindusviskermotor? 12 volt da ..

Lenke til kommentar

http://arduino.cc/playground/Code/Time

Der kan du lese mer om klokke. Selv synkroniserer jeg klokka i arduinoen via ethernet mot ekstern server.

 

Angående motor så er det vel ikke så farlig om det er 5 eller 12 volt. Om du bruker en 12V strømforsyning til arduinoen kan du hente ut 12V herfra. Det finnes også mange kraftige RC servoer som går 5V som går an å bruke til det her.

 

Viftene vil ikke skru seg av når du først har satt de på sånn du har skrevet det. Du må legge til

digitalWrite(fan_in, LOW);
digitalWrite(fan_out, LOW);

der du vil de skal skru seg av igjen.

Lenke til kommentar

http://arduino.cc/playground/Code/Time

Der kan du lese mer om klokke. Selv synkroniserer jeg klokka i arduinoen via ethernet mot ekstern server.

 

Angående motor så er det vel ikke så farlig om det er 5 eller 12 volt. Om du bruker en 12V strømforsyning til arduinoen kan du hente ut 12V herfra. Det finnes også mange kraftige RC servoer som går 5V som går an å bruke til det her.

 

Viftene vil ikke skru seg av når du først har satt de på sånn du har skrevet det. Du må legge til

digitalWrite(fan_in, LOW);
digitalWrite(fan_out, LOW);

der du vil de skal skru seg av igjen.

 

Jeg vil jo kun ha viftene på akkurat i den else if som jeg har satt. Betyr det at jeg må ha en low på alle andre if?

 

Denne klokken må jo ikke være veldig presis, går det an å definere til arduino at kl er 12, og la den kjøre ca kl 12 en dag? Hørtes ikke perfekt ut, men om det funker :)

 

Tror kanskje jeg har svelgt litt stort?

Lenke til kommentar

Strømtilførsel: batterieliminator på % eller 12 volt og nødvendig antall ampere til det du skal drive (motor og vifter). Hvis du bruker 12V, så tenger du en regulator for 5V til Arduino'en.

Motor: kanskje en motor med gir (10:1 for eksempel) og en tannstang holder? (søk på geared motor på eBay, for eksempel). Vet dessverre ikke hvor du får kjøpt tannstang (prøvde med "toothed rod" og "toothed rack" men fant ikke noe)

Lenke til kommentar

http://arduino.cc/playground/Code/Time

Der kan du lese mer om klokke. Selv synkroniserer jeg klokka i arduinoen via ethernet mot ekstern server.

 

Angående motor så er det vel ikke så farlig om det er 5 eller 12 volt. Om du bruker en 12V strømforsyning til arduinoen kan du hente ut 12V herfra. Det finnes også mange kraftige RC servoer som går 5V som går an å bruke til det her.

 

Viftene vil ikke skru seg av når du først har satt de på sånn du har skrevet det. Du må legge til

digitalWrite(fan_in, LOW);
digitalWrite(fan_out, LOW);

der du vil de skal skru seg av igjen.

 

Jeg vil jo kun ha viftene på akkurat i den else if som jeg har satt. Betyr det at jeg må ha en low på alle andre if?

 

Denne klokken må jo ikke være veldig presis, går det an å definere til arduino at kl er 12, og la den kjøre ca kl 12 en dag? Hørtes ikke perfekt ut, men om det funker :)

 

Tror kanskje jeg har svelgt litt stort?

 

Dette er jo en loop som går om og om igjen. Med en gang den har satt på viftene går koden videre, og viftene vil forbli på. Det du har gjort i koden er å aktivere viftene, og de må manuellt slås av. Så ja, du må sette de til LOW alle andre steder.

 

Du får kjøpt real time klokkemoduler:

https://www.sparkfun.com/products/99

De er ganske nøyaktige :)

 

 

@tingo:

Arduinoen han ser på sier:

Inngangsspenning (anbefales) 7-12V

Så det er bare å kjøre 12V direkte på arduinoen

 

 

Og en annen ting, hvorfor bruke Arduino Nano? Den er mye dyrere enn mange andre typer.

Endret av LaStrada
Lenke til kommentar

Mye bra svar, og jeg har tenkt litt :)

 

Har sett at en del servo motorer kan være sterk nok til å åpne vindu, 2kg er nok til å åpne vinduet, så skal prøve med det.

 

 

....

 

Dette er jo en loop som går om og om igjen. Med en gang den har satt på viftene går koden videre, og viftene vil forbli på. Det du har gjort i koden er å aktivere viftene, og de må manuellt slås av. Så ja, du må sette de til LOW alle andre steder.

 

Du får kjøpt real time klokkemoduler:

https://www.sparkfun.com/products/99

De er ganske nøyaktige :)

 

 

@tingo:

Arduinoen han ser på sier:

Inngangsspenning (anbefales) 7-12V

Så det er bare å kjøre 12V direkte på arduinoen

 

 

Og en annen ting, hvorfor bruke Arduino Nano? Den er mye dyrere enn mange andre typer.

 

Når det gjelder viftene, jeg tenkte på et alternativ til å ha LOW på alle andre if. Gjennom en tutorial jeg har sett har jeg lært litt om while kommandoen. Kan ikke denne brukes til å la loopen stå i den else if. Det jeg mener altså er at etter jeg har sagt at viftene skal starte. Så skriver jeg while(temp_in > temp_out && [Clock between 19-23]); og etter det en LOW?

 

Har kjøpt en slik klokke som du linket til nå, ser ut til å gjøre jobben!

 

Ja Nano er dyrere har jeg merket, men tenkte på størrelse. Nano vil passe på en av viftene. Men fant den på dealextreme.com for 17 USD. Var ikke så galt?

Lenke til kommentar

Tips: (i tilfelle du ikke allerede har tenkt på det) du trenger sannsynligvis en hysterese (engelsk Wikipedia har en bedre artikkel: Hysteresis) på reguleringsfunksjonen din, ellers så kommer viften(e) til å starte og stoppe i ett kjør.

 

Har tenkt litt på det ja, og skal være ærlig å si at jeg er veldig usikker på hvordan jeg løser det. Har en jalla løsning på problemet da, på slutten av koden har jeg satt en delay på 10 minutter. Så skrur dem seg hvertfall bare på og av hvert tiende minutt i værste tilfelle. Om jeg har forstått deg riktig? :)

 

Siste kode jeg har skrevet:

 

 

#include <Servo.h>

Servo window_servo;

 

 

int sensor_in = 0;

int sensor_out = 1;

int fan_in = 8;

int fan_out = 9;

int servo = 10;

 

 

void setup()

{

pinMode(sensor_in, INPUT);

pinMode(sensor_out, INPUT);

pinMode(fan_in, OUTPUT);

pinMode(fan_out, OUTPUT);

 

window_servo.attach(servo);

}

 

void loop()

{

 

int temp_in = analogRead(sensor_in);

int temp_out = analogRead(sensor_out);

 

if (temp_in < temp_out)

{

// [Close window]

window_servo.write(0);

}

 

else if (temp_in == temp_out)

{

// [Do nothing]

}

 

 

else if (temp_in > temp_out /* && Clock between 19-23*/)

{

// Open window & start 2x fan

// Run until temperature changes, turn off 2x fan

 

window_servo.write(180);

 

while(temp_in > temp_out /* && Clock between 19-23*/)

{

digitalWrite(fan_in, HIGH);

digitalWrite(fan_out, HIGH);

}

digitalWrite(fan_in, LOW);

digitalWrite(fan_out, LOW);

}

 

else if (temp_in > temp_out /* && Clock between 23-19*/)

// Open window

{

window_servo.write(180);

}

delay(600000);

}

 

 

 

Har merket noe når jeg har lekt litt med servoen. Den hakker og småbeveger seg når den er utstrekt (180 grader), altså vindu åpen. Noen måte å få den til å låse seg på et vis? Eller er dette en ting man må leve med når man bruker servo? Burde jeg da gå for en motor i stede og en mekanisk løsning som holder vindu, slik at motoren ikke bærer vekta på en måte. Blir vel varmt om servoen må holde på vinduet hele tiden.

 

Ang. Temperatur sensorene. Har forstått det sånn at jeg må kalibrere dem selv. Sånn jeg har forsøkt med en jeg har liggende får jeg en verdi på rundt 55 som svinger opp og ned når jeg påvirker den. Nå er jeg fersk som dere sikkert allerede har forstått, men hvordan? :) Virker som det er veldig mye styr for å få riktig spenning ut. Kan noen fortelle meg hvorfor jeg ikke kan ta, om romtemp er 25 grader, 55 - 30, vil ikke da alle temperaturene mine komme ut korrekt?

 

For strøm har jeg tenkt litt. Har en 230v -> 5V usb lader liggende. Den gir ut 2A. Denne kan jeg jo koble direkte til nano brettet.

Lenke til kommentar

Nå har jeg lest en god del og kommet med en mening, gjerne kritiser og fortell meg hvorfor jeg tar feil :)

 

PID

 

Fant jo her at Arduino faktisk har PID funksjoner og mulighet til fastsette P, I og D verdi. Må innrømme her at jeg ikke helt forstår hvordan automasjonsbiten gjør saken bedre, gjerne utdyp om noen orker/kan. Det jeg uansett konkluderte med var at om jeg bruker 10 minutter delay på hele loopen, så vil ikke dette være så ille. Altså om vifta slår seg på og av hvert tiende minutt mellom kl 19 - 23 så kan jeg leve med det.

 

Motor

 

Ser at lineær aktuator er midt i blinken til det jeg ønsker å gjøre ja. Problemet sånn jeg ser det at det koster skjorta. Evt. Finner man en aktuator som dytter 1-2 cm for en rimelig penge. Ønsker jo 10-15cm sånn ca.

Så jeg er veldig interessert i andre synspunkter på å løse det her.

 

Har skrevet ferdig den komplette koden nå, med klokke, motor og vifter. Men tenker jeg skal vente på delene før jeg deler ut. Om ingen er ekstremt nysgjerrig =)

Lenke til kommentar

Ang. Temperatur sensorene. Har forstått det sånn at jeg må kalibrere dem selv. Sånn jeg har forsøkt med en jeg har liggende får jeg en verdi på rundt 55 som svinger opp og ned når jeg påvirker den. Nå er jeg fersk som dere sikkert allerede har forstått, men hvordan? :) Virker som det er veldig mye styr for å få riktig spenning ut. Kan noen fortelle meg hvorfor jeg ikke kan ta, om romtemp er 25 grader, 55 - 30, vil ikke da alle temperaturene mine komme ut korrekt?

 

Du må kalibrere den. Sensoren skal ha en utgang på 2,732 V ved 0 grader. I henhold til databladet skal du ha en utgang på 2,982 V ved 25 grader C siden sensoren skal gi 0V ved -273,15 grader C.

Slik du leser den av nå leser du av -246,75 grader C. Siden analog referansespenning er 5V og den høyeste verdien du kan lese på analog inngang er 1023 er 5 / 1023 = 0,0048 V eller 4,8 mV = ~ 0,5 grader C den minste forandringen du kan oppdage nå.

Du må kalibrere sensoren.Kaliberer du den til 2,982 V på 25 grader C vil du ha ha korrekt kurve for temperaturstigningen, og den verdien du leser av bør da være rundt 592 istedet for 55. Og du skal kunne lese av temperaturer mellom -273,15 og 226,85 grader C med en nøyaktighet på ~0,5 grader C.

 

 

For å gjøre det lettere å behandle dette i koden kan du bruke map().

Har jeg forstått det rett skal linjen se omtrent slik ut:

 

faktiskTemp = map(temp, 0, 1023, -273, 227);

 

http://www.ti.com/li...mlink/lm335.pdf &--#60;- Datablad

http://arduino.cc/en/Reference/Map &--#60;- Forklaring av map()

 

Hvis du ser neders på siden om map() så ser du hvordan den funksjonen er matematisk. Du kan bytte ut long med float slik at du kan bruke desimaltall istedet for heltall.

 

Problemet med å ta 55 - 30 er at du ikke kan gå under 0 grader. Hvis jeg har forstått det rett så skal du ha en sensor ute, denne vil da være ubrukelig om vinteren, siden den ikke går under 0 grader.

Endret av Nedward
Lenke til kommentar

Det virker som man må gjøre dette, men nå er ikke prosjektet nødvendigvis avhengig av kjempe nøyaktig temperatur måling. Men kan jo være artig å lære seg også :)

 

Nå har prosjektet stoppa opp litt. Viftene går på 12v og jeg sliter derfor litt med å finne en permanent strømforsyning til både arduino og viftene, derfor :)

Lenke til kommentar
  • 4 uker senere...

12V wall wart skal jo være rimelig lett å finne, clas ohlson og biltema har da disse på lager. Nå er jeg usikker på hvordan det er med spenningsregulatorer og arduino nano, men hvis det er det så kan du bare kjøre 12V på den (sjekk i instruksjonene først kanskje). Hvis ikke den vil fungere på 12V så kjøp en spenningsregulator alla LM7805. Du trenger to kondensatorer som eksterne komponenter, men annet enn det er det bare plug and play.

 

Du trenger vel strengt tatt ikke en temperatursensor annet enn en thermistor. Dette er en motstand som varierer verdi med temperaturen. Finn de temperaturene du er interessert i og mål motstanden. Du vil ikke kunne spesifisere nøyaktig temperatur, men du kan jo alltids koble til et potmeter så du kan variere den manuelt.

 

Ang. klokke så kan du bruke en RTC (real time clock). Disse er små chipper som komuniserer med arduinonen serielt og klarer å holde tiden bedre enn arduinoen gjør. Du kan også koble arduinoen til en fotoresistor for å finne ut om det er natt eller dag. Dette kan kanskje bli lite tilfredsstillende med tanke på de forskjellige lysforholdene vi har her i Norge.

 

I koden har du "if (temp_in < temp_out)", temperaturen inne blir vel sjeldent mindre enn temperaturen ute hvis du da ikke har aircondition.

  • Liker 1
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...