#include #include #include //#include #include // Only needed for Arduino 1.6.5 and earlier #include #include DS1631 Temp1(0); // ini // Update these with values suitable for your network. byte mac[] = { 0x90, 0xA2, 0xDA, 0x00, 0xDA, 0x9C }; IPAddress ip(192, 168,2 , 241); IPAddress server(192, 168, 2, 71); //Motor // The X Stepper pins #define STEPPER1_DIR_PIN 7 #define STEPPER1_STEP_PIN 6 AccelStepper stepper1(AccelStepper::FULL2WIRE,STEPPER1_STEP_PIN, STEPPER1_DIR_PIN); int motorOn = 1; int motorSpeed = 50; int motorMaxSpeed = 1000; //Relais //Relaissatz + Peltiersteuerung int relaispin = 3; boolean relais = false; // true = heizen false = kühlen boolean aktrelais = false; int powerpin = 2; int power = 1; // Vorseinstellung für die Power int aktpower=0; //Thermistor zum Schutz int t1apin = 0; int notfall = 80; // maximale Temperatur des Systems int t1 =0; // Temperaturregulation zunächst größer 0 ; int targetTemp = 0; // Automatik ist aus unsigned long pubTime; // Data char buffer[10]; String line0; EthernetClient ethClient; PubSubClient mqttClient(ethClient); void callback(char* topic, byte* payload, unsigned int length) { Serial.print("Message arrived ["); Serial.print(topic); Serial.print("] Länge "); Serial.print(length); line0 =topic; //Zieltemperatur if (line0.endsWith("targettemp")) { int x = 0; int y = 0; for (int i=0;i kühlen | aktrealis HIGH -> heizen Serial.println(tdelta); if ( aktrelais == LOW){ // Kühlen if (tdelta < 0){ aktpower = HIGH; digitalWrite(powerpin,aktpower); Serial.println("Power bleibt On"); mqttClient.publish("/maschine/status", "Power On"); } else { aktpower = LOW; digitalWrite(powerpin,aktpower); Serial.println("Power Off"); mqttClient.publish("/maschine/status", "Power Off"); } } else { // Heizen if (tdelta < 0){ aktpower = LOW; digitalWrite(powerpin,aktpower); Serial.println("Power OFF"); mqttClient.publish("/maschine/status", "Power Off"); } else { t1 = float(Thermistor(analogRead(0))); int i = (int)t1; targetTemp ; Serial.print(i); Serial.print(targetTemp); i = i - targetTemp; Serial.println(i); if (i<1){ aktpower = HIGH; digitalWrite(powerpin,aktpower); Serial.println("Power ON"); mqttClient.publish("/maschine/status", "Power On"); } } } } void loop() { if (motorOn== 1) { stepper1.runSpeed(); } mqttClient.loop(); if (!mqttClient.connected()) { reconnect(); } if(millis() > pubTime+5000){ pub_Temp(); if (targetTemp > 0){ checkTargetTemp(); } } } void pub_Temp(){ pubTime = millis(); float tist = Temp1.readTempOneShot(); dtostrf(tist, 6, 2, buffer); mqttClient.publish("/maschine/temp", buffer); Serial.print(" I2C Temp "); Serial.println(tist); t1 = float(Thermistor(analogRead(0))); dtostrf(t1, 6, 2, buffer); mqttClient.publish("/maschine/thermistor", buffer); Serial.print(" Thermistor "); Serial.println(t1); int i = (int) t1; if (i > notfall){ targetTemp = 0; aktpower = LOW; digitalWrite(powerpin,aktpower); Serial.println("Notfall"); mqttClient.publish("/maschine/status", "Notfall HOT !!"); } } double Thermistor(int RawADC) { double Temp; Temp = log(10000.0*((1024.0/RawADC-1))); // =log(10000.0/(1024.0/RawADC-1)) // for pull-up configuration Temp = 1 / (0.001129148 + (0.000234125 + (0.0000000876741 * Temp * Temp ))* Temp ); Temp = Temp - 273.15; // Convert Kelvin to Celcius //Temp = (Temp * 9.0)/ 5.0 + 32.0; // Convert Celcius to Fahrenheit return Temp; } /* void scan(){ Serial.println(" Scanning I2C Addresses"); uint8_t cnt=0; for(uint8_t i=0;i<128;i++){ Wire.beginTransmission(i); uint8_t ec=Wire.endTransmission(true); if(ec==0){ if(i<16)Serial.print('0'); Serial.print(i,HEX); cnt++; } else Serial.print(".."); Serial.print(' '); if ((i&0x0f)==0x0f)Serial.println(); } Serial.print("Scan Completed, "); Serial.print(cnt); Serial.println(" I2C Devices found."); } */