WDD お店を繁盛させる看板を.NET MFでつくる
4/24,25のWindows Developer Daysで展示されていたお店を繁盛させる看板、覚えてますか?
あの看板の、旗の上下とLED点灯は、.NET Micro Framework(Fez Panda)+自作ハードウェアで制御されています。同じ様な工作を手軽に試してみたい方には、.NET Gadgeteerをお勧めします。
デバイスドライバーズのご協力により、看板開発用キット化してもらったので、それをスタート地点にしてください。
https://www.tinyclr.jp/products/fez-completekit.htm#Digital Signage Kit
このキットには、以下のパーツが入っています。
- FEZ Spider Starter Kit
制御ボード本体、LED、Ethenetシールド、カメラ、その他 - Motor Driver L298 Module
2個のモーターを制御 - Relay Module
4系統の電源のOFF/ON制御
LED点灯、モーター制御、ネットワークと一通り揃っているので、ネット越しに旗を上下させるモーターとLEDの点灯点滅制御が可能です。旗の上下は、タミヤのギヤーボックスとモーターを組み合わせて使うのが一番簡単です。また、キットについているLEDは小さく、光の強度も弱いので、ホームセンターや秋葉原のジャンク屋をあさって100Vの家庭用電源で点滅する魅惑の電飾を調達し、リレーモジュールで制御するのも面白いでしょう。
制御プログラム開発を始めるにあたっては、私の過去のブログ投稿を参考にしてください。
https://www.tinyclr.jp では、他にも様々なパーツが売られているので、追加購入して色々チャレンジしてみてください。IT系エンジニアで「ハードウェア全く判りません」という方でもかなり色々楽しめるはずです。
Arduinoで過去に遊んでいる人、回路設計が出来て色々自作できる人は、カスタムのハードウェアを作って、.NET Gadgeteerにつないでみてくださいね~
最後に、一番簡単なサンプルを紹介しておきます。参考にしてください。
Program.gadgeteerビュー
Program.csの全コード
using System;using System.Collections;using System.Threading;using Microsoft.SPOT;using Microsoft.SPOT.Presentation;using Microsoft.SPOT.Presentation.Controls;using Microsoft.SPOT.Presentation.Media;using Microsoft.SPOT.Touch; using Gadgeteer.Networking;using GT = Gadgeteer;using GTM = Gadgeteer.Modules;using Gadgeteer.Modules.GHIElectronics;using Gadgeteer.Modules.Seeed; using Microsoft.SPOT.Net.NetworkInformation; namespace GadgeteerAppKANBAN{ public partial class Program { // This method is run when the mainboard is powered up or reset. void ProgramStarted() { /******************************************************************************************* Modules added in the Program.gadgeteer designer view are used by typing their name followed by a period, e.g. button. or camera. Many modules generate useful events. Type +=<tab><tab> to add a handler to an event, e.g.: button.ButtonPressed +=<tab><tab> If you want to do something periodically, use a GT.Timer and handle its Tick event, e.g.: GT.Timer timer = new GT.Timer(1000); // every second (1000ms) timer.Tick +=<tab><tab> timer.Start(); *******************************************************************************************/ // Use Debug.Print to show messages in Visual Studio's "Output" window during debugging. Debug.Print("Program Started"); // Network初期化 string ipaddr = null; foreach (var ni in NetworkInterface.GetAllNetworkInterfaces()) { if (ni.IsDhcpEnabled) { ni.RenewDhcpLease(); } else { ni.EnableDhcp(); } ipaddr = ni.IPAddress; break; } // Webサービスの起動 WebServer.StartLocalServer(ipaddr, 80); // LED表示用 REST API WebServer.SetupWebEvent("Led").WebEventReceived += new WebEvent.ReceivedWebEventHandler(Program_WebEventReceived); // Motor駆動用 REST API WebServer.SetupWebEvent("Motor").WebEventReceived += new WebEvent.ReceivedWebEventHandler(Program_WebEventReceived); // Relay駆動用 REST API WebServer.SetupWebEvent("Relay").WebEventReceived += new WebEvent.ReceivedWebEventHandler(Program_WebEventReceived); } void Program_WebEventReceived(string path, WebServer.HttpMethod method, Responder responder) { if (path.CompareTo("Led") == 0) { // LED点灯 string command = responder.GetParameterValueFromURL("command"); string color = responder.GetParameterValueFromURL("color"); if (command.CompareTo("on") == 0) { if (color.CompareTo("blue") == 0) { led.TurnBlue(); } else if (color.CompareTo("red") == 0) { led.TurnRed(); } else if (color.CompareTo("green") == 0) { led.TurnGreen(); } } else if (command.CompareTo("off") == 0) { // LED消灯 led.TurnOff(); } } else if (path.CompareTo("Motor") == 0) { // モーター駆動 string side = responder.GetParameterValueFromURL("side"); string speed = responder.GetParameterValueFromURL("speed"); MotorControllerL298.Motor motorSide = MotorControllerL298.Motor.Motor1; if (side.CompareTo("1") == 0) { motorSide = MotorControllerL298.Motor.Motor1; } else if (side.CompareTo("2") == 0) { motorSide = MotorControllerL298.Motor.Motor2; } motorControllerL298.MoveMotor(motorSide, int.Parse(speed)); } else if (path.CompareTo("Relay") == 0) { // リレー制御 string id = responder.GetParameterValueFromURL("id"); string command = responder.GetParameterValueFromURL("command"); bool status = false; if (command.CompareTo("on") == 0) { status = true; } switch (int.Parse(id)) { case 1: relays.Relay1 = status; break; case 2: relays.Relay2 = status; break; case 3: relays.Relay3 = status; break; case 4: relays.Relay4 = status; break; } } } }} |