查看: 1590|回复: 13

【Firebeetle教程】厕所里偶遇城武、彦祖、志玲是怎样的体验

[复制链接]
厕所里偶遇城武、彦祖、志玲是怎样的体验?
---Lora模块组网的厕所空位检测装置

1.png

       自从把这小东西做出来后,路过的同时纷纷问我这是啥东西?就连平时沉默寡言的“僵尸”同事,也禁不住跑过来询问,搞得我好尴尬呀。这东西真的有这么骚吗?
            好吧,不卖关子了。我就先说说做这个小东西的初衷吧。我家公司办公区域在二楼,厕所在一楼,中间得走一截比较长的过道,这些都还好啦,关键是僧多肉少,白来号人,却只有3个坑。每次想去上厕所,跋山涉水地来到一楼厕所,一看!
u=169855390,2821608966&fm=27&gp=0.jpg

纳尼???客满!!!


       那时,我脆弱内心的小草原上跑满了**,一个画面在脑海里不断地重播——《西游降魔》里美娥姐对空虚公子不停地说~“为什么不早说?你为什么不早说?”。对呀,为什么不早说?好,那我就来造一个“可以早说”的装置——4个lora模块搭建的厕所空位显示装置。
       思路:用4个lora模块,配置为3从1主的模式,3从分别对应3个厕所坑位;主机接上led点阵屏,显示3个坑位有无人的实时状态;从机分别接入锂电池供电,而主机则接在家用电上;主控芯片均采用FireBeetleBLE 4.1低功耗控制器。


准备所需材料:
2.png

FireBeetleBLE4.1 低功耗蓝牙控制器(Arduino Pro Mini 3.3V)  4块;  购买链接
FireBeetle萤火虫LoRa无线通信模块(433MHz)  4块;                购买链接
URM07-UART低功耗超声波测距模块 3个;                           购买链接
3.7V电池 新型锂子化学聚合充电锂电池  3块;                         购买链接
FireBeetle24×8 LED点阵屏(白色)  1块;                          购买链接
高品质 micro USB数据线  1根;                                     购买链接
面包实验杜邦线(公母头)  若干;                                   购买链接
防水盒子  4个;                                                     某宝有卖
拆废旧双脚插头  1个;                                       自己想办法【哈哈】


连接原理图如下:
QQ截图20180403141058.png

(在我们的小装置里,收集端只有a,b,c三个)



硬件部分
先将4个lora模块的跳线给焊上:

3.png

(D3连CS,D4连RESET)

将电池经由拨动开关跟主控板连上:
4.png


焊接超声波模块跟lora模块:
QQ截图20180411121722.png


连接主控板与led点阵模块和lora模块(如图连线):
未命名.jpg

将防水盒子盖子用手钻钻孔,让插头的线穿过,并焊接插头跟BLE主板:
5.jpg

将主机防水盒的正面用拉花锯锯出一个矩形,露出led点阵屏的显示部分

未命名2.jpg

将从机的防水盒用拉花锯拉出一个圆孔,露出超声波探测头,并在侧边拉出一个放置开关的矩形孔(注意:开孔的位置需要考虑到人性化,我选择的位置就是考虑到单手握持时大拇指去拨动开关)
未命名3.jpg

软件部分
先下载要用的库文件:led点阵屏的库文件下载链接
                                  Lora模块的库文件下载链接
首先是主机的程序:
[AppleScript] 纯文本查看 复制代码
#include <DFRobot_LoRa.h>
#include "DFRobot_HT1632C.h"

DFRobot_LoRa lora;
#if defined( ESP_PLATFORM ) || defined( ARDUINO_ARCH_FIREBEETLE8266 )  //FireBeetle-ESP32 FireBeetle-ESP8266
#define DATA D6
#define CS D2
#define WR D7
#else
#define DATA 6
#define CS 2
#define WR 7
#endif

DFRobot_HT1632C ht1632c = DFRobot_HT1632C(DATA, WR,CS);

uint8_t sendBuf1[] = "aa";
uint8_t sendBuf2[] = "bb";
uint8_t sendBuf3[] = "cc";
uint8_t recvBuf[12];
unsigned int j;
char x[4];
char dis[]={"0-0-0"};

void setup()
{
  Serial.begin(115200);
  
  while(!lora.init()) {
    delay(100);
  }
}
void loop()
{ 
  for(j=3;j>0;j--)
  {
    unsigned int i=10000;
    if(j==3)
    {
    lora.sendPackage(sendBuf3,2);
    }
    if(j==2)
    {
    lora.sendPackage(sendBuf2,2);
    }
    if(j==1)
    {
     lora.sendPackage(sendBuf1,2);
    }
    lora.rxInit();
     while(i--)
     {
        if(lora.waitIrq())
        {
        recvBuf[0]='0';
        lora.clearIRQFlags();
        lora.receivePackage(recvBuf);
        Serial.println("here");
        Serial.write(recvBuf,2);
        if(recvBuf[0]=='0')
        {
          x[j]='0';
          }
        if(recvBuf[0]=='1')
        {
          x[j]='1';
          }
        if(j==1)
        {
          dis[0]=x[j];
          }
         if(j==2)
         {
          dis[2]=x[j];
          }
          if(j==3)
          {
            dis[4]=x[j];
            }
            Serial.println("here1");
            Serial.write(dis,5);
        }
      }
   }
  ht1632c.begin();
  ht1632c.isLedOn(true);
  ht1632c.clearScreen();
  ht1632c.setCursor(1,0);
  ht1632c.print(dis);
}

接下来是3个从机的程序:

从机1:
[AppleScript] 纯文本查看 复制代码
#include <DFRobot_LoRa.h>

DFRobot_LoRa lora;

#define header_H    0x55 
#define header_L    0xAA 
#define device_Addr 0x11 
#define data_Length 0x00 
#define get_Dis_CMD 0x02 
#define checksum    (header_H+header_L+device_Addr+data_Length+get_Dis_CMD) 
uint8_t len;
uint8_t rxBuf[32];
uint8_t txBuf1[]="11";
uint8_t txBuf0[]="00";
unsigned char i=0;
unsigned int  Distance=0;
unsigned char Rx_DATA[8];
unsigned char CMD[6]={header_H,header_L,device_Addr,data_Length,get_Dis_CMD,checksum};

void setup()
{
  Serial.begin(19200);
  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);
  digitalWrite(3, HIGH); 
  digitalWrite(2, LOW);   //D3和D2分别作为VCC和GND为模块提供电源

  while(!lora.init()) {
    delay(100);
  }
  lora.rxInit();    
}
void loop()
{
  if(lora.waitIrq()) {   // wait for RXDONE interrupt
    lora.clearIRQFlags();
    len = lora.receivePackage(rxBuf);  // receive data
    if(rxBuf[0]=='a')
    { 
    for(i=0;i<6;i++){
    Serial.write(CMD[i]);
    }
     delay(150);
     i=0;
     while (Serial.available()){  
      Rx_DATA[i++]=(Serial.read());  
      }
      Distance=((Rx_DATA[5]<<8)|Rx_DATA[6]); 
      if(Distance>=70)
      {
        lora.sendPackage(txBuf0,2);
        }
      else{
        lora.sendPackage(txBuf1,2);
        }
    }    
    lora.rxInit();
  }
}


从机2:
[AppleScript] 纯文本查看 复制代码
#include <DFRobot_LoRa.h>

DFRobot_LoRa lora;


#define header_H    0x55 
#define header_L    0xAA 
#define device_Addr 0x11 
#define data_Length 0x00 
#define get_Dis_CMD 0x02 
#define checksum    (header_H+header_L+device_Addr+data_Length+get_Dis_CMD) 
uint8_t len;
uint8_t rxBuf[32];
uint8_t txBuf1[]="11";
uint8_t txBuf0[]="00";
unsigned char i=0;
unsigned int  Distance=0;
unsigned char Rx_DATA[8];
unsigned char CMD[6]={header_H,header_L,device_Addr,data_Length,get_Dis_CMD,checksum};

void setup()
{
  Serial.begin(19200);
  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);
  digitalWrite(3, HIGH); 
  digitalWrite(2, LOW);   //D3和D2分别作为VCC和GND为模块提供电源

  while(!lora.init()) {
    delay(100);
  }
  lora.rxInit();    
}
void loop()
{
  if(lora.waitIrq()) {   // wait for RXDONE interrupt
    lora.clearIRQFlags();
    len = lora.receivePackage(rxBuf);  // receive data
    if(rxBuf[0]=='c')
    { 
    for(i=0;i<6;i++){
    Serial.write(CMD[i]);
    }
     delay(150);
     i=0;
     while (Serial.available()){  
      Rx_DATA[i++]=(Serial.read());  
      }
      Distance=((Rx_DATA[5]<<8)|Rx_DATA[6]); 
      if(Distance>=70)
      {
        lora.sendPackage(txBuf0,2);
        }
      else{
        lora.sendPackage(txBuf1,2);
        }
    }    
    lora.rxInit();
  }
}

从机3:
[AppleScript] 纯文本查看 复制代码
#include <DFRobot_LoRa.h>

DFRobot_LoRa lora;


#define header_H    0x55 
#define header_L    0xAA 
#define device_Addr 0x11 
#define data_Length 0x00 
#define get_Dis_CMD 0x02 
#define checksum    (header_H+header_L+device_Addr+data_Length+get_Dis_CMD) 
uint8_t len;
uint8_t rxBuf[32];
uint8_t txBuf1[]="11";
uint8_t txBuf0[]="00";
unsigned char i=0;
unsigned int  Distance=0;
unsigned char Rx_DATA[8];
unsigned char CMD[6]={header_H,header_L,device_Addr,data_Length,get_Dis_CMD,checksum};

void setup()
{
  Serial.begin(19200);
  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);
  digitalWrite(3, HIGH); 
  digitalWrite(2, LOW);   //D3和D2分别作为VCC和GND为模块提供电源

  while(!lora.init()) {
    delay(100);
  }
  lora.rxInit();    
}
void loop()
{
  if(lora.waitIrq()) {   // wait for RXDONE interrupt
    lora.clearIRQFlags();
    len = lora.receivePackage(rxBuf);  // receive data
    if(rxBuf[0]=='b')
    { 
    for(i=0;i<6;i++){
    Serial.write(CMD[i]);
    }
     delay(150);
     i=0;
     while (Serial.available()){  
      Rx_DATA[i++]=(Serial.read());  
      }
      Distance=((Rx_DATA[5]<<8)|Rx_DATA[6]); 
      if(Distance>=70)
      {
        lora.sendPackage(txBuf0,2);
        }
      else{
        lora.sendPackage(txBuf1,2);
        }
    }    
    lora.rxInit();
  }
}

安卓机器人  高级技匠

发表于 2018-4-16 20:08:18

版主为民着想!
回复 支持 反对

使用道具 举报

hnyzcj  超级版主

发表于 2018-4-17 08:13:44

版主为民考虑周全
回复 支持 反对

使用道具 举报

Chocho2017  版主
 楼主|

发表于 2018-4-17 09:15:21


虽然不美观,但是很亲民。
回复 支持 反对

使用道具 举报

Chocho2017  版主
 楼主|

发表于 2018-4-17 09:15:31

hnyzcj 发表于 2018-4-17 08:13
版主为民考虑周全

亲民的作品,哈哈。
回复 支持 反对

使用道具 举报

luna  管理员

发表于 2018-4-17 09:27:51

楼主脑洞真大啊~~
回复 支持 反对

使用道具 举报

安卓机器人  高级技匠

发表于 2018-4-17 10:09:10

现在的蓝牙4.0以上是不是可以一对多
回复 支持 反对

使用道具 举报

Chocho2017  版主
 楼主|

发表于 2018-4-17 11:25:09

安卓机器人 发表于 2018-4-17 10:09
现在的蓝牙4.0以上是不是可以一对多

可以,但是传输距离有限。
回复 支持 反对

使用道具 举报

Chocho2017  版主
 楼主|

发表于 2018-4-17 11:25:45

luna 发表于 2018-4-17 09:27
楼主脑洞真大啊~~

嗯嗯,是上厕所总结出来的。
回复 支持 反对

使用道具 举报

gray6666  中级技匠

发表于 2018-4-17 15:20:39

尴尬,尴尬。。。。。。。。。。。。
回复 支持 反对

使用道具 举报

Chocho2017  版主
 楼主|

发表于 2018-4-17 15:26:41

gray6666 发表于 2018-4-17 15:20
尴尬,尴尬。。。。。。。。。。。。

哈哈,是不是不敢上厕所拉?
回复 支持 反对

使用道具 举报

hnyzcj  超级版主

发表于 2018-4-17 19:28:07

Chocho2017 发表于 2018-4-17 15:26
哈哈,是不是不敢上厕所拉?

你遇到林志玲了
回复 支持 反对

使用道具 举报

Chocho2017  版主
 楼主|

发表于 2018-4-18 10:31:56

hnyzcj 发表于 2018-4-17 19:28
你遇到林志玲了

嗯。。。。。。。。想象。
回复 支持 反对

使用道具 举报

微草  学徒

发表于 2018-4-20 13:41:04

提示: 该帖被管理员或版主屏蔽
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
wifi气象站

硬件清单

btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2016 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail