通过用CC3200和接近传感器显示水软化器的当前盐水平和接近传感器来创建智能家庭。
推荐水平
中间的
要求
- CC3200演示板
- 更新到最新固件的能源支持,方向这里。
- Energia.Arduino IDE克隆从TI
- 在文章中使用:v。0101E00016
- 接近传感器
- 用于文章:夏普gp2y0a02yk0f.
- 跳线电线,焊接电线或JST 3终端带电线
- 2 - 10KOHM电阻器
- 这是需要的,因为CC3200上的ADC只能读取高达1.46V的值。
- dweet.io“事情”
硬件设置
连接电线
CC3200引脚声这里。
CC3200 | 接近传感器 | |
---|---|---|
PIN 21 - 5V功率 | 引脚3—VCC | |
PIN 22 - GND | PIN 2 - GND | |
PIN 24 - ADC | <——通过分压器——> | 引脚1—Vo |
测试连接并测量校准值
下面的代码对接近传感器输出进行采样并将其转换为远距离。
- 将下面的代码复制到新的草图中。
- 在工具>板>启动板W / CC3200 80MHz中选择正确的板。
- 计划董事会。
- 文件>上传或箭头按钮
- 打开终端,按Ctrl+Shift+M,你会看到每200毫秒打印一次距离。
- 在传感器附近移动固体表面,以查看数量变化。有关示例,请参阅下面的视频。如果距离在测量范围之外,则可以显示不正确的值。
- 为了为您塑造潮热剂的传感器,将传感器安装在打算将其放置在柔软剂内。我用胶带暂时安装了矿井。对于缺乏态度,您需要在项目案例中使用螺钉或胶水。
- 取出盐,直到它处于一个级别,您希望传感器显示0%。
- 记下报告的原始数据值。
- 在你的手上放一把盐,然后移动到你想显示100%的位置。
- 记下报告的原始数据值。
邻近传感器测试代码的演示
以下视频示出了上述指令的步骤5。
/ *临近测量并通过串行端口发送* / #define prox_pin 24 float prox_sensor_value_v = 0;Float distance_cm = 0;/*从datasheet for sensor*/ #define MAX_SENSOR_VOLTAGE 2.8 #define MIN_SENSOR_DISTANCE_CM 0.4 #define MAX_SENSOR_DISTANCE_CM 150 #define MIN_SENSOR_DISTANCE_CM 15 void setup() {Serial.begin(115200);} void loop() {prox_sensor_value_V = (float)analogRead(PROX_PIN) *2* 1.46 / 4096;if(prox_sensor_value_v> = 2.8 && prox_sensor_value_v <= 0.4){serial.println(“传感器超出范围,对象必须为15-150cm”);其他}{/ * *线性转换为距离转换基于逆电压与距离之间的关系数据表中描述* * *能更精确通过校准和使用查表* / distance_cm = (prox_sensor_value_V - MIN_SENSOR_VOLTAGE) * \ (MIN_SENSOR_DISTANCE_CM - MAX_SENSOR_DISTANCE_CM) \ /(max_sensor_voltage - min_sensor_voltage) + max_sensor_distance_cm;serial.print(“距离:”);并同时distance_cm, 1);serial.print(“cm - ”); Serial.print(distance_cm/2.2,1); Serial.println("in"); } delay(200); }
设置dweet.io.
dweet.io
- 转到https://dweet.io/play/
- 点击“为一件事创建一个有趣的东西”
- 填写事物和内容的参数。选择一个非常独特的事物名称,除非你打算为一个“锁定”的事物付钱,否则人们可以很容易地查看它或更改它。我们希望显示软水器percent_level,这就是内容。它一定是有效的JSON字符串。
- 点击“试试吧!”看看当你在dweet上发帖时会发生什么。我们将使用请求URL从CC3200发布内容。
从CC3200发布到Dweet.io
以下代码将在上一个设置中连接到Dweet.IO设置并发布水软化器的百分比值。它可以通过在端口80上打开与Dweet.io的HTTP服务器的连接并使用GET功能请求网页。这与将上一节中的URL粘贴到Web浏览器中以编写值。
- 将下面的代码复制到新的草图中。
- 在工具>板>启动板W / CC3200 80MHz中选择正确的板。
- 将以下变量修改为您的设置:
多变的 描述 SSID. 您的WiFi网络的SSID 密码 您的WiFi网络密码 事物 在上一节中创建的东西的名称 距离_cm_0percent. 您想要等于0%盐水平的距离 距离_cm_100percent. 你想要的距离等于100%的盐浓度 - 计划董事会。
- 文件>上传或箭头按钮。
- 打开终端,Ctrl + Shift + M,您将看到一秒钟内上传的盐级。
- 在传感器附近挥动你的手,看看你的URL的数量改变并查看实时。
- 本文使用https://dweet.io:443/get/latest/dweet/for/my_water_softener
- 以下是输出:
{“这个”:“成功”,“by”:“get”,“dweets”,“with”:[{“thing”:“my_water_softener”,“创建”:“2015-08-14T02:40:59.181z“,”内容“:{”percient_level“:21}}]}
- 该网站不是非常用户的友好,但确实表明来自互联网访问的任何地方的百分比。用于显示数据的其他一些选项:
#include #include /*user define settings*/ #define PROX_PIN 24 char ssid[] = "ssid";//SSID of network char password[] = "password";//无线网络密码char thing[] = "东西";//dweet thing int distance_cm_0% = 15;//你想要显示0%的距离int distance_cm_100% = 140;//你想要显示100%的距离/*变量*/浮动prox_sensor_value_V = 0;Float distance_cm = 0;Uint8_t salt_level_percent = 0;WiFiClient客户;/*从datasheet for sensor*/ #define MAX_SENSOR_VOLTAGE 2.8 #define MIN_SENSOR_DISTANCE_CM 0.4 #define MAX_SENSOR_DISTANCE_CM 150 #define MIN_SENSOR_DISTANCE_CM 15 void setup() {Serial.begin(115200); Serial.print("Attempting to connect to Network named: "); Serial.println(ssid); /*Connect to WPA/WPA2 network. Change this line if using open or WEP network*/ WiFi.begin(ssid, password); while ( WiFi.status() != WL_CONNECTED) { Serial.print("."); delay(300); } Serial.println("\nYou're connected to the network"); Serial.println("Waiting for an ip address"); while (WiFi.localIP() == INADDR_NONE) { Serial.print("."); delay(300); } Serial.println("\nIP Address obtained"); printWifiStatus(); } void loop() { prox_sensor_value_V = (float)analogRead(PROX_PIN) *2* 1.46 / 4096; if(prox_sensor_value_V>=2.8 && prox_sensor_value_V <= 0.4){ Serial.println("Sensor out of range, object must be 15-150cm"); } else{ /*convert to distance * linearly convert based on the inverse relationship between voltage and distance * described in the datasheet * * Could get more precision by doing a calibration and using a look-up table */ distance_cm = (prox_sensor_value_V - MIN_SENSOR_VOLTAGE) * \ (MIN_SENSOR_DISTANCE_CM - MAX_SENSOR_DISTANCE_CM)\ / (MAX_SENSOR_VOLTAGE - MIN_SENSOR_VOLTAGE) + MAX_SENSOR_DISTANCE_CM; Serial.print("Distance: "); Serial.print(distance_cm,1); Serial.print("cm -- "); Serial.print(distance_cm/2.2,1); Serial.println("in"); /*convert to calibrated values and cap at max value*/ if(distance_cm > distance_cm_100percent) distance_cm=distance_cm_100percent; if(distance_cm < distance_cm_0percent) distance_cm=distance_cm_0percent; salt_level_percent = map((int)distance_cm,distance_cm_0percent,distance_cm_100percent,100,0); Serial.print("Salt level percent: "); Serial.print(salt_level_percent); Serial.println("%"); /*Send to dweet.io server using HTTP GET function, equivalent to typing the webpage into your browser*/ Serial.println("Send to dweet.io"); if (client.connect("www.dweet.io", 80)) { client.print("GET /dweet/for/"); client.print(thing); client.print("?percent_level="); client.print(salt_level_percent); client.println(" HTTP/1.1"); client.println("Host: dweet.io"); client.println("Connection: close"); client.println(""); /*print the response from the server for debug purposes*/ while (client.connected()) { while (client.available()) { Serial.write(client.read()); } } Serial.println(""); } else{ Serial.println("Error: Coult not connect to dweet server!"); } } delay(60000); } void printWifiStatus() { // print the SSID of the network you're attached to: Serial.print("SSID: "); Serial.println(WiFi.SSID()); // print your WiFi IP address: IPAddress ip = WiFi.localIP(); Serial.print("IP Address: "); Serial.println(ip); // print the received signal strength: long rssi = WiFi.RSSI(); Serial.print("signal strength (RSSI):"); Serial.print(rssi); Serial.println(" dBm"); }
为自己提供这个项目!BOM。
如果你的电子产品没有遭受一些不利影响,我真的很惊讶于与所有这些“yabosports官网盐”中的相同封闭的环境受到影响。
@texasclodhopper我同意。生活在Mn,我们观看汽车慢慢地被冬天使用的盐慢慢地“吃掉”。
只要把传感器密封好,所有的东西都应该是好的,除了近距离传感器。