Show Posts
Pages: [1]
1  International / Deutsch / Re: LM35 und Spannungsmessung (Ain) on: January 26, 2013, 04:46:00 am
Ich habe versucht andere Analogeingänge für die Spannung bzw. die Temperatur zu nutzen. Sobald ich zwei Analogeingänge einlese, springt die ausgelesene Temperatur ständig. Ich hab auch schon versucht die beiden Berechnnungen wegzulassen. Das macht das Ganze nicht besser.

Ich habe dann aus Verzweiflung einen Pulldown Widerstand reingehängt und siehe da, es funktioniert! Ich habe im Datenblatt gesehen, dass man einen Widerstand gegen -V reinhängen kann. Aber woher eine negative Spannung nehmen? Warum nicht gegen GND? Mache ich etwas kaputt?

2  International / Deutsch / Re: LM35 und Spannungsmessung (Ain) on: January 25, 2013, 11:36:33 am
@sth77

ich habe als lösung herausgefunden, dass ich einen pulldown widerstand an den LM35 hängen muss. Das wusste ich, als ich die Zeichnung erstellt habe ja noch nicht.

das mit der 1024... ja da bin ich auf dem holzweg ;-)
3  International / Deutsch / Re: LM35 und Spannungsmessung (Ain) on: January 25, 2013, 11:10:23 am
Hab die Lösung gefunden!
Ich habe einen 10KOhm Widerstand als Pulldown an den LM35 gehängt!

@sth77

ich teile ja aber auch noch durch 1024. und dann passts...

@spaceball

da hast du recht, aber das war nicht das Problem! ;-)
4  International / Deutsch / Re: LM35 und Spannungsmessung (Ain) on: January 25, 2013, 09:18:42 am
Hier mal ein Minimalbeispiel:

Code:
 
   
void setup() {
  Serial.begin(9600);
 
}
 
 
 void loop()
{   
   
      delay(1000);
      int sensorValue = analogRead(A1);
      int temp = (5 * sensorValue * 100) / 1024;
      int v = analogRead(A2);
      int voltage = v/102;
   
    Serial.println(temp);
    Serial.println(voltage);
}

Der Aufbau ist derselbe. Der Code liest die Spannung und die Temperatur aus.
Funktioniert ebensowenig. Die Spannung stimmt, die Temperatur hingegen nicht.

Der serielle Output ist in der Regel sowas hier:
   
5
15
5
25
5
19
5
23
5
17
5
14
5
26
5
21
5
18
5
17
5
21
5
21
5
20
5
23
5
20
5
27
5
18
5
15
5
26
5  International / Deutsch / LM35 und Spannungsmessung (Ain) on: January 25, 2013, 09:11:29 am
Hallo
ich bin gerade dabei mir eine Steuerung für eine Helmlampe fürs Biken zu entwickeln. Das Ganze kommt in ein kleines Aluminiumgehäuse auf dem Helm uns soll mit einem ATtiny85 realisiert werden. Programmieren werde ich mit einem Arduino UNO als ISP. Ich werde also auch in Arduino Programmieren.
Um alles erst einmal zu simulieren, benutze ich einen Arduino.

Die Steuerung soll folgendes machen:

-Temperatur des Gehäuses mit einem LM35 überwachen. Bei steigender Temperatur sinkt der LED-Strom.
-Taster zum Ein/Ausschalten und durchschalten der Modi
-Ansteuerung der KSQ(Konstanststromquelle) mit PWM
-Akkuspannungsüberwachung, sobald gewisse Spannungen unterschritten werden blinkt die LED oder geht aus.

Hier mal ein Bild der Schaltung:



Mein Problem ist, dass die Temperaturmessung nur funktioniert wenn ich die Spannungsmessung ausschalte.
Was mache ich falsch?
Die Eingänge beeinflussen sich wohl gegenseitig...


Und hier der Code:
Code:
int temp = 0;
int sensorValue =0;
const int buttonPin = A0;
const int ledPin = 3;
int buttonPresses = 1;
int buttonState;             // the current reading from the input pin
int lastButtonState = LOW;   // the previous reading from the input pin
int zeit = 0;
int schutzwert = 0;
int tempMax1 = 24;  //Schalttemperatur
int tempMax2 = 26;  //Schalttemperatur
int tempMax3 = 28;  //Schalttemperatur
int leistungsFaktorTemp =10;
float leistungsFaktorVolt =1;
int i=0;
float v =0;
float voltage =0;
int voltagevar = 1;
int once = 0;

// the following variables are long's because the time, measured in miliseconds,
// will quickly become a bigger number than can be stored in an int.
long lastDebounceTime = 0;  // the last time the output pin was toggled
long debounceDelay = 30;   // the debounce time; increase if the output flickers
long previousMillis = 0;        // will store last time LED was updated
long interval = 5000;

void setup() {
  Serial.begin(9600);
  pinMode(ledPin, OUTPUT);
}

void loop()

//####### Temp ################################################################
  sensorValue = analogRead(A1);
  temp = (sensorValue * 500) / 1024;
  Serial.println(temp);
  delay(1);
//####### Volt ################################################################
  v = analogRead(A2);
  voltage = v/102;
 
 
//####### Button ################################################################
  int reading = digitalRead(buttonPin);
  if (reading != lastButtonState) {
   
    lastDebounceTime = millis();
  }
 if ((millis() - lastDebounceTime) > debounceDelay) {
    // whatever the reading is at, it's been there for longer
    // than the debounce delay, so take it as the actual current state:
    buttonState = reading;
  }
    if (reading > lastButtonState) {     
    buttonPresses++;
   
  }

  // save the reading.  Next time through the loop,
  // it'll be the lastButtonState:
  lastButtonState = reading;

 if(buttonPresses >= 4){
   buttonPresses = 1;
  }
 
 
   unsigned long currentMillis = millis();
 
  if(currentMillis - previousMillis > interval) {
    previousMillis = currentMillis; 

     
     //Serial.println(temp);
     //Serial.println(sensorValue);
   
     if(temp < tempMax1){
      leistungsFaktorTemp=10;
      }
      if(temp >= tempMax1){
      leistungsFaktorTemp=5;
      }
      if(temp >= tempMax2){
      leistungsFaktorTemp=3;
      }
      if(temp >= tempMax3){
      leistungsFaktorTemp=0;
      }
     
     
     
     
     
      if(voltage > 6.12)
      {
      voltagevar = 1;
      }
      if(voltage <= 6.12 && voltage > 4.9)
      {
      voltagevar = 2;
      }
      if(voltage <= 4.9)
      {
      voltagevar = 3;
      }
     
      switch (voltagevar)
    {
   
    case 1:
      leistungsFaktorVolt = 1;
      break;
    case 2:
    if(once==0){
      analogWrite(ledPin, 255);
      delay(300);
      analogWrite(ledPin, 30);
      delay(300);
      analogWrite(ledPin, 255);
      delay(300);
      analogWrite(ledPin, 30);
      delay(300);
      analogWrite(ledPin, 255);
      delay(300);
      analogWrite(ledPin, 30);
      delay(300);
      analogWrite(ledPin, 255);
      delay(300);
      analogWrite(ledPin, 30);
      delay(300);
      leistungsFaktorVolt = 1;
      once = 1;}
      break;
    case 3:
      leistungsFaktorVolt = 0;
     
      break;
    }
   
     
     
     
     
     
   }
   //Serial.println(buttonPresses);
  switch (buttonPresses)
    {
   case 0:
     analogWrite(ledPin, 0);
     break;
    case 1:
      analogWrite(ledPin, 3*leistungsFaktorTemp*leistungsFaktorVolt);
      break;
    case 2:
      analogWrite(ledPin, 8*leistungsFaktorTemp*leistungsFaktorVolt);
      break;
    case 3:
      analogWrite(ledPin, 25*leistungsFaktorTemp*leistungsFaktorVolt);
      //Serial.println(25*leistungsFaktor);
      break;
    }
   
 
 //Serial.println(voltage);
 //Serial.println("\t");
 //Serial.println(leistungsFaktorVolt);
 //Serial.println(leistungsFaktorTemp);
 //Serial.print(25*leistungsFaktorTemp*leistungsFaktorVolt);
 //Serial.println("");
 
}

Pages: [1]