20
21

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Go その2Advent Calendar 2015

Day 20

Go言語でサーボモータをキュイキュイ動かす

Posted at

Goその2アドベントカレンダーの記事です。

こんにちは、 @n0bisukeです。
前回GoでIoTっぽいことしてる記事を書きました。(GoからBLE制御でPLAYBULB Candleの操作をしてみる)

今日はGobotを使ってArduinoをGo言語で制御してサーボモータを回してみます。
(ちなみにタイトルは参考サイトの表現を真似しています笑)

環境

僕の環境はこんな感じです。

  • Arduino uno
  • サーボモータSG90
  • Go1.5
  • Mac OSX 10.10

サーボモータSG90

1個400円です。 http://amzn.to/1kaoapq

参考記事を元に線をつなげてみます。

  • 茶色: GND
  • 赤: 電源
  • 黄: 信号

ということなので、Arduino側には

  • 茶色: GND
  • 赤: 5v
  • 黄: DIGITAL 3ピン (任意の箇所でOKです)

こんな感じでつなげます。

参考: Arduinoでサーボモータをキュイキュイ動かす!

接続イメージ

Mac ---(USB)--> Arduino -----> SG90

こんな感じの接続の仕方になります。

Gobotでサーボモータ制御

こちらにサンプルが載っています。

$ go get github.com/hybridgroup/gobot && go install github.com/hybridgroup/platforms/gpio

go getとinstallをしておきましょう。

MacとArduinoの接続ポートの確認

$ ls /dev/tty.*
/dev/tty.Bluetooth-Incoming-Port
/dev/tty.n0bisuke-WirelessiAP
/dev/tty.Bluetooth-Modem
/dev/tty.usbmodem1411
/dev/tty.Sphero-RRY-AMP-SPP

ここに出てくる/dev/tty.usbmodem1411が怪しいですね。この1411などの数字は自分の環境に合わせてください。サンプルで"/dev/ttyACM0"となってる部分を各自の環境に合わせて変更します。

servo.go

gpio.NewServoDriver(firmataAdaptor, "servo", "3")の3はピンの番号です。
サンプルでは3となっているので、そのまま3番ピンにSG90から伸びているオレンジ色の線をつなげてあげます。

servo.go
package main

import (
  "fmt"
  "time"

  "github.com/hybridgroup/gobot"
  "github.com/hybridgroup/gobot/platforms/firmata"
  "github.com/hybridgroup/gobot/platforms/gpio"
)

func main() {
  gbot := gobot.NewGobot()

  firmataAdaptor := firmata.NewFirmataAdaptor("firmata", "/dev/tty.usbmodem1411")
  servo := gpio.NewServoDriver(firmataAdaptor, "servo", "3")

  work := func() {
    gobot.Every(1*time.Second, func() {
      i := uint8(gobot.Rand(180))
      fmt.Println("Turning", i)
      servo.Move(i)
    })
  }

  robot := gobot.NewRobot("servoBot",
    []gobot.Connection{firmataAdaptor},
    []gobot.Device{servo},
    work,
  )

  gbot.AddRobot(robot)
  gbot.Start()
}

これでOKです。
あとは実行しましょう。

$ go run servo.go

こんな感じで毎秒ランダムにモーターが回るのが確認できると思います。

##まとめ

GPIO制御が出来ると可能性広がりますね。
何気にサーボモータを操作したのは他の言語とか含めて初めてです。
(今まではセンサー類しか使ってなかった)

結局何を作るか考えてないのでアイディア募集します笑
それでは :)

20
21
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
21

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?