NullなNuma

自由気ままに何か書く

V4220Mを試しに使ってみた

今回はV4220MのAD/DAコンバーターの評価もどき基板を作ってみました
akizukidenshi.com

はじめに

このICの特徴としては24bitで入出力が単体でできるのと差動で入出力ができることです

回路設計

もともとV1000というエフェクター用ICの入出力としてcoolaudioでは取り扱ってるらしくそのエフェクターICであるV1000のリファレンスにアプリケーションノートが載っていました
そこでV4220Mの部分だけ抜粋しミキサーの部分を抜いて作成します
f:id:nullnuma:20180909073632p:plain
今回もKiCadで設計しました
一応信号を外部に入出力する端子やハードウェア設定するためのDIPスイッチなど多めにつけました
f:id:nullnuma:20180909074517p:plain

実装

今回もFusionPCBにお願いして作りました

淡々と部品を実装していきます
SSOP28さえ載せられればあとは簡単な半田付けだけです
オペアンプ周辺の抵抗とコンデンサ類が多くて面倒でした
f:id:nullnuma:20180909074159j:plain
f:id:nullnuma:20180909074206j:plain

ミス…

基板の主なミスとしては
ピンヘッダの電源入力のシルクが逆(致命的…)
DCジャックのフットプリントが裏表逆
ICのロジック電圧を変化できるようにし忘れた
の3つです
動作に影響はほぼしないのでそのまま続けます

動作確認!

5Vの電源入力をすればすぐ動作をはじめました
I2SのDINとDOUTを繋げば問題なく動作します
ロジックアナライザーで波形を見たところそれっぽい波形がちゃんと出力されていました
気になった点としてはICからのアナログ出力に対して大きくホワイトノイズが載ってしまっています
オペアンプの問題かと思ったのですがIC出力からすでに載っているっぽく電源由来の可能性もあります
電池で駆動させてみましたがやはりのっているため基板設計の配線の取り回しが悪かったのかもしれません
この点については少し調べていくつもりです

ArduinoでTM1640を使ってみた

3ヶ月ほど前に秋月で取り扱いが始まったTM1640という7セグメントLED用のドライバICをArduinoで使ってみた
7セグメント用LEDドライバーIC(最大16個) TM1640: 半導体 秋月電子通商-電子部品・ネット通販

TM1640

マイコンからデータを書き込んでやれば自動でダイナミック点灯してくれる便利なICです
7セグメントLED(ドット含めて8セグメント)を最大16個まで制御することができます
構造上アノードコモンでもカソードコモンでもどちらでも問題なさそうです

ドットマトリクスLED

今回は結線が面倒なので7セグメントLEDではなくドットマトリクスLEDを点灯させることにしました
ドットマトリクスLEDのピンアサインがバラバラに配置されていて結構面倒でした
結線は大して複雑ではなくSEGxはアノード、GRIDxはカソードに接続するだけであとはマイコンにクロックとデータの入力を接続するだけで終わります

ライブラリ

TM1640の制御ライブラリは一応あることはあるのですがTM1638の派生としてあって7セグメントLEDに特化したものだったのでドットマトリクスでも制御できるように作りました

クロックもデータも何もないときはHIGHにしておき送信するときは一度データをLOWに落としてからクロックに合わせてアドレスや表示データを送信します
最初そこに気づかなかったため1時間ぐらい光らねえなあと悩んでしまいました

あと一部のドットを光らせようと一列だけの書き換え時になぜかほかの列のドットまで光る現象が見られました
よくわからないので全て書き換えることで誤魔化しました

光らせた

とりあえず顔っぽいのを配列で用意して表示してみました
f:id:nullnuma:20180812172553j:plain
かわいい(*´∇`*)
8x8のドットマトリクスLEDなので8x16の場合や一応7セグメントLEDのも書いて動くとは思いますが動作確認はしてません…

サンプルコード

そのうちどっかに上げたいと思いますがとりあえず面倒なので以下に記載
MyTM1640.hとMyTM1640.cppを以下のサンプルコードの保存場所に追加してあげると動きます

#define CLKPIN 7
#define DATPIN 8
#include "MyTM1640.h"

MyTM1640 dots(CLKPIN,DATPIN,7);
void setup() {
  Serial.begin(115200);
  dots.clear();
}
  int i = 0;
void loop() {
  dots.setDot(i%8,(i%64)/8,(i<64)?1:0);
  dots.show();
  i=(i+1)%128;
}

MyTM1640.h

#ifndef MyTM1640_h
#define MyTM1640_h
#include "Arduino.h"
class MyTM1640 {
  public:
    MyTM1640(byte PIN_DAT, byte PIN_CLK, byte brightness);

    virtual void setBrightness(int brightness);
    virtual int getBrightness();
    //Dot Matrix LED
    virtual void setDot(byte x, byte y, byte dot);
    virtual void setLine(byte x, byte line);
    //7Segment LED
    virtual void setNum(int num,int x);

    virtual void show();
    virtual void clear();

  private:
    virtual void send(byte data);
    virtual void sendData(byte addr, byte data);
    virtual void sendCmd(byte cmd);

    byte _pin_dat;
    byte _pin_clk;
    byte brightness;
    byte data[16];

    byte font[16] = {
      0b00111111,//0
      0b00000110,//1
      0b01011011,//2
      0b01001111,//3
      0b01100110,//4
      0b01101101,//5
      0b01111101,//6
      0b00100111,//7
      0b01111111,//8
      0b01101111,//9
      0b01110111,//a
      0b01111100,//b
      0b00111001,//c
      0b01011110,//d
      0b01111001,//e
      0b01110001 //f
    };
};
#endif

MyTM1640.cpp

#include "MyTM1640.h"
#include "Arduino.h"

MyTM1640::MyTM1640(byte PIN_CLK, byte PIN_DAT, byte brightness)
{
  this->_pin_dat = PIN_DAT;
  this->_pin_clk = PIN_CLK;
  this->brightness = brightness;

  pinMode(PIN_CLK, OUTPUT);
  pinMode(PIN_DAT, OUTPUT);
  digitalWrite(PIN_CLK, HIGH);
  digitalWrite(PIN_DAT, HIGH);

  sendCmd(0x40);
  sendCmd(0x8f);

  clear();
};

void MyTM1640::setBrightness(int brightness) {
  sendCmd(0x88 | min(7, brightness));
}

int MyTM1640::getBrightness(){
  return min(7, brightness);
}

void MyTM1640::setDot(byte x, byte y, byte dot) {
  if ((0x1 & dot) == 1) {
    data[x] |= 0x1 << y;
  } else {
    data[x] &= ~(0x1 << y);
  }
}
void MyTM1640::setLine(byte x, byte line) {
  data[x] = (byte)line;
}

void MyTM1640::show() {
  sendCmd(0x40);
  digitalWrite(_pin_dat, LOW);
  send(0xC0);
  for (int i = 0; i < 16; i++) {
    send(data[i]);
  }
  digitalWrite(_pin_dat, HIGH);
}
void MyTM1640::setNum(int num,int x) {
  MyTM1640::setLine((byte)num,MyTM1640::font[x]);
}

void MyTM1640::send(byte data)
{
  for (int i = 0; i < 8; i++) {
    digitalWrite(_pin_clk, LOW);
    digitalWrite(_pin_dat, data & 1 ? HIGH : LOW);
    data >>= 1;
    digitalWrite(_pin_clk, HIGH);
  }
}

void MyTM1640::sendCmd(byte data) {
  digitalWrite(_pin_dat, LOW);
  send(data);
  digitalWrite(_pin_dat, HIGH);
}

void MyTM1640::clear() {
  sendCmd(0x40);
  digitalWrite(_pin_dat, LOW);
  send(0xC0);
  for (int i = 0; i < 16; i++) {
    send(0x00);
  }
  digitalWrite(_pin_dat, HIGH);
}
void MyTM1640::sendData(byte addr, byte data) {
  //Fixed Mode
  sendCmd(0x44);
  digitalWrite(_pin_dat, LOW);
  send(0xc0 | addr);
  send(data);
  digitalWrite(_pin_dat, HIGH);
}

追記

2018/08/24
7セグメントLEDで表示させてみたところフォントのビットの上下が逆だったのと関数名setCharはどう考えても数値をセットしてたのでsetNumに修正しました
種類にもよるかもしれないが最高輝度で光らせていると電流不足か何かで落ちた…
MacBook Proからの給電なのでその影響かも?

Maker Faire Tokyo 2018

今年のMaker Faire Tokyo 2018ではTech Tech Boxとして出展側で行くことになりました
anemos-poiを知ってもらうということで実演を交えつつ展示を行いました

展示はこんな感じ
1代目から現在作成していた4代目まで並べて見てもらいました
f:id:nullnuma:20180806203008j:plain

初日は手に持って左右にふるだけの展示にしていましたがやはり良さが伝わりづらいということで2日目は安全に配慮して振り回して展示していました
名刺は200枚ほど用意したのですがほぼすべて配ることができました

ポイを知らなかった人から製品として販売されているグラフィックポイを使用しているという方まで様々な方の意見を聞くことができてとてもよい機会となりました
実際に見てもらってその感想を聞けることはとても新鮮味がありよかったです
お話の中ではやはり「製品化はどうなんですか?」と聞いてくださる方が多くいらっしゃってとても嬉しかったのですが、外装やバッテリーに苦戦していて早急な改善を行い製品化まで持っていければなと考えています
ただ量産を行うにあたっても基板の実装などなかなか大変なところもあるので難しいですね…

最後に

実際に見に来てくださった方々本当にありがとうございます

グラフィックポイ製作(6)

中身は一応完成したので今回は外装です

外装の素材はアクリルパイプを使います
表示部から電源部、バッテリーもすべてパイプの中に入れます

バッテリーについては普通のリポバッテリーはたいてい四角い形なので相性が悪いと考え、18650サイズのものを使いました
外形24mm厚さ2mmのアクリルパイプの中に18650を突っ込んでプラグを出して接着します
蓋はレーザー加工機を使って丸く切りました
とても便利!
f:id:nullnuma:20180803211337j:plain
f:id:nullnuma:20180803211328j:plain
一応完成!
f:id:nullnuma:20180803211332j:plain
ただしanemos-poi本体の装着部分は外形28mm厚さ2mmのアクリルパイプを使ったのでぴったりすぎて入りません
バッテリー外装を削りました…
結構削らなきゃいけなかったので疲れました
f:id:nullnuma:20180803211600j:plain

表示部分はスイッチの部分だけ穴を開けて突っ込むだけです
f:id:nullnuma:20180803211851j:plain
f:id:nullnuma:20180803211854j:plain

そのままだとタクトスイッチが平たいので押せないためビーズを入れてグルーガンで止めてみました
なんかよさげ
f:id:nullnuma:20180803211933j:plain

こんな感じで外装は完成しました
ただし振り回すための付け根の部分のうまい方法が思いつかないので保留中
思いつき次第作りたいと思います

明日明後日の4,5日はMFT2018で展示するので見に来てください!
Tech Tech Box | Maker Faire Tokyo 2018 | Make: Japan

グラフィックポイ製作 (0)
グラフィックポイ製作 (1)
グラフィックポイ製作 (2)
グラフィックポイ製作 (3)
グラフィックポイ製作 (4)
グラフィックポイ製作 (5)
グラフィックポイ製作 (6)
グラフィックポイ製作 (7)

グラフィックポイ製作(5)

大学の授業であまり手をつけられなかったため
前回の更新からめちゃくちゃ空いてしまいました

まずはじめに

Maker Faire Tokyo 2018に出展することになりました
makezine.jp
時間があればぜひ見に来てください

データ作成ソフトウェア

グラフィックポイに使うデータは独自形式で用意することにしました
(後日余裕があれば形式について書きたいと思います)
そのため専用のエディタが必要になります

ソフトウェアは以下の2種類あります

  • 画像データ作成
  • タイムラインデータ作成

(タイムラインは画像の表示順)

今回はどちらもWebアプリという形にしました

画像データ作成

ドット絵のエディタ風に作ります
全体像はこのような感じです
f:id:nullnuma:20180731213904p:plain

画像サイズを指定したあとドット絵を描くためのカラーパレットとスポイトを使ってドット絵を描きます
他のソフトウェアで描いたものを取り込むための画像ファイルの読み込み機能もあります
またあとで使用するため名前をつけて保存することや保存した画像をロードする機能もつけ最低限必要なものは用意できました

タイムラインデータ作成

タイムラインのデータを作成できるツールです
f:id:nullnuma:20180731214324p:plain

先程作成した画像データを選択して回す方向によって表示の向きが変わるのでその順序をしていできるようにし現状では3段階で表示速度を切り替えることができます
最後に名前を上部のフォームに入力してセーブを押すことで画像、タイムラインデータが入ったファイルを保存できます

アップロード

グラフィックポイがWi-FiのAPとして立ち上がるのでそこにアクセスしてアップロードできるようにします

まとめ

最低限必要なツールは作成することができたのでグラフィックポイの外装と制御プログラムを書くことが今後の予定です
Maker Faireで出展するため今週末には形にしなければならないので急ピッチで作業を進める予定です

グラフィックポイ製作 (0)
グラフィックポイ製作 (1)
グラフィックポイ製作 (2)
グラフィックポイ製作 (3)
グラフィックポイ製作 (4)
グラフィックポイ製作 (5)
グラフィックポイ製作 (6)
グラフィックポイ製作 (7)

Macbook Proの足

現在メインで使用しているラップトップはMacbook Pro late2013で購入から4年半ほど経過した。

流石にこれだけ使っているといろいろガタが来ているところがある。
バッテリーであったり、液晶パネルのヒンジ…

そして最近壊れたのが背面のゴム足である
f:id:nullnuma:20180729113339j:plain
前々から隙間が空いてきていたためそろそろかなと身構えていたがいざ取れると悲しいものである。

AppleStoreに修理に出すと背面のパネルごと交換らしくいいお値段がするのでその方法はパス…
昔の型であれば安く正規品が手に入るらしいが…
MacBook Pro:下部ケースのゴム足交換の在宅自己交換修理 (DIY) 手順 - Apple サポート

AmazonやAliexpressでゴム足を調べて付け替えてもいいが、型番があっているかなど調べるのが面倒であったため適当なゴム足をつけることにした。

秋月電子通商で取扱のあった3M製のバンポンをつけてみました。
3M製なのでそれなりに強い接着テープだと思います。
(2018/07/29現在取り扱いがない?…)
f:id:nullnuma:20180729114035j:plain
以前のゴム足よりは出っ張っているがまあ悪くない感じになりました。
f:id:nullnuma:20180729114108j:plain

1週間ほど使ってみましたがめちゃくちゃ強く接着されていてリュックサックに入れるときに引っかかって取れたりするかと思っていましたが全くそのようなこともなく驚きました
8個で120円なのでコスパもよく満足です。

(以前のゴム足より出っ張っているので少し放熱効果も期待できるかも?...)

レーザー加工機製作(8) 外装の製作

とりあえず動くようにはなったので
まともな外装を作ります

材質

本当は鉄板で作るのがベストなのでしょうが
鉄板だと高いのはいいとして
重くて運べなくなるのが辛いので
今回は2.5mmのMDF板を使います

ネットで注文しました
MDF 2.5 x 920 x 1830mm3枚を購入するとともに
カットもお願いしました
板とカットはトータル1800円ぐらい
送料が3000円で高かったです…
f:id:nullnuma:20180514110700j:plain

取り付ける

全部の側面にMDFを貼り付けて
電装部品なども取り付け直しました
f:id:nullnuma:20180514110754j:plain
XY軸につながる配線はケーブルキャリアに
まとめて散らからないようにしました
XY軸のステッピングモーターに配線と
消炎用のエアーチューブを通しましたが
ギリギリで入りきりました
f:id:nullnuma:20180515134753j:plain
f:id:nullnuma:20180515135050j:plain

マグネットを取り付けて開閉できるようにしています
f:id:nullnuma:20180515134802j:plain

エアーの取入口と電源のインレット
f:id:nullnuma:20180515135059j:plain

とりあえず完成

外装はまともな形になりました!

実際に動かしたところ

ダイソーで買った5.5mmのMDF板を切断してみた
f:id:nullnuma:20180515135530j:plain
Inkscapeで書いた文字を刻印してみた
f:id:nullnuma:20180515135534j:plain
エンドスイッチ用の治具も作ってみた
f:id:nullnuma:20180515135543j:plain

まとめ

簡単に好きな形にすぐきれるというのは
とても便利だと感じました
今後の予定は調整がまだ甘いので詰めるのと
今使ってるソフトウェアでは機能が不十分だと感じたので
他のソフトウェアも試してみたいと思います