• 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
Kilka czujników temp. + termostat 2-przekaznikowy
#1
Witam.
Potrzebuję pomocy Sad
Potrzebuję dodać do obecnego kodu drugi przekaźnik który załączał by się od 50*C
Próbuję na wszelkie sposoby i cały czas jest załączony.

Do tego dodać 2 czujnik temperatury DS18B20 i trzeci Max 6675 aby wyświetlały się w dolnej linijce wyświetlacza
Kod:
#include <OneWire.h>

Kod:
#include <DallasTemperature.h>
#include <Wire.h>  // Comes with Arduino IDE
#include <LiquidCrystal_I2C.h>

int p1 = 8;
int p2 = 6;
int p1state = 0;
int p2state = 0;


LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

#define ONE_WIRE_BUS 7


OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
int nastaw = 40; // ustaw temperature
int przekaznik = 12; // pin przekaznik



void setup(void)


{
pinMode(przekaznik,OUTPUT);



 lcd.begin(16, 2);
  lcd.print("Regulator Temp:");
 sensors.begin();
 Serial.begin(9600);
}

void wys(void){
sensors.requestTemperatures();
lcd.setCursor(0,0);
lcd.print("T=");
lcd.print(sensors.getTempCByIndex(0));
lcd.print("    ");
lcd.print("N=");
lcd.print(nastaw);
;
if (sensors.getTempCByIndex(0) < (nastaw)) {
     digitalWrite(przekaznik,HIGH);
  } else {
     digitalWrite(przekaznik,LOW);



 


       }
       
  }

void loop(void)
{
p1state = digitalRead(p1);
 p2state = digitalRead(p2);
 if(p1state == HIGH){nastaw=nastaw+1;}
 if(p2state == HIGH){nastaw=nastaw-1;}
 wys();



}


Proszę o pomoc bo już mnie głowa rozbolała od szukania
Pozdrawiam Minek
 
Odpowiedź
#2
Naucz się podstaw programowania korzystając z dowolnego kursu arduino a zrobisz to z zamkniętymi oczami.
Przykład oprogramowania kilku czujników temperatury znajdziesz w przykładach dołączonych do biblioteki, a jeśli angielski jest problemem to znajdziesz takie przykłady po polsku.
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
Gdybym nie męczył się z tym kilka dni to bym nie pisał na forum!
Takie podstawy to jeszcze rozumie (pod warunkiem że są pojedyncze)
gdyby mi ten drugi przekaźnik zadziałał to może dalej bym poszedł.
znam już trochę i pewnie pisząc robię jakiś błąd i w tym problem.
Kod:
#include <OneWire.h>
#include <DallasTemperature.h>
#include <Wire.h>  // Comes with Arduino IDE
#include <LiquidCrystal_I2C.h>

int p1 = 8;
int p2 = 6;
int p1state = 0;
int p2state = 0;

LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

#define ONE_WIRE_BUS 7

OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
int nastaw = 40; // ustaw temperature
int przekaznik = 12; // pin przekaznik
int przekaznik1 = 11; // pin przekaznik

void setup(void)

{
pinMode(przekaznik,OUTPUT);
pinMode(przekaznik1,OUTPUT);

lcd.begin(16, 2);
  lcd.print("Regulator Temp:");
 sensors.begin();
 Serial.begin(9600);
}

void wys(void){
sensors.requestTemperatures();
lcd.setCursor(0,0);
lcd.print("T=");
lcd.print(sensors.getTempCByIndex(0));
lcd.print("    ");
lcd.print("N=");
lcd.print(nastaw);
;
if (sensors.getTempCByIndex(0) < (nastaw)) {
     digitalWrite(przekaznik,HIGH);
  } else {
     digitalWrite(przekaznik,LOW);
 if (sensors.getTempCByIndex(0) < (50)) {
     digitalWrite(przekaznik1,HIGH);
  } else {
     digitalWrite(przekaznik1,LOW);    
       }
  }
void loop(void)
{
p1state = digitalRead(p1);
 p2state = digitalRead(p2);
 if(p1state == HIGH){nastaw=nastaw+1;}
 if(p2state == HIGH){nastaw=nastaw-1;}
 wys();

}
 
Odpowiedź
#4
niepotrzebnie odczytujesz temperature z ds18 kilka razy pod rzad, odczytaj ja raz i przypisz do zmiennej a potem juz dzialaj na zmiennej

wyslane z Tapatalka
 
Odpowiedź
#5
Podstawowa rzecz w programowaniu to formatowanie kodu. Pilnując porządku wiele błędów widać od razu. Poniżej wstawiam Twój kod z zastosowaniem automatycznego formatowania:
Kod:
#include <OneWire.h>
#include <DallasTemperature.h>
#include <Wire.h>  // Comes with Arduino IDE
#include <LiquidCrystal_I2C.h>

int p1 = 8;
int p2 = 6;
int p1state = 0;
int p2state = 0;

LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

#define ONE_WIRE_BUS 7

OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
int nastaw = 40; // ustaw temperature
int przekaznik = 12; // pin przekaznik
int przekaznik1 = 11; // pin przekaznik

void setup(void)

{
 pinMode(przekaznik, OUTPUT);
 pinMode(przekaznik1, OUTPUT);

 lcd.begin(16, 2);
 lcd.print("Regulator Temp:");
 sensors.begin();
 Serial.begin(9600);
}

void wys(void) {
 sensors.requestTemperatures();
 lcd.setCursor(0, 0);
 lcd.print("T=");
 lcd.print(sensors.getTempCByIndex(0));
 lcd.print("    ");
 lcd.print("N=");
 lcd.print(nastaw);
 ;
 if (sensors.getTempCByIndex(0) < (nastaw)) {
   digitalWrite(przekaznik, HIGH);
 } else {
   digitalWrite(przekaznik, LOW);
   if (sensors.getTempCByIndex(0) < (50)) {
     digitalWrite(przekaznik1, HIGH);
   } else {
     digitalWrite(przekaznik1, LOW);
   }
 }
 void loop(void)
 {
   p1state = digitalRead(p1);
   p2state = digitalRead(p2);
   if (p1state == HIGH) {
     nastaw = nastaw + 1;
   }
   if (p2state == HIGH) {
     nastaw = nastaw - 1;
   }
   wys();

 }

Jeśli używasz bibliotek to podawaj ich źródła.
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
Witam zacząłem od nowa bo sam już się pogubiłemSmile
Pierwsze uruchomienie z 3 czujnikami 2x DS18B20 i 1 Max6675
Na wyświetlaczu pokazuje mi 2 dobre temp. z czujników Ds i 0.00 z czujnika Max
Jak rozwiąże ten problem to dopisze się regulacje temp. z konkretnego czujnika.
Pozdrawiam
Kod PHP:
#include <LiquidCrystal_I2C.h>
#include <Wire.h>  //
#include <OneWire.h>
#include <DallasTemperature.h>
#include <DS18B20.h>
#include "max6675.h"
 //Definicje, definicje:
 #define SO_PIN  2  // 6675 Serial Output
#define CS_PIN  3  // 6675 Chip Select
#define CK_PIN  4  // 6675 Clock Pin

#define TOO_HOT  75.0  // To try limit calculation
#define TOO_COLD 62.5 
MAX6675 thermocouple(CK_PINCS_PINSO_PIN);
LiquidCrystal_I2C lcd(0x3F21045673POSITIVE);

OneWire oneWire(7); //Podłączenie do 7
DallasTemperature sensors(&oneWire); //Przekazania informacji do biblioteki
float DegreesC;
DeviceAddress a = { 0x280xFF0x6E0xE50x330x160x40x2E };
DeviceAddress b = { 0x280xFF0x30xE70x330x160x40xD4 };

void setup(void) {
 
 Serial.begin(9600);
 
 
  sensors
.begin(); //Inicjalizacja czujnikow
 
lcd.begin(162); //Deklaracja typu
 
lcd.setCursor(0,0);
 
lcd.print("W=");
 
lcd.print(sensors.getTempCByIndex(0));
 
  lcd.setCursor(0,1);
 
lcd.print("P=");
 
lcd.print(sensors.getTempCByIndex(1));
 
lcd.setCursor(8,1);
 
lcd.print("S=");
lcd.print(DegreesC);
}
 
void loop(void) { 
 
 sensors.requestTemperatures(); //Pobranie temperatury czujnika
 
 Serial.print("Woda: ");
 
 Serial.println(sensors.getTempCByIndex(0));  //Wyswietlenie informacji
 
 delay(500);
 
 Serial.print("Powietrze: ");
 
 Serial.println(sensors.getTempCByIndex(1));  //Wyswietlenie informacji
 
 delay(500);
 
 DegreesC thermocouple.readCelsius();
 
 Serial.print("C = "); 
 
 Serial.println(DegreesC);
 
 delay(250);

 
Odpowiedź
#7
Na monitorze portu mam takie odczyty:
a: 20.81
b: 20.69
C: 25.25
-127.00
a: 20.81
b: 20.62
C: 25.25
-127.00
Na wyświetlaczu widnieje pod czujnikiem -127
Jakieś pomysły?
Kod PHP:
#include <LiquidCrystal_I2C.h>
#include <Wire.h>  //
#include <OneWire.h>
#include <DallasTemperature.h>
#include <DS18B20.h>
#include "max6675.h" 
 //Definicje, definicje:
#define SO_PIN  2  // 6675 Serial Output
#define CS_PIN  3  // 6675 Chip Select
#define CK_PIN  4  // 6675 Clock Pin

#define TOO_HOT  75.0  // To try limit calculation
#define TOO_COLD 62.5 
MAX6675 thermocouple(CK_PINCS_PINSO_PIN);
float DegreesC
LiquidCrystal_I2C lcd(0x3F21045673POSITIVE);

OneWire oneWire(7); //Podłączenie do 7
DallasTemperature sensors(&oneWire); //Przekazania informacji do biblioteki

DeviceAddress a = { 0x280xFF0x6E0xE50x330x160x40x2E };
DeviceAddress b = { 0x280xFF0x30xE70x330x160x40xD4 };

void setup(void) {
 
 Serial.begin(9600);
 
 
  sensors
.begin(); //Inicjalizacja czujnikow
 
lcd.begin(162); //Deklaracja typu
 
lcd.setCursor(0,0);
 
lcd.print("W=");
 
lcd.print(sensors.getTempCByIndex(0));
 
  lcd.setCursor(0,1);
 
lcd.print("P=");
 
lcd.print(sensors.getTempCByIndex(1));
 
lcd.setCursor(8,1);
 
lcd.print("S=");
 
lcd.print(sensors.getTempCByIndex(3));

}
 
void loop(void) { 
 
 sensors.requestTemperatures(); //Pobranie temperatury czujnika
 
 Serial.print("a: ");
 
 Serial.println(sensors.getTempCByIndex(0));  //Wyswietlenie informacji
 
 delay(500);
 
 Serial.print("b: ");
 
 Serial.println(sensors.getTempCByIndex(1));  //Wyswietlenie informacji
 
 delay(500);

 
  DegreesC thermocouple.readCelsius();

 
  Serial.print("C: "); 
 
  Serial.println(DegreesC);
 
  Serial.println(sensors.getTempCByIndex(3));
 
  delay(500);

 
Odpowiedź
#8
Serial.println(sensors.getTempCByIndex(3)); Co to jest ?
 
Odpowiedź
#9
(12-03-2017, 13:51)-adamek napisał(a): Serial.println(sensors.getTempCByIndex(3)); Co to jest ?

próbowałem odnieś się do czujnika 6675 aby był widoczny na wyświetlaczu
 
Odpowiedź
#10
Przy tych ustawieniach dobrze pokazuje na monitorze portów ale na wyświetlaczu 0.00
Woda: 47.81
Powietrze: 21.81
C = 27.50
Woda: 47.81
Powietrze: 21.81
C = 28.00


Kod PHP:
#include <LiquidCrystal_I2C.h>
#include <Wire.h>  //
#include <OneWire.h>
#include <DallasTemperature.h>
#include <DS18B20.h>
#include "max6675.h"
 //Definicje, definicje:
 #define SO_PIN  2  // 6675 Serial Output
#define CS_PIN  3  // 6675 Chip Select
#define CK_PIN  4  // 6675 Clock Pin

#define TOO_HOT  75.0  // To try limit calculation
#define TOO_COLD 62.5 
MAX6675 thermocouple(CK_PINCS_PINSO_PIN);
LiquidCrystal_I2C lcd(0x3F21045673POSITIVE);

OneWire oneWire(7); //Podłączenie do 7
DallasTemperature sensors(&oneWire); //Przekazania informacji do biblioteki
float DegreesC;
DeviceAddress a = { 0x280xFF0x6E0xE50x330x160x40x2E };
DeviceAddress b = { 0x280xFF0x30xE70x330x160x40xD4 };

void setup(void) {
 
 Serial.begin(9600);
 
 
  sensors
.begin(); //Inicjalizacja czujnikow
 
lcd.begin(162); //Deklaracja typu
 
lcd.setCursor(0,0);
 
lcd.print("W=");
 
lcd.print(sensors.getTempCByIndex(0));
 
  lcd.setCursor(0,1);
 
lcd.print("P=");
 
lcd.print(sensors.getTempCByIndex(1));
 
lcd.setCursor(8,1);
 
lcd.print("C=");
lcd.print(DegreesC);
}
 
void loop(void) { 
 
 sensors.requestTemperatures(); //Pobranie temperatury czujnika
 
 Serial.print("Woda: ");
 
 Serial.println(sensors.getTempCByIndex(0));  //Wyswietlenie informacji
 
 delay(500);
 
 Serial.print("Powietrze: ");
 
 Serial.println(sensors.getTempCByIndex(1));  //Wyswietlenie informacji
 
 delay(500);
 
 Serial.print("C = "); 
 
 Serial.println(DegreesC);
 
 DegreesC thermocouple.readCelsius();
 
 delay(250);

 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości