Skocz do zawartości

Przeszukaj forum

Pokazywanie wyników dla tagów 'ds18b20'.

  • Szukaj wg tagów

    Wpisz tagi, oddzielając przecinkami.
  • Szukaj wg autora

Typ zawartości


Kategorie forum

  • Elektronika i programowanie
    • Elektronika
    • Arduino i ESP
    • Mikrokontrolery
    • Raspberry Pi
    • Inne komputery jednopłytkowe
    • Układy programowalne
    • Programowanie
    • Zasilanie
  • Artykuły, projekty, DIY
    • Artykuły redakcji (blog)
    • Artykuły użytkowników
    • Projekty - DIY
    • Projekty - DIY roboty
    • Projekty - DIY (mini)
    • Projekty - DIY (początkujący)
    • Projekty - DIY w budowie (worklogi)
    • Wiadomości
  • Pozostałe
    • Oprogramowanie CAD
    • Druk 3D
    • Napędy
    • Mechanika
    • Zawody/Konkursy/Wydarzenia
    • Sprzedam/Kupię/Zamienię/Praca
    • Inne
  • Ogólne
    • Ogłoszenia organizacyjne
    • Dyskusje o FORBOT.pl
    • Na luzie

Kategorie

  • Quizy o elektronice
  • Quizy do kursu elektroniki I
  • Quizy do kursu elektroniki II
  • Quizy do kursów Arduino
  • Quizy do kursu STM32L4
  • Quizy do pozostałych kursów

Szukaj wyników w...

Znajdź wyniki, które zawierają...


Data utworzenia

  • Rozpocznij

    Koniec


Ostatnia aktualizacja

  • Rozpocznij

    Koniec


Filtruj po ilości...

Data dołączenia

  • Rozpocznij

    Koniec


Grupa


Imię


Strona

Znaleziono 4 wyniki

  1. Witam, zwracam się do wszystkich praktykujących o pomoc, jak w temacie, ws. kodu w Arduino. Jak większość początkujących miłośników programowania w Arduino i ja zacząłem od czujnika temperatury. Z uwagi na bardzo znikomą ilość mojej wiedzy, po wielu tygodniach poszukiwań rozwiązania do mojego projektu, już wiem że programowanie nie jest takie proste jak się wydawało. A szukanie gotowego rozwiązania to jak szukanie przysłowiowej igły w stogu siana. Pewnie wszyscy powiecie, że nie tędy droga. Tak, trochę się z tym zgadzam i choć drogi są różne to ważne żeby dotrzeć do celu. A cel jest taki, żeby dodać przycisk, który "wyłącza/włącza" buzzer po przekroczeniu konkretnej temperatury - tylko po to, żeby nie "hałasował". I tu dodatkowo rozwinę o co chodzi z tym "włącza/wyłącza" buzzer. Po przekroczeniu danej temp. włącza się alarm (buzzer) a wciśniecie przycisku (coś typu mikrostyk) wyłącza dźwięk, kolejne wciśnięcie włącza dźwięk i tak w kółko pod warunkiem że nadal jest przekroczona temp. - trochę takie sprawdzenie czy dalej alarm jest włączony. Oczywiście, kiedy alarm nie jest włączony, wciśnięcie przycisku nie daje żadnej reakcji. Poniżej dotychczasowy kod jaki udało się wykonać (bez przycisku). #include <OneWire.h> #include <DallasTemperature.h> #define ONE_WIRE_BUS 4 #define BUZZER 7 #define LED 8 OneWire oneWire(ONE_WIRE_BUS); DallasTemperature sensors(&oneWire); void setup() { pinMode(8,OUTPUT); pinMode(7,OUTPUT); Serial.begin(9600); Serial.println("Dallas DS18B20. Pomiar Temperatury."); sensors.begin(); } void loop(void) { Serial.print("Temperatura: "); Serial.print(sensors.getTempCByIndex(0)); sensors.requestTemperatures(); // Polecenie, aby uzyskać odczyty temperatury Serial.println(); delay(500); if (sensors.getTempCByIndex(0) >= 27) //Jeśli czujnik wskaże temp >27 stopni Celcjusza { digitalWrite(8, HIGH); //Włącz diodę tone(7, 1000, 100); // Uruchom brzęczyk delay(150); tone(7, 1000, 100); delay(150); tone(7, 1000, 100); delay(150); } if (sensors.getTempCByIndex(0) < 27) //Jeśli czujnik wskaże temp <27 stopni Celcjusza { digitalWrite(8, LOW); //Wyłącz diodę } } Z góry dziękuję wszystkim udzielającym rad, rozwiązań i innych propozycji do powyższego projektu. Pozdrawiam.
  2. Witam, jak to często bywa, początkujący porywa się na gruby projekt 🙂 w tym przypadku też ale ambicje są, gorzej z praktyką i wiedzą 😉 Projekt jaki chcę stworzyć to mikro kontroler z zastosowaniem Mega 2560 do którego podłączone są dwa czujniki DS18B20 na osobnych pinach (by w przypadku uszkodzenia jednego z nich uniknąć ponownego programowania układu, a tutaj akurat znaczenie ma kolejność czujników) dwa wyświetlacze LED 7-segmentowe moduły komunikujące się na 1-wire( układ TM1637); Wyświetlacze na bieżąco podają temperaturę z czujników, przy czym po przekroczeniu nastawnej granicy temperatury dla czujnik drugiego uruchamia się przekaźnik dla lampy sygnalizacyjnej, Od włączenia układu następuje odliczanie od 0 do około 5 minut (300000ms) pod WARUNKIEM że na jednym z pinów jest stan niski (zwarcie z masą poprzez przekaźnik dostający sygnał z zewnętrznego urządzenia) gdy odliczanie dobiegnie do końca poprzez Ethernet shield wysyłane są dane pomiarów do bazy danych gdzieś w sieci lokalnej. po wysłaniu wszystko zaczyna się od początku, czyli zliczanie i kolejne wysyłanie danych. Tak na brudno w notatniku wypisałem sobie: po uruchomieniu programu: -wykrycie czujników ds18b20 na PIN 2 ("temp_in" -temp. wejścia powietrza do chłodzenia) i PIN 3 ("temp_out" -temp.powietrza po schłodzeniu obszaru/produktu); -wyświetlenie wartości "temp_in" na TM1637 wyświetlacz pierwszy jako "DisplayTin" oraz "temp_out" na "DisplayTout" - wyświetlacz drugi. Ze względu na brak znaku kropki wyświetlacza i 9-bit rozdzielczość pomiaru zamiast kropki wyświetlany znak stopni, np dla wartości temperatury 17.0 i 24.5: ---- ---- ---- | | | | | | | | | | | | ---- | | | | | | | | ---- ---- ---- ---- | | | | | | | | | | | | ---- ---- ---- ---- | | | | | | ---- ---- -sprawdzenie warunku jeśli temp_out >= tempALARM (wartość ustawiana i zapamietywana po zaniku zasilania) to na pinie alarmu stan wysoki wyzwalający przekaźnik; -sprawdzenie wciśnięcia przycisku (PINy 30-33) zmiany wartości maksymalnej temperatury na wyjsciu "tempALARM", lub numeru linii produkcyjnej "liniaNr"; -sprawdzenie wartości na wejściu pinu NARAwAuto (aktywne schladzanie w trybie automatycznym) jesli prawda uaktywniene zliczania licznika do 4.5-5min (300000 ms); --po osiąnięciu wartości max licznika 300000 ms uruchomienie funkcji dla EthShield wysyłającej dane pomiaru "temp_in" "temp_out" numer linii produkcyjnej "liniaNr" (ustawiany recznie i zapamietywany) oraz stan wyjscia pinu ALARMtemp; -podczas zmian nastawy tempALARM na wyświetlaczu pojawia się na 5 sekund wartość w postaci: ---- ---- ---- | | | | | | | | O | | ---- ---- ---- | | | O | | | | | | | ---- ---- ---- skok o 1 stopień celciusza, zakres 1 do 50 Dla zmiany numeru linii przykładowo wyświetla: ---- ---- | | | | O | | ---- | O | | | | | ---- ---- skok o 1, zakres od 1 do 63, obie wartości muszą być zapamiętane po zaniku zasilania; a podłączenie pinów mniej więcej tak rozmieszczone: /* informacje pinologii pin 0 pin 1 pin 2 DS18B20data temp_in //wejsciowa temp powietrza nr.1 pin 3 DS18B20data temp_out //temp po wyjsciu nr.2 pin 4 SDCardShield SS //SlaveSelect pin 5 CLK1 out //zegar dla wyswietlacza 1 na tm1637 pin 6 DIO1 out //dane dla wysw.1 pin 7 CLK2 out //zegar dla wyswietlacza 2 na tm1637 pin 8 DIO2 out //dane dla wysw.2 pin 9 ALARMtemp out relay //po przekroczeniu nastawionej temp alarm na buzzer/sygnalizator swietlny przez przekaznik pin 10 ETH SS Mega2560 pin 53 //SlaveSelect wybrannie ukladu perferyjnego eth/sd pin 11 ETH MOSI Mega2560 pin 50 //dane do ukladu pin 12 ETH MISO Mega2560 pin 51 //dane z ukladu pin 13 ETH SCK Mega2560 pin 52 //sygnal zegara pin 25 NARAwAuto in zRelay //zwarcie do masy po zapodaniu 24V z Nary do przekaznika pin 27 SendTemp_LED (Mega2560) //wyslanie danych do bazy danych info LED pin 30 keyENT lub keyAL_down pin 31 keyEXIT lub keyAL_up pin 32 keyDN lub keyLN_down pin 33 keyUP luk keyLN_up */ Dla pin 30-33 nie jestem pewien rozwiązania, czyli czy zrobić menu, i przeskakiwanie po wartościach nastawianych czyli temp. maxymalna i wyzwalanie alarmu plus numer linii/urządzenia pomiarowego. Czy na sztywno przyporządkować dany przycisk pod zwiększanie/zmniejszanie parametru pierwszego i drugiego. Co będzie lepszym rozwiązaniem? Znalazłem na forum temat myślę że nada się idealnie ta biblioteka dla mnie, jeden wątek na rozpoznanie czujników i wyświetlenie ich na wyświetlaczach + sprawdzenie wartości temp alarmu, drugi watek sprawdzający wciśnięcie jednego z przycisków i ewentualną zmianę wartości i jej zapisanie do pamięci, trzeci wątek odliczający ten czas 5 min (+czas na wykonanie pozostałych wątków) i po zakończeniu wysłania danych zresetowanie licznika. W obecnej chwili udało mi się ujarzmić wyświetlanie dwóch wyświetlaczy na bibliotece TM1637Display.h , kolejny krok którym się zajmuje to wyświetlanie wartości czujników na osobnych modułach. Następnie dodanie możliwości zmiany parametrów z przycisków. Jak się to uda to jestem w 1/3 drogi do sukcesu. Czy jakieś porady na początek, na co uważać, lub do samego zamysłu działania?
  3. Cześć, Jak włączyć/wyłączyć zasilanie pasożytnicze na czujniku DS18B20? Z góry dziękuję. PS.: Przepraszam jeśli dałem temat w złej kategorii...
  4. Wszystko działa dobrze, ale gdy temperatura spadnie poniżej 0 to pokazuje jakiś dziwny odczyt. Siedzę nad tym już drugi dzień i nie wiem o co chodzi. Używam arduino nano. Z góry dziękuję za pomoc 🙂 #include <ModbusRtu.h> #include <OneWire.h> #include <DallasTemperature.h> #include <Wire.h> #include <LiquidCrystal_I2C.h> #define SLAVE_ID 1 #define BUTTON_PIN 7 #define RS_PIN 5 #define DS_PIN 10 #define SUN_PIN A1 #define TEMP_REG 0 #define SUN_REG 1 uint16_t au16data[9] = { 9999, 9999, 2, 3, 2018, 11, 16, 8, 7}; Modbus slave(SLAVE_ID, 0, RS_PIN); OneWire oneWire(DS_PIN); DallasTemperature sensors(&oneWire); DeviceAddress ds18b20 = { 0x28, 0x90, 0x63, 0x45, 0x92, 0x06, 0x02, 0xE0 }; //1 //DeviceAddress ds18b20 = { 0x28, 0x68, 0xA6, 0x45, 0x92, 0x03, 0x02, 0x3C }; //2 //DeviceAddress ds18b20 = { 0x28, 0x12, 0xC6, 0x45, 0x92, 0x08, 0x02, 0x59 }; //3 LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); int temperature = 9999; unsigned long getTempTime = 0; unsigned long lastUpdate = 0; unsigned long buttonTime = 0; int buttonHoldTime = 0; byte sun = 0; bool lcdLight = true; void setup() { sensors.begin(); slave.begin( 9600 ); // baud-rate at 9600 lcd.begin(16,2); pinMode(BUTTON_PIN, INPUT); } void loop() { temperature = readTemp(); if(temperature != NULL || temperature < 200) au16data[TEMP_REG] = temperature; sun = readSun(); if(sun != NULL) au16data[SUN_REG] = sun; slave.poll(au16data, 16); if(millis()-lastUpdate >= 1500UL) { lcd.clear(); printTime(); lcd.setCursor(0, 1); printPage0(); lastUpdate = millis(); } if(digitalRead(BUTTON_PIN) == HIGH){ if(buttonTime == 0) buttonTime = millis(); buttonHoldTime += millis()-buttonTime; buttonTime = millis(); } else{ if(buttonHoldTime > 750){ if(lcdLight == true) lcdLight = false; else lcdLight = true; } else if(buttonHoldTime < 500 && buttonHoldTime > 50) ; buttonHoldTime = 0; buttonTime = 0; } if(lcdLight == true) lcd.backlight(); else lcd.noBacklight(); ////////////////////////////////////// } int readTemp(){ if(millis()-getTempTime >= 1000UL){ sensors.requestTemperatures(); getTempTime = millis(); return sensors.getTempC(ds18b20)*10; } else return temperature; } byte readSun(){ return map(analogRead(SUN_PIN), 0, 1023, 0, 100); } void printTime(){ if(au16data[7] < 10) lcd.print(0); lcd.print(au16data[7]); lcd.print(":"); if(au16data[8] < 10) lcd.print(0); lcd.print(au16data[8]); lcd.print(" "); lcd.print(au16data[6]); lcd.print("."); lcd.print(au16data[5]); lcd.print("."); lcd.print(au16data[4]); } void printPage0(){ lcd.print("T:"); lcd.print(au16data[TEMP_REG]/10); lcd.print("."); lcd.print(au16data[TEMP_REG]-au16data[TEMP_REG]/10*10); lcd.print("*C"); lcd.print(" "); lcd.print("SUN:"); lcd.print(au16data[SUN_REG]); lcd.print("%"); }
×
×
  • 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.