Onboard temperature sensor sample for WIZnet IoT Shield

Committer:
hkjung
Date:
Wed Mar 27 13:30:36 2019 +0000
Revision:
6:327fba9ec505
Parent:
5:2cbdcdb06765
Modified some comments

Who changed what in which revision?

UserRevisionLine numberNew contents of line
hkjung 0:5cd6077e0a8e 1 /* WIZnet IoT Shield Cat.M1 Sample code for Arm MBED
hkjung 0:5cd6077e0a8e 2 * Copyright (c) 2019 WIZnet Co., Ltd.
hkjung 0:5cd6077e0a8e 3 * SPDX-License-Identifier: Apache-2.0
hkjung 0:5cd6077e0a8e 4 */
stkim92 3:c9cd5d11484d 5
stkim92 3:c9cd5d11484d 6 /*
stkim92 3:c9cd5d11484d 7 * Licensed under the Apache License, Version 2.0 (the "License");
stkim92 3:c9cd5d11484d 8 * you may not use this file except in compliance with the License.
stkim92 3:c9cd5d11484d 9 * You may obtain a copy of the License at
stkim92 3:c9cd5d11484d 10 *
stkim92 3:c9cd5d11484d 11 * http://www.apache.org/licenses/LICENSE-2.0
stkim92 3:c9cd5d11484d 12 *
stkim92 3:c9cd5d11484d 13 * Unless required by applicable law or agreed to in writing, software
stkim92 3:c9cd5d11484d 14 * distributed under the License is distributed on an "AS IS" BASIS,
stkim92 3:c9cd5d11484d 15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
stkim92 3:c9cd5d11484d 16 *
stkim92 3:c9cd5d11484d 17 * See the License for the specific language governing permissions and
stkim92 3:c9cd5d11484d 18 * limitations under the License.
stkim92 3:c9cd5d11484d 19 *
stkim92 3:c9cd5d11484d 20 */
hkjung 0:5cd6077e0a8e 21
hkjung 0:5cd6077e0a8e 22 #include <string>
hkjung 0:5cd6077e0a8e 23 #include "mbed.h"
hkjung 0:5cd6077e0a8e 24
hkjung 0:5cd6077e0a8e 25 #define myprintf(f_, ...) {pc.printf("\r\n[MAIN] "); pc.printf((f_), ##__VA_ARGS__);}
hkjung 0:5cd6077e0a8e 26
hkjung 0:5cd6077e0a8e 27 // Sensors
hkjung 0:5cd6077e0a8e 28 #define MBED_CONF_IOTSHIELD_SENSOR_CDS A0
hkjung 0:5cd6077e0a8e 29 #define MBED_CONF_IOTSHIELD_SENSOR_TEMP A1
stkim92 4:5ea8c91f607f 30 #define LEDPIN D13
hkjung 0:5cd6077e0a8e 31
hkjung 0:5cd6077e0a8e 32 Serial pc(USBTX, USBRX); // USB debug
hkjung 0:5cd6077e0a8e 33
stkim92 5:2cbdcdb06765 34 AnalogIn tempVal(MBED_CONF_IOTSHIELD_SENSOR_TEMP);
hkjung 0:5cd6077e0a8e 35
stkim92 5:2cbdcdb06765 36 float val = 0; // 온도 측정 값 넣을 변수
stkim92 5:2cbdcdb06765 37 float voltage = 0; // 전압 계산 값 넣을 변수
stkim92 5:2cbdcdb06765 38 float celsius = 0; // 섭씨 계산 값 넣을 변수
stkim92 5:2cbdcdb06765 39 float fahrenheit = 0; // 화씨 계산 값 넣을 변수
stkim92 5:2cbdcdb06765 40
stkim92 5:2cbdcdb06765 41 float getTemperature_F(float _celsius);
stkim92 5:2cbdcdb06765 42 float getTemperature_C(float _voltage);
stkim92 3:c9cd5d11484d 43
hkjung 0:5cd6077e0a8e 44 void serialPcInit(void)
hkjung 0:5cd6077e0a8e 45 {
hkjung 0:5cd6077e0a8e 46 pc.baud(115200);
hkjung 0:5cd6077e0a8e 47 pc.format(8, Serial::None, 1);
hkjung 0:5cd6077e0a8e 48 }
hkjung 0:5cd6077e0a8e 49
hkjung 1:0d7ba45f12b1 50 // ----------------------------------------------------------------
hkjung 1:0d7ba45f12b1 51 // Main routine
hkjung 1:0d7ba45f12b1 52 // ----------------------------------------------------------------
hkjung 1:0d7ba45f12b1 53
hkjung 0:5cd6077e0a8e 54 int main()
hkjung 0:5cd6077e0a8e 55 {
stkim92 3:c9cd5d11484d 56 serialPcInit();
stkim92 3:c9cd5d11484d 57
hkjung 0:5cd6077e0a8e 58 myprintf("System Init Complete\r\n");
stkim92 3:c9cd5d11484d 59
hkjung 0:5cd6077e0a8e 60 myprintf("WIZnet IoT Shield for Arm MBED");
hkjung 0:5cd6077e0a8e 61 myprintf("LTE Cat.M1 Version");
hkjung 0:5cd6077e0a8e 62 myprintf("=================================================");
hkjung 6:327fba9ec505 63 myprintf(">> Sample Code: Temperature Sensor (LM35)");
hkjung 0:5cd6077e0a8e 64 myprintf("=================================================\r\n");
stkim92 3:c9cd5d11484d 65
stkim92 3:c9cd5d11484d 66 while(1) {
stkim92 5:2cbdcdb06765 67 // read the value from the sensor:
stkim92 5:2cbdcdb06765 68 val = tempVal.read_u16()/100;
stkim92 5:2cbdcdb06765 69 // 실제 전압 계산
stkim92 5:2cbdcdb06765 70 // 0~5V의 값을 구하기 위해 아래와 같이 5를 곱하고 1024를 나눈다.
stkim92 5:2cbdcdb06765 71 // (Analog값 * IC에 걸리는 전압 / Analog 10bit 분해능(1024))
stkim92 5:2cbdcdb06765 72 // IC에 걸리는 전압은 측정기로 측정
stkim92 3:c9cd5d11484d 73
stkim92 5:2cbdcdb06765 74 voltage = val * 4.95 / 1024;
stkim92 5:2cbdcdb06765 75 celsius = getTemperature_C(voltage);
stkim92 5:2cbdcdb06765 76 fahrenheit = getTemperature_F(celsius);
stkim92 5:2cbdcdb06765 77
stkim92 5:2cbdcdb06765 78 wait_ms(1000);
stkim92 5:2cbdcdb06765 79 myprintf("[ Temperature Data ]");
stkim92 5:2cbdcdb06765 80 myprintf("Sensor value : %.2f", val);
stkim92 5:2cbdcdb06765 81 myprintf("Volt : %.2f mV", voltage);
stkim92 5:2cbdcdb06765 82
stkim92 5:2cbdcdb06765 83 myprintf("Celsius temp : %.2f C", celsius);
stkim92 5:2cbdcdb06765 84 myprintf("Fahrenheit temp : %.2f F", fahrenheit);
stkim92 5:2cbdcdb06765 85 wait_ms(1000);
hkjung 2:d7c5df056a3b 86 }
hkjung 0:5cd6077e0a8e 87 }
hkjung 0:5cd6077e0a8e 88
stkim92 5:2cbdcdb06765 89 float getTemperature_F(float _celsius)
stkim92 5:2cbdcdb06765 90 {
stkim92 5:2cbdcdb06765 91 // 섭씨에서 화씨 환산 -> (화씨온도 = 섭씽온*9/5+32)
stkim92 5:2cbdcdb06765 92 fahrenheit = celsius * 9.0 / 5.0 + 32.0;
stkim92 5:2cbdcdb06765 93 return fahrenheit;
stkim92 5:2cbdcdb06765 94 }
hkjung 1:0d7ba45f12b1 95
stkim92 5:2cbdcdb06765 96 float getTemperature_C(float _voltage)
stkim92 5:2cbdcdb06765 97 {
stkim92 5:2cbdcdb06765 98 // LM35는 섭씨 1도당 10mV의 전위차를 갖는다.
stkim92 5:2cbdcdb06765 99 // 센서핀의 전압이 0.28V라면 280mV이므로 온도는 28도씨.
stkim92 5:2cbdcdb06765 100 // 100을 곱해서 섭씨 온도로 나타냄
stkim92 5:2cbdcdb06765 101 celsius = voltage * 100.0;
stkim92 5:2cbdcdb06765 102 return celsius;
stkim92 5:2cbdcdb06765 103 }