| 版主: wanchong , wangyu , eepwwp , firedom | 
| Dream2013  
 
						最后登陆时间:2014-07-23 10:29:03 | |
| 
						此帖由Dream2013于2014-10-28 12:37:14最后编辑					 | |
| 谦谦公子  
 
						最后登陆时间:2014-08-16 16:12:15 | 
	朋友第一次手记,果断顶啊,前排 | 
| 宇智波鼬  
 
						最后登陆时间:2014-09-01 19:02:31 | 
															做开发的妹纸   | 
| caocheng  
 
						最后登陆时间:2014-07-23 11:45:14 | 
															好板子,好电源啊, 期待开发进度。。										 | 
| Love2014  
 
						最后登陆时间:2014-09-01 19:29:57 | 赞一个 | 
| Dream2013  
 
						最后登陆时间:2014-07-23 10:29:03 | 之前一直都私下里写来着,现在开始更新! Arduino闪退的原因,查过才发现不能在中文环境下运行,在指导老师的建议下,下载了转区工具 Locale Emulator.1.3.0.0 
 
	 解压后,在Arduino 1.5.3单击右键,出现   选择管理通用配置列表 配置如下: 
	 
 保存好,在Arduino上点右键,选择 
	 
 即可打开Arduino ======================================================================================== 接下来是驱动问题 系统为win7 32位,安装时路径选到D:\arduino-windows-1.0.3\arduino-1.5.3-Intel.1.0.3即可,之前选在drivers结果都找不到安装驱动。 
	 解决啦~ 
	  安装成功! ============================================================================================ 来,测试一下~ 
	测试程序:DigitalReadSerial 
	 用导线将2脚与+5V相连,串口监视器显示1 
	 准备工作都做完啦~~ 下面进入正常的开发过程。 | 
| Dream2013  
 
						最后登陆时间:2014-07-23 10:29:03 | 调试传感器与Zigbee模块 
 Zigbee模块用鼎泰克的,带有调试模块。Zigbee配置都会吧?就不讲了哈 
	 
 自己焊的转接座,跟Arduino相连的 
	 背面   还不错吧~\(≧▽≦)/~   Zigbee的准备工作到此结束 接下来是,土壤湿度传感器 
	 
 原理是通过两个金属片之间的电流判断土壤湿度大小,总之,土壤越干,返回模拟值越大,土壤越湿,返回模拟值越小。 终于,程序来了~ 以下为从机1的程序 
 
 String comdata = "";        //接收字符串初始化 
int humValue;           //土壤湿度变量定义 
//初始化 
void setup() 
{ 
  Serial.begin(9600);                //初始化串口波特率 
} 
void loop() 
{ 
    humValue = analogRead(A0);           //从A0口读取土壤湿度传感器的值 
    while ( Serial.available() > 0 )            //判断串口(Zigbee) 
    { 
      comdata += char(Serial.read());           //取值放入字符串 
      delay(2); 
    } 
    if (comdata.length() > 0)           //判断字符串里的内容 
    { 
      if( comdata == "1" )               //判断索取从机1的信息 
        Serial.println(humValue);                   //发送传感器模拟值 
      comdata = "";                //清除字符串数组的内容 
    } 
} 
从机2的程序与1相同,无非就是判断字符串内容时,if语句中的条件是if( comdata == "2" ) 
主机程序: 
String comdata1 = "";               //接收从机1内容的字符串 
String comdata2 = "";               //接收从机2内容的字符串 
int a, b, i; 
//初始化串口 
void setup() 
{ 
  Serial.begin(9600); 
} 
void loop() 
{ 
  Serial.print('1');             //索要从机1检测的土壤情况 
  while ( Serial.available()==0 )                //如果未收到,重复索取 
  { 
    Serial.print('1'); 
    delay(2000); 
  } 
  while ( Serial.available() > 0 )                 //如果收到,读取内容 
  { 
    comdata1 += char(Serial.read()); 
    delay(2); 
  } 
  if (comdata1.length() > 0)             //将字符转换成数字并储存在变量a中 
  { 
    for( i=0, a=0; comdata1[i]!='\0'; i++, a*=10 ) 
      if( comdata1[i]<=57&&comdata1[i]>=48 ) 
        a+=comdata1[i]-48; 
    a/=10; 
    comdata1 = "";                  //清空接收字符串 
  } 
  delay(5000);                   //延时5秒 
  Serial.print('2');             //索取从机2检测的土壤的情况,以下程序同理 
  while ( Serial.available()==0 ) 
  { 
    Serial.print('2'); 
    delay(2000); 
  } 
  while ( Serial.available() > 0 ) 
  { 
    comdata2 += char(Serial.read()); 
    delay(2); 
  } 
  if (comdata2.length() > 0) 
  { 
    for( i=0, b=0; comdata2[i]!='\0'; i++, b*=10 ) 
      if( comdata2[i]<=57&&comdata2[i]>=48 ) 
        b+=comdata2[i]-48; 
      b/=10; 
    comdata2 = ""; 
  } 
  delay(5000); 
}
 
 调试情况 1、 主机放在转接座上,测试从机程序 一个小灯闪烁,另一个小灯常亮,表示模块已与电脑连接 
	 全景图   发送1   返回数值1002,发送2   返回数值1023   2、测试从机程序 取从机2的Zigbee模块,主机插回到SBS板子上 
	 屏幕上,串口监视器显示索要从机2的信息,即主机没有收到从机2的信号,重复发送字符2。 
	 
 发送信息1023,有点照花了,凑合着看吧   
 发送后,主机继续索要从机1的信息(囧,也照花了) 
	 
 调试完成,再来一幅全景照。(可以看到主机收到从机1的信号后又开始索要从机2的数据。) 
	 放大,也看不太清。。╮(╯▽╰)╭凑合一下   至此,主从机的土壤湿度检测及无线通讯部分调试成功。 ~\(≧▽≦)/~ | 
| 
						此帖由Dream2013于2014-10-27 15:13:06最后编辑					 | |
| Dream2013  
 
						最后登陆时间:2014-07-23 10:29:03 | 
															 网络及远程监控端 
 这个学期老师好像一直都没空,以我个人之力编写网络部分的程序实在是困难,无奈,最后决定用SBS开发板做服务器程序,却发现网口部分的程序还是要调用串口函数,底层的,修为不够,也改不了,迫不得已又拿一块Arduino转接一下。 所谓转接,就是用1块Arduino板子将从Zigbee读取的信号,转换成模拟值在模拟口输出。 
	这就是最后传说中的主机。囧(能力有限,想不坑都不行) 
 
	服务器的程序: #include <SPI.h>
#include <Ethernet.h>
// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
byte mac[] = { 
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,1,177);
// Initialize the Ethernet server library
// with the IP address and port you want to use 
// (port 80 is default for HTTP):
EthernetServer server(80);
void setup() {
  // Open serial communications and wait for port to open:
  Serial.begin(9600);
   while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }
  // start the Ethernet connection and the server:
  Ethernet.begin(mac, ip);
  server.begin();
  Serial.print("server is at ");
  Serial.println(Ethernet.localIP());
}
void loop() {
  // listen for incoming clients
  EthernetClient client = server.available();
  if (client) {
    Serial.println("new client");
    // an http request ends with a blank line
    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        Serial.write(c);
        // if you've gotten to the end of the line (received a newline
        // character) and the line is blank, the http request has ended,
        // so you can send a reply
        if (c == '\n' && currentLineIsBlank) {
          // send a standard http response header
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println("Connection: close");
          client.println();
          client.println("<!DOCTYPE HTML>");
          client.println("<html>");
          // add a meta refresh tag, so the browser pulls again every 5 seconds:
          client.println("<meta http-equiv=\"refresh\" content=\"5\">");
          // output the value of each analog input pin
          for (int analogChannel = 0; analogChannel < 2; analogChannel++) {
            int sensorReading = analogRead(analogChannel);
            client.print("The soil humidity of node ");
            client.print(analogChannel+1);
            client.print(" is ");
            client.print(sensorReading);
            client.println("<br />");       
          }
          client.println("</html>");
          break;
        }
        if (c == '\n') {
          // you're starting a new line
          currentLineIsBlank = true;
        } 
        else if (c != '\r') {
          // you've gotten a character on the current line
          currentLineIsBlank = false;
        }
      }
    }
    // give the web browser time to receive the data
    delay(1);
    // close the connection:
    client.stop();
    Serial.println("client disonnected");
  }
}
 调试,从机正常工作 
	   从机1土壤湿度传感器短接(模拟土壤湿度达到最大),可以看到服务器页面节点1的土壤湿度显示模拟值为1 
	 
 看不清?放大,是不是能清楚点 
	 
 从机2土壤湿度传感器短接(模拟土壤湿度达到最大),可以看到服务器页面节点2的土壤湿度显示模拟值为1 
	 再稍大点看 
	 
 有时候这个服务器网页也会出现这个情况,毕竟没有来得及加校验,囧。 
	 
 服务器网页的功能也整合进来了,也算是大部分功能实现了~ ~\(≧▽≦)/~ 
 | 
| 
						此帖由Dream2013于2014-10-27 15:15:17最后编辑					 | |
| Dream2013  
 
						最后登陆时间:2014-07-23 10:29:03 | 最后,关于水泵的控制。 
 表示有一个12V的水泵,无奈没有12V的继电器啊。反正继电器部分的控制也比较简单,就拿LED来模拟水泵的开关吧。 拿从机2做演示,把程序作了一点点改动。 String comdata = ""; 
int humValue; 
void setup() 
{ 
  Serial.begin(9600); 
  pinMode( 8, OUTPUT );                 //加入了两个用来控制LED的数字口 
  pinMode( 9, OUTPUT ); 
} 
void loop() 
{ 
    humValue = analogRead(A0); 
    if( humValue>700 ) 
    { 
      digitalWrite(9, HIGH);          //控制LED的程序 
      digitalWrite(8, LOW); 
    } 
    else 
    { 
      digitalWrite(9, LOW); 
      digitalWrite(8, LOW); 
    } 
    while ( Serial.available() > 0 ) 
    { 
      comdata += char(Serial.read()); 
      delay(2); 
    } 
    if (comdata.length() > 0) 
    { 
      if( comdata == "2" ) 
        Serial.println(humValue); 
      comdata = ""; 
     } 
} 
 
 测试 明显看到小灯亮起,服务器网页上显示的数值较大,模拟检测的土壤较干。 
	 
 将土壤湿度传感器两铁片短接,可以看到服务器网页上2节点的值为1,小灯熄灭 
	 
 功能全都完成啦~ 最后两张光线极暗,屏幕上都能映出我的影子o(╯□╰)o 算啦, 最后爆张照片,纪念一下这个我和这个小项目~ 
	小妹跟Q2187的亲密合影不是什么人都能看的。果断改成回复可见 ——回复可见内容—— 
 ~\(≧▽≦)/~独立完成的,虽然没多少技术含量,但还是心情愉悦~ 
 | 
| 
						此帖由Dream2013于2014-10-27 16:30:54最后编辑					 | |
| 二叔  
 
						最后登陆时间:2014-10-23 10:40:53 | “表示有一个12V的水泵,无奈没有12V的继电器啊。反正继电器部分的控制也比较简单,就拿LED来模拟水泵的开关吧。” 晓芙,12V的水泵不用12V的继电器,用5V,继续搞吧~ |