机器谱

Basra和Bigfish的特殊用法

作者:机器谱

图文展示3264(1)(1)(1)

图文展示3264(1)(1)(1)

副标题

接更多传感器
双主控板串联
监测传感器状态

      而在连接只有1个信号引脚的传感器时,最外侧一根针是闲置不用的。理论上空置的那根可以再接一个传感器,从而增加Bigfish可同时连接的传感器数量。

示例一:

      如下图所示,利用杜邦线将A4、A5两个信号引脚分别连到两个触碰传感器上,其中一个传感器还从2×5座坞上获得了VCC和GND引脚。

1. 利用闲置信号引脚

      按照Bigfish的设计,有3个传感器口是有2个信号引脚的,分别是左上(A0/A1)、右上(A4/A5)、右下(A3/D2)传感器口均有两根信号针。这3个传感器口可以驱动多引脚的传感器(如超声波等)和示教编程时的中断判断。

示例二:

      如下图所示,通过将A1、A2、A4、A5分开使用,我们用Bigfish扩展板的两个传感器口接了2个灰度传感器、1个超声测距传感器,其中超声测距传感器的VCC和GND引脚来自2×5座坞。

2. 利用Bigfish跳线

      Bigfish背面有两组跳线帽,通过跳线可以改变接口的电压值。如下图红框内标注的就是这两组跳线帽,每组控制3根针。两组针上方分别印有“白”、“红”字样,分别对应Bigfish正面的白色端口(舵机口)和红色端口(传感器口)。“白”字对应的跳线口电压标注为“5/6V”,即白色端口的电压可以在5V和6V之间切换;“红”字对应的跳线口电压标注为“VIN/5V”,即红色端口的电压可以在电池实时电压和5V之间切换。

      出厂时,“白”跳线口的跳线帽默认安装在6V一侧,即舵机端口设定为6V电压。“红”跳线口的跳线帽默认安装在5V一侧,即传感器端口设定为5V电压。

      我们可以通过改变跳线帽的位置,来改变端口的电压,比如可以把“白”跳线口的跳线帽拔下来,改装在5V一侧,就可以把6个舵机口的供电针脚VIN的电压变成5V;或者把“白”跳线口的跳线帽拔下来,改装在VIN一侧,就可以把4个传感器口的供电针脚VIN的电压变成与电池实时电压一致了。

示例:

(1)把BigFish背面右侧的白色接口跳线帽,通过跳线,把电压从6V改成5V;

(2)将传感器用杜邦线连接到刚刚更改过跳线帽一侧的白色端口上,如图所示为D7端口。

资料清单

序号

内容
1

测试报告-BigFish传感器口接更多传感器的测试(模拟量)

2

测试报告-BigFish传感器口接更多传感器的测试(数字量)

3
  测试报告-BigFish舵机口跳线后接传感器的测试
点击打包下载


以字母D开头的信号引脚,只能输入和输出开关量,因此只能接开关量的传感器,不能接模拟量传感器。


3. 资料下载

接更多传感器

1. 将两个Basra板都装上Bigfish扩展板。


2.在Bigfish扩展板的右侧座坞上,找到TX和RX两个接口,如下图所示:

3. 用单芯公对公杜邦线,将两个板子的TX口和RX口交错相连。即将A板的RX口连在B板的TX口上,A板的TX口连在B板的RX口上。如此,两个板子的串口硬件连接完毕。


4. 选定其中一个板子为主机,另一个板子为从机。将host.ino(主机程序)和slave.ino(从机程序)分别烧录进两个主控板。在这个系统中,主机A0口安装传感器,主机程序可以接收和判断来自A0口的数字量传感器信号,并通过串口向从机发送信号;从机程序可以根据接收到的主机信号情况,控制D5/D6接口直流电机的运动。即主机负责数据获取,从机负责运动控制。


源代码如下:

主机程序(host.ino)

void setup() {

  // put your setup code here, to run once:

  Serial.begin(9600);

  pinMode(A0,INPUT_PULLUP);


}


void loop() {

  // put your main code here, to run repeatedly:

  if(!digitalRead(A0))

  {

    Serial.write('a');

    delay(20);

  }

}

String inputString = "";         // a string to hold incoming data

boolean stringComplete = false;   // whether the string is complete


void setup()

{


pinMode(5,OUTPUT);

pinMode(6,OUTPUT);

  // initialize serial:

  Serial.begin(9600);

  // reserve 200 bytes for the inputString:

  inputString.reserve(200);

}


void loop()

{

  // print the string when a newline arrives:

  // ServoStay();

  if (stringComplete)

  {

    Serial.print(inputString);


    if(inputString=="a")

   {

     digitalWrite(5,HIGH);

     digitalWrite(6,LOW);

   }

  }

}


void serialEvent() {

int   data =0;

  while (Serial.available()) {

    // get the new byte:

    // String oldinputString ;

  if(data<1)

  {

  inputString = "";

    data++;

}

    char inChar = (char)Serial.read();

    // add it to the inputString:

     if (inChar == '\n')

     {         

      stringComplete = true;


     }

    else inputString += inChar;


    }

  }

从机程序(slave.ino)

5. 读懂了代码之后,你可以根据设计需要改写这两个程序,利用此系统架构实现你的机器人的主从控制功能。


6. 资料下载

资料清单

序号

内容
1

例程源代码

点击打包下载
双主控板串联

       有时候我们接传感器时希望能直观的看到传感器的触发状态,以确定传感器是否损坏或安装是否正确。本文主要是以安装了3个灰度传感器的循迹小车为例,通过8*8LED点阵实时监控传感器的触发状态,不同传感触发后分别对应LED点阵上的光条。

       环境与配置:023号机构;Basra(Arduino Uno)主控板×1;Bigfish2.0扩展板×1;灰度传感器×3;软件:Arduino IDE;系统:Win10。

步骤:

1. 三个灰度传感器分别接023机构小车底部前端,分布于左侧,中间,右侧,传感器距离小车车轮越远效果越好,左侧传感器接Bigfish扩展版A0口,中间接A3口,右侧接A4口。

2. 编写以下程序(Sensor_Monitoring.ino),并向控制板烧录。

#include "LedControl.h"

   int pin[3]={A4,A3,A0};

   int state[3]={1};

   LedControl lc=LedControl(12,11,13,1);   //初始化设备,设置DIN(dataPin)、CLK、CS的IO口及连接设备数量(既有多少块屏)并定义一个对象

                                          //本例中:设置DIN口对应Arduino上12口;设置CLK口对应Arduino上11口;设置CS口对应Arduino上13口;设备连接数1

   void setup()

  {

    Serial.begin(9600);  

    lc.shutdown(0,false);     //设置LED0节电模式关闭

    lc.setIntensity(0,15);    //设置LED0可显示的行数,可设置0-7,超过7变为8的余数

    lc.clearDisplay(0);       //设备0清屏

                              //使用0-7表示LED的1-8行,使用0,1表示LED亮灭

    lc.setRow(0,0,10000001);   //设置LED0第一行8个LED状态

    lc.setRow(0,7,10000001);   //设置LED0第八行8个LED状态

    delay(1000);   //LED灯亮1秒

    lc.clearDisplay(0);   //设备0清屏

  }

    void loop()

  {

    lc.clearDisplay(0);

    for(int i = 0; i < 3;i++)

    {

      state[i]=!(digitalRead(pin[i]));         //state[i]表示第i个传感器触发状态,1表示触发,0表示未触发

      lc.setColumn(0, 6-2*i, byte(255*state[i]));   //设置LED0 6-2i 列8个LED的开关状态,与setRow输出的图形正好旋转90度,byte(255*state[i])表示 传感器触发状态*255 后转二进制来控制LED0列中每个灯的亮灭

    }

3.执行效果

左侧传感器触发

中间传感器触发

右侧传感器触发

4. 资料下载

资料清单

序号

内容
1

例程源代码

点击打包下载


监测传感器状态
© 2022 机器时代(北京)科技有限公司  版权所有
机器谱——机器人共享方案网站
学习  开发  设计  应用