Termometr diodowy

Masz problem z Arduino? Tutaj możesz szukać pomocy.
ODPOWIEDZ
keisuss
Młodszy majsterkowicz
Posty: 24
Rejestracja: 18 paź 2013, 21:06

Termometr diodowy

Post autor: keisuss » 10 gru 2013, 21:51

Jestem nowy w tematyce Arduino,mam je 3 dzień
chciałbym zrobić termometr słupkowy na MCP9700A
powiedzmy jest 5 stopni świeci się jedna dioda
czy mógłby mi ktoś objaśnij albo ''gotowca'' podesłać

Co miesiąc do wygrania nagrody o wartości ponad 1600 zł!


skl
Majsterkowicz
Posty: 60
Rejestracja: 3 gru 2013, 17:37

Re: Termometr diodowy

Post autor: skl » 11 gru 2013, 17:53

Musisz sobie ustalić ile za jaki zakres odpowiada jedna dioda (np 5stopni), następnie ilość diód. Przyjmując że mierzysz powiedźmy w zakresie 0-25 stopni i dajesz 6 diód to fragment pseudokodu wygląda tak:

Kod: Zaznacz cały

inicjalizacja termometru
pętla:
  odczytaj temperaturę;
  zgaś wszystkie diody;
  jeżeli temp > 0 to zapal dioda 1;
  jeżeli temp > 5 to zapal dioda 2;
  jeżeli temp > 10 to zapal dioda 3;
  jeżeli temp > 15 to zapal dioda 4;
  jeżeli temp > 20 to zapal dioda 5;
  jeżeli temp > 25 to zapal dioda 6;
  opóźnienie
Myślę, że bez problemu sklecisz kod do wrzucenia ;)


Pomysł bardzo ciekawy i pierwszy raz widzę taką wersję, mimo że implementacja i wykonanie proste ;)

Jak Ci się już oda napisać program to możesz go modyfikować i np ustawić jeszcze 5 poziomów jasności diody (podając napięcie poprzez PWM). Tylko pamiętaj że to może mieć wpływ na żywotność diody ;)
// Chyba, że tak się nie robi to niech ktoś to sprostuje ;)

pozdrawiam,
skl
keisuss
Młodszy majsterkowicz
Posty: 24
Rejestracja: 18 paź 2013, 21:06

Re: Termometr diodowy

Post autor: keisuss » 11 gru 2013, 19:35

mam problem otoz po podłączeniu czujnika zgodnie z tym starter-kit(.)nettigo(.)pl/2009/10/jak-mierzyc-temperature-z-arduino/
pokazuje mi 3-5 stopni na serialu
wczesniej czujnik dzialal normalnie
//dodam jeszcze ze czujnik sie strasznie grzeje
Awatar użytkownika
Maxik
Starszy majsterkowicz
Posty: 405
Rejestracja: 6 lip 2012, 18:27
Lokalizacja: Gdańsk
Kontakt:

Re: Termometr diodowy

Post autor: Maxik » 11 gru 2013, 22:15

Sprawdź czy na pewno dobrze podłączasz, prawdopodobnie to jest przyczyna nagrzewania się czujnika.
keisuss
Młodszy majsterkowicz
Posty: 24
Rejestracja: 18 paź 2013, 21:06

Re: Termometr diodowy

Post autor: keisuss » 12 gru 2013, 11:53

mam taki kod

Kod: Zaznacz cały

float temp;

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

void loop () {
  temp = analogRead(0)*5/1024.0;
  temp = temp - 0.5;
  temp = temp / 0.01;
  Serial.println(temp);
  delay(500);
};
zeby temerature odczytac
ale nie umiem tego warunku postawic
narazie na tej jednej chce zeby swiecila jak jest powyzej 20 stopni
dioda jest na 13 pinie podlaczona
Awatar użytkownika
Maxik
Starszy majsterkowicz
Posty: 405
Rejestracja: 6 lip 2012, 18:27
Lokalizacja: Gdańsk
Kontakt:

Re: Termometr diodowy

Post autor: Maxik » 12 gru 2013, 15:39

Kod: Zaznacz cały

float temp;

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

  pinMode(13, OUTPUT); //Dioda na płytce podłączona do pinu 13 - ustawienie pinu jako wyjście
}

void loop () {
  temp = analogRead(0)*5/1024.0;
  temp = temp - 0.5;
  temp = temp / 0.01;
  Serial.println(temp);

  if(temp > 20) { //Jeśli temperatura większa niż 20
    digitalWrite(13, HIGH); //Ustaw stan wysoki na pinie 13 - włącz diodę
  } else { //W przeciwnym wypadku
    digitalWrite(13, LOW); //Ustaw stan niski na pinie 13 - wyłącz diodę
  }
  
  delay(500);
}
keisuss
Młodszy majsterkowicz
Posty: 24
Rejestracja: 18 paź 2013, 21:06

Re: Termometr diodowy

Post autor: keisuss » 12 gru 2013, 19:37

Kod: Zaznacz cały

float temp;

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

  pinMode(13, OUTPUT); //Dioda na płytce podłączona do pinu 13 - ustawienie pinu jako wyjście
  pinMode(12, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(7, OUTPUT);
}

void loop () {
  temp = analogRead(0)*5/1024.0;
  temp = temp - 0.5;
  temp = temp / 0.01;
  Serial.println(temp);

  if(temp > 20) { 
    digitalWrite(13, HIGH); 
  } else { 
    digitalWrite(13, LOW); 
  }
   if(temp > 21) { 
    digitalWrite(12, HIGH); 
  } else {
    digitalWrite(12, LOW); 
  }
    if(temp > 22) { 
    digitalWrite(8, HIGH); 
  } else { 
    digitalWrite(8, LOW); 
  }
    if(temp > 23) { 
    digitalWrite(7, HIGH); 
  } else { 
    digitalWrite(7, LOW); 
  delay(1000);
}
taki kod mam pierwsza dioda sie swieci pozostale 3 nie na serialu jest 25
skl
Majsterkowicz
Posty: 60
Rejestracja: 3 gru 2013, 17:37

Re: Termometr diodowy

Post autor: skl » 12 gru 2013, 20:52

Hmmm zastanawiające.

A spróbuj w każdym warunku oprócz zapalania diód wypisać tekst przez serial. Tzn

Kod: Zaznacz cały

if(temp > 20) {
    digitalWrite(13, HIGH);
     Serial.println("TEMP > 20");
  } else {
    digitalWrite(13, LOW);
     Serial.println("TEMP <= 20");
  }
i sprawdź tak dla wszystkich warunków.

Jedyne dwa możliwe rozwiązania które mi przychodzą to albo błędna polaryzacja/uwalone diody albo problem z porównywaniem wartości typu float z int (raczej wątpie, bo powinno nastąpić automatyczne rzutowanie typów zmiennych).

A sprawdzał kolega czy w takim podłączeniu może wymusić zapalenie diód poprzez wstawienie stanów diód na wysoki w sekcji setup():

Kod: Zaznacz cały

digitalWrite(7, HIGH); 
Awatar użytkownika
Maxik
Starszy majsterkowicz
Posty: 405
Rejestracja: 6 lip 2012, 18:27
Lokalizacja: Gdańsk
Kontakt:

Re: Termometr diodowy

Post autor: Maxik » 12 gru 2013, 20:56

Wkleiłeś całość kodu? Jeśli tak to brakuje zamknięcia ostatniego else, dziwne, że program w ogóle się kompiluje.
keisuss
Młodszy majsterkowicz
Posty: 24
Rejestracja: 18 paź 2013, 21:06

Re: Termometr diodowy

Post autor: keisuss » 12 gru 2013, 21:39

Mógłby ktoś mi podesłać gotowy kod?
Awatar użytkownika
Maxik
Starszy majsterkowicz
Posty: 405
Rejestracja: 6 lip 2012, 18:27
Lokalizacja: Gdańsk
Kontakt:

Re: Termometr diodowy

Post autor: Maxik » 13 gru 2013, 00:17

Kod: Zaznacz cały

float temp;

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

  pinMode(13, OUTPUT); //Dioda na płytce podłączona do pinu 13 - ustawienie pinu jako wyjście
  pinMode(12, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(7, OUTPUT);
}

void loop () {
  temp = analogRead(0)*5/1024.0;
  temp = temp - 0.5;
  temp = temp / 0.01;
  Serial.println(temp);

  if(temp > 20) {
    digitalWrite(13, HIGH);
  } else {
    digitalWrite(13, LOW);
  }

  if(temp > 21) {
    digitalWrite(12, HIGH);
  } else {
    digitalWrite(12, LOW);
  }

  if(temp > 22) {
    digitalWrite(8, HIGH);
  } else {
    digitalWrite(8, LOW);
  }

  if(temp > 23) {
    digitalWrite(7, HIGH);
  } else {
    digitalWrite(7, LOW);
  }

  delay(1000);

}
keisuss
Młodszy majsterkowicz
Posty: 24
Rejestracja: 18 paź 2013, 21:06

Re: Termometr diodowy

Post autor: keisuss » 13 gru 2013, 09:01

dzięki wszystko jest OK
keisuss
Młodszy majsterkowicz
Posty: 24
Rejestracja: 18 paź 2013, 21:06

Re: Termometr diodowy

Post autor: keisuss » 13 gru 2013, 13:23

mam kolejne pytanie
gdzie moge podłaczyc kolejne diody
mam arduino uno
i do tych mam podlaczone 6 diód
pinMode(13, OUTPUT);
pinMode(12, OUTPUT);
pinMode(8, OUTPUT);
pinMode(7, OUTPUT);
pinMode(4, OUTPUT);
pinMode(2, OUTPUT);
+ 1 wejscie analogowe do czujnika
Awatar użytkownika
wefhy
Majsterkowicz
Posty: 100
Rejestracja: 26 sie 2013, 15:06
Lokalizacja: Łódź, Poland

Re: Termometr diodowy

Post autor: wefhy » 13 gru 2013, 14:04

Możesz użyć wszystkich wyjść, najlepiej tych w granicy 2-13. Diody najcześciej się podpina do 2,4,7,8,12,13 nie dlatego, że do innych nie można, tylko dlatego, że inne piny lepiej zaoszczędzić na urządzenia, które potrzebują PWM(np regulowanie jasności diody). Ale nic nie przeszkadza w podłączeniu tam diód tak jak ty masz w planie. Jak będziesz potrzebował jeszcze więcej wyjśc to przyda się rejestr przesówny(można kupić za około złotówkę)
Alger
Młodszy majsterkowicz
Posty: 1
Rejestracja: 13 gru 2013, 14:21

Re: Termometr diodowy

Post autor: Alger » 17 gru 2013, 19:01

Do zapalania/gaszenia diod można wykorzystać też piny analogowe, wystarczy użyć prostej "sztuczki".
Przykładowy kod:

int dioda = 14;

void setup()
{
pinMode(dioda, OUTPUT);
}

void loop()
{
digitalWrite(dioda, HIGH);
delay(500);
digitalWrite(dioda, LOW);
delay(500);
}

Piny analogowe 0 - 5 można określić jako piny cyfrowe 14 - 19.
W przykładowym kodzie równie dobrze można wpisać zamiast wartości 14, wartość A0.
ODPOWIEDZ

Strony partnerskie: