第1步 - 組裝電路
我們的足球比賽電路如下:
將Servo與Netduino連接以進行測試
電源軌
我們將連接3.3V和5V電源軌。當我們想要移動伺服或足球運動員時,我們使用帶有按鈕的3.3V電源導軌向Netduino發(fā)出信號。我們可以使用5V作為輸入,因為Netduino輸入可以承受5V電壓,但最好用3.3V觸發(fā)輸入。
我們將使用5V電源為電源供電伺服系統(tǒng)。如上所述,對于生產(chǎn)應(yīng)用,最好使用外部電源。
下拉電阻
此項目中使用的按鈕有兩(2)對冗余引腳。請注意,Netduino的數(shù)字引腳通過電阻連接到GND。當按鈕靜止(未按下)時,輸入引腳設(shè)置為接地。按下按鈕時,所有四(4)個引腳都連接在一起,將3.3V電源軌連接到Netduino上的輸入引腳。使用電阻器,因此當按下按鈕時,我們在電源和地之間沒有直接的低電阻路徑。
步驟2 - 組裝足球場
對于足球場,你需要一個信紙尺寸的紙板。足球線只是裝飾品,所以無論如何都可以自由地繪制它們。
足球場尺寸
對于電路板的墻壁,您需要兩(2)個更薄的紙板條,以下尺寸。
切割兩個紙板條足球場的墻壁
將下半部分粘貼到足球場的邊緣。
使用雙面膠帶將舵機連接到現(xiàn)場表面,并用棍子連接到伺服的旋轉(zhuǎn)臂上;我們使用冰棍棒或一半的筷子。
你的足球場應(yīng)該是這樣的:
足球場完全組裝
第3步 - 創(chuàng)建Netduino項目
在 Visual Studio 2015 for Windows 或 Visual Studio for Mac 中創(chuàng)建 Netduino 項目;將項目命名為 SoccerField 。
步驟4 - 添加Netduino Foundation庫
Windows
右鍵單擊 SoccerSample 項目,然后單擊管理NuGet包的。在瀏覽標簽中,搜索 Netduino.Foundation ;它應(yīng)該是第一個搜索結(jié)果。單擊安裝按鈕。
添加Netduino.Foundation NuGet包
現(xiàn)在搜索 Netduino.Foundation.Servo 并將其添加到您的項目中。
macOS
按住Alt鍵并單擊解決方案資源管理器中的 SoccerField 項目,然后單擊添加=》添加NuGet包以打開NuGet包窗口。搜索 Netduino.Foundation 包并單擊添加包將其添加到您的項目中。
添加Netduino.Foundation NuGet包
現(xiàn)在搜索 Netduino.Foundation.Servo 并將其添加到您的項目中。
步驟5 - 添加代碼以控制足球場
添加PlayerController
創(chuàng)建控制器是一個好習慣所涉及的每個外圍設(shè)備的類,以使項目結(jié)構(gòu)更具可擴展性和可維護性。控制器類將封裝控制硬件所需的外設(shè)特定邏輯。
使用以下代碼為您的伺服器添加 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度旋轉(zhuǎn)到180度并返回。請注意, Kick 中的伺服旋轉(zhuǎn)邏輯包含在Thread _animationThread 中。這使伺服控制在伺服移動時按下按鈕時異步。
添加App類
對于這個項目,我們實現(xiàn)了一個管理所有外圍設(shè)備的通用 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 類對象。
在構(gòu)造函數(shù)中,我們調(diào)用 InitializePeripherals 方法,在該方法中實例化所有四個類對象。 _playerTeamA 和 _playerTeamB 用于控制伺服器, InterruptPorts 用于按鈕。 _buttonTeamA 和 _buttonTeamB 注冊 OnInterrupt 事件,并調(diào)用相應(yīng) PlayerController 團隊的Kick方法。 》
在Program類中實現(xiàn)Main方法
最后,創(chuàng)建一個新的 App 類對象并調(diào)用運行方法。您的代碼應(yīng)如下所示:
步驟6 - 運行項目
單擊Visual Studio中的運行按鈕以查看您的足球游戲!在球場中間拋球并按下按鈕使兩側(cè)的伺服踢球!
-
電路
+關(guān)注
關(guān)注
172文章
5933瀏覽量
172457 -
Netduino
+關(guān)注
關(guān)注
0文章
19瀏覽量
3447
發(fā)布評論請先 登錄
相關(guān)推薦
評論