Sump Pump Monitor v1.00 12-16-16 ABEtronics.com http://www.abetronics.com/?page_id=380

Dependencies:   STATIC_COLORS WIZnetInterface mbed

Fork of HTTP_SDCard_File_Server_WIZwiki-W7500 by FOURNET Olivier

Committer:
abraham3433
Date:
Tue Dec 20 15:27:56 2016 +0000
Revision:
16:b948cc536df5
Parent:
15:e6985c3724a8
Sump Pump Monitor Program. v1.00  12-20-16     Abetronics.com

Who changed what in which revision?

UserRevisionLine numberNew contents of line
abraham3433 15:e6985c3724a8 1 /*
abraham3433 15:e6985c3724a8 2 ==========================================================================
abraham3433 15:e6985c3724a8 3 Project: Sump Pump Monitor
abraham3433 15:e6985c3724a8 4 Description: Measure pump current to indicate run status. (10amp pump)
abraham3433 15:e6985c3724a8 5 Date: 11-6-16
abraham3433 15:e6985c3724a8 6 Author: Jim Abraham
abraham3433 15:e6985c3724a8 7 Board: WIZwiki-W7500
abraham3433 15:e6985c3724a8 8 Rev:
abraham3433 15:e6985c3724a8 9 ==========================================================================
abraham3433 15:e6985c3724a8 10 */
abraham3433 15:e6985c3724a8 11
abraham3433 15:e6985c3724a8 12 #include "mbed.h"
abraham3433 15:e6985c3724a8 13 #include "EthernetInterface.h"
abraham3433 15:e6985c3724a8 14 #include <stdio.h>
abraham3433 15:e6985c3724a8 15 #include <string.h>
abraham3433 15:e6985c3724a8 16
abraham3433 15:e6985c3724a8 17 #define USE_DHCP 0 // 0= no dhcp
abraham3433 15:e6985c3724a8 18 #define MAC "\x00\x08\xDC\x11\x34\x78"
abraham3433 15:e6985c3724a8 19 #define IP "192.168.0.12"
abraham3433 15:e6985c3724a8 20 #define MASK "255.255.255.0"
abraham3433 15:e6985c3724a8 21 #define GATEWAY "192.168.0.254"
abraham3433 15:e6985c3724a8 22 #define HTTPD_SERVER_PORT 80
abraham3433 15:e6985c3724a8 23 #define HTTPD_MAX_REQ_LENGTH 1023
abraham3433 15:e6985c3724a8 24 #define HTTPD_MAX_HDR_LENGTH 255
abraham3433 15:e6985c3724a8 25 #define HTTPD_MAX_FNAME_LENGTH 127
abraham3433 15:e6985c3724a8 26 #define HTTPD_MAX_DNAME_LENGTH 127
abraham3433 15:e6985c3724a8 27
abraham3433 15:e6985c3724a8 28 #if defined(TARGET_WIZwiki_W7500)
abraham3433 15:e6985c3724a8 29 Serial uart(USBTX, USBRX);
abraham3433 15:e6985c3724a8 30 #include "static_colors.h"
abraham3433 15:e6985c3724a8 31 // LED R : server listning status
abraham3433 15:e6985c3724a8 32 // LED GREEN : socket connecting status Ok
abraham3433 15:e6985c3724a8 33 // LED BLUE : socket connecting status Busy
abraham3433 15:e6985c3724a8 34 #endif
abraham3433 15:e6985c3724a8 35
abraham3433 15:e6985c3724a8 36 EthernetInterface eth;
abraham3433 15:e6985c3724a8 37 TCPSocketServer server;
abraham3433 15:e6985c3724a8 38 TCPSocketConnection client;
abraham3433 15:e6985c3724a8 39
abraham3433 15:e6985c3724a8 40 //========================================================
abraham3433 15:e6985c3724a8 41 // Data Variables.
abraham3433 15:e6985c3724a8 42 //========================================================
abraham3433 15:e6985c3724a8 43 int LP1,LP2,LP3;
abraham3433 15:e6985c3724a8 44 float AMP_Reading_on_AO, AMPreadingHI, AMPreading;
abraham3433 15:e6985c3724a8 45 char buffer[HTTPD_MAX_REQ_LENGTH+1];
abraham3433 15:e6985c3724a8 46 char httpHeader[HTTPD_MAX_HDR_LENGTH+1];
abraham3433 15:e6985c3724a8 47
abraham3433 15:e6985c3724a8 48 //-----------------------------------------------------------
abraham3433 15:e6985c3724a8 49 // Initialize a pins to perform analog input
abraham3433 15:e6985c3724a8 50 //-----------------------------------------------------------
abraham3433 15:e6985c3724a8 51 AnalogIn ain0(A0);
abraham3433 15:e6985c3724a8 52
abraham3433 15:e6985c3724a8 53 //-----------------------------------------------------------
abraham3433 15:e6985c3724a8 54 void Serial_Interface_init(void)
abraham3433 15:e6985c3724a8 55 //-----------------------------------------------------------
abraham3433 15:e6985c3724a8 56 {
abraham3433 15:e6985c3724a8 57 // Serial Interface eth;
abraham3433 15:e6985c3724a8 58 // Serial port configuration:
abraham3433 15:e6985c3724a8 59 // 9600 baud, 8-bit data, no parity, stop bit
abraham3433 15:e6985c3724a8 60 uart.baud(9600);
abraham3433 15:e6985c3724a8 61 uart.format(8, SerialBase::None, 1);
abraham3433 15:e6985c3724a8 62 uart.printf("Initializing\n");
abraham3433 15:e6985c3724a8 63 wait(1.0);
abraham3433 15:e6985c3724a8 64 }
abraham3433 15:e6985c3724a8 65
abraham3433 15:e6985c3724a8 66 //-----------------------------------------------------------
abraham3433 15:e6985c3724a8 67 void ethernet_init(void)
abraham3433 15:e6985c3724a8 68 //-----------------------------------------------------------
abraham3433 15:e6985c3724a8 69 {
abraham3433 15:e6985c3724a8 70 // EthernetInterface eth;
abraham3433 15:e6985c3724a8 71 uart.printf("Initializing Ethernet\n");
abraham3433 15:e6985c3724a8 72 #if USE_DHCP
abraham3433 15:e6985c3724a8 73 //eth.init Use DHCP
abraham3433 15:e6985c3724a8 74 // Use DHCP for WIZnetInterface
abraham3433 15:e6985c3724a8 75 int ret = eth.init((uint8_t*)MAC);
abraham3433 15:e6985c3724a8 76 uart.printf("Connecting DHCP\n");
abraham3433 15:e6985c3724a8 77 #else
abraham3433 15:e6985c3724a8 78 // IP,mask,Gateway
abraham3433 15:e6985c3724a8 79 int ret = eth.init((uint8_t*)MAC,IP,MASK,GATEWAY);
abraham3433 15:e6985c3724a8 80 uart.printf("Connecting (IP,mask,Gateway)\n");
abraham3433 15:e6985c3724a8 81 #endif
abraham3433 15:e6985c3724a8 82 wait(1.0);
abraham3433 15:e6985c3724a8 83 // Check Ethernet Link-Done
abraham3433 15:e6985c3724a8 84 uart.printf("Check Ethernet Link\r\n");
abraham3433 15:e6985c3724a8 85
abraham3433 15:e6985c3724a8 86 if(eth.link() == true)
abraham3433 15:e6985c3724a8 87 {
abraham3433 15:e6985c3724a8 88 uart.printf("- Ethernet PHY Link - Done\r\n");
abraham3433 15:e6985c3724a8 89 COLOR(_RED_);
abraham3433 15:e6985c3724a8 90 }
abraham3433 15:e6985c3724a8 91 else
abraham3433 15:e6985c3724a8 92 {
abraham3433 15:e6985c3724a8 93 uart.printf("- Ethernet PHY Link - Fail\r\n");
abraham3433 15:e6985c3724a8 94 COLOR(_BLACK_);
abraham3433 15:e6985c3724a8 95 }
abraham3433 15:e6985c3724a8 96 wait(1.0);
abraham3433 15:e6985c3724a8 97 if(!ret)
abraham3433 15:e6985c3724a8 98 {
abraham3433 15:e6985c3724a8 99 uart.printf("Initialized, MAC: %s\r\n", eth.getMACAddress());
abraham3433 15:e6985c3724a8 100 ret = eth.connect();
abraham3433 15:e6985c3724a8 101
abraham3433 15:e6985c3724a8 102 if(!ret)
abraham3433 15:e6985c3724a8 103 {
abraham3433 15:e6985c3724a8 104 uart.printf("IP: %s, MASK: %s, GW: %s\r\n",
abraham3433 15:e6985c3724a8 105 eth.getIPAddress(), eth.getNetworkMask(), eth.getGateway());
abraham3433 15:e6985c3724a8 106 COLOR(_CYAN_);
abraham3433 15:e6985c3724a8 107 }
abraham3433 15:e6985c3724a8 108 else
abraham3433 15:e6985c3724a8 109 {
abraham3433 15:e6985c3724a8 110 uart.printf("Error ethernet.connect() - ret = %d\r\n", ret);
abraham3433 15:e6985c3724a8 111 COLOR(_YELLOW_);
abraham3433 15:e6985c3724a8 112 exit(0);
abraham3433 15:e6985c3724a8 113 }
abraham3433 15:e6985c3724a8 114 }
abraham3433 15:e6985c3724a8 115 else
abraham3433 15:e6985c3724a8 116 {
abraham3433 15:e6985c3724a8 117 uart.printf("Error ethernet.init() - ret = %d\r\n", ret);
abraham3433 15:e6985c3724a8 118 COLOR(_BLACK_);
abraham3433 15:e6985c3724a8 119 exit(0);
abraham3433 15:e6985c3724a8 120 }
abraham3433 15:e6985c3724a8 121
abraham3433 15:e6985c3724a8 122 wait(1.0);
abraham3433 15:e6985c3724a8 123 // TCPSocketServer server;
abraham3433 15:e6985c3724a8 124 server.bind(HTTPD_SERVER_PORT);
abraham3433 15:e6985c3724a8 125 server.listen();
abraham3433 15:e6985c3724a8 126 uart.printf("Server Listening\n");
abraham3433 15:e6985c3724a8 127 }
abraham3433 15:e6985c3724a8 128
abraham3433 15:e6985c3724a8 129 //-----------------------------------------------------------
abraham3433 15:e6985c3724a8 130 void VAC_Zero_Cross(void)
abraham3433 15:e6985c3724a8 131 //-----------------------------------------------------------
abraham3433 15:e6985c3724a8 132 {
abraham3433 15:e6985c3724a8 133 LP1=0; // Indicator to exit while loop
abraham3433 15:e6985c3724a8 134 if (LP2==1)
abraham3433 15:e6985c3724a8 135 {
abraham3433 15:e6985c3724a8 136 //Waits for the waveform to be close to 'zero' (500 adc)
abraham3433 15:e6985c3724a8 137 while(LP1==0)
abraham3433 15:e6985c3724a8 138 {
abraham3433 15:e6985c3724a8 139 wait_us(100);
abraham3433 15:e6985c3724a8 140 AMPreading=ain0.read();
abraham3433 15:e6985c3724a8 141
abraham3433 15:e6985c3724a8 142 //check its within range. (+/- 5)
abraham3433 15:e6985c3724a8 143 if ((AMPreading < 0.5) && (AMPreading > 0.4))
abraham3433 15:e6985c3724a8 144 {
abraham3433 15:e6985c3724a8 145 LP1=1;
abraham3433 15:e6985c3724a8 146 }
abraham3433 15:e6985c3724a8 147 }
abraham3433 15:e6985c3724a8 148 }
abraham3433 15:e6985c3724a8 149 LP2=1;
abraham3433 15:e6985c3724a8 150 }
abraham3433 15:e6985c3724a8 151
abraham3433 15:e6985c3724a8 152 //-----------------------------------------------------------
abraham3433 15:e6985c3724a8 153 void Measure_AMPS(void)
abraham3433 15:e6985c3724a8 154 //-----------------------------------------------------------
abraham3433 15:e6985c3724a8 155 // Measure AC Current.
abraham3433 15:e6985c3724a8 156 // 12bit ADC, 10MHz = 0.1usec conversion time.
abraham3433 15:e6985c3724a8 157 // 12bit ADC (0-3.3v = 0-4095 values) 3.3/4096 = 0.81mv
abraham3433 15:e6985c3724a8 158 // 1.65v = 2047 = 0 amps.
abraham3433 15:e6985c3724a8 159 //-----------------------------------------------------------
abraham3433 15:e6985c3724a8 160 {
abraham3433 15:e6985c3724a8 161 AMPreadingHI=0.0;
abraham3433 15:e6985c3724a8 162 for (LP3=0; LP3<100; LP3++)
abraham3433 15:e6985c3724a8 163 {
abraham3433 15:e6985c3724a8 164 wait_us(200);
abraham3433 15:e6985c3724a8 165 AMPreading=ain0.read();
abraham3433 15:e6985c3724a8 166 if (AMPreadingHI < AMPreading) AMPreadingHI = AMPreading;
abraham3433 15:e6985c3724a8 167 }
abraham3433 15:e6985c3724a8 168
abraham3433 16:b948cc536df5 169 if (AMPreadingHI <0.51)
abraham3433 15:e6985c3724a8 170 {
abraham3433 15:e6985c3724a8 171 COLOR(_BLUE_);
abraham3433 15:e6985c3724a8 172 }
abraham3433 15:e6985c3724a8 173 else
abraham3433 15:e6985c3724a8 174 {
abraham3433 15:e6985c3724a8 175 COLOR(_GREEN_);
abraham3433 15:e6985c3724a8 176 }
abraham3433 15:e6985c3724a8 177
abraham3433 15:e6985c3724a8 178 AMP_Reading_on_AO = AMPreadingHI;
abraham3433 15:e6985c3724a8 179 uart.printf("$%2.2f!", AMPreading);
abraham3433 15:e6985c3724a8 180 sprintf(httpHeader,"$%2.2f!", AMP_Reading_on_AO);
abraham3433 15:e6985c3724a8 181 client.send(httpHeader,strlen(httpHeader)); //send amps to PC.
abraham3433 15:e6985c3724a8 182 }
abraham3433 15:e6985c3724a8 183
abraham3433 15:e6985c3724a8 184
abraham3433 15:e6985c3724a8 185 //===================================================================
abraham3433 15:e6985c3724a8 186 int main(void)
abraham3433 15:e6985c3724a8 187 //===================================================================
abraham3433 15:e6985c3724a8 188 {
abraham3433 15:e6985c3724a8 189 //RGB LED:
abraham3433 15:e6985c3724a8 190 //WHITE = program running.
abraham3433 15:e6985c3724a8 191 //RED = not connected to PC.
abraham3433 15:e6985c3724a8 192 //GRN = pump running.
abraham3433 15:e6985c3724a8 193 //BLUE = pump not running.
abraham3433 15:e6985c3724a8 194
abraham3433 15:e6985c3724a8 195 Serial_Interface_init();
abraham3433 15:e6985c3724a8 196 ethernet_init();
abraham3433 15:e6985c3724a8 197 LP1=0; // Indicator to exit while loop
abraham3433 15:e6985c3724a8 198 LP2=0;
abraham3433 15:e6985c3724a8 199 //-----------------------------------------------------------
abraham3433 15:e6985c3724a8 200 while(true)
abraham3433 15:e6985c3724a8 201 //-----------------------------------------------------------
abraham3433 15:e6985c3724a8 202 {
abraham3433 15:e6985c3724a8 203 uart.printf("\nWait for new connection...\r\n");
abraham3433 15:e6985c3724a8 204 server.accept(client);
abraham3433 15:e6985c3724a8 205 client.set_blocking(false, 1500); // Timeout after (1.5)s
abraham3433 15:e6985c3724a8 206 uart.printf("Connection from: %s\r\n", client.get_address());
abraham3433 15:e6985c3724a8 207
abraham3433 15:e6985c3724a8 208 //-----------------------------------------------------------
abraham3433 15:e6985c3724a8 209 while(true)
abraham3433 15:e6985c3724a8 210 //-----------------------------------------------------------
abraham3433 15:e6985c3724a8 211 {
abraham3433 15:e6985c3724a8 212 if(!client.is_connected())
abraham3433 15:e6985c3724a8 213 {
abraham3433 15:e6985c3724a8 214 COLOR(_RED_);
abraham3433 15:e6985c3724a8 215 break; //exit while
abraham3433 15:e6985c3724a8 216 }
abraham3433 15:e6985c3724a8 217 // Mesure ADC 0 - Check Sump Pump Run Status
abraham3433 15:e6985c3724a8 218 VAC_Zero_Cross();
abraham3433 15:e6985c3724a8 219 Measure_AMPS();
abraham3433 15:e6985c3724a8 220 wait(1.0);
abraham3433 15:e6985c3724a8 221 COLOR(_WHITE_);
abraham3433 15:e6985c3724a8 222 }
abraham3433 15:e6985c3724a8 223 //-----------------------------------------------------------
abraham3433 15:e6985c3724a8 224 client.close(); //close connection to pc app.
abraham3433 16:b948cc536df5 225 ethernet_init();
abraham3433 15:e6985c3724a8 226 }
abraham3433 15:e6985c3724a8 227 }