Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
19
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

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

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

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
19
Help us understand the problem. What are the problem?