Mechaniczny termometr

Mechaniczny termometr

INFORMACJA: Poniższy post nie wydostał się z Poczekalni :(

Mechaniczny termometr

Witam wszystkich czytelników. Kiedyś zrobiłem sobie prosty termometr. Temperatura była wyświetlana na wyświetlaczu LCD. Zacząłem go udoskonalać dodając automatyczne podświetlenie i alarm wysokiej temperatury. Dzisiaj wpadłem na pomysł aby zrobić coś podobnego tylko zamiast wyświetlacza użyć serwomechanizmu. Kiedyś ten pomysł wydawał mi się nie do wykonania. Ale teraz po 2 latach oswajania się i programowania w Arduino coś cię nauczyłem oraz podjąłem wyzwanie i tym oto sposobem powstał ten artykuł. Nie rozpisywałem się zbytnio aby artykuł był przejrzysty. Proszę o sugestie w komentarzach.

Potrzebne elementy :

Na płytkę CD należy nakleić podziałkę z temperaturą, którą możesz narysować lub wydrukować. Ważne jest to aby podziałka utworzyła kąt 180* czyli była narysowana na połowie płyty. Poszczególne temperatury powinny być umieszczone od siebie w równych odstępach.

Wzór :

Bez tytułu

termometr_cd

Podłączenie :

Bez tytułu

 

  1. Skrajne nóżki termometru należy podłączyć pod GND i Vcc, a środkową pod pin A0.

Należy pamiętać o podłączeniu termometru. Niewłaściwe podpięcie zasilania może go uszkodzić.

  1. Serwomechanizm jest podłączony pod pin 9.

Kalibracja :

Przed prawidłowym ustawieniem podziałki musisz w Serial porcie (monitorze szeregowym) odczytać aktualną temperaturę. Po odczytaniu temperatury możesz z kalibrować podziałkę z aktualnym położeniem serwa. ( Na serwomechanizm można nakleić strzałkę). Wartość serwa będzie wzrastała lub malała wraz z wartością podawanej aktualnie temperatury. Czas na program.

Program Arduino :

#include <Servo.h> // biblioteka

Servo myServo;

const int czujnikTemp = A0; // termometr pin A0
int odczyt;
int katObrotu; // kąt obrotu

void setup() {
 myServo.attach(9); // servo pin 9
Serial.begin(9600);
}

void loop() {
odczyt = analogRead(czujnikTemp);
 float napiecie = (odczyt/1024.0) * 5.0; 
float temperatura = (napiecie - 0.5) * 100;

katObrotu = map(temperatura, -10.0, 40.0, 0, 180); // temperatura a kąt obrotu
 myServo.write(katObrotu);
Serial.print("temperatura: "); // obecna temperatura
 Serial.print(temperatura);
Serial.println();
 delay(1000); // opóźnienie
}

W programie w linijce :

katObrotu = map(temperatura, -10.0, 40.0, 0, 180);

została podana najniższa temperatura -10 a najwyższa 40. Jeśli temperatura otoczenia przekroczy te wartości to serwo będzie w lewym lub prawym skrajnym położeniu. Jeśli macie inną podziałkę możecie sobie zamienić te temperatury.

delay(1000); // opóźnienie

Ustawiłem 1 sekundę opóźnienia. Jeśli nie chcecie aby serwo cały czas się przesuwało to możecie ustawić np. na 5 sekund.

Zdjęcia :

IMG_20160411_144135 IMG_20160411_144143 IMG_20160411_144151

 

 

Miłej zabawy ;)

 

INFORMACJA: Poniższy post nie wydostał się z Poczekalni :(

Ocena: 5/5 (głosów: 1)

Podobne posty

11 komentarzy do “Mechaniczny termometr

    • “float temperatura = (napiecie = 0.5) * 100;”
      czy aby na pewno uszkodziłeś?
      przypisujesz zmiennej temperaturę 0.5*100 czyli… 50
      Więc?

      Odpowiedz
      • Termometr uszkodziłem ponieważ Vcc podłączyłem do GND,a GND do Vcc. Na standardowym kodzie też mi tak pokazuje.

        Krapi możesz mi coś doradzić? A jakby zmienić napięcie na 0,4 * 100

        Odpowiedz
        • przytocz mi logikę tej linii:
          “float temperatura = (napiecie = 0.5) * 100;”
          bo jak dla mnie:
          – tworzysz zmienną o typie “float” i nazwie “temperatura”
          – zmiennej “temperatura” przypisujesz
          a*) przypisujesz zmiennej “napięcie” wartość 0.5
          b) wartość z a mnożysz razy 100

          – temperatura zawsze będzie miała wartość 50
          mam rację?

          Kod nie sprawdzony, nie przetestowany, z rażącym błędem…

          przykro mi, ale poradnik musi być rzetelny, ma pomagać i być pewny, a nie być polem testowym dla niepewnych projektów – także przymusowe “1”

          Odpowiedz
      • Jednak wkradł się błąd w lini

        „float temperatura = (napiecie = 0.5) * 100;”

        poprawiłem „float temperatura = (napiecie – 0.5) * 100;”
        teraz działa jak natura chciała ;)

        Odpowiedz
      • Pomysł bardzo fajny :-)

        Uwagi:
        1) tarczę to trzeba by było na jakiejś drukarce wydrukować, od razu 1000% więcej estetyki :-)
        2) pomyślałby w przyszłości, aby zrobić to na gołym kontrolerze, z funkcją usypiania i na bateryjce. I odświeżanie temperatury co np. 5 min, żeby bateria dłużej podziałała.

        Na razie wstrzymuję się z oceną. Zrób ładną tarczę i pewnie trafisz na główną :-)

        Odpowiedz

Odpowiedz

anuluj

Masz uwagi?