Zoek

Arduino shield voor PT1000, DS18B20, teller en relais aansturing

Sorry - this product is no longer available

Arduino shield voor metingen met vier PT1000 (RTD) en drie DS18B20 temperatuursensoren en 8 relais besturings kanalen. Geschikt voor het besturen van zonneboilers, houtkachels en verwamings regelingen. Ook geschikt voor energiemetingen met zonmon.com
Artikelnummer:: 4161
Gratis bezorgd (NL)
€98,00
decrease increase

Shield geschikt voor 4 x PT1000 (RTD), 3 x DS18B20 temperatuursensoren, 1 counter of aan/uit detectie ingang en 8 relais besturings uitgangen (8 x darlington opto couplers met open collector uitgang).

Geschikt voor het besturen van zonneboilers, houtkachels en verwamingsregelingen. Ook geschikt voor energiemetingen met zonmon.com.


Inhoud:

- 1 x Econo shield, gemaakt en getest

- 8 x soldeer/krimp stekkertje voor sensoraansluiting

 

Levertijd 2 weken, wordt op bestelling gemaakt en niet op zicht geleverd.


De prijs is inclusief verzendkosten!

De Arduino hoeft niet zelf de sensorbesturing te doen, 3 x ATMEL TINY85 doen het zware werk. De Arduino hoeft alleen maar het resultaat op te vragen. De Arduino hoeft ook nergens op te wachten wat het maken van applicaties een stuk eenvoudiger maakt, zie voorbeeld sketch waarbij elke 3 seconden een verzoek voor sensorwaarden wordt gemaakt die dan gebufferd asynchroon verwerkt worden. 

Elke sensor heeft zijn eigen ingang, er is dan ook geen ingewikkelde procedure nodig om b.v. de verschillende DS18B20's te identificeren, gewoon inpluggen en werken.

 

/*
  Econo Arduino controller 8 inputs channels and 8 output channels 
  - 4 x PT1000 temperature sensor inputs
  - 3 x DS18B20 temperature sensor inputs
  - 1 x counter input
  - 8 x relay output
 */
 
#include 
#include 

// Pin 9 has a LED (L9) connected on Arduino ethernet boards.
// L9 will flash slowly when active

// pin 3, is the input from the Tiny85 rs232 inverted output and is used for reading the data from the Tiny85
// pin 2 is used to activate the Tiny85 to send the sensor data

int led = 9;
int select_Tiny = 2; // the select port for the tiny85
int rx=3; // rs232 receive port for Tiny85 data
int tx=99; // non existing port, we do not need to transmit over the rs232 port to the Tiny85
int looptime=1; // 5 seconds
int SecCounter = 0; 
int mSecCounter=0;
String rxBuffer = "";
char c;
boolean Tselect = false;
int SelectmSec = 0;
int relaypointer = 0;

//==============================sensor variables=============================================
float t1 = 0; // PT1000 sensor -20ºC to 260ºC, average is calcualted between measurements
float t2 = 0; // PT1000 sensor -20ºC to 260ºC, average is calcualted between measurements
float t3 = 0; // PT1000 sensor -20ºC to 260ºC, average is calcualted between measurements
float t4 = 0; // PT1000 sensor -20ºC to 260ºC, average is calcualted between data requests to Tiny85 
float t5 = 0; // DS18B20 sensor -50ºC to 125ºC, last value is provided at data request to Tiny85
float t6 = 0; // DS18B20 sensor -50ºC to 125ºC, last value is provided at data request to Tiny85
float t7 = 0; // DS18B20 sensor -50ºC to 125ºC, last value is provided at data request to Tiny85
int c1 = 0;   // Counter input e.g. flow meter or SO output from elektricity meter, counter value is reset after reading
boolean s1 = true; // The state of the counter input
float DeltaT=0;

SoftwareSerial mySerial(rx, tx, false); 

// the setup routine runs once when you press reset:
void setup() { 
     // Open serial communications
    Serial.begin(9600);
    mySerial.begin(9600);
    mySerial.listen();
    
    pinMode(4, OUTPUT); // ouput shield darlington port
    pinMode(5, OUTPUT); // ouput shield darlington port
    pinMode(6, OUTPUT); // ouput shield darlington port
    pinMode(7, OUTPUT); // ouput shield darlington port
    pinMode(A2, OUTPUT); // ouput shield darlington port
    pinMode(A3, OUTPUT); // ouput shield darlington port
    pinMode(A4, OUTPUT); // ouput shield darlington port
    pinMode(A5, OUTPUT); // ouput shield darlington port
    
    
    // initialize the digital pin as an output.
    pinMode(led, OUTPUT); 
     
    digitalWrite(4,HIGH); // make sure all relays ar in off position
    digitalWrite(5,HIGH);
    digitalWrite(6,HIGH);
    digitalWrite(7,HIGH);
    digitalWrite(A2,HIGH);
    digitalWrite(A3,HIGH);
    digitalWrite(A4,HIGH);
    digitalWrite(A5,HIGH);
     
    // set SELECT inactive to Tiny (low==select) 
    pinMode(select_Tiny,OUTPUT);
    digitalWrite(select_Tiny,HIGH);
    
    Timer1.initialize(1000);  // 1 msecond
    Timer1.attachInterrupt( timerIsr ); // attach the service routine here
    
    SecCounter=looptime; // start sending 
}

// the loop routine runs forever:
void loop() 
{

 if (SecCounter >= looptime){ 
 
     SecCounter = 0;
 
     if (Tselect == false){ // we can initialise a new read from Tiny
   
       digitalWrite(select_Tiny,LOW);  // active SELECT pin (low) to get data from the 3 Tiny 
       Tselect=true;
       SelectmSec=0;
       rxBuffer="";
     }
    
    // demo relay switching
    ++relaypointer;
    switch (relaypointer){
    
    case 1:
       digitalWrite(4,LOW); // relay on
       break  ;
    case 2:
       digitalWrite(5,LOW);
       break  ;
    case 3:
       digitalWrite(6,LOW);
       break  ;
    case 4:
       digitalWrite(7,LOW);
       break  ;
    case 5:
       digitalWrite(A2,LOW);
       break  ;
    case 6:
       digitalWrite(A3,LOW);
       break  ;
    case 7:
       digitalWrite(A4,LOW);
       break  ;
    case 8:
       digitalWrite(A5,LOW);
       break  ;
    case 9:
        digitalWrite(4,HIGH);
        digitalWrite(5,HIGH);
        digitalWrite(6,HIGH);
        digitalWrite(7,HIGH);
        digitalWrite(A2,HIGH);
        digitalWrite(A3,HIGH);
        digitalWrite(A4,HIGH);
        digitalWrite(A5,HIGH);
        break  ;
    case 10:
        digitalWrite(4,LOW);
        digitalWrite(5,LOW);
        digitalWrite(6,LOW);
        digitalWrite(7,LOW);
        digitalWrite(A2,LOW);
        digitalWrite(A3,LOW);
        digitalWrite(A4,LOW);
        digitalWrite(A5,LOW);
        break  ;
    case 11:
        digitalWrite(4,HIGH);
        digitalWrite(5,HIGH);
        digitalWrite(6,HIGH);
        digitalWrite(7,HIGH);
        digitalWrite(A2,HIGH);
        digitalWrite(A3,HIGH);
        digitalWrite(A4,HIGH);
        digitalWrite(A5,HIGH);
        break  ;
    case 12:
        relaypointer = 0 ;  
        break  ;
    }
    
     // ---------------------------start business logic-------------------------------
     // Here we can do our calculations and issue switch commands to the output ports
     // based on measured temperatures. 
     // e.g calc DeltaT from t1 and t2 and switch if bigger then 2 ºC
     
     DeltaT = t1-t2;
     if(DeltaT > 2){
          digitalWrite(7,LOW);
     }
     else{
        digitalWrite(7,HIGH);
     }
   //-------------------------------end business logic--------------------------------
   
  }
 
  if (Tselect == true && SelectmSec >= 100){ // we leave the select pulse for 100 mSec active.
  // The three Tiny85 chips share a serial output bus and a common select input
  // chip Tiny85 I starts sending after 10 msec (t4,t5,t6,c1,s1) 3 x DS18B20 and counter
  // chip Tiny85 II after 50 msec (t1,t2) 2 x PT1000
  // chip Tiny85 III after 75 msec (t3,t4) 2 x PT1000
  
     Tselect=false;
     digitalWrite(select_Tiny,HIGH); // end selectpulse
  }

  while (mySerial.available()){ // read available characters and put them in the buffer
    c = mySerial.read();
    rxBuffer = rxBuffer + c;
  }
  
  if (rxBuffer.length() > 3 ){
    ParseBufferToValues();
  }
  
}
  
void ParseBufferToValues(){
  
  int EgSign = 0;
  int Delimiter = 0;
  String Sensor = "";
  String SensorValue= "";
  String tmpBuffer ="";
  int lenBuffer=rxBuffer.length();

  Serial.println("Buff: " + rxBuffer); 
  
    
  EgSign = rxBuffer.indexOf("=");
  Delimiter = rxBuffer.indexOf("&");
    
  while (EgSign > 0 && Delimiter > 0 )
  {  
    Sensor = rxBuffer.substring(EgSign-2,EgSign);
    SensorValue = rxBuffer.substring(EgSign+1,Delimiter);
    
    tmpBuffer = rxBuffer.substring(Delimiter+1,lenBuffer);
    lenBuffer = tmpBuffer.length();
    rxBuffer=tmpBuffer;
    Serial.println("Parse: " + Sensor + " - " + SensorValue);  
    
    if (Sensor=="t1"){t1=SensorValue.toFloat();}
    if (Sensor=="t2"){t2=SensorValue.toFloat();}
    if (Sensor=="t3"){t3=SensorValue.toFloat();}
    if (Sensor=="t4"){t4=SensorValue.toFloat();}
    if (Sensor=="t5"){t5=SensorValue.toFloat();}
    if (Sensor=="t6"){t6=SensorValue.toFloat();}
    if (Sensor=="t7"){t7=SensorValue.toFloat();}
    if (Sensor=="c1"){c1=SensorValue.toInt();}
    if (Sensor=="s1"){if(SensorValue==0){s1==false;}else{ s1==true;}}
     
    EgSign = rxBuffer.indexOf("=");
    Delimiter = rxBuffer.indexOf("&");

 
  }  
  
}


void timerIsr(){
  
  ++mSecCounter;
  
  if (Tselect==true)
      {
        ++SelectmSec;
      }
    
  if (mSecCounter >= 1000)
    {
        ++SecCounter;
       mSecCounter=0;
       digitalWrite( led, digitalRead( led ) ^ 1 );
     }

}


Shield geschikt voor 4 x PT1000 (RTD), 3 x DS18B20 temperatuursensoren, 1 counter of aan/uit detectie ingang en 8 relais besturings uitgangen (8 x darlington opto couplers met open collector uitgang).

Geschikt voor het besturen van zonneboilers, houtkachels en verwamingsregelingen. Ook geschikt voor energiemetingen met zonmon.com.


Inhoud:

- 1 x Econo shield, gemaakt en getest

- 8 x soldeer/krimp stekkertje voor sensoraansluiting

 

Levertijd 2 weken, wordt op bestelling gemaakt en niet op zicht geleverd.


De prijs is inclusief verzendkosten!

De Arduino hoeft niet zelf de sensorbesturing te doen, 3 x ATMEL TINY85 doen het zware werk. De Arduino hoeft alleen maar het resultaat op te vragen. De Arduino hoeft ook nergens op te wachten wat het maken van applicaties een stuk eenvoudiger maakt, zie voorbeeld sketch waarbij elke 3 seconden een verzoek voor sensorwaarden wordt gemaakt die dan gebufferd asynchroon verwerkt worden. 

Elke sensor heeft zijn eigen ingang, er is dan ook geen ingewikkelde procedure nodig om b.v. de verschillende DS18B20's te identificeren, gewoon inpluggen en werken.

 

/*
  Econo Arduino controller 8 inputs channels and 8 output channels 
  - 4 x PT1000 temperature sensor inputs
  - 3 x DS18B20 temperature sensor inputs
  - 1 x counter input
  - 8 x relay output
 */
 
#include 
#include 

// Pin 9 has a LED (L9) connected on Arduino ethernet boards.
// L9 will flash slowly when active

// pin 3, is the input from the Tiny85 rs232 inverted output and is used for reading the data from the Tiny85
// pin 2 is used to activate the Tiny85 to send the sensor data

int led = 9;
int select_Tiny = 2; // the select port for the tiny85
int rx=3; // rs232 receive port for Tiny85 data
int tx=99; // non existing port, we do not need to transmit over the rs232 port to the Tiny85
int looptime=1; // 5 seconds
int SecCounter = 0; 
int mSecCounter=0;
String rxBuffer = "";
char c;
boolean Tselect = false;
int SelectmSec = 0;
int relaypointer = 0;

//==============================sensor variables=============================================
float t1 = 0; // PT1000 sensor -20ºC to 260ºC, average is calcualted between measurements
float t2 = 0; // PT1000 sensor -20ºC to 260ºC, average is calcualted between measurements
float t3 = 0; // PT1000 sensor -20ºC to 260ºC, average is calcualted between measurements
float t4 = 0; // PT1000 sensor -20ºC to 260ºC, average is calcualted between data requests to Tiny85 
float t5 = 0; // DS18B20 sensor -50ºC to 125ºC, last value is provided at data request to Tiny85
float t6 = 0; // DS18B20 sensor -50ºC to 125ºC, last value is provided at data request to Tiny85
float t7 = 0; // DS18B20 sensor -50ºC to 125ºC, last value is provided at data request to Tiny85
int c1 = 0;   // Counter input e.g. flow meter or SO output from elektricity meter, counter value is reset after reading
boolean s1 = true; // The state of the counter input
float DeltaT=0;

SoftwareSerial mySerial(rx, tx, false); 

// the setup routine runs once when you press reset:
void setup() { 
     // Open serial communications
    Serial.begin(9600);
    mySerial.begin(9600);
    mySerial.listen();
    
    pinMode(4, OUTPUT); // ouput shield darlington port
    pinMode(5, OUTPUT); // ouput shield darlington port
    pinMode(6, OUTPUT); // ouput shield darlington port
    pinMode(7, OUTPUT); // ouput shield darlington port
    pinMode(A2, OUTPUT); // ouput shield darlington port
    pinMode(A3, OUTPUT); // ouput shield darlington port
    pinMode(A4, OUTPUT); // ouput shield darlington port
    pinMode(A5, OUTPUT); // ouput shield darlington port
    
    
    // initialize the digital pin as an output.
    pinMode(led, OUTPUT); 
     
    digitalWrite(4,HIGH); // make sure all relays ar in off position
    digitalWrite(5,HIGH);
    digitalWrite(6,HIGH);
    digitalWrite(7,HIGH);
    digitalWrite(A2,HIGH);
    digitalWrite(A3,HIGH);
    digitalWrite(A4,HIGH);
    digitalWrite(A5,HIGH);
     
    // set SELECT inactive to Tiny (low==select) 
    pinMode(select_Tiny,OUTPUT);
    digitalWrite(select_Tiny,HIGH);
    
    Timer1.initialize(1000);  // 1 msecond
    Timer1.attachInterrupt( timerIsr ); // attach the service routine here
    
    SecCounter=looptime; // start sending 
}

// the loop routine runs forever:
void loop() 
{

 if (SecCounter >= looptime){ 
 
     SecCounter = 0;
 
     if (Tselect == false){ // we can initialise a new read from Tiny
   
       digitalWrite(select_Tiny,LOW);  // active SELECT pin (low) to get data from the 3 Tiny 
       Tselect=true;
       SelectmSec=0;
       rxBuffer="";
     }
    
    // demo relay switching
    ++relaypointer;
    switch (relaypointer){
    
    case 1:
       digitalWrite(4,LOW); // relay on
       break  ;
    case 2:
       digitalWrite(5,LOW);
       break  ;
    case 3:
       digitalWrite(6,LOW);
       break  ;
    case 4:
       digitalWrite(7,LOW);
       break  ;
    case 5:
       digitalWrite(A2,LOW);
       break  ;
    case 6:
       digitalWrite(A3,LOW);
       break  ;
    case 7:
       digitalWrite(A4,LOW);
       break  ;
    case 8:
       digitalWrite(A5,LOW);
       break  ;
    case 9:
        digitalWrite(4,HIGH);
        digitalWrite(5,HIGH);
        digitalWrite(6,HIGH);
        digitalWrite(7,HIGH);
        digitalWrite(A2,HIGH);
        digitalWrite(A3,HIGH);
        digitalWrite(A4,HIGH);
        digitalWrite(A5,HIGH);
        break  ;
    case 10:
        digitalWrite(4,LOW);
        digitalWrite(5,LOW);
        digitalWrite(6,LOW);
        digitalWrite(7,LOW);
        digitalWrite(A2,LOW);
        digitalWrite(A3,LOW);
        digitalWrite(A4,LOW);
        digitalWrite(A5,LOW);
        break  ;
    case 11:
        digitalWrite(4,HIGH);
        digitalWrite(5,HIGH);
        digitalWrite(6,HIGH);
        digitalWrite(7,HIGH);
        digitalWrite(A2,HIGH);
        digitalWrite(A3,HIGH);
        digitalWrite(A4,HIGH);
        digitalWrite(A5,HIGH);
        break  ;
    case 12:
        relaypointer = 0 ;  
        break  ;
    }
    
     // ---------------------------start business logic-------------------------------
     // Here we can do our calculations and issue switch commands to the output ports
     // based on measured temperatures. 
     // e.g calc DeltaT from t1 and t2 and switch if bigger then 2 ºC
     
     DeltaT = t1-t2;
     if(DeltaT > 2){
          digitalWrite(7,LOW);
     }
     else{
        digitalWrite(7,HIGH);
     }
   //-------------------------------end business logic--------------------------------
   
  }
 
  if (Tselect == true && SelectmSec >= 100){ // we leave the select pulse for 100 mSec active.
  // The three Tiny85 chips share a serial output bus and a common select input
  // chip Tiny85 I starts sending after 10 msec (t4,t5,t6,c1,s1) 3 x DS18B20 and counter
  // chip Tiny85 II after 50 msec (t1,t2) 2 x PT1000
  // chip Tiny85 III after 75 msec (t3,t4) 2 x PT1000
  
     Tselect=false;
     digitalWrite(select_Tiny,HIGH); // end selectpulse
  }

  while (mySerial.available()){ // read available characters and put them in the buffer
    c = mySerial.read();
    rxBuffer = rxBuffer + c;
  }
  
  if (rxBuffer.length() > 3 ){
    ParseBufferToValues();
  }
  
}
  
void ParseBufferToValues(){
  
  int EgSign = 0;
  int Delimiter = 0;
  String Sensor = "";
  String SensorValue= "";
  String tmpBuffer ="";
  int lenBuffer=rxBuffer.length();

  Serial.println("Buff: " + rxBuffer); 
  
    
  EgSign = rxBuffer.indexOf("=");
  Delimiter = rxBuffer.indexOf("&");
    
  while (EgSign > 0 && Delimiter > 0 )
  {  
    Sensor = rxBuffer.substring(EgSign-2,EgSign);
    SensorValue = rxBuffer.substring(EgSign+1,Delimiter);
    
    tmpBuffer = rxBuffer.substring(Delimiter+1,lenBuffer);
    lenBuffer = tmpBuffer.length();
    rxBuffer=tmpBuffer;
    Serial.println("Parse: " + Sensor + " - " + SensorValue);  
    
    if (Sensor=="t1"){t1=SensorValue.toFloat();}
    if (Sensor=="t2"){t2=SensorValue.toFloat();}
    if (Sensor=="t3"){t3=SensorValue.toFloat();}
    if (Sensor=="t4"){t4=SensorValue.toFloat();}
    if (Sensor=="t5"){t5=SensorValue.toFloat();}
    if (Sensor=="t6"){t6=SensorValue.toFloat();}
    if (Sensor=="t7"){t7=SensorValue.toFloat();}
    if (Sensor=="c1"){c1=SensorValue.toInt();}
    if (Sensor=="s1"){if(SensorValue==0){s1==false;}else{ s1==true;}}
     
    EgSign = rxBuffer.indexOf("=");
    Delimiter = rxBuffer.indexOf("&");

 
  }  
  
}


void timerIsr(){
  
  ++mSecCounter;
  
  if (Tselect==true)
      {
        ++SelectmSec;
      }
    
  if (mSecCounter >= 1000)
    {
        ++SecCounter;
       mSecCounter=0;
       digitalWrite( led, digitalRead( led ) ^ 1 );
     }

}


Product specificaties
Regelaar flexibiliteit+++++
Regelaar complexiteit+++++
Regelaar featuresZonneboiler
Regelaar featuresHoutkachel
Regelaar featuresCV regeling
Regelaar featuresZone regeling
Regelaar featuresKamer thermostaat
Regelaar featuresBuiten sensor
Regelaar featuresEnergie meting - thermisch
Regelaar featuresEnergie meting - elektrisch
Regelaar featuresDelta-t regeling
Regelaar featuresInternet monitor
Regelaar featuresInternet besturing
Schrijf uw eigen beoordeling
  • Product can be reviewed only after purchasing it
  • Alleen geregistreerde gebruikers kunnen een beoordeling schrijven
*
*
Slecht
Uitstekend
*
*
*
*
Additionele informatie
Product specificaties
Regelaar flexibiliteit+++++
Regelaar complexiteit+++++
Regelaar featuresZonneboiler
Regelaar featuresHoutkachel
Regelaar featuresCV regeling
Regelaar featuresZone regeling
Regelaar featuresKamer thermostaat
Regelaar featuresBuiten sensor
Regelaar featuresEnergie meting - thermisch
Regelaar featuresEnergie meting - elektrisch
Regelaar featuresDelta-t regeling
Regelaar featuresInternet monitor
Regelaar featuresInternet besturing
Filters
Sort
display