Windowsãªã¢ãŒãArduinoãšã¯
Windows Remote Arduinoã¯ãdigitalRead / WriteãanalogRead / Writeãªã©ã®äœ¿ãæ £ããã³ãã³ãã䜿çšããŠãWindows / Windows Phoneã¢ããªã±ãŒã·ã§ã³ããArduinoããŒãã®ããžã¿ã«ããã³ã¢ããã°ãã£ãã«ãå¶åŸ¡ã§ããWinRTã©ã€ãã©ãªã§ãã åæã«ãããŒãèªäœãUSBãŸãã¯Bluetoothçµç±ã§ã³ã³ãã¥ãŒã¿ãŒã«æ¥ç¶ã§ããŸã-ã·ãªã¢ã«ããŒã¿ãã£ãã«ãæäŸããããšãéèŠã§ãã äœããã®åœ¢ã§å ¥å/åºåããªã³/ãªãããåçŽãªã³ãã³ãã«å ããŠãI2Cãã¹ãšïŒå°æ¥ïŒãµãŒããæäŸãããŸãã

åäœããã«ã¯ã Firmataãããã³ã«ã䜿çšããã³ãã³ãã®å®è¡ããµããŒãããç¹å¥ãªããã°ã©ã ãArduinoããŒãã§èµ·åããå¿ èŠããããŸãã Windows Remote Arduinoã©ã€ãã©ãªã¯ãããŒããšã³ãã³ãã亀æããããã°ã©ãã«é«åºŠãªç®¡çæ©èœãæäŸããŸãã
Windowsãªã¢ãŒãArduinoã¯ãWindows 8.1 / Windows Phone 8.1ããã³ãŠãããŒãµã«Windows 10ã¢ããªã±ãŒã·ã§ã³ã§äœ¿çšã§ããŸãããããžã§ã¯ãã§ãããã䜿çšããã«ã¯ããããžã§ã¯ãGitãªããžããªã®ã¯ããŒã³ãäœæã ãå¿ èŠãªãããžã§ã¯ãããœãªã¥ãŒã·ã§ã³ã«è¿œå ããã®ãçŸåšæãç°¡åã§ã ïŒä»¥äžã®äŸã説æããŸãïŒã
äŸ-ã©ã€ãã¹ã€ãã
ãã®äŸã§ã¯ãé»æ°ã¹ã¿ã³ããå«ãã€ã³ããªãžã§ã³ããªã¢ããªã±ãŒã·ã§ã³ãéçºããŸãã ãã®ç®çã®ããã«ãArduino UnoããŒããš220Vã®åãæ¿ããå¯èœãªãªã¬ãŒã䜿çšããŸãã ãªã¬ãŒã¯ãããçš®ã®ããžã¿ã«åºåïŒããšãã°ã7ïŒã«æ¥ç¶ãããŠããŸãã ãŸãã人ã®ååšãæ€åºããããã«ã èµ€å€ç·ååšã»ã³ãµãŒã䜿çšããŸããããã¯ã¢ããã°å ¥åA0ã«å«ãŸããŸãã åãæ¿ãã®äŸ¿å®äžã Amperkaã®Troyka Shiledã䜿çšããŸã ã äžèšã®ãããªã§ã¯ãããŒããŠã§ã¢ã®ã»ããã¢ãããšãå®è¡äžã®ãããžã§ã¯ãå šäœã«ã€ããŠè©³ãã説æããŠããŸãã
ArduinoããŒãã«Firmataã¹ã±ãããã€ã³ã¹ããŒã«ããŸã
æåã®ã¹ãããã¯ãArduinoããŒãã«æšæºã¹ã±ãããã€ã³ã¹ããŒã«ããŠFirmataã³ãã³ããå®è¡ããããšã§ãã ãã®ãããªã¹ã±ããã¯ãã§ã«Arduino IDEã®æšæºã®é ä¿¡ã«å«ãŸããŠããŸã-ã¡ãã¥ãŒã®[ãã¡ã€ã«]-> [äŸ]-> [äŒç€Ÿå]-> [æšæºäŒç€Ÿå]ããéžæããã ãã§ãã ããã§éããã¹ã±ããã¯ãéåžžã®æ¹æ³ã§ããŒãã«ããŒãããå¿ èŠããããŸãã

ãã®æç¹ã§ããã¹ãŠã®ããŒããŠã§ã¢ãæ£ããæ§æãããŠããããšã確èªãããšäŸ¿å©ã§ãã ãããè¡ãã«ã¯ãç¹å¥ãªfirmata_test.exeããã°ã©ã ïŒãŸãã¯ããã§èª¬æããããã°ã©ã ã®ããããïŒã䜿çšã§ããŸã-ããžã¿ã«åºå7ã®ç¶æ ãåãæ¿ããããšã§é»çãå¶åŸ¡ã§ããå¿ èŠããããŸããå ¥åA0ã§ã¯ãã»ã³ãµãŒã®åšãã«åãããªãå Žåãå€0ãã以å€ã®å Žåã¯å€§ããªæ£ã®å€ïŒçŽ600以äžïŒ


Windows Remote Ardunioã䜿çšããŠãããžã§ã¯ããæºåããŠããŸã
ãããžã§ã¯ãã§Windowsãªã¢ãŒãArduinoã䜿çšããã«ã¯ãé©åãªã©ã€ãã©ãªãæ¥ç¶ããå¿ èŠããããŸãã çŸåšããã®æè¡ã¯éåžžã«æ°ãããã©ã€ãã©ãªã¯ãœãŒã¹ããã¹ãã®åœ¢åŒã§ååšããŸãã æéãçµã€ã«ã€ããŠãNuGetããã±ãŒãžã衚瀺ãããããšãé¡ã£ãŠããŸãããã©ã€ãã©ãªãå«ããããã»ã¹ã¯æ¬¡ã®ãšããã§ãã
- æ°ãããããžã§ã¯ããäœæããŸã-ãã®äŸã§ã¯ããŠãããŒãµã«Windows 10ã¢ããªã±ãŒã·ã§ã³ã«ãªããŸã
- Windows Remote Arduinoãããžã§ã¯ãã®GitHubãªããžããªãããã€ãã®ããŒã«ã«ãã©ã«ããŒã«è€è£œããŸãã
git clone https://github.com/ms-iot/remote-wiring/
éèŠ ïŒãªããžããªã«ã¯ã©ã€ãã©ãªã®ããã€ãã®ããŒãžã§ã³ããããŸãã å·çæç¹ã§ã¯ãæåŸã®ãã¹ã¿ãŒãã©ã³ãã«ã¯ãã¢ããã°ããã³ããžã¿ã«å ¥åã§äœæ¥ãããšãã«å€ãã®ãšã©ãŒãå«ãŸããŠãããããæãå®å®ããrevert-18-developãã©ã³ãã䜿çšããŸãã ããã«ããã«å®å®ããããŒãžã§ã³ããªãªãŒã¹ããããã©ã³ããæå®ããã«äžèšã®ããã«è€è£œã§ããããã«ãªãããšãæ¬åœã«æãã§ããŸãã - çµæã®ãããžã§ã¯ãããªãŒã«ã¯ãMicrosoft.Maker.Win10ããã³Microsoft.Maker.Win8_1ãã©ã«ããŒããããŸãã Windows 10ã®ãªãã·ã§ã³ã䜿çšããŸããããããžã§ã¯ãã¯Windows 8.1ã®ãŠãããŒãµã«ã¢ããªã±ãŒã·ã§ã³ããµããŒãããŸã
- Microsoft.Maker.Win10ãã©ã«ããŒã«ã¯ãMicrosoft.Maker.FirmataãMicrosoft.Maker.Serialãããã³Microsoft.Maker.RemoteWiringã®3ã€ã®ãããžã§ã¯ãããããŸãã ãããã®3ã€ã®ãããžã§ã¯ãã¯ãäœæãããããžã§ã¯ãã«è¿œå ããå¿ èŠããããŸãïŒæ¢åã®ãããžã§ã¯ããè¿œå ïŒ
- çµæã¯æ¬¡ã®ãããžã§ã¯ãããªãŒã§ãã
- ãããžã§ã¯ããæ£ããé åºã§ã³ã³ãã€ã«ããã«ã¯ãæ£ãããããžã§ã¯ãã®äŸåé¢ä¿ã確ç«ããå¿ èŠããããŸãã ãããžã§ã¯ããå³ã¯ãªãã¯ããŠãããã«ãã®äŸåé¢ä¿->ãããžã§ã¯ãã®äŸåé¢ä¿ããéžæããè¿œå ããã3ã€ã®ãããžã§ã¯ããã¹ãŠã®ããã¯ã¹ããªã³ã«ããŸãã æ®ãã®äŸåé¢ä¿ã¯æ¢ã«ã€ã³ã¹ããŒã«ãããŠããã¯ãã§ããã確èªã§ããŸããFirmataãããžã§ã¯ãã¯Serialãããžã§ã¯ãã«äŸåããRemoteWiringãããžã§ã¯ãã¯Firmataããã³Serialãããžã§ã¯ãã«äŸåããŠããŸãã ãããã£ãŠãããã«ãé åºãã¿ãã§ããããžã§ã¯ãã次ã®é åºã§ã¢ã»ã³ãã«ããå¿ èŠããããŸããã·ãªã¢ã«ãFirmataãRemoteWiringãããã³ã¢ããªã±ãŒã·ã§ã³ã
- ã¡ã€ã³ãããžã§ã¯ãã§ã[åç
§èšå®]ãå³ã¯ãªãã¯ããWindows UAPæ¡åŒµçšã®Microsoft Visual C ++ AppLocalã©ã³ã¿ã€ã ããã±ãŒãžãè¿œå ããŸãã åãå Žæã®[äžè¬ãããžã§ã¯ã]ã§ãè¿œå ããã3ã€ã®Windowsãªã¢ãŒãArduinoãããžã§ã¯ãããã¹ãŠéžæããŸãã
- éèŠïŒã¢ããªã±ãŒã·ã§ã³ãã·ãªã¢ã«ããŒããæäœããæ©èœã䜿çšããã«ã¯ãã»ã¯ã·ã§ã³ã®ã¢ããªã±ãŒã·ã§ã³ãããã§ã¹ãïŒPackage.appxmanifestãã¡ã€ã«ïŒã§å¿
èŠã§ãã
<æ©èœ>
次ã®ã³ãŒããè¿œå ããŸãã
<DeviceCapability Name="serialcommunication"> <Device Id="any"> <Function Type="name:serialPort"/> </Device> </DeviceCapability>
- Windowsãªã¢ãŒãArduinoã©ã€ãã©ãªã䜿çšããã¢ããªã±ãŒã·ã§ã³ãäœæããæºåãã§ããŸããïŒ ãã¹ãŠãæ£ããæ©èœããŠããããšã確èªããã«ã¯ãçµæã®ã¢ããªã±ãŒã·ã§ã³ãçµã¿ç«ãŠãŠã¿ãŠãã ããã
Windows Remote Arduinoã§ã¢ããªã±ãŒã·ã§ã³ãäœæãã
ã¢ããªã±ãŒã·ã§ã³ã«ã¯3ã€ã®ãã¿ã³ããããŸããé»çããªã³ã«ããããªãã«ãããããã³é»çãååšã»ã³ãµãŒã«ãã£ãŠå¶åŸ¡ãããèªåã¢ãŒãçšã§ãã ãŸããããã3ã€ã®ãã¿ã³ãMainPage.xamlã¢ããªã±ãŒã·ã§ã³ã®ã¡ã€ã³ããŒãžã«è¿œå ããŠãéã¢ã¯ãã£ãç¶æ ã«èšå®ããŸãã
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center"> <Button x:Name="on" IsEnabled="False" Content="ON" FontSize="30" Width="150" Height="150" Click="on_Click"></Button> <Button x:Name="off" IsEnabled="False" Content="OFF" FontSize="30" Width="150" Height="150" Click="off_Click"></Button> <Button x:Name="auto" IsEnabled="False" Content="AUTO" FontSize="30" Width="150" Height="150" Click="auto_Click" ></Button> <TextBlock x:Name="txt"/> <ListBox x:Name="lst"/> </StackPanel>
ãã®ã³ãŒãã¯ãããŒãžãããã©ã«ãã§ãã§ã«æã£ãŠããã°ãªããã³ã³ãããŒå ã«è¿œå ãããŸãã ãŸãããã¿ã³ããšã«ãCïŒã§ãã³ãã©ãŒé¢æ°ãäœæããŸãïŒåãã¿ã³ãããã«ã¯ãªãã¯ããããVisual Studioã®ããããã£ãŠã£ã³ããŠããïŒã
ãŸãããªã¢ãŒãArduinoãªããžã§ã¯ããåæåããŸãã ãããè¡ãã«ã¯ã MainPage.xaml.csãã¡ã€ã«ã®ãŠã£ã³ããŠã¯ã©ã¹ã§ã2ã€ã®å€æ°ãèšè¿°ããŸãã
UsbSerial usbcomm; RemoteDevice arduino;
Arduinoã«æ¥ç¶ããããã«ãconnectïŒïŒé¢æ°ãèšè¿°ããMainPageïŒïŒã³ã³ã¹ãã©ã¯ã¿ãŒããåŒã³åºããŸãïŒ
private async void connect() { var dev = await UsbSerial.listAvailableDevicesAsync(); usbcomm = new UsbSerial(dev[0]); arduino = new RemoteDevice(usbcomm); usbcomm.ConnectionEstablished += Comm_ConnectionEstablished; usbcomm.begin(57600, SerialConfig.SERIAL_8N1); }
ããã§ã¯ããŸãArduinoãæ¥ç¶ã§ããå©çšå¯èœãªããŒãã®ãªã¹ãã決å®ãã次ã«ãã®ããŒãã§UsbSerialã·ãªã¢ã«æ¥ç¶ãäœæãã次ã«ãã®äžã«RemoteArduinoãªããžã§ã¯ãããããŸããããã¯ä»®æ³Arduinoã§ãã ãã®åŸãbeginé¢æ°ãåŒã³åºããŠãã·ãªã¢ã«æ¥ç¶ãã©ã¡ãŒã¿ãŒãæž¡ããŸãã
éèŠïŒ Firmatãããã³ã«ã§äœ¿çšãããã·ãªã¢ã«ãªã³ã¯é床ã¯ãStandardFirmataã¹ã±ããã§æå®ãããŠããŸãã ããã©ã«ãã§ã¯ã57600ã«çãããããã¢ããªã±ãŒã·ã§ã³ã§ãã®é床ãéžæããŸãã é床ãäžèŽããªãå Žåãæ¥ç¶ã¯æ©èœããŸããã
ããŒããšã®æ¥ç¶ã確ç«ãããšã次ã®ããã«èª¬æããComm_ConnectionEstablishedé¢æ°ãåŒã³åºãããŸãã
private void Comm_ConnectionEstablished() { Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal,new Windows.UI.Core.DispatchedHandler(() => { arduino.pinMode(14, PinMode.ANALOG); arduino.pinMode(relay_pin, PinMode.OUTPUT); dt = new DispatcherTimer() { Interval = new TimeSpan(500) }; dt.Tick += loop; dt.Start(); on.IsEnabled = true; off.IsEnabled = true; auto.IsEnabled = true; })); }
ã¡ã€ã³é¢æ°ã³ãŒãã¯ãUIã¹ã¬ããã§èµ·åãããã£ã¹ãããã£ã³ãŒã«ã«ã©ãããããŸã-ããã¯éèŠã§ãã 次ã«ãã¡ã€ã³ã®Arduinoãã³ã®ã¢ãŒããèšå®ãã0.5ç§ããšã«loopïŒïŒé¢æ°ãåŒã³åºãã¿ã€ããŒãäœæãããã¿ã³ã衚瀺ããŸãã
èå³æ·±ãç¹ã¯ãã¢ããã°ã¢ãŒãã§ã®ããŒã14ã®ã€ã³ã¹ããŒã«ã§ãã å®éã®ãšãããArduinoã®ã¢ããã°å ¥åã«ã¯ããžã¿ã«å ¥åã®åŸã«çªå·ãä»ããããå ¥åA0ã¯çªå·14ã«å¯Ÿå¿ããŸããã¢ãŒãã¯ãå ¥åã§ã¯ãªãANALOGã«èšå®ããå¿ èŠããããŸãã
ããã§ãé»çããªã³/ãªãããã«ã¯ããã¿ã³ã€ãã³ããã³ãã©ãŒé¢æ°ã次ã®ããã«èšè¿°ããã ãã§ååã§ãã
private void on_Click(object sender, RoutedEventArgs e) { auto_mode = false; arduino.digitalWrite(relay_pin, PinState.HIGH); }
off_Clické¢æ°ã¯é¡æšã«ãã£ãŠè¡ãããŸãã ãªã¢ãŒãArduinoããŒãã®ãã³ãæäœããã«ã¯ãdigitalRead / digitalWriteãªã©ã®äœ¿ãæ £ããã³ãã³ãã䜿çšãããããšã«æ³šæããŠãã ããã
å€æ°auto_modeã¯ãã¯ã©ã¹ã§èšè¿°ããå¿ èŠãããboolåã®å€æ°ã§ãã èªåã¢ãŒããåŠçããããã«å¿ èŠã§ãã AUTOãã¿ã³ã¯ããã®å€æ°ãtrueã«èšå®ããŸãã
private void auto_Click(object sender, RoutedEventArgs e) { auto_mode = true; }
æ®ã£ãŠããã®ã¯ã«ãŒãæ©èœãå®è£ ããããšã ãã§ããã«ãŒãæ©èœã¯ãååšã»ã³ãµãŒããã®ä¿¡å·ã®ååšã«å¿ããŠã©ã³ããåãæ¿ããŸãã ããã¯ãauto_modeãèšå®ãããŠããå Žåã«ã®ã¿è¡ãå¿ èŠããããŸãã
private void loop(object sender, object e) { if (auto_mode) { arduino.pinMode(14, PinMode.ANALOG); var on = arduino.analogRead(0) > 512; arduino.digitalWrite(relay_pin, on ? PinState.HIGH : PinState.LOW); } }
éèŠ ïŒããä¿¡é Œæ§ã®é«ãæäœãè¡ãã«ã¯ãããŒããèªã¿åãçŽåã«ãã¢ãŒããå床ã¢ããã°ã«èšå®ããããšããå§ãããŸãã ããã¯ãã¹ãã§ã¯ãããŸããããå®éã«ã¯å®å®æ§ãåäžããŸãã ãŸãã以åã¯ããŒãçªå·14ã瀺ããŠããŸããããanalogReadïŒ0ïŒã䜿çšããŠããããšã«æ³šæããŠãã ãããããŒãçªå·0ãã5ã¯analogReadã«éä¿¡ãããŸãã
Bluetoothçµç±ã§Arduinoãæ¥ç¶ããã¹ããŒããã©ã³ããå¶åŸ¡ããæ¹æ³
ãã®ã±ãŒã¹ã§ã¯ãWindows Phone 10ã«é 眮ã§ãããŠãããŒãµã«ã¢ããªã±ãŒã·ã§ã³ãäœæããŸããããã ããArduinoããŒããUSBçµç±ã§ã¹ããŒããã©ã³ã«æ¥ç¶ããããšã¯ã§ããªããããããã¯åœ¹ã«ç«ã¡ãŸããã ãã ãã BluetoothããŒããArduinoã«æ¥ç¶ããŠUSBæ¥ç¶ã®ä»£ããã«Bluetoothã䜿çšããå Žåããã®ã¹ããŒããã©ã³ã䜿çšããŠã¹ããŒããã©ã³ãããã¶ã€ã³ãå¶åŸ¡ã§ããŸãã ãã®å Žåã次ã®è¡ãã¢ããªã±ãŒã·ã§ã³ãããã§ã¹ãã«è¿œå ããŠãBluetoothéä¿¡ãæå¹ã«ããå¿ èŠããããŸãã
<DeviceCapability Name="bluetooth.rfcomm"> <Device Id="any"> <Function Type="name:serialPort"/> </Device> </DeviceCapability>
Bluetoothã®äœ¿çšã«ã€ããŠã¯èæ ®ããŸãããããã¯å¥ã®èšäºã®ãããã¯ã§ãã ãã ããããã°ã©ãã³ã°ã®èŠ³ç¹ããã¯ã»ãšãã©éãã¯ãããŸãããUsbSerialã®ä»£ããã«BluetoothSerialãªããžã§ã¯ãã䜿çšããå¿ èŠããããä»ã®ãã¹ãŠã®æ§æã¯å€æŽãããŸããã
ãœãŒã¹ã³ãŒãã®å ¥æå
ç§ã®ãããžã§ã¯ãã®ãœãŒã¹ã³ãŒãã¯äŒçµ±çã«GitHubã§å ¥æã§ããŸãïŒ https : //github.com/evangelism/RemoteArduinoLamp/tree/v1.0-serial ãšã©ãŒãèŠã€ããå Žåã¯è©ŠããŠã¿ãŠãã ãã-ãã«ãªã¯ãšã¹ããå®è¡ããŠãã ããã
çµè«
Windows Remote Arduinoã¯ããªãæ°ããæªå®æã®ãã¯ãããžãŒã§ãããã³ã³ãã¥ãŒã¿ãŒã«æ¥ç¶ãããArduinoããŒãã®å ¥å/åºåãçŽæ¥å¶åŸ¡ããå¿ èŠãããå€ãã®ã¿ã¹ã¯ã®ãœãªã¥ãŒã·ã§ã³ãç°¡çŽ åã§ããããã«ãªããŸããã ãã¡ãããã¹ã±ãããæžããŠã·ãªã¢ã«ãã£ãã«ã䜿çšããŠå¯Ÿè©±ããããšã§åãããšãæåã§ããã°ã©ã ã§ããŸãããè»èŒªãåçºæããªãããã«æ¢æã®éçºãšç¢ºç«ãããæšæºïŒFirmataïŒã䜿çšããŠãã ããã
ãããžã§ã¯ãã§Windows Remote Arduinoã䜿çšããŠãã ãããäœããããããããšãããã°ãåãã§ãç¥ããããŸãã TwitterãŸãã¯VKontakteã«ã³ã¡ã³ããæžããŠãã ãã ïŒ