• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
DS18B20 Nietypowy termometr - sterownik
#1
Witam Wszystkich ! Jestem użytkownikiem Arduino od jakiegoś czasu. Ostatnio przeszedłem gehennę z uruchomieniem swojej płytki - okazało się że działa tylko określona wersja sterowników. Ale wszystko zaczęło wspaniale śmigać. Szczególnie zależało mi na wykorzystaniu termometru Dallas . Obecnie przykładowe sketche z bibliotek Dallas temperaturę oraz DS18B20 działają wspaniale jednak chciałbym zbudować termometr całkiem nietypowy na DS18B20. Chodziło by mi o włączanie diody LED na wyjściu cyfrowym np 9 na 1 minutę przy wzroście temperatury co 2 stopnie C, począwszy od temp 38 stopni do 70 st. czyli temp rośnie dochodzi do 38 st. załącza się LED na minutę następnie układ czeka na przekroczenie kolejnego progu 40 st. C itd , podczas spadku temp nie dzieje się nic ale podczas ponownego przyrostu temp sytuacja się powtarza. Bardzo bym prosił o pomoc jak zbudować taki program. Docelowo gdyby to mi się udało był by to sterownik wentylatorka do chłodzenia radiatorów urządzeń a być może nawet radiatora procesora. Pozdrowienia
 
Odpowiedź
#2
Zacznij od zapoznania się z funkcją millis(). Jak zrozumiesz jak działa to reszta nie sprawi żadnego problemu. Testy zacznij od:
jeśli temperatura > 38 to zapamiętaj czas i zapal diodę
jeśli czas aktualny - czas zapamiętany > 1 minuta to zgaś diodę
Pomagam za darmo więc szanuj mój czas.
Wklejaj tekst a nie jego zdjęcie.
Nie pisz następnego postu jak nie odpowiedziałeś na poprzedni.
Jak mądrze zadawać pytania
 
Odpowiedź
#3
(21-11-2016, 21:31)namok napisał(a): Zacznij od zapoznania się z funkcją millis(). Jak zrozumiesz jak działa to reszta nie sprawi żadnego problemu. Testy zacznij od:
jeśli temperatura > 38 to zapamiętaj czas i zapal diodę
jeśli czas aktualny - czas zapamiętany > 1 minuta to zgaś diodę

Bardzo dziękuję za błyskawiczną odpowiedź ! W dodatku bardzo trafną - gdyż nie miałem pojęcia od czego zacząć nawet.  Jednak jako początkujący mam problem ( niestety ) z zapisem w tym języku arduino IDE i choć już rozumiem algorytm to miałbym problem z zapisaniem go do sketchu. Gdyby kolega był tak uprzejmy przetłumaczyć podany przykład na język Arduino IDE to było by chyba nawet po moim problemie. Serdecznie pozdrawiam !
 
Odpowiedź
#4
Dotychczas zrobiłem tak:
Kod:
   if (( ( tempC ) > (25) ))
digitalWrite( 9 , HIGH );
if (( ( tempC ) > (26) ))
digitalWrite( 9 , HIGH );
if (( ( tempC ) > (27) ))
digitalWrite( 9 , HIGH );
if (( ( tempC ) > (28) ))
digitalWrite( 9 , HIGH );

delay(10000);
digitalWrite( 9 , LOW );
Działa dobrze podczas wzrostu temp. ale również niestety działa przy spadku temperatury uruchamiając diodę a przy spadku dioda miała nie włączać się . Jeśli ktoś mądry by mógł podpowiedzieć jak dalej działać z tym kodem . Było by super .
 
Odpowiedź
#5
Nie czegoś takiego jak "język arduino". Program piszesz w c++ i używasz bibliotek napisanych dla arduino. Skoro nie masz o tym pojęcia to musisz przerobić dowolny kurs np: http://plociennik.info/index.php/arduino-wstep. Dopiero wtedy wróć i pytaj bo inaczej dyskusja nie ma sensu.
Pomagam za darmo więc szanuj mój czas.
Wklejaj tekst a nie jego zdjęcie.
Nie pisz następnego postu jak nie odpowiedziałeś na poprzedni.
Jak mądrze zadawać pytania
 
Odpowiedź
#6
(22-11-2016, 17:18)namok napisał(a): Nie czegoś takiego jak "język arduino". Program piszesz w c++ i używasz bibliotek napisanych dla arduino. Skoro nie masz o tym pojęcia to musisz przerobić dowolny kurs np: http://plociennik.info/index.php/arduino-wstep. Dopiero wtedy wróć i pytaj bo inaczej dyskusja nie ma sensu.

Tak już byłem i powracam moje zapytanie pozostaje tak samo aktualne - jak już się nauczę c++ to zapewne nie będę musiał tu zadawać pytań ponieważ będę zajęty pisaniem kodu Smile
 
Odpowiedź
#7
(22-11-2016, 18:06)MisPuchatek napisał(a): Tak już byłem i powracam moje zapytanie pozostaje tak samo aktualne - jak już się nauczę c++ to zapewne nie będę musiał tu zadawać pytań ponieważ będę zajęty pisaniem kodu Smile
Przez kilkanaście minut przerobiłeś kurs!!! Skoro jesteś taki zdolny to nie rozumiem w czym problem. Jeszcze chwila i wszystko opanujesz.
Forum jest od pomagania, nakierowania na rozwiązanie a nie odwalania za kogoś roboty. Podałem algorytm a Ty nawet się do niego nie zbliżyłeś, to znaczy że musisz się uczyć. W sieci znajdziesz sporo przykładów jak migać diodą z użyciem millis(). Jak podasz implementację algorytmu który podałem w pierwszym poście to do rozwiązania problemu już bardzo blisko.
Pomagam za darmo więc szanuj mój czas.
Wklejaj tekst a nie jego zdjęcie.
Nie pisz następnego postu jak nie odpowiedziałeś na poprzedni.
Jak mądrze zadawać pytania
 
Odpowiedź
#8
(21-11-2016, 22:00)MisPuchatek napisał(a): język Arduino IDE
Kolego arduino to nie język to tylko rodzaj modułów startowych po drugie arduino programujesz w języku c!!!!!!!(a kompilator arduino IDE troszkę go upraszcza ale nikt ci nie broni w czystym c pisać) a nie w jerzyku arduino!!!!! poczytaj trochę skoro uczysz sie c++ to z c nie masz zapewne problemu

A arduino ide to nic innego jak kompilator kodu źródłowego zrozumialszego programiście na kod maszynowy zrozumiały dla uc takie kompilatory to np qt, assebler ,baskom ide avr, studio i wiele wiele innych.
[Obrazek: banerelektronika.jpg]



Jeśli pomogłem podziękuj punktem reputacji Wink
 
Odpowiedź
#9
(22-11-2016, 23:31)adix napisał(a): Kolego arduino to nie język to tylko rodzaj modułów startowych po drugie arduino programujesz w języku c!!!!!!!(a kompilator arduino IDE troszkę go upraszcza ale nikt ci nie broni w czystym c pisać) a nie w jerzyku arduino!!!!! poczytaj trochę skoro uczysz sie c++ to z c nie masz zapewne problemu
Język w jakim programujemy arduino to nie c tylko c++. W c nie jest obiektowe.
Pomagam za darmo więc szanuj mój czas.
Wklejaj tekst a nie jego zdjęcie.
Nie pisz następnego postu jak nie odpowiedziałeś na poprzedni.
Jak mądrze zadawać pytania
 
Odpowiedź
#10
to ci załatwia sprawę tylko zamień analog read na dane z czujnika

Kod:
int temp = 0;
int Temp = 38;
long pm = 0;
byte alarm = 0;
byte stat = 0;
int czas_sek = 5;

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


void loop() {

long cm = millis()/1000;
int x = analogRead(A0);

temp = map(x,0,1023,0,100);

Serial.print(temp);
Serial.print("/");
Serial.print(Temp);
Serial.print("/");
Serial.println(cm-pm);
  
if (temp >= (Temp) and stat == 0 ){
  alarm = 1;
  pm = cm ;
  stat = 1;
  Temp = temp+2;
  }
  
if ((cm - pm) > czas_sek and stat == 1){
  alarm = 0;
  stat = 0;
  }

if (temp < 37)Temp = 38;
  
digitalWrite(10 ,alarm);

}
Ważne aby robić co się lubi albo lubić co się robi .
Arduino UNO, TINY, PRO MINI
Pomoc nagradzamy punktami reputacji Wink
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości