电子说
第1步 - 组装电路
我们的足球比赛电路如下:
将Servo与Netduino连接以进行测试
电源轨
我们将连接3.3V和5V电源轨。当我们想要移动伺服或足球运动员时,我们使用带有按钮的3.3V电源导轨向Netduino发出信号。我们可以使用5V作为输入,因为Netduino输入可以承受5V电压,但最好用3.3V触发输入。
我们将使用5V电源为电源供电伺服系统。如上所述,对于生产应用,最好使用外部电源。
下拉电阻
此项目中使用的按钮有两(2)对冗余引脚。请注意,Netduino的数字引脚通过电阻连接到GND。当按钮静止(未按下)时,输入引脚设置为接地。按下按钮时,所有四(4)个引脚都连接在一起,将3.3V电源轨连接到Netduino上的输入引脚。使用电阻器,因此当按下按钮时,我们在电源和地之间没有直接的低电阻路径。
步骤2 - 组装足球场
对于足球场,你需要一个信纸尺寸的纸板。足球线只是装饰品,所以无论如何都可以自由地绘制它们。
足球场尺寸
对于电路板的墙壁,您需要两(2)个更薄的纸板条,以下尺寸。
切割两个纸板条足球场的墙壁
将下半部分粘贴到足球场的边缘。
使用双面胶带将舵机连接到现场表面,并用棍子连接到伺服的旋转臂上;我们使用冰棍棒或一半的筷子。
你的足球场应该是这样的:
足球场完全组装
第3步 - 创建Netduino项目
在 Visual Studio 2015 for Windows 或 Visual Studio for Mac 中创建 Netduino 项目;将项目命名为 SoccerField 。
步骤4 - 添加Netduino Foundation库
Windows
右键单击 SoccerSample 项目,然后单击管理NuGet包的。在浏览标签中,搜索 Netduino.Foundation ;它应该是第一个搜索结果。单击安装按钮。
添加Netduino.Foundation NuGet包
现在搜索 Netduino.Foundation.Servo 并将其添加到您的项目中。
macOS
按住Alt键并单击解决方案资源管理器中的 SoccerField 项目,然后单击添加=》添加NuGet包以打开NuGet包窗口。搜索 Netduino.Foundation 包并单击添加包将其添加到您的项目中。
添加Netduino.Foundation NuGet包
现在搜索 Netduino.Foundation.Servo 并将其添加到您的项目中。
步骤5 - 添加代码以控制足球场
添加PlayerController
创建控制器是一个好习惯所涉及的每个外围设备的类,以使项目结构更具可扩展性和可维护性。控制器类将封装控制硬件所需的外设特定逻辑。
使用以下代码为您的伺服器添加 PlayerController 类:
using System.Threading;
using Netduino.Foundation.Servos;
namespace Soccer
{
public class PlayerController
{
protected bool _kickRight;
protected Servo _servo;
public PlayerController(Servo servo)
{
_servo = servo;
_servo.RotateTo(0);
}
public void Kick()
{
Thread _animationThread = new Thread(() =》
{
_kickRight = !_kickRight;
if (_kickRight)
{
_servo.RotateTo(180);
}
else
{
_servo.RotateTo(0);
}
});
_animationThread.Start();
}
}
}
该控制器管理单个伺服的行为,其唯一的公共方法 Kick 使伺服从0度旋转到180度并返回。请注意, Kick 中的伺服旋转逻辑包含在Thread _animationThread 中。这使伺服控制在伺服移动时按下按钮时异步。
添加App类
对于这个项目,我们实现了一个管理所有外围设备的通用 App 软件模式主要逻辑。
在项目中添加一个新的 App 类,并粘贴以下代码:
using System;
using Netduino.Foundation.Servos;
using N = SecretLabs.NETMF.Hardware.Netduino;
using Microsoft.SPOT.Hardware;
namespace Soccer
{
public class App
{
protected InterruptPort _buttonTeamA;
protected PlayerController _playerTeamA;
protected InterruptPort _buttonTeamB;
protected PlayerController _playerTeamB;
public App()
{
InitializePeripherals();
}
protected void InitializePeripherals()
{
_buttonTeamA = new InterruptPort(N.Pins.GPIO_PIN_D4,
true, Port.ResistorMode.PullDown,
Port.InterruptMode.InterruptEdgeHigh);
_buttonTeamA.OnInterrupt += OnButtonTeamA;
var servoA = new Servo(N.PWMChannels.PWM_PIN_D3,
NamedServoConfigs.Ideal180Servo);
_playerTeamA = new PlayerController(servoA);
_buttonTeamB = new InterruptPort(N.Pins.GPIO_PIN_D10,
true, Port.ResistorMode.PullDown,
Port.InterruptMode.InterruptEdgeHigh);
_buttonTeamB.OnInterrupt += OnButtonTeamB;
var servoB = new Servo(N.PWMChannels.PWM_PIN_D11,
NamedServoConfigs.Ideal180Servo);
_playerTeamB = new PlayerController(servoB);
}
private void OnButtonTeamA(uint data1, uint data2, DateTime time)
{
_playerTeamA.Kick();
}
private void OnButtonTeamB(uint data1, uint data2, DateTime time)
{
_playerTeamB.Kick();
}
public void Run()
{
}
}
}
请注意,我们的 App 类声明了四个类属性:两个 InterruptPorts 和两个 PlayerController 类对象。
在构造函数中,我们调用 InitializePeripherals 方法,在该方法中实例化所有四个类对象。 _playerTeamA 和 _playerTeamB 用于控制伺服器, InterruptPorts 用于按钮。 _buttonTeamA 和 _buttonTeamB 注册 OnInterrupt 事件,并调用相应 PlayerController 团队的Kick方法。 》
在Program类中实现Main方法
最后,创建一个新的 App 类对象并调用运行方法。您的代码应如下所示:
步骤6 - 运行项目
单击Visual Studio中的运行按钮以查看您的足球游戏!在球场中间抛球并按下按钮使两侧的伺服踢球!
全部0条评论
快来发表一下你的评论吧 !