Skocz do zawartości

Kurs Arduino II - #7 - termometry analogowe i cyfrowe


Pomocna odpowiedź

Tak, wiem. Nie dało się edytować, od razu dodałem już odpowiedni.

 

Wydaje mi się, że częstotliwość "odpytywania" czujnika nie ma tutaj wpływu, bo aktualna temperatura wyświetla się zawsze prawidłowo. Maksymalna tak samo. Ale bawię się od 3 tygodni więc wiedzę i doświadczenia za bardzo nie mam. I pomysłu co zrobić, by to zadziałało. Ciekawe jest to, że przekopałem sieć i w kilku znalezionych przykładach kod wygląda w ten sam sposób i podobno działa. 

Link do komentarza
Share on other sites

12 godzin temu, gracjuszek10 napisał:

aktualna temperatura wyświetla się zawsze prawidłowo

Bo problem jest w początkowym ustalaniu TempMin.

TempMin odczytywana jest jako druga, zbyt szybko po TempMax, więc otrzymuje wartość 0.

Przy dalszych pomiarach temperatura aktualna jest zawsze większa od 0, więc minimalna pozostaje bez zmian.

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Dnia 1.12.2023 o 12:37, Santiago napisał:

Jak inicjujesz zmienną TemperaturaMin tonadaj jej wartość np 50.  Bo jak ma 0 to co ma być zmieniane ?

Tak też robiłem i nadal nie działało. Ten  kod to po prostu jeden z wielu które próbowałem. 

 

Problem już rozwiązany. Faktycznie problemem było to, że tuż po resecie czujnik "pokazywał" temperaturę 0 stopni. Wystarczyło pierwsze pomiary opóźnić o kilka sekund.

Dziękuję za pomoc.

Edytowano przez gracjuszek10
  • Lubię! 1
Link do komentarza
Share on other sites

Zadanie 7.2

#define LM35_0 A0   //czujnik temp.
#define B_MIN 8   //przyciski temp. min. oraz max.
#define B_MAX 9

float tempMIN = 150;
float tempMAX = 0;
byte clock = 0;

void setup()
{
  Serial.begin(9600);
  pinMode(B_MIN, INPUT_PULLUP);
  pinMode(B_MAX, INPUT_PULLUP);
}

void loop()
{
  float temp = ((analogRead(LM35_0) * 5.0 / 1024.0) * 100);
  clock ++;  //licznik zegara

  if(temp < tempMIN)   //zapis temp. min. do zmiennej
  {
    tempMIN = temp;
  }

  if(temp > tempMAX)   //zapis temp. max. do zmiennej
  {
    tempMAX = temp;
  }

  if(digitalRead(B_MIN) == LOW)
  {
    Serial.print("Temp. MIN: ");
    Serial.print(tempMIN);
    Serial.println("*C\n");

    while(digitalRead(B_MIN) == LOW);   //blokada ponownego wyświetlania podczas trzymania przycisku
    delay(25);                          //zabezpieczenie przed drganiem styku przycisku
    clock = 0;   //reset zegara

  }else if(digitalRead(B_MAX) == LOW)
    {
      Serial.print("Temp. MAX: ");
      Serial.print(tempMAX);
      Serial.println("*C\n");

      while(digitalRead(B_MAX) == LOW);   //blokada ponownego wyświetlania podczas trzymania przycisku
      delay(25);                          //zabezpieczenie przed drganiem styku przycisku
      clock = 0;   //reset zegara

    }else if(clock == 20)   //zegar odliczający 2 sec. przy pomocy koncowego delay(100)
      {
        Serial.print("Aktualna temp: ");
        Serial.print(temp);
        Serial.println("*C\n");
        clock = 0;   //reset zegara
      }

  delay(100);
}

 

Link do komentarza
Share on other sites

Treker
Ta treść została wynagrodzona przez moderatora!

VMax otrzymał odznakę: "Korektor (za znalezienie błędu w artykule)"

Link do biblioteki One-Wire w części #7 wygasł. Sugeruję dodanie linku prowadzącego wprost do biblioteki żeby początkujący nie musieli długo szukać.

Edytowano przez VMax
  • Lubię! 1
Link do komentarza
Share on other sites

Hej,

Z mojej strony 🙂

Zadanie 7.1:

#define LM35_LEFT A5
#define LM35_RIGHT A4

void setup() {
  Serial.begin(9600);
}

void loop() {
  // Przeliczenie odczytu ADC na temperaturę zgodnie z opisem z kursu
  float temperatureLeft = ((analogRead(LM35_LEFT) * 5.0) / 1024.0) * 100;
  float temperatureRight = ((analogRead(LM35_RIGHT) * 5.0) / 1024.0) * 100;

  // Wyświetlanie wyników z czujników obok siebie

  Serial.print("Left: \t");
  Serial.print(temperatureLeft);
  Serial.print(" *C");
  Serial.print("\t");
  Serial.print("Right: \t");
  Serial.print(temperatureRight);
  Serial.print(" *C");
  Serial.println();
  float tempDiff = temperatureLeft - temperatureRight;
  Serial.print("Roznica pomiarow: ");
  Serial.print(tempDiff);
  Serial.print("*C");
  Serial.println();
  
  delay(200);
}

Zadanie 7.2:

 

#define LM35 A5
#define MINBUTTON 3
#define MAXBUTTON 2

float tempMax = 0;
float tempMin = 150;
 
void setup(){
  Serial.begin(9600);

  pinMode(MINBUTTON, INPUT_PULLUP);
  pinMode(MAXBUTTON, INPUT_PULLUP);


  attachInterrupt(digitalPinToInterrupt(MINBUTTON), displayMinTemp, RISING);
  attachInterrupt(digitalPinToInterrupt(MAXBUTTON), displayMaxTemp, RISING);
}
 
void loop(){
  //Przeliczenie odczytu ADC na temperaturę zgodnie z opisem z kursu
  float temperatura = ((analogRead(LM35) * 5.0) / 1024.0) * 100;

  if (temperatura > tempMax) {
    tempMax = temperatura;
  }

  if (temperatura < tempMin){
    tempMin = temperatura;
  }

  Serial.print("Aktualna temperatura: ");
  Serial.print(temperatura);
  Serial.println();

  delay(2000);
}


void displayMinTemp(){
  Serial.print("Min temp: ");
  Serial.print(tempMin);
  Serial.println();
}

void displayMaxTemp(){
  Serial.print("Max temp: ");
  Serial.print(tempMax);
  Serial.println();
}

 

Edytowano przez FTNewbie
Wycięcie zakomentowanego kodu.
  • Lubię! 1
Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.