INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Temperatur LM35
08.01.2014, 14:44
Beitrag #1
Temperatur LM35
Hallo,

ich muss für eine Projektarbeit unter anderem die Temperatur mit einem LM35 messen, diese auf einem LCD Display ausgeben (die Temperatur soll hier ständig angepasst werden) und als Zusatz sollen Werte die beispielsweise alle 10 Sekunden gemessen werden in einem Array gespeichert werden und noch über den Seriellen Monitor ausgegeben werden. Ebenfalls max und min temperatur. Der Start der serillen ausgabe soll durch eine taste beginnen.
Hier mein vorläufiger Quelltext, aber irgendwie gibt der nichts auf dem seriellen Monitor aus. Habt ihr eine Idee?



int pin = 0; // analoger pin Eingang
int tempc = 0; // Temperatur Variable
int atemp[90]; // Array
int maxi = -100, mini = 100; // maximale und minimale Temperatur
int i;
int key;
float temperaturlcd;
void setup()
{
Serial.begin(9600); // Starte serielle Kommunikation
}

void loop()
{
temperaturlcd = ( 5.0 * analogRead(pin) * 100.0) / 1024.0;

lcd.print(temperaturlcd,1);
//hier soll die Ausgabe auf das LCD Display hin, nur wie genau muss die aussehen??
delay (500)

for(i = 0; i <= 90; i++) { // 90 Temperaturen werden berechnet, alle 10 Sekunden
atemp[i] = ( 5.0 * analogRead(pin) * 100.0) / 1024.0;
tempc = tempc + atemp[i];
delay(10000); //10 Sekunden bis zur nächsten Messung
}



tempc = tempc/90.0; // Mittelwert wird berechnet


if (tempc > maxi) {
maxi = tempc;
} // maximale Temperatur

if (tempc < mini) {
mini = tempc;
} // minimnale Temperatur





key=Serial.read();
if (key=='s')
{

Serial.print(tempc,DEC);
Serial.print(" Celsius, ");
Serial.print(maxi,DEC);
Serial.print(" Max, ");
Serial.print(mini,DEC);
Serial.println(" Min");
}

tempc = 0;

delay(1000); // warten
}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
08.01.2014, 17:03
Beitrag #2
RE: Temperatur LM35
1. Ich würde mal nach Serial.begin etwas ausgeben
2. Nach einer Eingabe würde ich die Eingabe erst mal ausgeben bevor ich diese prüfe,

Gruß
Hans-Jürgen
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
08.01.2014, 20:02 (Dieser Beitrag wurde zuletzt bearbeitet: 08.01.2014 20:17 von mauricio1893.)
Beitrag #3
RE: Temperatur LM35
Hallo,

also hier mal das ganze projekt:
Die Frage ist immernoch die gleich die ich oben schon beschrieben habe.
Hinzugekommen ist jedoch noch folgende:

Wenn wir den array Teil aktiviert haben, führt er den Rest nicht mehr aus, woran liegt das und wie können wir es umgehen?
Könnte es an dem Delay liegen? Kann man deshalb nicht mehrere Teile gleichzeitig ausführen?
Vielen Dank schon einmal

Hinzugekommen ist noch: Wenn der Alarm ertönt ist, zeigt der Bildschirm nur noch wirre Sachen an.

#include <Time.h>
#include <LiquidCrystal.h>
#include <TimeAlarms.h>

#define sensorexit 1
int tempc = 0; // Temperatur Variable
int atemp[91]; // Array
int maxi = -100, mini = 100; // maximale und minimale Temperatur
int i;
float temperaturlcd;

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);


const int cycles =20;
const int DELAY =10;

int Stunde,Minute,Tag,Monat,Jahr;
int as,am;

byte pin_button1=6;
byte pin_button2=7;
unsigned long prevtime;



/*/-----------------------------------------------------------/*/


void setup()
{
lcd.begin(16, 2);
Serial.begin(9600);
pinMode(pin_button1, INPUT);
pinMode(pin_button2, INPUT);
AlarmAnzeige();
Uhr();
setTime(Stunde,Minute,0,Tag,Monat,Jahr);
Alarm.alarmRepeat(as,am,0,TonAlarm);
}

void loop()
{
Temperatur();
Zeitstellen();
AnzeigeUhr();
Alarm.delay(1000);
Uhr();


// delay(1000);

}

void Uhr() {

Stunde=19;
Minute=27;
Tag=8;
Monat=1;
Jahr=14;

}
void AlarmAnzeige()
{

as=19;
am=30;

lcd.setCursor(9,0);
lcd.print("A:");
if(as < 10)
lcd.print('0');
lcd.print(as);
lcd.print(":");
if(am < 10)
lcd.print('0');
lcd.print(am);


}


void Zeitstellen()
{
prevtime= now();
while(prevtime==now())
{
if (checkSetTime())
prevtime=now();
}

}


boolean checkSetTime()
{
int step;
boolean isTimeAdjusted=false;
step=1;
while(digitalRead(pin_button1)==HIGH)
{
adjustTime(step);
isTimeAdjusted=true;
step=step+1;
AnzeigeUhr();
delay(100);
}
step=-1;
while(digitalRead(pin_button2)==HIGH)
{
adjustTime(step);
isTimeAdjusted=true;
step=step-1;
AnzeigeUhr();
delay(100);
}
return isTimeAdjusted;
}




void AnzeigeUhr(){
lcd.setCursor(0,0);
// Digitalanzeige der Zeit
printnull(hour());
lcd.print(":");
printnull(minute());
lcd.print("Uhr");
lcd.setCursor(0,1);
printnull(day());
lcd.print(".");
printnull(month());
lcd.print(".");
lcd.print(year());

}

void printnull(int d){


if(d < 10)
lcd.print('0');
lcd.print(d);
}




void Temperatur() {

lcd.setCursor(11,1);

float resultTemp=0.0;
for (int i = 0; i<cycles;i++){
int analogValue = analogRead(sensorexit);
float temperature = (5.0 * 100.0 * analogValue) / 1024;
resultTemp += temperature;
delay(DELAY);

}
resultTemp /= cycles;
lcd.print(resultTemp,1);
lcd.print("C");

TempAuswertung();

}



void TonAlarm() {

noTone(9); // schalten Ton ab
tone(9, 100, 100); // geben Ton 100 Hz, Dauer 100 ms an Pin 9 aus
delay(500); // warten 500 ms
noTone(9); // schalten Ton ab
tone(9, 500, 500); // geben Ton 500 Hz, Dauer 500 ms an Pin 9 aus
delay(500); // 500 ms
noTone(9); // schalten Ton ab
tone(9, 1000, 1000); // geben Ton 1000 Hz, Dauer 1 s an Pin 9 aus
delay(500); // 500 ms
noTone(9); // schalten Ton ab
tone(9, 2000, 1500); // geben Ton 2000 Hz, Dauer 1,5 s an Pin 9 aus
delay(500); // 500 ms
noTone(9); // schalten Ton ab
tone(9, 1500, 1000); // geben Ton 1050 Hz, Dauer 1 s an Pin 9 aus
delay(500); // 500 ms
noTone(9); // schalten Ton ab
tone(9, 1000, 2000); // geben Ton 1000 Hz, Dauer 2 s an Pin 9 aus
delay(500); // 500 ms
}



void TempAuswertung()
{

for(i = 0; i <= 90; i++) // 90 Temperaturen werden berechnet, alle 10
Sekunden
{
atemp[i] = ( 5.0 * analogRead(sensorexit) * 100.0) / 1024.0;
tempc = tempc + atemp[i];
delay(1000); //1 Sekunde bis zur nächsten Messung
}



tempc = tempc/90.0; // Mittelwert wird berechnet


if (tempc > maxi) {
maxi = tempc;
} // maximale Temperatur

if (tempc < mini) {
mini = tempc;
} // minimnale Temperatur


Serial.print(tempc,DEC);
Serial.print(" Celsius, ");
Serial.print(maxi,DEC);
Serial.print(" Max, ");
Serial.print(mini,DEC);
Serial.println(" Min");


tempc = 0;

delay(1000); // warten
}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Servo über Temperatur steuern querkopf71 3 82 07.12.2016 19:21
Letzter Beitrag: hotsystems
  Temperatur mit nrf24 übertragen jgrothe 17 687 09.09.2016 14:01
Letzter Beitrag: jgrothe
  Problem bei Temperatur/volt Ampere Abfrage LCD Flimmern nuernie66 9 647 04.03.2016 19:25
Letzter Beitrag: hotsystems
  Temperatur auf 3,2 Zoll TFT Anzeigen jgrothe 12 1.901 04.07.2015 17:06
Letzter Beitrag: jgrothe
  [geteilt] DHT22 Temperatur- / Luftfeuchte-Sensor akrecok 1 1.702 10.11.2014 11:38
Letzter Beitrag: RMR
  Temperatur prokonp 2 970 10.11.2014 10:00
Letzter Beitrag: Thorsten Pferdekämper
  Peltier-Element, Temperatur unter die Raumtemperatur bringen Cray-1 43 9.000 25.10.2014 12:02
Letzter Beitrag: Cray-1
  PT100-Messverstärkerschaltung auslesen und in Temperatur umwandeln Cray-1 35 12.490 07.10.2014 18:20
Letzter Beitrag: ardu_arne
  Temperatur auf Lan ausgeben iselein 13 9.021 05.01.2014 15:57
Letzter Beitrag: Bitklopfer
  Programm um Temperatur- und Feuchtigkeitsdaten auf Sd-Karte zu schreiben Cray-1 4 6.258 12.12.2013 23:09
Letzter Beitrag: P.Martin

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste