fancontroler aanpassen van 1 naar 8 sensers

algemene C code
Gebruikers-avatar
Berichten: 43
Geregistreerd: 28 Jul 2016, 14:37

fancontroler aanpassen van 1 naar 8 sensers

Berichtdoor Spikey1973 » 28 Jul 2016, 15:10

Hallo guys and gals,

ik ben nieuw hier op t forum, nieuw met arduino en nieuw met programmeren.
In het verleden heb ik wat zitten rommellen met C++ en nu wat aan t kijken naar Python maar echt ervaren kan je me niet noemen.

Nu ben ik een versterker aan t bouwen met muziek speler en wil een compleet seperate fancontroler inbouwen dat normaal uit staat en aanschiet wanneer de heatsinks van een van de 8 sensors te hoog wordt.

hiervoor heb ik geprobeerd dit stuk code voor 1 sensor aan te passen.

http://www.electroschematics.com/9540/a ... mperature/

en denk redelijk ver te zijn gekomen voor een onervaren iemand maar blijf op een foutmelding lopen die vast heel simpel op te lossen is maar waarvan ik de oplossing toch niet precies zie.

ik voeg probeer de gehele code bij als bijlage.
de error is in regel 94 waar ik probeer de waarde van sensor1 "temp1" gelijk te stellen aan de waarde voor de max temp "tempHigh"
echter dit lukt niet op deze manier.

in de verdere else if loops probeer ik dan de waarde van tempHigh te veranderen als de waarde van sensors 2-8 hoger zijn dan 1 en zo de heetste heatsink op te sporen.


blijkbaar kan de extensie .ino niet worden bijgevoegd (dit is toch een arduino forum? anyway) ik post de code dan maar hier onder in ze geheel. excuus voor de lange past dan.

alvast bedankt voor enige hints en tips.

en als ik qua forum regels iets doe dat neit gepast is laat t me weten aub. dit was iig dan niet de intentie.

De Code:
cpp code
#include <LiquidCrystal.h>
//source: http://www.electroschematics.com/9540/a ... mperature/
LiquidCrystal lcd(7,6,5,4,3,2);
int tempPin1 = A1; // the output pin of LM35-1
int tempPin2 = A2; // the output pin of LM35-2
int tempPin3 = A3; // the output pin of LM35-3
int tempPin4 = A4; // the output pin of LM35-4
int tempPin5 = A5; // the output pin of LM35-5
int tempPin6 = A6; // the output pin of LM35-6
int tempPin7 = A7; // the output pin of LM35-7
int tempPin8 = A0; // the output pin of LM35-8
int fan = 11; // the pin where fan is
int led = 8; // led pin, mogelijks laten vervallen
int temp1;
int temp2;
int temp3;
int temp4;
int temp5;
int temp6;
int temp7;
int temp8;
int tempHigh;
int tempMin = 30; // the temperature to start the fan
int tempMax = 70; // the maximum temperature when fan is at 100%
int fanSpeed;
int fanLCD;

void setup() {
pinMode(fan, OUTPUT);
pinMode(led, OUTPUT);
pinMode(tempPin1, INPUT);
pinMode(tempPin2, INPUT);
pinMode(tempPin3, INPUT);
pinMode(tempPin4, INPUT);
pinMode(tempPin5, INPUT);
pinMode(tempPin6, INPUT);
pinMode(tempPin7, INPUT);
pinMode(tempPin8, INPUT);
lcd.begin(16,2);
}

void loop() {
temp1 = readTemp1(); // get the temperature
temp2 = readTemp2(); // get the temperature
temp3 = readTemp3(); // get the temperature
temp4 = readTemp4(); // get the temperature
temp5 = readTemp5(); // get the temperature
temp6 = readTemp6(); // get the temperature
temp7 = readTemp7(); // get the temperature
temp8 = readTemp8(); // get the temperature
if(temp1 && temp2 && temp3 && temp4 && temp5 && temp6 && temp7 && temp8 < tempMin) { // if temps are lower than minimum temp
fanSpeed = 0; // fan is not spinning
digitalWrite(fan, LOW);
}
if((tempHigh >= tempMin) && (tempHigh <= tempMax)) { // if temperature is higher than minimum temp
fanSpeed = map(tempHigh, tempMin, tempMax, 32, 255); // the actual speed of fan
fanLCD = map(tempHigh, tempMin, tempMax, 0, 100); // speed of fan to display on LCD
analogWrite(fan, fanSpeed); // spin the fan at the fanSpeed speed
}

if(tempHigh > tempMax) { // if temp1 is higher than tempMax
digitalWrite(led, HIGH); // turn on led
} else { // else turn of led
digitalWrite(led, LOW);
}

lcd.print("Temp High: ");
lcd.print(tempHigh); // display the highest temperature
lcd.print(", Temp\'s: ");
lcd.print(temp1); // display the temperature
lcd.print(",");
lcd.print(temp2); // display the temperature
lcd.print(",");
lcd.print(temp3); // display the temperature
lcd.print(",");
lcd.print(temp4); // display the temperature
lcd.print(",");
lcd.print(temp5); // display the temperature
lcd.print(",");
lcd.print(temp6); // display the temperature
lcd.print(",");
lcd.print(temp7); // display the temperature
lcd.print(",");
lcd.print(temp8); // display the temperature
lcd.print("C");
lcd.setCursor(0,1); // move cursor to next line
lcd.print("FANS: ");
lcd.print(fanLCD); // display the fan speed
lcd.print("%");
delay(200);
lcd.clear();
}

tempHigh = temp1
if (temp2 > tempHigh) {
tempHigh = temp2;
}
else if (temp3 > tempHigh) {
tempHigh = temp3;
}
else if (temp4 > tempHigh) {
tempHigh = temp4;
}
else if (temp5 > tempHigh) {
tempHigh = temp5;
}
else if (temp6 > tempHigh) {
tempHigh = temp6;
}
else if (temp7 > tempHigh) {
tempHigh = temp7;
}
else if (temp8 > tempHigh) {
tempHigh = temp8;
}
}

int readTemp1() { // get the temperature and convert it to celsius
temp1 = analogRead(tempPin1);
return temp1 * 0.48828125;
}

int readTemp2() { // get the temperature and convert it to celsius
temp2 = analogRead(tempPin2);
return temp2 * 0.48828125;

}

int readTemp3() { // get the temperature and convert it to celsius
temp3 = analogRead(tempPin3);
return temp3 * 0.48828125;
}

int readTemp4() { // get the temperature and convert it to celsius
temp4 = analogRead(tempPin4);
return temp4 * 0.48828125;
}

int readTemp5() { // get the temperature and convert it to celsius
temp5 = analogRead(tempPin5);
return temp5 * 0.48828125;
}

int readTemp6() { // get the temperature and convert it to celsius
temp6 = analogRead(tempPin6);
return temp6 * 0.48828125;
}

int readTemp7() { // get the temperature and convert it to celsius
temp7 = analogRead(tempPin7);
return temp7 * 0.48828125;
}

int readTemp8() { // get the temperature and convert it to celsius
temp8 = analogRead(tempPin8);
return temp8 * 0.48828125;
}

Advertisement

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: fancontroler aanpassen van 1 naar 8 sensers

Berichtdoor nicoverduin » 28 Jul 2016, 16:30

Er moet een ';' achter die regel. Het is geen basic :) Daarnaast moet die sluit accolade erboven weg en helemaal naar het einde van het programma

De tempx variabelen moeten een float zijn anders heb je geen decimalen.

Al die readTemp functies moeten een float terug geven.... enz enz... Ik zou eerst maar eens wat tutorials gaan doen....

En wat voor bordje gebruik je eigenlijk omdat je A0-A7 gebruikt?

Je display wordt een zooitje.... Je wilt veel meer data op het scherm schrijven dan er op 2 regels van 16 tekens gaan passen. En hij gaat lekker knipperen omdat je aan het einde van de loop het scherm weer wist.

Er zijn nog wel een hele batterij mogelijkheden om de code te simplificeren maar krijg dit eerst maar aan de praat.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Gebruikers-avatar
Berichten: 631
Geregistreerd: 15 Nov 2015, 11:54

Re: fancontroler aanpassen van 1 naar 8 sensers

Berichtdoor Gij Kieken » 28 Jul 2016, 16:33

Syntax foutje,
val = analogRead(analogPin);

Gebruikers-avatar
Berichten: 43
Geregistreerd: 28 Jul 2016, 14:37

Re: fancontroler aanpassen van 1 naar 8 sensers

Berichtdoor Spikey1973 » 28 Jul 2016, 16:41

hoi dankje,

heb er een ; achter gezet ( tempHigh = temp1;) maar blijf dezelfde foutmelding houden.
is die else if statement zo correct gebruikt?

ik heb een arduino clone Nano 3.0 Atmega328P boardje.

is er iets mis mee dat te gebruiken? dat is zoals de contacten op het board genoemd zijn vandaar dat ik het zo gebruikt heb.

Vriendelijke groet

Matthieu

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: fancontroler aanpassen van 1 naar 8 sensers

Berichtdoor nicoverduin » 28 Jul 2016, 16:52

Gij Kieken schreef:Syntax foutje,
val = analogRead(analogPin);
Waar dan?
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: fancontroler aanpassen van 1 naar 8 sensers

Berichtdoor nicoverduin » 28 Jul 2016, 16:54

Spikey1973 schreef:hoi dankje,

heb er een ; achter gezet ( tempHigh = temp1;) maar blijf dezelfde foutmelding houden.
is die else if statement zo correct gebruikt?

ik heb een arduino clone Nano 3.0 Atmega328P boardje.

is er iets mis mee dat te gebruiken? dat is zoals de contacten op het board genoemd zijn vandaar dat ik het zo gebruikt heb.

Vriendelijke groet

Matthieu

a) Je hebt geen 8 analoge poorten op dat bordje. De Atmega 328P heeft er maar 7. Geen idee of op de Nano A6 en A7 naar buiten worden gevoerd.
b) Zet ALLE foutboodschappen maar eens hier die je krijgt.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: fancontroler aanpassen van 1 naar 8 sensers

Berichtdoor nicoverduin » 28 Jul 2016, 17:01

Dit compileert goed:
cpp code
#include <LiquidCrystal.h>
//source: <!-- m --><a class="postlink" href="http://www.electroschematics.com/9540/arduino-fan-speed-controlled-temperature/">http://www.electroschematics.com/9540/a ... mperature/</a><!-- m -->
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);
int tempPin1 = A1; // the output pin of LM35-1
int tempPin2 = A2; // the output pin of LM35-2
int tempPin3 = A3; // the output pin of LM35-3
int tempPin4 = A4; // the output pin of LM35-4
int tempPin5 = A5; // the output pin of LM35-5
int tempPin6 = A6; // the output pin of LM35-6
int tempPin7 = A7; // the output pin of LM35-7
int tempPin8 = A0; // the output pin of LM35-8
int fan = 11; // the pin where fan is
int led = 8; // led pin, mogelijks laten vervallen
int temp1;
int temp2;
int temp3;
int temp4;
int temp5;
int temp6;
int temp7;
int temp8;
int tempHigh;
int tempMin = 30; // the temperature to start the fan
int tempMax = 70; // the maximum temperature when fan is at 100%
int fanSpeed;
int fanLCD;

void setup() {
pinMode(fan, OUTPUT);
pinMode(led, OUTPUT);
pinMode(tempPin1, INPUT);
pinMode(tempPin2, INPUT);
pinMode(tempPin3, INPUT);
pinMode(tempPin4, INPUT);
pinMode(tempPin5, INPUT);
pinMode(tempPin6, INPUT);
pinMode(tempPin7, INPUT);
pinMode(tempPin8, INPUT);
lcd.begin(16, 2);
}

void loop() {
temp1 = readTemp1(); // get the temperature
temp2 = readTemp2(); // get the temperature
temp3 = readTemp3(); // get the temperature
temp4 = readTemp4(); // get the temperature
temp5 = readTemp5(); // get the temperature
temp6 = readTemp6(); // get the temperature
temp7 = readTemp7(); // get the temperature
temp8 = readTemp8(); // get the temperature
if (temp1 && temp2 && temp3 && temp4 && temp5 && temp6 && temp7
&& temp8 < tempMin) { // if temps are lower than minimum temp
fanSpeed = 0; // fan is not spinning
digitalWrite(fan, LOW);
}
if ((tempHigh >= tempMin) && (tempHigh <= tempMax)) { // if temperature is higher than minimum temp
fanSpeed = map(tempHigh, tempMin, tempMax, 32, 255); // the actual speed of fan
fanLCD = map(tempHigh, tempMin, tempMax, 0, 100); // speed of fan to display on LCD
analogWrite(fan, fanSpeed); // spin the fan at the fanSpeed speed
}

if (tempHigh > tempMax) { // if temp1 is higher than tempMax
digitalWrite(led, HIGH); // turn on led
} else { // else turn of led
digitalWrite(led, LOW);
}

lcd.print("Temp High: ");
lcd.print(tempHigh); // display the highest temperature
lcd.print(", Temp\'s: ");
lcd.print(temp1); // display the temperature
lcd.print(",");
lcd.print(temp2); // display the temperature
lcd.print(",");
lcd.print(temp3); // display the temperature
lcd.print(",");
lcd.print(temp4); // display the temperature
lcd.print(",");
lcd.print(temp5); // display the temperature
lcd.print(",");
lcd.print(temp6); // display the temperature
lcd.print(",");
lcd.print(temp7); // display the temperature
lcd.print(",");
lcd.print(temp8); // display the temperature
lcd.print("C");
lcd.setCursor(0, 1); // move cursor to next line
lcd.print("FANS: ");
lcd.print(fanLCD); // display the fan speed
lcd.print("%");
delay(200);
lcd.clear();

tempHigh = temp1;
if (temp2 > tempHigh) {
tempHigh = temp2;
} else if (temp3 > tempHigh) {
tempHigh = temp3;
} else if (temp4 > tempHigh) {
tempHigh = temp4;
} else if (temp5 > tempHigh) {
tempHigh = temp5;
} else if (temp6 > tempHigh) {
tempHigh = temp6;
} else if (temp7 > tempHigh) {
tempHigh = temp7;
} else if (temp8 > tempHigh) {
tempHigh = temp8;
}
}

int readTemp1() { // get the temperature and convert it to celsius
temp1 = analogRead(tempPin1);
return temp1 * 0.48828125;
}

int readTemp2() { // get the temperature and convert it to celsius
temp2 = analogRead(tempPin2);
return temp2 * 0.48828125;

}

int readTemp3() { // get the temperature and convert it to celsius
temp3 = analogRead(tempPin3);
return temp3 * 0.48828125;
}

int readTemp4() { // get the temperature and convert it to celsius
temp4 = analogRead(tempPin4);
return temp4 * 0.48828125;
}

int readTemp5() { // get the temperature and convert it to celsius
temp5 = analogRead(tempPin5);
return temp5 * 0.48828125;
}

int readTemp6() { // get the temperature and convert it to celsius
temp6 = analogRead(tempPin6);
return temp6 * 0.48828125;
}

int readTemp7() { // get the temperature and convert it to celsius
temp7 = analogRead(tempPin7);
return temp7 * 0.48828125;
}

int readTemp8() { // get the temperature and convert it to celsius
temp8 = analogRead(tempPin8);
return temp8 * 0.48828125;
}
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Gebruikers-avatar
Berichten: 631
Geregistreerd: 15 Nov 2015, 11:54

Re: fancontroler aanpassen van 1 naar 8 sensers

Berichtdoor Gij Kieken » 28 Jul 2016, 17:26

Nico ik meende in de loop,behoedens alle andere zaken zoals jij er een paar opsomde
temp1 = readTemp1(); // get the temperature
dat je analogRead moest gebruiken

had niet verder gelezen, zijn functie aanroepen (Excuses)
ik moet beter leren kijken maar ben met een paar zaken tegelijk bezig

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: fancontroler aanpassen van 1 naar 8 sensers

Berichtdoor nicoverduin » 28 Jul 2016, 17:38

Gij Kieken schreef:ik moet beter leren kijken maar ben met een paar zaken tegelijk bezig
Je bent toch geen vrouw? Alleen vrouwen kunnen multitasken :mrgreen: :mrgreen:
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Gebruikers-avatar
Berichten: 631
Geregistreerd: 15 Nov 2015, 11:54

Re: fancontroler aanpassen van 1 naar 8 sensers

Berichtdoor Gij Kieken » 28 Jul 2016, 17:42

Dat was het hem net, de vrouw des huizes heeft allerhande klusjes tussendoor.

Volgende

Terug naar C code

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 26 gasten