“智能电子秤/zh”的版本间的差异

来自Microduino Wikipedia
跳转至: 导航搜索
调试过程
程序说明
第94行: 第94行:
  
 
==程序说明==
 
==程序说明==
百度盘地址:http://pan.baidu.com/s/1o6nJT70
+
*传感器驱动部分
提取码:q54r
 
*进出门判断
 
 
<source lang="cpp">
 
<source lang="cpp">
void judge() 
+
unsigned long HX711_Read(void) //增益128
{ 
+
{
    //先过D4后过D6为进入 
+
unsigned long count;
    if((digitalRead(body_pin) == 1) && (digitalRead(body_pin2) == 0)) 
+
unsigned char i;
    { 
+
 
        FLAG_1 = 1; 
+
digitalWrite(HX711_DT, HIGH);
        delay(200); 
+
delayMicroseconds(1);
    } 
+
 
    if((digitalRead(body_pin) == 1) && (digitalRead(body_pin2) == 1) && (FLAG_1 == 1)
+
digitalWrite(HX711_SCK, LOW);
    { 
+
delayMicroseconds(1);
 
+
 
        colorWipe(color[random(1, 10)]); 
+
  count=0;
        audio_choose(1); 
+
  while(digitalRead(HX711_DT));
        Serial.println("COMING IN"); 
+
  for(i=0;i<24;i++)
        FLAG_1 = 0; 
+
{  
        delay(1300);    //1300 
+
  digitalWrite(HX711_SCK, HIGH);  
    } 
+
delayMicroseconds(1);
    //先过D46过D4为出门 
+
  count=count<<1;
    if((digitalRead(body_pin) == 0) && (digitalRead(body_pin2) == 1)) 
+
digitalWrite(HX711_SCK, LOW);  
    { 
+
delayMicroseconds(1);
        FLAG_2 = 1; 
+
  if(digitalRead(HX711_DT))
        delay(200);    //2000 
+
  count++;
    } 
+
}
    if((digitalRead(body_pin) == 1) && (digitalRead(body_pin2) == 1) && (FLAG_2 == 1)
+
digitalWrite(HX711_SCK, HIGH);
    { 
+
count ^= 0x800000;
        colorWipe(color[random(1, 10)]); 
+
delayMicroseconds(1);
        audio_choose(2); 
+
digitalWrite(HX711_SCK, LOW);
        Serial.println("GOING OUT"); 
+
delayMicroseconds(1);
        FLAG_2 = 0; 
+
        delay(1300);   //2000 
+
return(count);
    } 
+
}
} 
+
</source>
 
+
重量获取函数
 +
<Source lang="cpp">
 +
float Get_Weight()
 +
{
 +
    Weight_Shiwu = (HX711_Read() - Weight_Maopi)+800; //获取实物的AD采样数值。
 +
    Serial.println(Weight_Shiwu);
 +
    if(Weight_Shiwu < 0)
 +
    {
 +
      return 0;
 +
    }
 +
    else
 +
    {
 +
      return Weight_Shiwu/GapValue;
 +
    }
 +
}
 
</source>
 
</source>
  
 
==视频==
 
==视频==

2015年12月21日 (一) 03:28的版本

概述

//////////////施工中/////////////////////

  • 项目名称:Microduino智能电子秤
  • 目的:智能饮水缺水提醒,有趣的桌面秤
  • 难度:中
  • 耗时:2小时
  • 制作者:
  • 简介:

本次教程我们将使用Microduino产品模块快速搭建一个智能桌面秤。它能够称量出2KG左右较小物体的重量,并将重量显示在OLED屏幕上,而且还能将数据传回手机,使用饮水提示功能,如果长时间没有喝水手机会做出提示。

材料清单

  • Microduino设备
模块 数量 功能
Microduino-Core/zh 1 核心板
Microduino-USBTTL/zh 1 下载程序
Microduino-BT/zh 1 蓝牙通信
Microduino-OLED/zh 1 显示屏
Microduino-Weight/zh 1 称重传感器
Microduino-Duo-H2/zh 1 降低高度
  • 其他设备
模块 数量 功能
Micro-USB线 1 下载程序,供电
金属螺丝 4 固定模块
尼龙底座 3 三脚支撑
外壳套件 1


实验原理

Mircoduino-Weight模块和底座上的压力传感器组成惠斯通电桥,能够测量底座上承受的重量,然后核心Core收集重量数据并实时显示到OLED屏上,使用户能够观察到秤上的数据变化。然后在桌面秤秤测量的数据稳定后,核心CPU即认为此时的重量数据即为测量到的最终重量

Weightyuanli.jpg

整体系统的控制原理即接入以上两个部分,Microduino-Core核心通过PIR传感器探测到附近有人靠近后,控制Lantern模块变换颜色,Auido模块播报“欢迎光临”语音,从而达到迎宾欢迎的效果。

  • 主要传感器

Microduino-Weight/zh 电阻应变式称重传感器是基于这样一个原理:弹性体(弹性元件,敏感梁)在外力作用下产生弹性变形,使粘贴在它表面的电阻应变片(转换元件)也随同产生变形,电阻应变片变形后,它的阻值将发生变化(增大或减小),再经相应的测量电路把这一电阻变化转换为芯片可以识别的电信号。 为了测量称重传感器的应变片的电阻变化,通常采用应变片组成桥式电路(惠斯通电桥)来进行测量,当被测重力作用在应变片上时,粘附在弹性体上的惠斯通电桥就产生不平衡输出,该输出信号正比于被测重力。

Weightcir.jpg

文档

调试过程

  • 下载程序

将Microduino-Core与Microduino-USBTTL叠加(无上下顺序),通过USB数据与电脑连接起来。

Download1.jpg

打开Arduino IDE编程软件,点击【文件】->【打开】

Dl1.jpg

浏览到项目程序地址,点击“watercontrol.ino”程序打开。

Weightide1.png

点击【工具】,在板选项里面选择板卡(Microduino-Core),在处理器选项里面选择处理器(Atmega328p@16M,5V),再在端口选项里面选择正确的端口号,然后直接烧录程序。

Weight2.jpg
  • 搭建

将Microduino-Duo-H底板固定在一侧的亚克力透明板上,把Microduino-OLED接到Microduino-Duo-H的OLED接口。注意:OLED的连线要从电桥中间的孔穿过 固定Duo-H底板

Weightbuild1.png

OLED穿过电桥中间的孔洞

Weightbuild2.png

之后将压力传感器接到Microduino-Weight模块。

Weightbuild3.png

把用到的设备叠加到Microduino-Duo-H的两侧,一边两块。

  • Microduino-Core
  • Microduino-USBTTL
  • Microduino-Weight
  • Microduino-BT
Weightbuild4.png

使用两颗长螺丝将固定了底板的亚克力透明板与称重电桥固定在一起,注意中间有一块小长方形的垫片

Weightbuild5.png

将另一块透明亚克力板使用两颗长螺丝和垫片固定好。 注意:将垫片螺丝孔与电桥上的螺丝孔对齐之后再固定

Weightbuild6.png

此时给电子称上电,等候1-2秒,然后就可以放置物品称重了,由于是桌面称,所以称重限额在2KG左右

Weightbuild7.png

单个Microduino模块

Weightbuild8.png

tips:根据重量左侧的小人还会被压低哦。

Weightbuild9.png

程序说明

  • 传感器驱动部分
unsigned long HX711_Read(void)	//增益128
{
	unsigned long count; 
	unsigned char i;

	digitalWrite(HX711_DT, HIGH);
	delayMicroseconds(1);

	digitalWrite(HX711_SCK, LOW);
	delayMicroseconds(1);

  	count=0; 
  	while(digitalRead(HX711_DT)); 
  	for(i=0;i<24;i++)
	{ 
	  	digitalWrite(HX711_SCK, HIGH); 
		delayMicroseconds(1);
	  	count=count<<1; 
		digitalWrite(HX711_SCK, LOW); 
		delayMicroseconds(1);
	  	if(digitalRead(HX711_DT))
		  count++; 
	} 
 	digitalWrite(HX711_SCK, HIGH); 
	count ^= 0x800000;
	delayMicroseconds(1);
	digitalWrite(HX711_SCK, LOW); 
	delayMicroseconds(1);
	
	return(count);
}

重量获取函数

float Get_Weight()
{
    Weight_Shiwu = (HX711_Read() - Weight_Maopi)+800;				//获取实物的AD采样数值。
    Serial.println(Weight_Shiwu);
    if(Weight_Shiwu < 0)
    {
      return 0;
    }
    else
    {
      return Weight_Shiwu/GapValue;
    } 	
}

视频