圧力監視と制御

Dependencies:   ads1115_test DS1820_HelloWorld IM920

Committer:
nakumur
Date:
Wed Mar 09 05:56:53 2022 +0000
Revision:
2:32697bf64b6a
Parent:
0:c17f6898d7a7
a

Who changed what in which revision?

UserRevisionLine numberNew contents of line
nakumur 0:c17f6898d7a7 1
nakumur 0:c17f6898d7a7 2 #include "mbed.h"
nakumur 0:c17f6898d7a7 3 #include "IM920.h"
nakumur 0:c17f6898d7a7 4 #include "DS1820.h"
nakumur 0:c17f6898d7a7 5 #include "Adafruit_ADS1015.h"
nakumur 0:c17f6898d7a7 6
nakumur 0:c17f6898d7a7 7 #define ADS1115_ADDR 0b1001000
nakumur 0:c17f6898d7a7 8
nakumur 0:c17f6898d7a7 9
nakumur 0:c17f6898d7a7 10 //コンストラクタ------------------------------------------------------------------
nakumur 0:c17f6898d7a7 11 Serial pc(USBTX, USBRX, 115200);
nakumur 0:c17f6898d7a7 12 Serial im920_serial(p28, p27, 115200);
nakumur 0:c17f6898d7a7 13
nakumur 0:c17f6898d7a7 14 IM920 im920(im920_serial, pc, 115200);
nakumur 0:c17f6898d7a7 15 DigitalIn im920_busy(p29);
nakumur 0:c17f6898d7a7 16
nakumur 0:c17f6898d7a7 17 DigitalOut kettle(p18);
nakumur 0:c17f6898d7a7 18 DigitalOut pump(p19);
nakumur 0:c17f6898d7a7 19
nakumur 0:c17f6898d7a7 20 DS1820 ds1820(p30);
nakumur 0:c17f6898d7a7 21
nakumur 0:c17f6898d7a7 22 I2C m_i2c(p9, p10);
nakumur 0:c17f6898d7a7 23 Adafruit_ADS1115 ads1115(&m_i2c, ADS1115_ADDR);
nakumur 0:c17f6898d7a7 24 //------------------------------------------------------------------------------
nakumur 0:c17f6898d7a7 25
nakumur 0:c17f6898d7a7 26 //変数---------------------------------------------------------------------------
nakumur 0:c17f6898d7a7 27 int pump_state = 0;
nakumur 0:c17f6898d7a7 28 int kettle_state = 0;
nakumur 0:c17f6898d7a7 29 float temp;
nakumur 0:c17f6898d7a7 30 int pres_bit;
nakumur 0:c17f6898d7a7 31 float pres;
nakumur 0:c17f6898d7a7 32 //受信機側で開始時に設定
nakumur 0:c17f6898d7a7 33 float set_temp;
nakumur 0:c17f6898d7a7 34 float set_pres;
nakumur 0:c17f6898d7a7 35 //------------------------------------------------------------------------------
nakumur 0:c17f6898d7a7 36
nakumur 0:c17f6898d7a7 37 //定数---------------------------------------------------------------------------
nakumur 0:c17f6898d7a7 38 //圧力センサの校正係数
nakumur 0:c17f6898d7a7 39 float a = 0.000653692;
nakumur 0:c17f6898d7a7 40 float b = -1.548466;
nakumur 0:c17f6898d7a7 41 //------------------------------------------------------------------------------
nakumur 0:c17f6898d7a7 42
nakumur 0:c17f6898d7a7 43 //無線ヘッダー--------------------------------------------------------------------
nakumur 0:c17f6898d7a7 44 const char header_uplink = 1;
nakumur 0:c17f6898d7a7 45 const char header_downlink = 2;
nakumur 0:c17f6898d7a7 46 //------------------------------------------------------------------------------
nakumur 0:c17f6898d7a7 47
nakumur 0:c17f6898d7a7 48 //関数---------------------------------------------------------------------------
nakumur 0:c17f6898d7a7 49 void upLink();
nakumur 0:c17f6898d7a7 50 void downLink();
nakumur 0:c17f6898d7a7 51 void readTemp();
nakumur 0:c17f6898d7a7 52 void controlTemp();
nakumur 0:c17f6898d7a7 53 void readPres();
nakumur 0:c17f6898d7a7 54 void controlPres();
nakumur 0:c17f6898d7a7 55 //------------------------------------------------------------------------------
nakumur 0:c17f6898d7a7 56
nakumur 0:c17f6898d7a7 57
nakumur 0:c17f6898d7a7 58
nakumur 0:c17f6898d7a7 59 // メイン関数---------------------------------------------------------------------
nakumur 0:c17f6898d7a7 60 int main()
nakumur 0:c17f6898d7a7 61 {
nakumur 0:c17f6898d7a7 62 im920.attach(&upLink, header_uplink);
nakumur 0:c17f6898d7a7 63 ads1115.setGain(GAIN_TWOTHIRDS);
nakumur 0:c17f6898d7a7 64 kettle = 0;
nakumur 0:c17f6898d7a7 65 pump = 0;
nakumur 0:c17f6898d7a7 66 pc.printf("start\r\n");
nakumur 0:c17f6898d7a7 67
nakumur 0:c17f6898d7a7 68 while(1) {
nakumur 0:c17f6898d7a7 69 upLink();
nakumur 0:c17f6898d7a7 70 wait(1);
nakumur 0:c17f6898d7a7 71 }
nakumur 0:c17f6898d7a7 72 }
nakumur 0:c17f6898d7a7 73 //------------------------------------------------------------------------------
nakumur 0:c17f6898d7a7 74
nakumur 0:c17f6898d7a7 75
nakumur 0:c17f6898d7a7 76 void upLink()
nakumur 0:c17f6898d7a7 77 {
nakumur 0:c17f6898d7a7 78 pc.printf("wait\r\n");
nakumur 0:c17f6898d7a7 79
nakumur 0:c17f6898d7a7 80 if(im920.data[1] == '0') {
nakumur 0:c17f6898d7a7 81 kettle = 0;
nakumur 0:c17f6898d7a7 82 pump = 0;
nakumur 0:c17f6898d7a7 83 pc.printf("stop\r\n");
nakumur 0:c17f6898d7a7 84 }
nakumur 0:c17f6898d7a7 85
nakumur 0:c17f6898d7a7 86 else if(im920.data[1] == '1') {
nakumur 0:c17f6898d7a7 87 set_temp = (float)im920.toFloat(2);
nakumur 0:c17f6898d7a7 88 set_pres = (float)im920.toFloat(6);
nakumur 0:c17f6898d7a7 89 pc.printf("%f\r\n", set_temp);
nakumur 0:c17f6898d7a7 90 pc.printf("%f\r\n", set_pres);
nakumur 0:c17f6898d7a7 91 controlTemp();
nakumur 0:c17f6898d7a7 92 controlPres();
nakumur 0:c17f6898d7a7 93 downLink();
nakumur 0:c17f6898d7a7 94 }
nakumur 0:c17f6898d7a7 95
nakumur 0:c17f6898d7a7 96 }
nakumur 0:c17f6898d7a7 97
nakumur 0:c17f6898d7a7 98 void downLink()
nakumur 0:c17f6898d7a7 99 {
nakumur 0:c17f6898d7a7 100 im920.header(header_downlink);
nakumur 0:c17f6898d7a7 101 im920.write((char)pump_state);
nakumur 0:c17f6898d7a7 102 im920.write((char)kettle_state);
nakumur 0:c17f6898d7a7 103 im920.write((float)temp);
nakumur 0:c17f6898d7a7 104 im920.write((float)pres);
nakumur 0:c17f6898d7a7 105
nakumur 0:c17f6898d7a7 106 if(im920_busy == 0) {
nakumur 0:c17f6898d7a7 107 im920.send();
nakumur 0:c17f6898d7a7 108 }
nakumur 0:c17f6898d7a7 109 }
nakumur 0:c17f6898d7a7 110
nakumur 0:c17f6898d7a7 111 void readTemp()
nakumur 0:c17f6898d7a7 112 {
nakumur 0:c17f6898d7a7 113 ds1820.convertTemperature(true, DS1820::all_devices);
nakumur 0:c17f6898d7a7 114 temp = ds1820.temperature();
nakumur 0:c17f6898d7a7 115 }
nakumur 0:c17f6898d7a7 116
nakumur 0:c17f6898d7a7 117 void controlTemp()
nakumur 0:c17f6898d7a7 118 {
nakumur 0:c17f6898d7a7 119 readTemp();
nakumur 0:c17f6898d7a7 120 if (temp < set_temp) {
nakumur 0:c17f6898d7a7 121 kettle = 1;
nakumur 0:c17f6898d7a7 122 kettle_state = 1;
nakumur 0:c17f6898d7a7 123 pc.printf("kettle on :: %f[oC]\r\n", temp);
nakumur 0:c17f6898d7a7 124 }
nakumur 0:c17f6898d7a7 125
nakumur 0:c17f6898d7a7 126 else if (temp > set_temp + 5.0) {
nakumur 0:c17f6898d7a7 127 kettle = 0;
nakumur 0:c17f6898d7a7 128 kettle_state = 0;
nakumur 0:c17f6898d7a7 129 pc.printf("kettle off :: %f[oC]\r\n", temp);
nakumur 0:c17f6898d7a7 130 }
nakumur 0:c17f6898d7a7 131 }
nakumur 0:c17f6898d7a7 132
nakumur 0:c17f6898d7a7 133 void readPres()
nakumur 0:c17f6898d7a7 134 {
nakumur 0:c17f6898d7a7 135 pres_bit = ads1115.readADC_SingleEnded(0);
nakumur 0:c17f6898d7a7 136 pres = pres_bit * a + b;
nakumur 0:c17f6898d7a7 137 }
nakumur 0:c17f6898d7a7 138
nakumur 0:c17f6898d7a7 139 void controlPres()
nakumur 0:c17f6898d7a7 140 {
nakumur 0:c17f6898d7a7 141 readPres();
nakumur 0:c17f6898d7a7 142 if (pres < set_pres) {
nakumur 0:c17f6898d7a7 143 pump = 1;
nakumur 0:c17f6898d7a7 144 pump_state = 1;
nakumur 0:c17f6898d7a7 145 pc.printf("pummp on :: %f[MPa]\r\n", pres);
nakumur 0:c17f6898d7a7 146 }
nakumur 0:c17f6898d7a7 147
nakumur 0:c17f6898d7a7 148 else if (pres > set_pres + 0.1) {
nakumur 0:c17f6898d7a7 149 pump = 0;
nakumur 0:c17f6898d7a7 150 pump_state = 0;
nakumur 0:c17f6898d7a7 151 pc.printf("pummp off :: %f[MPa]\r\n", pres);
nakumur 0:c17f6898d7a7 152 }
nakumur 0:c17f6898d7a7 153 }
nakumur 0:c17f6898d7a7 154