什么是Sphero RVR Rover?
基本款(如上图所示):RVR是Sphero可编程机器人的革命性产品-即开即用、可驱动、装有多种传感器套件、可定制。通过连接第三方硬件(例如Raspberry Pi、Arduino、BBC micro:bit或Sphero自己的littleBits),进一步扩展RVR的功能。RVR是移动空白画布。使用它进行编程学习,在上面构建代码,然后解密梦想中的机器人-然后将其带到任何地方。
配件如下:
- 灵活快捷的可移动盖板和显影板
- 移动的保护性防滚架
- 充电电池
- 通用的4针UART扩展端口,用于连接第三方硬件(Raspberry Pi,Arduino,micro:bit)
- 5V 2.1A USB-A板载连接器,可使用RVR的电池的项目供电。
- Sphero Edu应用程序兼容并可编程
多机器人套件:
RVR Multi-Pack是扩展STEAM课程的理想方法。它包括5个可编程RVR,因此在班级中实现理想的学生与机器人的比例。分组工作,以构建移动项目,参加Hackathon竞赛或部署RVR的IR功能,并进行机器人到机器人的通信,机器人跟随和机器人逃避的实验。
共同成长:
激活创意:
第三方扩展支持 3rd Party Time
借助RVR的4针UART扩展端口和板载电源,还可以连接并运行第三方硬件,例如Raspberry Pi,Arduino,micro:bit和Sphero的littleBits。希望RVR成为可以通过互联网控制的家庭安全岗哨,自主金属探测器或环境传感器吗?
一切创意,皆有可能!!!
Sphero SDK
https://sdk.sphero.com/
基础版扩展
SparkFun的RVR基本套件为Sphero RVR平台提供了一组扩展的传感器。
套件包括
- Raspberry Pi Zero WH
- SparkFun Qwiic GPS-SAM M8Q
- 4针至4针0.1“接口电缆
- Pi相机模组V2
- PanTilt套件
- Pi相机线
- SparkFun Pi伺服
- 4-40 Nuts
- 4-40 1/4“螺栓
- 4-40 1/2“螺栓
- Qwiic电缆100mm
- Double Sided Foam Tape Square
- 具有自定义映像的16GB MicroSD
高级版扩展
RVR自动运行所需的一切(以及一些其他),包括Raspberry Pi Zero W和摄像头。
套件包括
- Raspberry Pi Zero WH
- SparkFun Qwiic GPS-SAM M8Q
- 4针至4针0.1“接口电缆
- Pi相机模组V2
- PanTilt套件
- Pi相机线
- SparkFun Pi伺服
- VL53L1X飞行时间传感器Qwiic板
- 4-40 Nuts
- 4-40 1/4“螺栓
- 4-40 1/2“螺栓
- 4-40直角支架
- 3/16“外径六角支架(公-母)4-40 x 3/4”
- Qwiic电缆50mm
- Qwiic电缆200mm
- Double Sided Foam Tape Square
- 亚克力板
- 具有自定义映像的16GB MicroSD
第三方开发资料:
- Raspberry Pi
- Arduino
- micro:bit
使用Arduino SDK进行设置
Arduino的C ++ SDK
从GitHub下载代码!
然后,您可以进入Arduino IDE并转到 Sketch > Include Library > Add Zip Library
在Arduino IDE中下载软件包!
通过导航Sketch > Include Library > Manage Libraries
并搜索SpheroRVR
安装完成后,直接在示例中使用案例,或自编代码:
Python库
https://pypi.org/project/sphero-sdk/
pip3 install -U sphero-sdk
树莓派
https://www.kinvert.com/sphero-rvr-sdk-python-programmable-robot/
部分图集,课程完备,敬请期待:
使用Arduino将RVR变成WeatherBot
(官方案例,机器翻译)
将RVR变成自定义的WeatherBot!虽然它无法控制天气,但它可以测量并在字母数字显示器上显示当前温度,还可以将其(RVR的)LED设置为与温度相对应的颜色。
本示例将展示如何将几种不同的技术整合到一个项目中。因此,它需要大量的组装!请抽出时间并认真按照说明进行操作,特别是如果之前没有组装过电路的话!
注意:如果暴露在低于-20C(-4F)或高于60C(140F)的温度下,RVR中的电池可能会失效,因此在测试WeatherBot时请不要太疯狂!另外,如果还决定测试湿度,请记住,RVR所处的环境不应比通过湿草驾驶更潮湿。
零件清单
以下是制作自定义的WeatherBot所需的所有内容的列表:
- RVR
- Arduino Uno
- Adafruit Feather(任何类型都可以,我们使用了HUZZAH)*
- Adafruit 14段字母数字LED羽翼
- A/B USB电缆
- Micro B USB电缆
- DHT22温湿度传感器(带有电阻器)**DHT11也可以
- 双字母数字显示(选择您喜欢的颜色!)
- 面包板
- 29条跳线***
- 焊锡和烙铁
* HUZZAH有三种不同版本。使用了Assembled Headers版本(只是因为这就是手头的版本),但是这三个版本中的任何一个都可以。实际上,堆叠接头版本将消除对大量跨接线的需求,并为提供更清洁的最终产品!
**可以改用DHT11。
***从电路图片中会注意到,实际上并没有使用跨接导线,而是将切割和剥皮的导线更好地安装在电路中。跳线工作得很好,但是如果您想做我们想做的事,则需要一些连接线,剥线钳和剪线钳。另外,根据使用的Feather板的版本,可能需要少于29根电线。
五金组装
从上面的“ 零件清单”中的所有星号中可以看出,要构建电路的精确度还有很大的空间。本教程的其余部分将引导您完成我们做事的方式。如果您对这类项目没有太多经验,我们建议严格按照以下步骤进行操作,但是如果了解面包板的制作方法,请随时进行认为合适的任何更改!
首先,我们需要组装字母数字显示器。这是我们完成该任务所遵循的教程,我们建议您也这样做!但是,我们要补充一点:完成焊接后,在剪短时请务必握住电线(如果有镊子,请使用镊子),以免电线飞散。地点!在此步骤中戴护目镜也是一个好主意。
组装字母数字显示器后,就可以开始组装电路了!请遵循以下接线图:
看起来很多!如果要切割和剥线,这是项目中最耗时的部分。因此,请花点时间,仔细按照图表进行操作,并耐心等待!完成后,您应该具有以下内容:
软件
深呼吸!困难的部分结束了。
如果还没有这样做,请下载Arduino IDE。我们将这个IDE用于Arduino和Feather。
由于我们正在使用两个不同的开发板(Arduino Uno和Adafruit Feather),因此需要下载两个单独的文件。weather_bot.ino将在Arduino上运行,并weather_bot_display.ino在开发板上运行。让我们从Arduino开始。
Arduino代码
如果您不希望逐步浏览我们将在Arduino上加载的代码,则可以在Arduino IDE中打开weather_bot.ino文件(从Sphero Arduino SDK GitHub的demos/weather_bot目录中),然后跳转到将文件加载到你的Arduino。否则,让我们进行一些演练!
我们将首先进行所有必要的导入,以使我们能够设置Arduino上引脚的信息并与RVR通信。然后,我们将使用此信息来设置DHTPIN连接到传感器数据引脚的,并设置DHTTYPE您正在使用的传感器的类型()(如果您使用的不是DHT22温湿度传感器,则您需要在这里将具有与我们不同的价值)。我们还将添加一个位掩码,该位掩码指示RVR我们要设置所有LED。作为导入和定义的最后一部分,我们将启动温度/湿度传感器:
#include "DHT.h"
#include <SpheroRVR.h>
#define DHTPIN 4
#define DHTTYPE DHT22
#define ALL_LEDS 0x3FFFFFFF
DHT dht(DHTPIN, DHTTYPE);
代码的下一部分是一种setup方法,其中,我们将打开温度湿度传感器,建立与RVR的连接,并暂停以使RVR唤醒,以便我们可以开始向其发送命令:
void setup() {
dht.begin();
rvr.configUART(&Serial);
delay(2000);
}
我们loop是我们实际行动发生的地方。我们loop将每两秒钟举行一次。当loop运行时,我们将阅读temperature从华氏(不过,如果我们得到了一个不好的阅读,我们将开始循环以上)的传感器和翻译读temperature(从0F-100F),以红色或蓝色值范围从0到255。要设置与我们对应的LED颜色temperature,我们需要一个由30个值组成的数组(10个LED,每个LED都有1)红色,2)绿色和3)蓝色值),我们将填充这些值,以便每个LED设置为相同的颜色(在所有情况下,绿色值均为0,因为我们只使用红色和蓝色来表示冷热)。填充数组后,我们将其与我们的数组一起使用setAllLeds更改RVR LED指示灯颜色的方法:
void loop() {
delay(2000);
float temperature = dht.readTemperature(true);
if (isnan(temperature)) {
return;
}
uint8_t redValue = static_cast<uint8_t>(temperature / 100 * 255);
uint8_t blueValue = static_cast<uint8_t>((100 - temperature) / 100 * 255);
uint8_t ledValues[30] = {0};
for (int i = 0; i < 28; i = i + 3)
{
ledValues[i] = redValue;
ledValues[i + 1] = 0;
ledValues[i + 2] = blueValue;
}
rvr.setAllLeds(ALL_LEDS, ledValues, 30);
}
将文件加载到您的Arduino上
在“ 工具”选项卡下,确保您的开发板设置为“ Arduino/Genuino Uno”。还要确保您的端口设置为将Arduino插入的USB端口。使用A / B USB电缆将Arduino连接到计算机,然后单击IDE左上角的Upload按钮。等待几秒钟,直到IDE告诉您它已完成上传,然后您就可以开始了!
开发板代码
将Feather与Arduino IDE结合使用会更加复杂。按照本教程进行所有设置。完成后,我们可以添加代码;上传过程与我们的Arduino代码完全相同!这次仅使用Micro B USB电缆代替A / B电缆。
让我们看一下为Feather构建的程序的内幕...(如果您只想使用我们已经创建的程序,则可以demos/weather_bot在Sphero Arduino SDK GitHub的目录中找到它)。
我们对Feather代码所做的第一件事还将是导入一些东西,以便允许我们定义Feather和Arduino之间的连接,以及访问Feather本身。我们将再次设置连接到传感器的数据引脚的引脚和传感器的类型,然后设置位掩码,以告诉显示器需要为每个字符打开哪些段。我们还将为字母数字显示创建一个对象,为温度湿度传感器创建一个对象:
#include <Wire.h>
#include <Adafruit_GFX.h>
#include "Adafruit_LEDBackpack.h"
#include "DHT.h"
#define DHTPIN 12
#define DHTTYPE DHT22
#define ZERO 0x0C3F
#define ONE 0x0006
#define TWO 0x00DB
#define THREE 0x008F
#define FOUR 0x00E6
#define FIVE 0x2069
#define SIX 0x00FD
#define SEVEN 0x0007
#define EIGHT 0x00FF
#define NINE 0x00EF
#define DECIMAL 0x4000
#define OFF 0x0000
Adafruit_AlphaNum4 output = Adafruit_AlphaNum4();
DHT dht(DHTPIN, DHTTYPE);
在我们的setup方法中,我们将打开字母数字显示屏和温度湿度传感器,然后关闭显示屏的所有部分,以使它们清晰可见并准备显示读数。我们最后的设置步骤是暂停片刻,以使RVR唤醒:
void setup() {
output.begin(0x70);
dht.begin();
output.writeDigitRaw(0, OFF);
output.writeDigitRaw(1, OFF);
output.writeDigitRaw(2, OFF);
output.writeDigitRaw(3, OFF);
output.writeDisplay();
delay(2000);
}
现在换好东西!对于我们的loop方法,我们还将其设置为每2秒发生一次,并将temperature以华氏度从传感器读取。同样,如果我们没有很好地阅读,我们将重新开始loop。这一次,temperature我们将创建一个数组,其中每个数字(包括小数!)在数组中都有自己的位置,然后循环遍历该字符,而不是将其转换为颜色,而是将其转换为可以在字母数字显示器上显示的字符。创建并显示每个字符的数组。确定每个字符要显示什么之后,我们将使用整数更新显示内容:
void loop() {
delay(2000);
float temperature = dht.readTemperature(true);
if (isnan(temperature)) {
return;
}
char temperatureBuffer[5];
dtostrf(temperature, 5, 2, temperatureBuffer);
for (int i = 0; i < 5; i++)
{
// skip the decimal point
if (i == 2)
{
continue;
}
// set the display index
int index = i;
// offset the display index by 1 if we're past the decimal point in the char array
if (i > 2)
{
index = i - 1;
}
// get the bitmask for the current digit
int digit = getDigit(temperatureBuffer[i]);
// add a decimal point after the second digit
if (i == 1)
{
digit |= DECIMAL;
}
// write digit to the given index of the display
output.writeDigitRaw(index, digit);
}
output.writeDisplay();
}
您可能已经注意到,我们在代码中使用了“ getDigit”方法来定义digit显示上面的温度。让我们定义该方法!getDigit只是将数字(以char的形式)转换为我们在程序开始时定义的数字位掩码之一:
int getDigit(char digit) {
switch (digit) {
case '0':
return ZERO;
case '1':
return ONE;
case '2':
return TWO;
case '3':
return THREE;
case '4':
return FOUR;
case '5':
return FIVE;
case '6':
return SIX;
case '7':
return SEVEN;
case '8':
return EIGHT;
case '9':
return NINE;
default:
return OFF;
}
}
这就是我们的Feather程序的全部内容;继续并加载它,这样我们就可以全部测试!
(Psst!如果这些说明对您来说还不够,那么这里有些链接包含有关DHT22使用率和字母数字显示用法的更多信息。)
汇集全部
现在我们的电路已经建立,开发板上的代码已经刷新,我们终于可以使用WeatherBot了!您需要做的就是使用A/B USB电缆将Arduino插入RVR的USB端口,然后打开RVR!RVR的LED更改颜色需要几秒钟,因此请耐心等待。您可能还需要几秒钟才能看到字母数字显示屏亮起。如果已经有一段时间,但您仍然看不到任何内容,请尝试按一下Feather上的重置按钮,然后再等待几秒钟。如果不起作用,则在Arduino上按一下“重设”按钮也可能会有所帮助。
恭喜,活干得漂亮!
怎么办?
看看是否可以构建更好的机器人!以下是一些我们可以改进WeatherBot的想法:
- 该DHT22有湿度传感器,我们没有用,找到了一种将那!
- 我们提到了构建电路的几种不同选择。现在,您已经完成了一种方法,看看是否可以采用其他方法来完成!
- 尝试将此教程与我们的软件序列教程结合使用,以将温度而不是字母数字显示输出到您的计算机。(如果您无法访问使字母数字显示正常工作所需的所有部件,这也可能很有用。)
- 更改代码,使LED变成彩虹的每种颜色,而不仅仅是从红色到蓝色!