fancontroler aanpassen van 1 naar 8 sensers
- Spikey1973
- Berichten: 43
- Geregistreerd: 28 Jul 2016, 14:37
fancontroler aanpassen van 1 naar 8 sensers
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
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
- nicoverduin
- Berichten: 5043
- Geregistreerd: 13 Mei 2013, 20:57
- Woonplaats: Heemskerk
Re: fancontroler aanpassen van 1 naar 8 sensers
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.
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.
- Gij Kieken
- Berichten: 631
- Geregistreerd: 15 Nov 2015, 11:54
Re: fancontroler aanpassen van 1 naar 8 sensers
Syntax foutje,
val = analogRead(analogPin);
val = analogRead(analogPin);
- Spikey1973
- Berichten: 43
- Geregistreerd: 28 Jul 2016, 14:37
Re: fancontroler aanpassen van 1 naar 8 sensers
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
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
- nicoverduin
- Berichten: 5043
- Geregistreerd: 13 Mei 2013, 20:57
- Woonplaats: Heemskerk
Re: fancontroler aanpassen van 1 naar 8 sensers
Waar dan?Gij Kieken schreef:Syntax foutje,
val = analogRead(analogPin);
- nicoverduin
- Berichten: 5043
- Geregistreerd: 13 Mei 2013, 20:57
- Woonplaats: Heemskerk
Re: fancontroler aanpassen van 1 naar 8 sensers
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.
- nicoverduin
- Berichten: 5043
- Geregistreerd: 13 Mei 2013, 20:57
- Woonplaats: Heemskerk
Re: fancontroler aanpassen van 1 naar 8 sensers
Dit compileert goed:
cpp code
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;
}
- Gij Kieken
- Berichten: 631
- Geregistreerd: 15 Nov 2015, 11:54
Re: fancontroler aanpassen van 1 naar 8 sensers
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
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
- nicoverduin
- Berichten: 5043
- Geregistreerd: 13 Mei 2013, 20:57
- Woonplaats: Heemskerk
Re: fancontroler aanpassen van 1 naar 8 sensers
Je bent toch geen vrouw? Alleen vrouwen kunnen multitaskenGij Kieken schreef:ik moet beter leren kijken maar ben met een paar zaken tegelijk bezig
- Gij Kieken
- Berichten: 631
- Geregistreerd: 15 Nov 2015, 11:54
Re: fancontroler aanpassen van 1 naar 8 sensers
Dat was het hem net, de vrouw des huizes heeft allerhande klusjes tussendoor.
Wie is er online?
Gebruikers in dit forum: Geen geregistreerde gebruikers en 26 gasten