Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

【イベントログ】スチームパークに行って来ました

新宿クリエイターズフェスタの一パート、スチームパークに行って来ました。

STEAM PARK / 日本蒸奇博覧会


スチームパーク会場

会場の門から凝ってる感じ

最高にキマった陶器製湯桶

これまた陶器製のガジェット


真空管オブジェとか。
真空管スチームパンクに入るか否かは人によるようです。
ボクは"雰囲気をまもるなら肯定派"

自主制作映画を作ってる弥栄堂(いやさかどう)さんの展示。
iyasakado.com
twitter.com

超格好いい掛け時計屋さん

革製品

市販の銃の玩具を改造したもの

会場に居られた参加者さん
格好いいツノの部分は全部百均グッズなんだとか……
実際には針金やトイレットペーパーなどなど。
タマゲたなぁ……

実用品としても使える身につける系オブジェ


電子木琴を演奏するロボを展示してるブースさん
お腹のニキシー管が素敵

歯車時計!
精度は実用レベルが出るとか。


手回し動作、表示はデジタル時計式!
うまく動作を説明する動画があればよかったのですが

MDFでカットして使える!

飲食コーナーにはサメ肉バーガーなんてのも出てました。

【イベントログ】調布市商工祭りに出展してきました

10月8日〜9日に調布市市役所前で開催している、
調布市商工祭りに出展してきました。

ウチは「群青デザインシステムズ合同会社」さんのお手伝いという立場です。
ロボットアームTsukArmの提供をしました。

商工会の催しということもあり、展示はバラエティに富んでいます。
葬儀屋サンがいたり

囲碁の自動記録装置(カメラなし!)があったり

倉庫屋さんだったり

カイロプラティックのブースも有りました。
やってもらいましたが、案の定ガタガタな身体ですごい音がしましたね

催し物の性質上、子供向けな展示も多かったです。
ゆるキャラショー

中に入って遊ぶタイプのバルーン(ペンギン)

Adafruit HUZZAH32を動かしてみる

f:id:shuzo_kino:20171007224916j:plain
画像は公式より拝借
ESP32を手軽に使えるボードとして、Adafruit HUZZAH32*1があります。
そこそこ小型でUSB Microのポートがあり、電池用ソケットなんかもついてるちょっと嬉しい仕様。
日本では千石電商なんかで売ってます。
www.sengoku.co.jp

実際のところ

esp32系の環境を整えていればボード環境は整ってます。
f:id:shuzo_kino:20171007225015p:plain

ドライバーは珍しい奴

ドライバーが良くある奴じゃないので、
公式指定のサイトから導入します。
執筆時点ではmacOSの対応版が古いです。
Overview | Adafruit HUZZAH32 - ESP32 Feather | Adafruit Learning System
f:id:shuzo_kino:20171007225130p:plain

無事ドライバーが入ると書き込み設定ができます。
デフォでは921600とか凄まじい数字になってますが……
公式も失敗する事があると認めてるクセのある設定です。
ここは王道を征く115200にしときましょう。
f:id:shuzo_kino:20171007225145p:plain

コード

フツーにblinkでいいです。
が、デフォでLチカらしき挙動をしており心配だったため、
点灯2秒、消灯1秒にしてみました。

// the setup function runs once when you press reset or power the board
void setup() {
  // initialize digital pin LED_BUILTIN as an output.
  pinMode(LED_BUILTIN, OUTPUT);
}

// the loop function runs over and over again forever
void loop() {
  digitalWrite(LED_BUILTIN, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(2000);                       // wait for two seconds
  digitalWrite(LED_BUILTIN, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);                       // wait for a second
}

*1:ESP32 Featherとも

Arduino on ESP32 でMQTTの実験をしてみる その2:ローカルネットワーク内で実験してみる

今回はMQTTをローカルネットワーク内で実験してみます。
有名ドコロのブローカーツールmosquittoと周辺ツールを使う感じです。

実際のところ

作業環境

  • macOS 10.12.6
  • Homebrew 1.3.4
  • mosquitto 1.4.14 (build date 2017-09-30 02:42:20+0100)

環境構築

お手軽にbrew経由で。

$ brew install mosquitto

おためし

ブローカーのmosquitto本体を立ち上げ。
デフォルトポートは1883、同一LAN内で動かすためIPアドレスは192.168.XXX.YYYなものを遣います。

$ mosquitto
1507267351: mosquitto version 1.4.14 (build date 2017-09-30 02:42:20+0100) starting
1507267351: Using default config.
1507267351: Opening ipv6 listen socket on port 1883.
1507267351: Opening ipv4 listen socket on port 1883.
...

mosquittoを導入すると、publisher とsubscriber がついてきます。
有難く使わせてもらいましょう。

まずはsubscriber。
これは起動して待つ感じ。
"-h"でホスト名かIPアドレス、"-t"でトピック名指定。"-q"は送信品質です。

$ mosquitto_sub -h localhost -t sensors/temperature -q 1

次にpublisher。
今回使うオプションはsubscriberと同じです。

$ mosquitto_pub -h localhost -t sensors/temperature -m 64 -q 1
$ mosquitto_pub -h localhost -t sensors/temperature -m 250 -q 1

subscriber側で先程の結果をみると……ちゃんと来てますね。

$ mosquitto_sub -h localhost -t sensors/temperature -q 1
64
250

同一ネットワークなら手間なく相互接続可能

同一ネットワークなら、192.168.XXX.YYYな感じでIPアドレスを指定してあげると通信できます。
……なんだかIMみたいですねぇ……

$ mosquitto_sub -h localhost -t sensors/temperature -q 1
10000000000000
10000000000000
Big Brother is Wathicng you
てすとてすと
KAYU_UMA
感染者がいるぞ!

mosquittoの方にも接続してきたIPアドレス(LAN内)がでてきますね。

1507268565: New client connected from 192.168.0.8 as lens_efJHS80zrXXXXXXXXXXXXX (c1, k120).

Arduino on ESP32 でMQTTの実験をしてみる その1:そもそもMQTTって何よ

MQTTはIoT向けと持て囃されている軽量プロトコルです。
ヘッダが軽く、一度作ったコネクションを維持するためパケット数も少ない。
……なんだか以前紹介したCOAPにコンセプトが似てますね。
shuzo-kino.hateblo.jp

Websocketとの連携もできるみたいです

実際のところ

まったくMQTTが分からないとボヤいたところ、親切な解説をもらいました。


GOBOT+Arduinoでアナログデータを返すモジュールから値をとってみる

これまで、GOBOT+ArduinoでモーターやLEDをつかってみました。
とはいえ、必ずしもあったドライバーが用意されてるわけじゃありません。
アナログジョイスティックみたいなので操作したいときとか。
アナログピン用のドライバーとしてはAnalogSensorDriverというのがあるので、
これを活用します。

実際のところ

shuzo-kino.hateblo.jp
で使った" アナログジョイスティックDIP化キット[AE-JY-DIP(KIT)]"を動かす場合、
こんな感じになります。

package main

import (
	"time"
	"fmt"

	"gobot.io/x/gobot"
	"gobot.io/x/gobot/drivers/gpio"
	"gobot.io/x/gobot/drivers/aio"
	"gobot.io/x/gobot/platforms/firmata"
)

func main() {
	firmataAdaptor := firmata.NewAdaptor("/dev/tty.usbmodem1421")
	analogJoyStickX := aio.NewAnalogSensorDriver(firmataAdaptor, "0") 
	analogJoyStickY := aio.NewAnalogSensorDriver(firmataAdaptor, "1") 

        work := func() {
                // X軸
		sensor.On(analogJoyStickX.Data, func(analogData interface{}) {

			digitalData := uint8(
				gobot.ToScale(gobot.FromScale(float64(analogData.(int)), 0, 1024), 0, 255),
			)
			fmt.Println("Analog Scale X", analogData)
			fmt.Println("Digital Scale X", digitalData)
                })

                // Y軸
		sensor.On(analogJoyStickY.Data, func(analogData interface{}) {

			digitalData := uint8(
				gobot.ToScale(gobot.FromScale(float64(analogData.(int)), 0, 1024), 0, 255),
			)
			fmt.Println("Analog Scale Y", analogData)
			fmt.Println("Digital Scale Y", digitalData)
                })

        }

	robot := gobot.NewRobot("AnalogJoyStick",
		[]gobot.Connection{firmataAdaptor},
		[]gobot.Device{analogJoyStickX,analogJoyStickY},
		work,
	)

	robot.Start()
}

インターバル(例では100ミリ秒)を入れたい場合、対象の部分をgobot.Everyで囲ってやります

gobot.Every(100*time.Second, func() {
  //対象動作
)}

GOBOT+ArduinoでDCモーターを動かしてみる

実際のところ

用具

Arduino UNO R3

D3、D5*1をつかいます。

モータードライバー TA2791P

モータードライバーには秋月で調達した"TA7291P"を使用。
shuzo-kino.hateblo.jp

スクリプト

ボールねじを上げ下げするサンプルは以下の通り。

package main

import (
	"time"
	"fmt"

	"gobot.io/x/gobot"
	"gobot.io/x/gobot/drivers/gpio"
	"gobot.io/x/gobot/platforms/firmata"
)

func main() {
	firmataAdaptor := firmata.NewAdaptor("/dev/tty.usbmodem1421")
	motor1 := gpio.NewMotorDriver(firmataAdaptor, "3")
	motor2 := gpio.NewMotorDriver(firmataAdaptor, "5")

        work := func() {
		count := 0

                gobot.Every(1000*time.Millisecond, func() {
			count = count + 1
			if (count % 2) == 0 {
				fmt.Println(count, "has 1 digit")
                        	motor2.Speed(0)
                        	motor1.Speed(200)
			} else {
				fmt.Println(count, "has 2 digit")
                        	motor1.Speed(0)
                        	motor2.Speed(250)
			}
                })
        }

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

	robot.Start()
}

*1:それぞれPWM対応