WDD お店を繁盛させる看板を.NET MFでつくる


4/24,25のWindows Developer Daysで展示されていたお店を繁盛させる看板、覚えてますか?

あの看板の、旗の上下とLED点灯は、.NET Micro Framework(Fez Panda)+自作ハードウェアで制御されています。同じ様な工作を手軽に試してみたい方には、.NET Gadgeteerをお勧めします。

デバイスドライバーズのご協力により、看板開発用キット化してもらったので、それをスタート地点にしてください。

http://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の家庭用電源で点滅する魅惑の電飾を調達し、リレーモジュールで制御するのも面白いでしょう。

制御プログラム開発を始めるにあたっては、私の過去のブログ投稿を参考にしてください。

開発環境の準備ととっかかり

モーター駆動制御方法

ネット越しの制御方法

 http://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;
                }
            }
        }
    }
}

Comments (0)

Skip to main content