A small controller for controlling the tempeture inside my kegerator. It has weigth and outside temp

Dependencies:   DHT DS18B20_1wire EthernetInterface Hx711 mbed-rtos mbed

Committer:
gert_lauritsen
Date:
Sun Feb 21 11:03:55 2016 +0000
Revision:
0:a07ccbfc0b89
Controller for a Keggenerator

Who changed what in which revision?

UserRevisionLine numberNew contents of line
gert_lauritsen 0:a07ccbfc0b89 1 #include "mbed.h"
gert_lauritsen 0:a07ccbfc0b89 2 #include <stdint.h>
gert_lauritsen 0:a07ccbfc0b89 3 #include "DS18B20.h"
gert_lauritsen 0:a07ccbfc0b89 4 #include "DHT.h"
gert_lauritsen 0:a07ccbfc0b89 5 #include "EthernetInterface.h"
gert_lauritsen 0:a07ccbfc0b89 6 #include "Hx711.h"
gert_lauritsen 0:a07ccbfc0b89 7
gert_lauritsen 0:a07ccbfc0b89 8 #define RATE 1
gert_lauritsen 0:a07ccbfc0b89 9 #define SensorOffset 0
gert_lauritsen 0:a07ccbfc0b89 10
gert_lauritsen 0:a07ccbfc0b89 11 char* SERVER_ADDRESS = "172.31.2.3";
gert_lauritsen 0:a07ccbfc0b89 12 const int SERVER_PORT = 2223;
gert_lauritsen 0:a07ccbfc0b89 13
gert_lauritsen 0:a07ccbfc0b89 14
gert_lauritsen 0:a07ccbfc0b89 15 typedef struct {
gert_lauritsen 0:a07ccbfc0b89 16 char CtrlType;
gert_lauritsen 0:a07ccbfc0b89 17 long RawData;
gert_lauritsen 0:a07ccbfc0b89 18 long Offset;
gert_lauritsen 0:a07ccbfc0b89 19 } __attribute__ ((packed)) TStatus;
gert_lauritsen 0:a07ccbfc0b89 20
gert_lauritsen 0:a07ccbfc0b89 21 typedef struct {
gert_lauritsen 0:a07ccbfc0b89 22 char CtrlType;
gert_lauritsen 0:a07ccbfc0b89 23 float tempeture; //nuværende temperatur
gert_lauritsen 0:a07ccbfc0b89 24 float setpoint; //Hvad temperatur vi skal nå.
gert_lauritsen 0:a07ccbfc0b89 25 float weigth; //Vægten af fadet
gert_lauritsen 0:a07ccbfc0b89 26 float OutTemp; //Udendørs temperatur
gert_lauritsen 0:a07ccbfc0b89 27 float OutHum; //udendør hymidity
gert_lauritsen 0:a07ccbfc0b89 28 float Hyst; //Hysterese
gert_lauritsen 0:a07ccbfc0b89 29 } __attribute__ ((packed)) Tsetting;
gert_lauritsen 0:a07ccbfc0b89 30
gert_lauritsen 0:a07ccbfc0b89 31 DigitalOut led(LED_GREEN); //Indikator på frys
gert_lauritsen 0:a07ccbfc0b89 32 DigitalOut Cool(A3); //Fryser relæ
gert_lauritsen 0:a07ccbfc0b89 33
gert_lauritsen 0:a07ccbfc0b89 34 HX711 LoadCell(A4,A5);
gert_lauritsen 0:a07ccbfc0b89 35 DHT dht22(A2,DHT22); //Udendørs temperatur
gert_lauritsen 0:a07ccbfc0b89 36
gert_lauritsen 0:a07ccbfc0b89 37 Serial pc(USBTX, USBRX); // serial comms over usb back to console
gert_lauritsen 0:a07ccbfc0b89 38 DS18B20 thermom(A1, DS18B20::RES_12_BIT); // Dallas 1-wire
gert_lauritsen 0:a07ccbfc0b89 39 float SetTemp;
gert_lauritsen 0:a07ccbfc0b89 40
gert_lauritsen 0:a07ccbfc0b89 41 Tsetting status;
gert_lauritsen 0:a07ccbfc0b89 42 EthernetInterface eth;
gert_lauritsen 0:a07ccbfc0b89 43 UDPSocket server,sock;; //Denne server. Modtager data fra PC sock er til at sende data
gert_lauritsen 0:a07ccbfc0b89 44 Endpoint process_server, DataIn;
gert_lauritsen 0:a07ccbfc0b89 45
gert_lauritsen 0:a07ccbfc0b89 46 void ReadTemp() {
gert_lauritsen 0:a07ccbfc0b89 47 status.tempeture=thermom.GetTemperature()-SensorOffset;
gert_lauritsen 0:a07ccbfc0b89 48 while ((status.tempeture<-20) || (status.tempeture>110)) status.tempeture=thermom.GetTemperature(); //læs igen
gert_lauritsen 0:a07ccbfc0b89 49 if (status.tempeture>(status.setpoint+status.Hyst)) {
gert_lauritsen 0:a07ccbfc0b89 50 Cool=1; led=0;
gert_lauritsen 0:a07ccbfc0b89 51 }
gert_lauritsen 0:a07ccbfc0b89 52 if (status.tempeture<(status.setpoint-status.Hyst)) {
gert_lauritsen 0:a07ccbfc0b89 53 Cool=0; led=1;
gert_lauritsen 0:a07ccbfc0b89 54 }
gert_lauritsen 0:a07ccbfc0b89 55
gert_lauritsen 0:a07ccbfc0b89 56 }
gert_lauritsen 0:a07ccbfc0b89 57
gert_lauritsen 0:a07ccbfc0b89 58 void ReadSocketDate(void const *args) {
gert_lauritsen 0:a07ccbfc0b89 59 char buffer[256];
gert_lauritsen 0:a07ccbfc0b89 60 printf("ReadThread Init Done\r\n");
gert_lauritsen 0:a07ccbfc0b89 61 while (1) {
gert_lauritsen 0:a07ccbfc0b89 62 int n = server.receiveFrom(DataIn, buffer, sizeof(buffer));
gert_lauritsen 0:a07ccbfc0b89 63 if (buffer[0]==0) { //seach function
gert_lauritsen 0:a07ccbfc0b89 64 if (strcmp(DataIn.get_address(),process_server.get_address())!=0) {
gert_lauritsen 0:a07ccbfc0b89 65 process_server.set_address(DataIn.get_address(),SERVER_PORT);
gert_lauritsen 0:a07ccbfc0b89 66 printf(" New Adress: %s\r\n",DataIn.get_address());
gert_lauritsen 0:a07ccbfc0b89 67 }
gert_lauritsen 0:a07ccbfc0b89 68 }
gert_lauritsen 0:a07ccbfc0b89 69 if (buffer[0]==1) {
gert_lauritsen 0:a07ccbfc0b89 70 memcpy(&status,&buffer[0],sizeof(status));
gert_lauritsen 0:a07ccbfc0b89 71 printf("NEW Settings [%s]:\r\n",DataIn.get_address());
gert_lauritsen 0:a07ccbfc0b89 72 printf(" setpoint: %.1f \r\n",status.setpoint);
gert_lauritsen 0:a07ccbfc0b89 73 }
gert_lauritsen 0:a07ccbfc0b89 74 if (buffer[0]==2) {
gert_lauritsen 0:a07ccbfc0b89 75 printf("Set new zero for loadCell\r\n");
gert_lauritsen 0:a07ccbfc0b89 76 LoadCell.tare(50);
gert_lauritsen 0:a07ccbfc0b89 77 }
gert_lauritsen 0:a07ccbfc0b89 78 }
gert_lauritsen 0:a07ccbfc0b89 79 }
gert_lauritsen 0:a07ccbfc0b89 80
gert_lauritsen 0:a07ccbfc0b89 81 int main() {
gert_lauritsen 0:a07ccbfc0b89 82 char out_buffer[sizeof(status)];
gert_lauritsen 0:a07ccbfc0b89 83 led=1;
gert_lauritsen 0:a07ccbfc0b89 84 pc.printf("\n\r---------------------------------------------------------------\n\r");
gert_lauritsen 0:a07ccbfc0b89 85 pc.printf("Fryser Controller INIT\n\r");
gert_lauritsen 0:a07ccbfc0b89 86 status.CtrlType=2;
gert_lauritsen 0:a07ccbfc0b89 87 status.setpoint=0;
gert_lauritsen 0:a07ccbfc0b89 88 eth.init(); //Use DHCP
gert_lauritsen 0:a07ccbfc0b89 89 eth.connect();
gert_lauritsen 0:a07ccbfc0b89 90 pc.printf("IP Address is %s\n\r", eth.getIPAddress());
gert_lauritsen 0:a07ccbfc0b89 91
gert_lauritsen 0:a07ccbfc0b89 92 sock.init();
gert_lauritsen 0:a07ccbfc0b89 93 server.bind(SERVER_PORT);
gert_lauritsen 0:a07ccbfc0b89 94
gert_lauritsen 0:a07ccbfc0b89 95 process_server.set_address(SERVER_ADDRESS, SERVER_PORT);
gert_lauritsen 0:a07ccbfc0b89 96
gert_lauritsen 0:a07ccbfc0b89 97 pc.printf("Temp Sensor: \n\r");
gert_lauritsen 0:a07ccbfc0b89 98 DS18B20::ROM_Code_t ROM_Code;
gert_lauritsen 0:a07ccbfc0b89 99 thermom.ReadROM(&ROM_Code);
gert_lauritsen 0:a07ccbfc0b89 100 pc.printf("Family code: 0x%X\n\r", ROM_Code.BYTES.familyCode);
gert_lauritsen 0:a07ccbfc0b89 101 pc.printf("Serial Number: ");
gert_lauritsen 0:a07ccbfc0b89 102 for (unsigned i = 6; i != 0; --i) {
gert_lauritsen 0:a07ccbfc0b89 103 pc.printf("%02X%s", ROM_Code.BYTES.serialNo[i-1], (i != 1)?":":"\r\n");
gert_lauritsen 0:a07ccbfc0b89 104 }
gert_lauritsen 0:a07ccbfc0b89 105 pc.printf("CRC: 0x%X\r\n", ROM_Code.BYTES.CRC);
gert_lauritsen 0:a07ccbfc0b89 106 Thread DbThread(ReadSocketDate, NULL, osPriorityNormal, (DEFAULT_STACK_SIZE * 2.25));
gert_lauritsen 0:a07ccbfc0b89 107
gert_lauritsen 0:a07ccbfc0b89 108 LoadCell.set_scale(1); //Sættes afhængigt af sensor
gert_lauritsen 0:a07ccbfc0b89 109 pc.printf("---------------------------------------------------------------\n\r");
gert_lauritsen 0:a07ccbfc0b89 110
gert_lauritsen 0:a07ccbfc0b89 111 pc.printf("\n\rRunning ...\n\r");
gert_lauritsen 0:a07ccbfc0b89 112
gert_lauritsen 0:a07ccbfc0b89 113
gert_lauritsen 0:a07ccbfc0b89 114 while (1) {
gert_lauritsen 0:a07ccbfc0b89 115 ReadTemp(); //
gert_lauritsen 0:a07ccbfc0b89 116 status.weigth=LoadCell.get_units(20);
gert_lauritsen 0:a07ccbfc0b89 117 int err=dht22.readData();
gert_lauritsen 0:a07ccbfc0b89 118 if (err==0) {
gert_lauritsen 0:a07ccbfc0b89 119 status.OutTemp=dht22.ReadTemperature(CELCIUS);
gert_lauritsen 0:a07ccbfc0b89 120 status.OutHum =dht22.ReadHumidity();
gert_lauritsen 0:a07ccbfc0b89 121 // printf("T: %.1f C",dht22.ReadTemperature(CELCIUS));
gert_lauritsen 0:a07ccbfc0b89 122 // printf(" H %.1f\% \n\r",dht22.ReadHumidity());
gert_lauritsen 0:a07ccbfc0b89 123 }
gert_lauritsen 0:a07ccbfc0b89 124 //send data til PC
gert_lauritsen 0:a07ccbfc0b89 125 // printf("%.1f \r\n",status.tempeture );
gert_lauritsen 0:a07ccbfc0b89 126 memcpy(&out_buffer[0],&status.CtrlType,sizeof(status));
gert_lauritsen 0:a07ccbfc0b89 127 sock.sendTo(process_server, out_buffer, sizeof(status));
gert_lauritsen 0:a07ccbfc0b89 128 wait(2);
gert_lauritsen 0:a07ccbfc0b89 129 }
gert_lauritsen 0:a07ccbfc0b89 130 }