自作リズムマシン兼シーケンサ「cheapseq」

RakuChordを作るにあたり、音源をもっとリッチにしたい、、と思い、音作りを試行錯誤できるデバイスを作ることにした。
そもそもRakuChordにはつまみがない、ディスプレイもない・・ ということでそれを補完できるように考えてみる。

材料はうちにあるありあわせのもの

お値段的には1000円くらいでできたのでは?

外観


動作している様子

機能

とりあえず思いつく機能を片っ端から実装している。

  • 8ステップドラムマシン x 4パターン
    • 音色は低い「ドン」と高い「チッ」のみ
  • 8ステップトーンシーケンサ x 8パターン
    • 音程は1オクターブの範囲のみ
  • 8ステップドラムパターンシーケンサ
    • ドラムパターンを並べることができる
  • 8ステップトーンパターンシーケンサ
    • トーンパターンを並べることができる
  • スピード調整
  • ピッチシフト
  • オクターブシフト
  • ドラムの減衰調整
  • トーンの減衰調整
  • トーンの変調用オシレータ周波数調整1
  • トーンの変調用オシレータの重み調整1
  • トーンの変調用オシレータ周波数調整2
  • トーンの変調用オシレータの重み調整2


とりあえずこんな感じ。
メモリは余っているのでまた思いついたら実装していきたい

cheapseqで音源を調整して、RakuChordに取り込んでいくのがよさそう。乞うご期待

GamebuinoとArduboy

GamebuinoをOLEDで作ってみた

ずいぶん前に作っていたのだけれど、ブログに書いていなかったので。

巷ではArduboyが盛り上がっていますが、Gamebuinoもなかなかイケてます。

項目 Arduboy Gamebuino
ディスプレイ OLED 128*64 FSTN 84*48
SDカード なし あり
携帯性 抜群 そこそこ

ディスプレイはArduboyが優れており、SDカードからのゲームロードという点でGamebuinoが優れています。

そこで、、

「Gamebuinoの回路で、ディスプレイをOLED128*64にしたもの」
を作ってみることにしました。

要はGamebuinoとArduboyの良いところを真似たゲーム機です。

ディスプレイはこれを使います http://www.aitendo.com/product/7273 SPIなので、ほかの液晶と同様に接続すればOK
あとは以前記事を書いた ここ http://d.hatena.ne.jp/inajob/20160322 と同じです。

また、今回は前回より小型化を目指しており、そのために単4電池1本で動くようにしました。昇圧回路が思ったより場所をとったので、単四電池2本でも大して変わらなかったかも・・

まぁそんなこんなで、完成品です。
Arduboyよりも一回り小さいディスプレイですが、反応速度やコントラストはさすがOLEDといったところです。



GamebuinoからArduboyへの移植用のライブラリを作ってみた

こうして作ったハードウェアはGamebuinoとよく似ていますが、ディスプレイが違うため、ソースコードに手を入れる必要があります。
その手を加えたものがこちら。
https://github.com/inajob/Gamebuino/blob/master/for-arduboy.md

このライブラリを使ってGamebuinoのゲームをコンパイルすることで、このハードウェア用のバイナリを作ることができます。
またおまけとして、純正Arduboy用のバイナリを作る機能も付けました。

Arduboyはついにスイッチサイエンスでも販売されるようで、これからますます流行ってくるのではないかと思います。
https://www.switch-science.com/catalog/2880/

このライブラリを使ってGamebuinoのゲームをArduboy用にコンパイルして遊んでもらえればと思います。

また、腕に覚えのある方は、秋葉原を回って、僕みたいにGamebuinoとArduboyの良いとこどりゲーム機を作ってみてはいかがでしょうか?

未踏IoT合宿(2回目)に参加してきた

未踏IoT合宿(2回目)に参加してきた

前回( http://d.hatena.ne.jp/inajob/20160606 )に引き続き、IoT合宿に参加してきました。

未踏経験者Onlyで、かつ初心者歓迎というこの合宿。
しかもとても電子工作に詳しい未踏の先輩が教えてくれる会!

僕はちょっとは電子工作できるということで、何かあればお手伝いだったりをやりつつ、日ごろ気になっていたことを周りの人たちに聞いたりしてました。

やったこと

マイクテスト

この合宿では、スイッチサイエンスのエイドステーション( https://www.switch-science.com/info/aidstation/ )を導入していて、面白そうな部品はその場で買うことができます。

ということで、マイクを使って電子楽器の演奏に幅を持たせられないかという実験を、、
と思ったけど、少しやってたらどうもマイクを壊してしまったみたい・・ つらい・・

でもオペアンプを使ったピークホールド回路のイメージはついたので、いつかリベンジしたい。

ゲーム機の修復

以前作ったゲーム機の配線が断線してしまったので、修復。

この合宿では温度調整付きのはんだごてが利用できたので、使ってみました。 (やはり僕が中学生のころ作ったはんだごてとは違う)

WifiでWebと連動するスイッチ。

冷蔵庫の納豆がなくなったら、スイッチを押してLEDを点灯させ、 そのLEDの状態がWebからも見られる
という仕組みをESP8266で作ってみました。

WebからもLEDを操作でき、その結果を本物のLEDに同期するように作ったため、実際に運用すると結構な勢いで電池を消費しそうだけれども、まぁ動いたのでよし。

Arduboyでシーケンサ

Maker Fair Tokyo 2016で本物のArduboyを購入したのですが、まったく触れていませんでした。
ということでまずはシーケンサを作ってみようということで作ってみました。

ドット絵エディタのような仕組みで、ドットを置くと音が鳴る という単純な仕組みです。
これだけでもいろいろ音楽っぽいものが作れて楽しい。


Arduboyでシーケンサその2

Arduboyのライブラリにある音を鳴らす仕組みでは(おそらく)単音のメロディしか鳴らすことができません。
そこで、RakuChordで培ったAVRのタイマーの知識を使って、Arduboyで和音を鳴らせるようにしてみました。
そんでもって、↑で作ったシーケンサの和音もならせるバージョンを作りました。

かなり音量が小さくなってしまいましたが、まぁ一応和音が出るようになりました。

まとめ

IoT合宿といいつつ、後半はArduboyのソフトを書いていたので、あまり電子工作という感じではありませんでしたが、まぁこういうのもよいかと。

初心者向けの講座としてはRaspberryPIからI2Cで温度センサーの値を読み取る というのが行われていました。

電子工作に触れてみたい未踏関係者の方はぜひ次回もあるそうなので参加してみてください。

Maker Fair Tokyo 2016に参加した

風邪をひいてダウンしてたので少し前のことになりますが・・
8/6,8/7に開催されたMaker Fair Tokyo 2016に出展者として参加してきました。

http://makezine.jp/event/mft2016/

Maker Fair Tokyoオライリーが主催する電子工作の発表会です。
僕は以前からちょいちょい参加していてまして、 まぁ大人の文化祭みたいなもんだと思ってます。

今回僕は「コネクト・ミー」http://makezine.jp/event/makers2016/connect-me/ の一員として参加しました。

コネクト・ミーとしての参加記録はこちらをご覧ください。
http://connect-me-net.tumblr.com/post/148922762373/maker-faire-tokyo-2016%E3%81%AB%E5%87%BA%E5%B1%95%E3%81%97%E3%81%BE%E3%81%97%E3%81%9F

コネクト・ミーには仕事の仲間つながりで混ぜてもらいました。
「にゃんぼっと」という植物の様子を教えてくれるいわゆるIoT的なアシスタント的なアレアレを作りました。

にゃんぼっとの中身はESP-WROOM-02です。僕は中身の処理の大雑把な実装と、電子回路のダブルチェック係(メンバーの中では電子工作歴が少しだけ長いので)をしてました。
以前 http://d.hatena.ne.jp/inajob/20160618 こんなことをやっていたので、少しだけ役に立ちました。なんでも触っておくもんですね

で、せっかくなのでブースの端のほうを少し開けてもらって、自作ゲーム機と、自作楽器を展示していました。

僕のブース(正確にはコネクト・ミーのブースの端っこ)

自作楽器はhttp://d.hatena.ne.jp/inajob/20160312 で紹介した、発注した基板を使ったものです。
ソフトウェアを改造して、「デチューン」の効果を入れてみたところ、会場のざわざわノイズに若干強くなったかなと。
見に来てくれた方にはおおむね好評でした。操作方法を説明すると、さらっと一曲引いてくださる方もいて、個人的に感動しました。
せっかく基板も作ったことだし、興味のある人に配ってみたいな なんてちらっと思ってみたり・・

自作ゲーム機は http://d.hatena.ne.jp/inajob/20160322 で紹介したものです。
このゲーム機はGamebuinoをベースとしたもので、今回の展示ではArduboyのライブラリを移植し、Arduboyのゲームを動かせるようにしていました。


Arduboy本家との遭遇

と、なんの偶然かFabxFabのブース(http://makezine.jp/event/makers2016/fabxfab/ )にArduboyのポスターが掲げてあるではありませんか!

Arduboyの掲示板でちらっと「出展するよ」みたいなことが書いてあったのに、ブースがないなぁ と思ってたのですが、どうやら代理店(?)を通しての展示・販売ということだったようです。

そして、なんとそのブースでArduboy作者のKevinに会うことができました。


片言の英語ですが、事前にArduboyのフォーラムで紹介していたりしたので、 「ああ、これがあの!」「そうです!、これです、触ってみてください」的なことを話すことができました。
オープンソースのゲーム機を真似して実装してたら、ひょんなことから海の向こうの作者さんと会えた! ということで割と感動しました。

ロボット芸人さんをArduboy売り場までご案内イベント

また、僕のtwitterのフォロワーさんもちらちら遊びに来てくれて、「あ、あなたがあのアイコンの人ですね!」みたいなオフ会的なコミュニケーションをしていました。
面白かったところでいうと
ロボット芸人の「高橋ちゃん(https://twitter.com/pokipoki121 )」さんが、思っていた以上にちゃんとした芸人さんで(失礼しました;)、ロボットと一緒に僕のブースに来てくれました。
ゲーム機にすごく興味があるということだったので、Arduboyのブースまで案内して購入を見守るというRPGのお使いクエストみたいなのを実施ました。

GamebuinoやArduboyをインターネットで見つけて、実装していたら思った以上にいろんな人と関わることができているなぁと実感できるイベントでした。

その他、気になったものたち

https://twitter.com/qx5k_iskw さんの、小さいペンプロッタ!これは僕も作ってみたい!

SDカードの中に加速度センサーを入れて、後処理でキャリブレーションを行うことができる「VirtualGimbal」 (写真が雑だった・・)

ESP8266で作ったゲーム機 WifiBoy http://makezine.jp/event/makers2016/wifiboy/

感想

趣味で電子工作をやってきましたが、会社の仲間からも「電子工作ができるヤツ」ということで、今回のようなイベントに誘ってもらえるようになりました。
また、Arduboyも成果をこのブログやフォーラムに書いていたことがきっかけで、本家の方とも挨拶することができました。
このブログやTwitterなどにこまめにアウトプットしていたことがここにきて実ったのかなと思っています。

社会人になってなかなか、学生の時ほど自由な時間が取れないですが、限られた時間で興味があることをいっぱいやって、その成果を発信していくことで、こういった楽しいイベントなどに参加できるということを改めて実感しました。
まぁ今後もゆるりとこのブログやTwitterにやっていることを書き出していきたいなと思っています。

これからもどうぞよろしくお願いします。

といったところででMaker Fair Tokyo 2016の参加レポートでした。

スイッチサイエンスのMicro:bit互換機を使ってみた

BBCが小学生に無料で配っているらしいMicro:bit互換機を手に入れたので、一通り触ってみたレビューです

本家: https://www.microbit.co.uk/

BBC-micro-bit
flickr

互換機

Micro:bitはイギリスのBBCが作ったもので、4cm×5cmの大きさのボードで、中身はCortexM0。 電池やUSBで動作するmbedな開発ボード。

Arduinoやmbedを使ったことがある人なら、そういうものの一種だと思ってもらえると。

ただし、micro:bitにはデフォルトでたくさんの入出力がついている。

  • 5×5のマトリクスLED (アルファベットも出せる)
  • Aボタン、Bボタン
  • コンパス(地磁気センサー)
  • 加速度センサー
  • BLE

特徴的な下側のエッジコネクタには、ワニ口クリップがつけやすいように大きなコネクタが5つついている(3つがGPIO、3V,GND)。小さいコネクタもそれぞれれGPIOとつながっている。

本家Micro:bitはイギリス仕様のため、日本の技適は通っていない。
そこでこの互換機です。

http://mag.switch-science.com/tag/microbit/

あのスイッチサイエンスが作っているものです。
モニターを募集していたので、ダメもとで応募したらなんと当選した。 ということで、僕の手元にMicro:bitの互換機がやってきたということです。

どうやらこれは来たる8/6, 8/7のMakerFairTokyoにて販売されるらしいので、この記事を見てほしくなった人は、予定と財布の準備をしておくとよいと思います。

Getting Started

プログラミングから実行までの流れがとてもスムーズだったので、その感動をお届けしようと思います。(micto:bitを持っていなくてもシミュレーターで遊べるので、暇な人は手順を追ってみてください)

まずはこちらにアクセス
https://www.microbit.co.uk/app/


「Create Code」をクリックすると、何でプログラムを書くか選ぶことができます。

  • JavaScript
    • JSでも書けるらしい。
  • BlockEditor
    • おすすめ、Blockyのようなビジュアルプログラミング環境でプログラムが作れます。 今回はこれを使ってみる。
  • TouchDevelop
    • まだ試していないけどMicrosoftのプログラム支援Web開発環境 これもおすすめ
  • MicroPython
    • Pythonでも書けるらしい

BlockEditorをクリックします。

それっぽい画面が出てきます。
あとは、ブロックを並べていきます。

試しにこんな感じ。

「run」をクリックすると、シミュレーションが動きます。



(実際はアニメーションしています)


よさそうなら、いよいよ書き込み。
「complie」をクリック おもむろにファイルのダウンロードが始まります。

  • Micro:bitをUSBでパソコンに接続すると、USBストレージが現れます。
  • 先ほどダウンロードしたファイルを、そのUSBストレージにコピーします。
  • 少し待ちます。
  • 書き込み完了です。



(実際はアニメーションしています)


すごい簡単!

ざっと感想

LED、加速度センサー、地磁気センサー、ボタン、BLE、などが初めからついているArduinoという感じ。
BlockEditorも簡単。とにかく手軽に始められる電子工作環境だと思いました。

Arduinoでもツールを組み合わせれば近いことはできるけれども、それがデフォルトでいきなり使えるというところがMicro:bitの強みかなと思いました。( https://developer.mbed.org/platforms/Microbit/ )

また中身はmbedなので、普通にmbedのIDEを使ってより複雑なプログラムを作ることもできるため、一通り遊んで、さらに踏み込んだことがやりたくなったときも、そのまま使い続けることができるというのも良いと思いました。

ともかく何もかも簡単なので、プロトタイピングはまずMicro:bitでやってみる、というのはありだと思いました。

ESP-WROOM-02を使って、温度湿度をWifi経由で取得してみた

これはなに?

最近じめじめしてきたので、部屋の温度・湿度を記録してみたくなりました。
せっかくなのでセンサーとWifiボードを直結して、自動的に記録をするシステムにしてみました。
Wifi経由でサーバに送信し、サーバ側ではinfluxDBとgrafanaを用意し可視化しました。


材料

最近はこういうものを作るのはすごく簡単になってます。

まずはWifiを簡単に扱えるマイコンボード
ESP-WROOM-02
http://cerevo.shop-pro.jp?pid=91592223

秋月やスイッチサイエンスでも買うことができます。
ブレイクアウトボード付きで1000円くらい。
今回はこのボードをArduinoとして利用します。

ちょうどこの前のIoT合宿で使い方を調べていたので、さくっと使い始めることができました。
http://d.hatena.ne.jp/inajob/20160606


それから温度センサ
AM2320
http://www.akizukidenshi.com/catalog/g/gM-08663/

こちらは秋月のちょっといいやつ600円
有名なものらしくArduinoのライブラリが公開されていたので、細かいことを気にせずに利用できそう。

計画

まずはESP-WROOM-02の使い方を調べます。
https://tech-blog.cerevo.com/archives/859/

配線はこれでよさそう
ESP-WROOM-02ファームウェアを書き換えることでArduino的に扱えるようになるとのことなのでそれも調べてみる。
http://deviceplus.jp/hobby/entry034/

この辺が参考になりそう。
書き込みの設定もいくつかある模様
http://qiita.com/umi_kappa/items/ced90c258a14be165291
この辺りを参考にした。

Wifiは電気を食うのでDeepSleepモードというものについても調べてみた
http://qiita.com/azusa9/items/65a5c3772c41631b5ca1


温度センサーの使いかた発見
https://www.sglabs.jp/esp-wroom-02-sensor/
http://d.hatena.ne.jp/high-sai/20160409/1460245483

さて、材料はそろったかな

試しに使ってみる。

https://tech-blog.cerevo.com/archives/859/
ここに従って回路を組み立てて、ATコマンドでWeb上のコンテンツをとってくるというのを試した。

続いてArduinoとして使えるというのを試すためにArduinoIDEからLチカのプログラムを流し込む。

最後に組み合わせ技で、Web上のファイルを読み込み、その中身に応じてLEDの光をつけたり消したりする、というのを作りました。

ここまでは肩慣らし。

設計

紙の上でばばばっと
(図中でESP-WROOM-02となっているところはCEREVOのブレイクアウトボードです。 http://cerevo.shop-pro.jp?pid=91592223

この温度センサは1本の線で制御できるらしいということで、こんな感じ。

プログラムは

#include <Arduino.h>

#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>

#include <ESP8266HTTPClient.h>

#include <DHT.h>

#define USE_SERIAL Serial

ESP8266WiFiMulti WiFiMulti;
DHT dht(4, DHT22);

void setup() {

    USE_SERIAL.begin(115200);
   // USE_SERIAL.setDebugOutput(true);

    USE_SERIAL.println();
    USE_SERIAL.println();
    USE_SERIAL.println();

    for(uint8_t t = 4; t > 0; t--) {
        USE_SERIAL.printf("[SETUP] WAIT %d...\n", t);
        USE_SERIAL.flush();
        delay(1000);
    }

    WiFiMulti.addAP("<SSID>", "<PASSWORD>");

}

String getDHTString(){
  float t = dht.readTemperature();
  float h = dht.readHumidity();
  if(isnan(h) || isnan(t)){
    USE_SERIAL.print("failed to read from dht sensor!");
    USE_SERIAL.flush();
    return "";
  }
  return "t=" + String(t) + "&h=" + String(h);
}

void loop() {
    // wait for WiFi connection
    if((WiFiMulti.run() == WL_CONNECTED)) {

        HTTPClient http;

        USE_SERIAL.print("[HTTP] begin...\n");
        // configure traged server and url
        http.begin("http://なんかエンドポイント?" + getDHTString()); //HTTP

        USE_SERIAL.print("[HTTP] GET...\n");
        // start connection and send HTTP header
        int httpCode = http.GET();

        // httpCode will be negative on error
        if(httpCode > 0) {
            // HTTP header has been send and Server response header has been handled
            USE_SERIAL.printf("[HTTP] GET... code: %d\n", httpCode);

            // file found at server
            if(httpCode == HTTP_CODE_OK) {
                String payload = http.getString();
                USE_SERIAL.println(payload);
            }
        } else {
            USE_SERIAL.printf("[HTTP] GET... failed, error: %s\n", http.errorToString(httpCode).c_str());
        }

        http.end();
        ESP.deepSleep(30 * 1000 * 1000 , WAKE_RF_DEFAULT); // 30sec 
        delay(10000);
    }

    delay(10000);
}

こんな感じです。

組み立て

はんだ付けして、空いていたZiplocに入れてみる。


外見はこんなかんじ

中はこんなの

電源は単三電池4本
基板は秋月C基板に これまた秋月のアクリルパネルをねじで固定して背面がショートするのを防いでいます。

アクリルパネル: http://akizukidenshi.com/catalog/g/gP-09853/


サーバ側

今回は自分でサーバ側も書きます。

手抜きでPHPでさっと作る。
たまたまサーバにはInfluxdbとGrafhanaがはいっていたのでそこに流し込みます。

<?php
error_log("get t=" . $_GET["t"] . " h=" . $_GET["h"]);

require_once __DIR__ . '/vendor/autoload.php';

define('INFLUXDB_HOST', 'INFLUXDBサーバ');
define('INFLUXDB_PORT', INFLUXDBポート);
define('INFLUXDB_NAME', 'DBの名前');
define('INFLUXDB_USER', 'ユーザ名');
define('INFLUXDB_PASS', 'パスワード');

$client = new InfluxDB\Client(INFLUXDB_HOST, INFLUXDB_PORT);
$db = $client->selectDB('INFLUXDB_NAME');
$points = array(
  new InfluxDB\Point(
    'temperature',
    (float)$_GET['t']
  ),
  new InfluxDB\Point(
    'humidity',
    (float)$_GET['h']
  ),
);
try {
  $result = $db->writePoints($points, InfluxDB\Database::PRECISION_SECONDS);
  #var_dump($result);
  error_log(var_export($result, true));
} catch (Exception $e) {
  error_log(var_export($e, true));
}
error_log("success");

?>

グラフだせた

いい感じ!


電池が切れた

3日目にして電池が切れました。 30s間隔で動かしてこんなもん(起動などがあるので実質1分間隔くらい)

ということで30分間隔にすると30倍持つということかな? であれば90日持つか?
これから実験してみよう

いったんまとめ

2000円くらいでセンサ+Wifiのこういうガジェットが作れるというのは、なかなか面白いです。
次はにおいセンサーに挑戦したいな と思いつつ、しばらく運用してみます。

IoT合宿に参加してきた

未踏な皆様と電子工作合宿をしてきました。
僕は参加者の中ではそこそこ電子工作をしている人だったので、レクチャーを聞きながら自分の作業をしてました。

僕のやったことですが・・

アンプ回路の確認

結構昔から作っている電子楽器「RakuChord」のアンプをどうしようかなと、、
過去作ってきたRakuChordのアンプをどうやって作ったかもう忘れてしまったので、基板をみながら、回路図を書くという「逆アセンブル」みたいなことをしていました。

ちなみにアンプはLM386を使っています
http://akizukidenshi.com/catalog/g/gI-00022/


RaspberryPiのGPIOを使って音を鳴らす

レクチャーでGPIOをやっていたので、勢い余って、高速にHigh/Lowを切り替えて音を鳴らしてみました。
出来るもんですね。

I2C液晶をRaspberryPiにつなげる

今回のレクチャーはI2Cの話だったので、僕も一緒にやってみた。
以前Arduinoにつないだことのあるaitendoの液晶をRaspberryPiから制御した。

液晶はこれを使いました。: http://www.aitendo.com/product/13239
i2cdetectコマンドの返事がなんだかおかしいけど、一応動きました。

申し訳程度に為替をインターネットから取得して表示するというのをやってみた。

555を使ってみる

マイコンを使わずに音を鳴らせてみたいということで、定番の555タイマーICを使って音を鳴らす回路を作ってみた。
その前にはLEDの点滅も作ってみた。

参考:http://pc.watch.impress.co.jp/docs/2008/1023/musashino015.htm
http://akizukidenshi.com/catalog/g/gI-08344/

キーボードを使ったおもちゃの整備

いま作成中のキーボードを使った電子工作のソフトウェア部分を改良して動作速度を向上させました。
ちゃんと出来上がったら適当にお披露目しようと思います。

ESP-WROOM-02に火を入れる

Arduinoとして使うというのをやってみた。
単純にWebサーバ上にあるファイルの中身を見てLEDをつける、消すを制御できるようなものを試作した。IoT!


ゲーム機を見せびらかす

以前作ったゲーム機を見せびらかしました。

http://d.hatena.ne.jp/inajob/20160322

感想

スイッチサイエンスの置き部品( https://www.switch-science.com/info/aidstation/ )と、電子工作に詳しい人がいる環境での電子工作合宿は、とても快適でした。
ちょっと詰まったところで、誰かに聞きに行くと、誰かしらが教えてくれるというとても良い環境でした。

あと、会場の椅子がすこし良い感じの椅子で、会議室にありがちな尻が痛い現象にならずに終始快適に作業が出来ました。

参加者の中には、電子工作は全くの素人という人もいましたが、合宿が終わる頃にはそこそこ出来るようになっているようでした。
電子工作は基本の「キ」の部分の障壁が高いため、こういう機会がないとなかなか始めることが難しいと思います。

かく言う僕も大学の頃に一晩かけて先輩に教えてもらって、そこからコツコツといろいろ(変なものを)作ってきました。

また次回の予定もあるらしいので、電子工作に興味はあるけれどもやったことのない未踏関係者は要チェック!です!