比派科技banana pi专区
直播中

曹峰

9年用户 94经验值
擅长:嵌入式技术
私信 关注
[经验]

【BPI-M64试用体验】基于物联网的智慧景区管理系统(上)之结项

  • 项目简述:以Arduino驱动传感器采集数据,将数据上传到香蕉派上,并保存在mysql数据库例,配置Tomcat,实现远程访问。
  • 用到的硬件
       香蕉派  Arduino*3  紫外线传感器 非接触测温传感器  红外测距感器 游戏摇杆模块 云台 u***摄像头
一拖四USB集线器
  • 硬件设计:
       QQ图片20170602152908.png





下面开始:
  • 连接传感器,烧写代码。
  



  • 节点1(红外测距传感器): 连线(VCC->5V GND->GND 信号->A0)
  • 代码(测量代为是mm,在网页显示的时候加单位)
    1. #define pin A0
    2. void setup()
    3. {
    4.   Serial.begin(9600); // 9600 bps
    5.   pinMode (pin, INPUT);
    6. }
    7. void loop()
    8. {
    9.    uint16_t value = analogRead (pin);
    10.    uint16_t range = get_gp2d12 (value);
    11.   if ( Serial.available())
    12.     {
    13.       if('s' == Serial.read())
    14.         Serial.println(range);
    15.      }
    16. }
    17. uint16_t get_gp2d12 (uint16_t value) {
    18.         if (value < 30)
    19.                 value = 30;
    20.         return ((67870.0 / (value - 3.0)) - 40.0);
    21. }

  • 节点二(紫外线传感器): 连线(VCC->5V GND->GND 信号->A0)
  • 代码(单位mW/cm^2)
    1. int ReadUVintensityPin = A0;

    2. void setup()
    3. {
    4.   pinMode(ReadUVintensityPin, INPUT);
    5.   Serial.begin(9600);
    6. }

    7. void loop()
    8. {
    9.   int uvLevel = averageAnalogRead(ReadUVintensityPin);

    10.   float outputVoltage = 5.0 * uvLevel/1024;
    11.   float uvIntensity = mapfloat(outputVoltage, 0.99, 2.9, 0.0, 15.0);
    12.   if ( Serial.available())
    13.     {
    14.       if('s' == Serial.read())
    15.         Serial.println(uvIntensity);
    16.      }
    17.   delay(500);
    18. }
    19. int averageAnalogRead(int pinToRead)
    20. {
    21.   byte numberOfReadings = 8;
    22.   unsigned int runningValue = 0;

    23.   for(int x = 0 ; x < numberOfReadings ; x++)
    24.     runningValue += analogRead(pinToRead);
    25.   runningValue /= numberOfReadings;
    26.   return(runningValue);  

    27. }
    28. float mapfloat(float x, float in_min, float in_max, float out_min, float out_max)
    29. {
    30.   return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
    31. }

    • 节点三(非接触温度传感器)连线(VCC->5V GND->GND SDA->A4 SCL->A5)
    • 代码(這里需要一个库IR_Thermometer_Sensor_MLX90614)
      IR_Thermometer_Sensor_MLX90614.rar (3.42 KB)
      (下载次数: 2, 2017-6-2 17:07 上传)
      1. /***************************************************
      2. * IR Thermometer Sensor-MLX90614
      3. * ****************************************************
      4. * This example is to get the ambient temperature and object temperature by the IIC bus
      5.   
      6. * [url=home.php?mod=space&uid=40524]@author[/url] jackli(Jack.li@dfrobot.com)
      7. * [url=home.php?mod=space&uid=644434]@version[/url]  V1.0
      8. * @date  2016-2-2
      9. * A4(SDA) A5(SCL)  
      10. * GNU Lesser General Public License.
      11. * See for details.
      12. * All above must be included in any redistribution
      13. * ****************************************************/
      14. #include
      15. #include

      16. IR_Thermometer_Sensor_MLX90614 MLX90614 = IR_Thermometer_Sensor_MLX90614();

      17. void setup() {
      18.   Serial.begin(9600);
      19.   MLX90614.begin();  
      20. }

      21. void loop()
      22. {
      23.   if(Serial.available())
      24.   {
      25.     if('s'==Serial.read())
      26.     {
      27.         Serial.print(MLX90614.GetObjectTemp_Celsius());  
      28.       }
      29.     }
      30. }

  2.使用一拖四u***集线器将三个节点连接起来
1.jpg 2.jpg

3.香蕉派读取USB口的数据
  • 安装python-serial库
  1. sudo apt-get install python-serial
  • 查看u***口
  1. ls /dev/tty*
1.png
  • 创建测试文件
  1. sudo nano test.py
代码

  1. import serial

  2. def read(str1):
  3.     ser=serial.Serial(str1,9600,timeout=1)
  4.     flag = True
  5.     result=0.0
  6.     while flag:
  7.           ser.write('s')
  8.           response = ser.readall()
  9.           response=response.strip()
  10.           if len(response) and len(response.split("."))==2:
  11.              st=response.split(".")
  12.              result=float(st[0])+float(st[1])*(pow(0.1,len(st[1])))
  13.              flag=False
  14.           elif len(response) and len(response.split("."))==1:
  15.              result=int(response)
  16.              flag=False

  17.     ser.close()
  18.     return result


  19. def main():
  20.     str=("/dev/ttyACM0","/dev/ttyUSB0","/dev/ttyUSB1")
  21.     while(1):
  22.          for i in str:
  23.              num=read(i)
  24.              print num

  25. main()

  • 运行代码
    1. python test.py
    1.png


待续部分(安装mysql 、tomcat)


回帖(3)

新疆切糕

2017-6-7 11:18:37
还没结束对吧
举报

曹峰

2017-6-7 11:59:43
引用: 新疆切糕 发表于 2017-6-7 11:18
还没结束对吧

是的,最近挺忙的,剩下的还没时间来完成
举报

万哥哥

2017-6-9 16:02:38
你的草莓派怎么都没在图里面
举报

更多回帖

发帖
×
20
完善资料,
赚取积分