Basra和Bigfish的特殊用法
作者:机器谱
接更多传感器 双主控板串联 监测传感器状态 |
而在连接只有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列中每个灯的亮灭 } |
左侧传感器触发
中间传感器触发
右侧传感器触发
4. 资料下载
资料清单 | |
序号 | 内容 |
1 | 例程源代码 |
点击打包下载 |
|