Make Local Happiness

自分の幸せは自分で作る!!!

create-react-appを使ってElectronをMacでビルドしてRaspberryPiで動作させる

f:id:iwate_takayu:20180212175359p:plain

みなさんはRaspberryPiでElectronのアプリを動かしたことがありますか? RaspberryPiは小型のPCとしてはかなり優秀で、「RaspberryPi3 model B」はメモリを1GB積んでCPUも4コア入っているます。 しかし、そんな高スペックなRaspberryPiでも簡単に動かすことができないのがElectronです。

Electronとはクロスプラットフォームで動作するアプリを作るためのフレームワークですが、 RaspberryPiでも動作させることができます。 以前にRaspberryPiでElectronアプリを自動起動させるための記事も書いたことがあるのですが、 これを試した皆さんならお気づきかと思いますが、RaspberryPi上でのElectronのbuildは時間がかかり過ぎるのです。

ganeza.hatenablog.com

私の開発しているシステムはMacでBuildを実行した場合は数分で終わります。

しかし、RaspberryPiでは3時間もかかるのです。

正直3時間待って本番用のビルドがコケた際には本当に時間が無駄ですし、 トライアンドエラーがなかなかできないので困っていました。

そこでMacでRaspberryPi用にビルドできないかと考えました。 普段GUIの開発はReactを利用しているので、 今回はcreate-react-appを使ってRaspberryPi用にElectronアプリをビルドし起動させるところまで行いました。

create-react-appでElectronアプリを起動する

※ 事前にcreate-react-appのインストールをしてください

こちらの記事を参考にelectron-packagerのインストールまで進めてください

qiita.com

RaspberryPi用にビルドする

Electronアプリをビルドする方法

Electronをpackage化するライブラリは2種類あります。 electron-builderを利用した場合は、インストール型のアプリができます。 今回は手軽に実行したら、そのままアプリが起動する方が嬉しいので、electron-packagerを利用します。

package.jsonを修正する

packageというコマンドを追加します。 package化したフォルダはreleaseフォルダに格納されます。 RaspberryPiのアーキテクチャuname -aで確認することができます。

  "scripts": {
    "package": "electron-packager . electron-react-app --platform=linux --arch=armv7l --overwrite --prune=true --out=release"
  }

RaspberryPiで実行する

$ yarn run build
$ yarn run package

$ zip -r release/electron-react-app-linux-armv7l.zip release/electron-react-app-linux-armv7l/
$ scp release/electron-react-app-linux-armv7l.zip pi@raspberrypi.local:/home/pi/

# connect raspberry pi
$ ssh pi@raspberrypi.local
$ unzip electron-react-app-linux-armv7l.zip
$ cd electron-react-app-linux-armv7l
$ chmod +x electron-react-app
$ DISPLAY=:0 ./electron-react-app

まとめ

Macでbuildしたアプリをraspberrypi上で起動できるので開発が捗るようになりました。 今回作成したリポジトリはこちらになります。

github.com

みなさまよいElectron開発ライフを!

はじめての読書会で「開眼!Javascript」を読んだ

f:id:iwate_takayu:20180202001455j:plain

最近会社のメンバーと読書会をはじめました。 週に1回カフェで30分で1章から3章ほど読み進め、残りの30分で呼んだ部分で意見を言い合うというのをやっています。

これが意外と面白いです。

今回読んだ「開眼!JavaScript」はJavaScriptの言語仕様について解説してくれている本のため、 私にとっては少し退屈で最後まで読めるか心配になる本だったのですが、
時間が決まっていること、意見を言い合うことで楽しく進めることができ、合計5回で読み終えることができました。

呼んだ中で気づいた点について書いていきます。

作者はCodyさんと気づく

本書にはCodyオブジェクトやクラスが多様されるので、嫌でもCodyさんが著者と気づきます。

第1章 JavaScriptオブジェクト

コンストラクター関数という呼び方を知らなかった

デフォルトのプロパティとメソッドを持ったオブジェクトを生成するためのクッキーの抜き型のようなものです。

※ 以下のコードは本書とは異なり、ES6に対応させた形で記載しています。 アロー関数ではコンストラクタとして使用はできないため、functionを使用しています。

const Person = function(living, age, gender){
  this.living = living;
  this.age = age;
  this.gender = gender;
  this.getGender = () => { return this.gender; };
};

const cody = new Person(true, 33, 'male');
console.log(typeof cody);
console.log(cody);
console.log(cody.constructor);

null, undefined, 'string', 0, true, falseはオブジェクトではなくプリミティブ型

プリミティブ型は値そのものが保存される。 オブジェクトの場合は、参照が渡されるため参照元が変更されると参照先も変更される。 よく、オブジェクトを更新する場合に、変数を引き継いた場合に、 値が参照渡しになっている場合があるので注意です。

オブジェクの変更ではObject.assignで新しくオブジェクトを作成、 配列の場合はmapで新しい配列を作成すると安心です。

// プリミティブ型の場合

let myString = 'foo';
let myStringCopy = myString;
myString = null;

console.log(myString, myStringCopy); // 出力:'null "foo"'

// オブジェクトの場合

let myArray = [0];
let myArrayCopy = myArray;
myArray.push(1);

console.log(myArray, myArrayCopy); // 出力:'[0,1] [0,1]'

第2章 オブジェクトとプロパティを扱う

ブラケット記法

※ブラケット記法というのを初めて知りました。

const cody = new Object();
cody.living = true; // ドット記法
cody["living"] = false; // ブラケット記法

delete演算子でグローバルオブジェクトが削除できるわけ

delete演算子はプロパティを削除することができる。 そのため、varやconst、letで宣言した変数は削除できないが、 宣言せずに定義した変数はグローバル(this)のプロパティとなるため、deleteで削除できる。

const a = 1;
b = 1;

delete a; // 削除されない
delete b; // 削除される

第7章 スコープとクロージャ

classではクロージャーが実装できない? functionでクロージャーは作成できるのですが、 classを使ってクロージャー(内部に隠蔽する変数を保持する実装)を作成する方法はなさそうです。 ※ もし実現できる方法あれば教えてください

function版

const Foo = function() {
  let count = 0;
  
  this.add = () => {
    count++;
  }
  this.get = () => {
    return count;
  }
}

const a = new Foo();
const b = new Foo();

a.add();
a.add();
a.get(); // 2
a.count; // undefined

b.get(); // 0

class版

① functionと同じように書く  ⇒ 定義できない。そもそもエラーになります。

class Foo {
  let count = 0;

  get() {
    return count;
  }
  add() {
    count++;
  }
}

コンストラクター内でcountを定義する  ⇒ addやgetのメソッドからcountが参照できない

class Foo {
  constructor() {
    let count = 0;
  }
  
  get() {
    return count;
  }

  add() {
    count++;
  }
}

const a = Foo();
a.get() //エラーになる

コンストラクターのメンバー変数にcountを入れる  ⇒ privateな変数ではなくなる  

class Foo {
  constructor() {
    this.count = 0;
  }
  
  get() {
    return this.count;
  }

  add() {
    this.count++;
  }
}

const a = Foo();
a.add()
a.get() // 1
a.count // 1

まとめ

普段の業務では気づいているんだけど、 わりとなんでそうなっているのかわからないような処理が明文化されているので頭の整理になりました。

最近は綺麗にコードが書けるように意識していたので、ちょうどいいタイミングで読めてよかったです。読んでいて沢山の気付き与えてくれ、議論も活発になり後半は30分以上かかるときもありました。

読書会だからこそ読めた本だと思うので、 これからもちょっととっつきづらそうな本は読書会のテーマで乗り切ろうと思います。

ValueDomainで取得したドメインを使い無料でメールアドレスを作成できるMailgunがすごい

みなさんは独自ドメインのメールアドレスをどうやって作成していますか?

今まで、Wordpressでサイトを作る際には、ロリポップを使っており、 ロリポップにはメールサービスが付いてきたので良かったのですが、 例えばFirebaseを利用しサービスを作るさいにはメールアドレスはどうやって取得しようと悩んでいました。

有料であれば、GoogleAppsを利用するのが一番簡単で普段使いなれたメール環境が手に入るのでいいのですが、 できれば無料でほしいと思い探したところ、、

Mailgun」を見つけました!

Maingunとは?

https://www.mailgun.com/

メールの送受信をAPIで提供しているサービスで月に10000件まで配信無料です。 独自ドメインの設定ができ、Routesという受信したメールアドレス毎に操作を決める機能とメーリングリスト機能があるので、 独自ドメインのメールアドレスが作成できて、そのアドレス宛のメールは別のメールに転送することができます。

これが無料なので結構すごいですよね。

独自ドメインのメールアドレスを作成する

Maingunに登録する

こちらから登録を行います。 ※ カード情報は登録しなくても使えます。

https://signup.mailgun.com/new/signup

ドメインの設定

登録完了後、「Add A Domain」のボタンが表示されるので押して、ドメイン設定画面に遷移します。

f:id:iwate_takayu:20180130233255p:plain

自分のホームページのtakayuki-ito.meのアドレスを作っていきます。

f:id:iwate_takayu:20180130233742p:plain

登録するとDNSレコードの修正箇所を教えてくれるので、ValueDomainの画面から以下のように入力していきます。

f:id:iwate_takayu:20180130234311p:plain

txt takayuki-ito.me v=spf1 include:mailgun.org ~all
txt mailo._domainkey.takayuki-ito.me k=rsa;p=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
mx mxa.mailgun.org. 10 takayuki-ito.me
mx mxb.mailgun.org. 10 takayuki-ito.me
cname email.takayuki-ito.me mailgun.org.

f:id:iwate_takayu:20180130234913p:plain

DNSの設定が終わったら、再度Mailgunの画面から「Domain Verification & DNS」のリンクをクリックし、 設定が完了しているかのチェックに進みます。

f:id:iwate_takayu:20180130235409p:plain

「Check DNS Records Now」のボタンをクリックして、TXTとMXのレコードの横にあるマークが緑になれば完了です。

f:id:iwate_takayu:20180130235802p:plain

Routesの作成

「info@takayuki.me」に送信されたメールを私の普段使用しているメールアドレスに転送する設定をしていきます。

Expression Type:Match Recipient
Recipient:info@takayuki-ito.me
Actions:Forward
     自分のメールアドレスを記載

f:id:iwate_takayu:20180131001439p:plain

  以下の設定で登録をして完了です。
これで独自ドメインのメールアドレスが作成できました。

最近お金について考えることが増えてきた

f:id:iwate_takayu:20171125095949j:plain

先週末はCoincheckの騒動もありで、騒がしい週末でしたね。 実は私もNEMは少しばかりですが持っていたので、 Coincheckどうなるんだろうと思っていました。

結果的には結構稼いでいたのかな? 自社保有の資金で払えるようです。

私の資金が少しでも戻ってくるのもそうですが、 仮想通貨の取引所の中でCoincheckスマホのアプリが使いやすかったので倒産しないでよかったです。

ここ最近は人と会ったときには仮想通貨の話しが出ることが多く、 その流れでNISAや投資の話しをすることが増えてきました。

年齢も徐々に上がってきたこともあると思いますが、 投資に回せるお金と時間が増えてきたってことかもしれないです。

私自身も社会人になった頃から、申し訳ない程度に株には手を出してはいました。
ただ、ロクに調べずに単純に自分が使っているサービスを作っている会社の株を買っていたので、 そんなに儲かるはずもなく、特に知っているけど興味がそれほどあるわけではないという感じでした。

それが、最近はビットコインが2年で約30倍に値上がりしたり、 「億り人」という投資によって1億円もの利益を得た方の話しがあると、、、 興味がでてくるんですよね。

けしからんやつなんです。
とりあえず、「仮想通貨」と「つみたてNISA」を利用してみようと思っています。

仮想通貨は利益があっても、税金の割合が高く、 約40%利益から持って行かれるので、 まずは非課税枠のある、つみたてNISAの方を優先してやるべきですね。

「つみたてNISA」は毎年で40万円まで非課税投資枠があり、 20年間は投資から得られる分配金や譲渡益が非課税になるという制度です。 なので今までのNISAで非課税投資枠だった120万円よりも一時的には減ったように見えますが、 合計の非課税投資枠はつみたてNISAは800万円(20年)でNISAは600万円(5年)とつみたてNISAの方が増えています。

制度については詳しくは、金融庁のHPをご覧ください。 www.fsa.go.jp

何に投資するかですが、いかにも楽できそうなこちらの本を読みました。
押し売りしない感じなんですが、ちゃんと銘柄は載せておいてくれる本なので、行動に移しやすいと思いました。

実際は投資の時間よりも個人サービス開発していたいので、 アクテイブファンドよりも勝率の高いと言われるインデックスファンドもしくはETFからやってみようと思います。 アクティブファンドの約6割〜7割はインデックスファンドには勝てないそうです。

会社作って稼いでお金に不自由しない暮らしをしたかったのですが、 現実では銀の弾丸はないのでコツコツ行こうと思います。

高校時代に図書館で本を勧めてくれた人がいた

f:id:iwate_takayu:20160109143859j:plain

高校時代私は友達が同じクラスにほとんどいなかったので、休み時間はいつも暇を持て余していた。

そんな時にたまたま図書館に立ち寄った時に、
そっと声を書けられた。

「どんな本を探しているんですか?」

いきなり話しかけられたので、驚いたが、
その人は図書室の先生のような人で、授業で何かを教えることはなく、
いつも図書室にいた。

特に暇を持て余していただけなので、
適当に「オススメの本を教えてください。」と言った気がする。

図書室の先生は、作者が「乙一」という結構鬱々とした本を書く方の小説を1冊紹介してくれた。

今まで呼んだ本は、情景の描写が分かりづらかったり、主人公のセリフが少なかったり、自分とはかけ離れた人の話しで興味がわかなかったりと、続かなかった。

その昔、親から進められた「水滸伝」や「十五少年漂流記」はいい話なのかもしれないが、ほとんど最初の5ページを読んで、そのまま本棚に返してしまった。

紹介してもらった「失われた物語」は短編集で、 主人公はだいたい性格が根暗で小学生から高校生で自分と重ねて読み進めることができた。 しかも30分もあれば1つの話を読み終わることができたので、あっという間に1冊が読み終わった。

話もミステリー小説に近く、いつも謎があり、
最後にどんでん返しで予想もつかない展開で本当に読んでいて楽しかった。

それから、図書室に行くたびに、本を進めてもらうようになった。
図書室の先生が進めてくれる本は大体面白かった。
ラブストーリーから実話、サスペンスまで色んな本を教えてくれた。

そのうち、自分の中で好きな本は何なのかわかってきて、賞を取っているとか、表紙が綺麗とかではなく、作者が重要で1冊でも好きな本があれば、同じ作者の別の作品は見てみたいと思うようになった。

なので、図書室にない本があれば、
買ってもらうようにお願いすることも増えた。

一番よかったのが、本の感想を聞いて「こんな本も読んでみたら」と教えてくれたこと。

今まで暇な時間は本を読むことになったので、楽しい時間が増えた。
授業中に本を読むこともしばしば出てきて、怒られたこともあった。

それほど本を読むことが楽しかった。
自分を取り巻く環境や状況とは違う人生があることを知ることができたので、もっと違う人生を歩みたいと深く思えた。

高校時代から考えると、大分マシな人生を送ることができていると思う。

今でも本を読むのが習慣になっているのは、 高校生の時に本を紹介してくれた人がいてくれたおかげだと、いつも感謝している。

今は近くに本を勧めてくれる人がいないのを少し寂しいと思う。
家から近くの図書館に行っても貸出と返却を機械のように作業する人しかいない。  
   
 
年末に、高校の卒業生として、キャリアについて1,2年生に話しをする機会があった。
講演が終わった後聞いてみたら、まだ図書室には司書の先生がいて、 POPを作ったりビブリオバトルを紹介していると言っていた。

実はそんな事もあり、久々に高校時代のことを思い出して書きました。

2017年振り返りと2018年の抱負

f:id:iwate_takayu:20170703175545j:plain

年末からお正月にかけて私の実家と嫁の実家であまりにも飲んで寝てを繰り返していたら、 いつの間にか年を越していました。
振り返りをして、気を引き締めていきたいと思います。

※ 写真はお正月ではなく、ハネムーンでスペインに行った時の写真です。

ざっとハイライト

会社の休業と転職、結婚式と公私共に色々あった1年だった気がします。

  • 1月 ロッジに入り浸る(後輩とプログラミングしつつボードゲームにハマる)
  • 2月 チイキットを休業にする
  • 3月 医療系ベンチャーに転職、IT部門の立ち上げを担当
  • 6月 結婚式をやる
  • 7月 ハネムーン(パリ・スペイン)に16日間滞在する
  • 8月 なぞときBINGOの商品化
  • 10月 企画していた事業がニュースになる
  • 11月 スイスに出張

なぜチイキットを休業したのか?

2017年はチイキットを休業する決断をしました。
理由としては、面白くなかったからです。

自分でサービスを作ることを2017年の目標にしていましたが、受託開発をしている中で開発する意欲が段々薄れ、最後まで作り切ることができませんでした。
今まで応援してくれた人を思うと本当に申し訳ないです。

私はどうやら誰かと競い合う、切磋琢磨することに楽しさを感じるということがわかってきました。
かなりの飽き性で1人だと何をやっても徐々につまらなくなってしまう。
1人でサービスを細々とやっても貴重な時間を無駄にしてしまうのではと思い、転職することに決めました。

ネムーンどうだったのか?

ネムーンは最高でした。 フランスとスペインにそれぞれ7日間ずつ滞在しましたが、 もう一度いいますが最高でした。

あれほど、美味しいものを食べて、飲んで、素敵なものを見てを繰り返したことはないです。 本当に行ってよかったです。

パリで行ったレストランはよかったです。 「恋愛適齢期」という映画を昔見たことがあり、その映画の中で主人公とヒロインがパリで再会したお店です。「この世で最高のグリルド・チキンがあるの」のセリフがあるのですが、私はタルタルステーキを食べましたw

f:id:iwate_takayu:20180107181616j:plain

f:id:iwate_takayu:20170701194816j:plain

スペインのバルセロナでは、バルで毎日のように飲み歩きました。 天気が最高で毎日快晴で雲ひとつなく、青々した空で気分がよかったです。

f:id:iwate_takayu:20170709150048j:plain

サグラダ・ファミリアに行く日に嫁が体調を崩してしまい、 行けなかったので、2019年頃にまたバルセロナに行きたいです。 今年は近場のタイかバリでビーチでのんびりしたいです。

チイキット再開しないの?

すぐには再開はしないです。 今はネタ探しの時期というのと、今IT部門の立ち上げができ軌道に乗せることができたら、 その部門で独立したいと考えています。※社長も知ってる

個人的な活動を少し話すと、こちらの記事でも書きましたが、 なぞときBINGOという通常のビンゴを謎解きを使ってアレンジしたものを自分の結婚式の2次会で披露したのですが、今年の8月に販売を開始しました。

ganeza.hatenablog.com

少しづつ売れ始めていて、 まだ確定申告が必要ないくらいですが、 もの作り楽しいなと思えるくらいの商品にはなってきました。

まだ荒削りで配送とか仕組み化できていないですが、 量産できるようにはなってきました。 今年は別パターンなども作っていこうと思っています。

まとめ

2017年は色々あったのですが、 2015年、2016年を思うと少し守りに入っていた気がしました。 仕事的にはチイキットやっていたときよりも心に余裕ができたので、 結婚式やハネムーンなどプライベートが充実していたのですが、 上手く事業を進められない、もどかしい1年だった気がします。

個人的なサービスで「なぞときBINGO」を販売できたのはよかったです。 これを機にどんどんサービスを生み出していけるといいと思っています。 ロッジで隔週で集まっているので、ご興味ある方一緒に開発しましょう。

他には英語がまったく成長できていない、むしろ劣化した1年でした。 今年で30歳になるので、英語を使う機会を増やしていきたいです。 最後に2018年やりたい事をまとめます。 今年も一年よろしくお願いいたします。

2018年やりたいこと

■ 個人サービス

■ 資格取得

■ その他

  • 海で2週間くらいのんびりする
  • iDeCoやってみる
  • 住宅購入について考えてみる

Arduinoでステッピングモータの制御

Arduino Advent Calendar 2017の3日目の記事です。

よくArduinoや電子工作の記事でみるのはサーボモーターですが、 今回はステッピングモーターを使っていきます。

ステッピングモーターとは?

Wikipediaを参照すると、以下のような記述がでてきます。

パルス電力に同期して動作する同期電動機である。したがってパルスモーター(Pulse motor)とも言われる。簡単な回路構成で、正確な位置決め制御を実現できるので、装置の位置決めを行なう場合などによく使われる。略称ステッパ。

低回転でトルク(回転の力)をしっかりかけたい時にステッピングモーターサーボモータよりも向いています。サーボモーターは中回転から高速の回転の際にトルクがが一定になるようです。

必要機材・準備

※ モータドライバは不良品の場合や、はんだ付け等で壊れやすいため、2台ほど購入して置くことをオススメします。私は電源周りの問題が多く5台ほど検証で破壊しました。

配線

接続例がモータドライバの取扱説明書に記載があるので、それに合わせて配線していきます。 ※ 今回使用する秋月さんのモータドライバとストロベリー・リナックスさんの商品で配線は若干ことなるため、気をつけてください。

配線例

f:id:iwate_takayu:20171203195253p:plain

Arduinoとの配線例

f:id:iwate_takayu:20171203195526p:plain

プログラム

基本的な流れとしては以下の3つのステップになります。 今回作成したコードはgithubにアップしました。

  • ① ピンの定義をする
  • ② setupでモータードライバの初期設定を行う ※この設定を省くとモータの挙動がおかしくなります。この設定パラメータはモータドライバに準ずるところがあるため、最初は何を送っているかわからないかもしれないでのすが、取扱説明書をよく見てみましょう。
  • ③ モータを制御するためのコマンドを送信する

① ピンの定義をする

以下の設定ですが、 実はArduino側で元々決められているため、定義しなくても利用することができます。 ただ、わかりにくくなるため、設定しましょう。 UNOとMEGAでこのピンアサインは異なります。

UNO

#define PIN_SPI_MOSI 11
#define PIN_SPI_MISO 12
#define PIN_SPI_SCK 13
#define PIN_SPI_SS 10
#define PIN_BUSY 9

MEGA

#define PIN_SPI_MOSI 51
#define PIN_SPI_MISO 50
#define PIN_SPI_SCK 52
#define PIN_SPI_SS 53
#define PIN_BUSY 49

setupでモータドライバの初期設定を行う

SPIでモータドライバに信号を送信するため、SPIのモジュールを読み込みます。 その後、加速係数やら何やら設定していきます。

#include <SPI.h>  // SPI通信をするための読み込み

void setup()
{
  delay(1000);
  Serial.begin(9600);

  // ステッピングモーター用のピンの準備
  pinMode(PIN_SPI_MOSI, OUTPUT);
  pinMode(PIN_SPI_MISO, INPUT);
  pinMode(PIN_SPI_SCK, OUTPUT);
  pinMode(PIN_SPI_SS, OUTPUT);
  digitalWrite(PIN_SPI_SS, HIGH);
  pinMode(PIN_BUSY, INPUT);

  // SPI通信の開始宣言
  SPI.begin();
  SPI.setDataMode(SPI_MODE3);//SCKの立上りでテータを送受信、アイドル時はpinをHIGHに設定
  SPI.setBitOrder(MSBFIRST);//MSBから送信

  // L6470の利用設定
  L6470_setup();
}

//**********************************************
// SPI通信するための関数
//**********************************************
void L6470_send(unsigned char value){
  while(!digitalRead(PIN_BUSY)){} //BESYが解除されるまで待機

  digitalWrite(PIN_SPI_SS, LOW);
  SPI.transfer(0);  //制御信号をSPI通信で送る
  SPI.transfer(value);  //制御信号をSPI通信で送る
  digitalWrite(PIN_SPI_SS, HIGH);
}

//**********************************************
// L6470のセットアップ
//**********************************************
void L6470_setup(){
  //デバイス設定
  L6470_send(0x00);
  L6470_send(0x00);
  L6470_send(0x00);
  L6470_send(0x00);
  L6470_send(0xc0);

  //加速係数設定
  L6470_send(0x05);
  L6470_send(0x00);
  L6470_send(0x41);
  //減速係数設定
  L6470_send(0x06); //レジスタアドレス
  L6470_send(0x00);
  L6470_send(0x41); //値(10bit),デフォルト0x41
  //最大回転スピード設定
  L6470_send(0x07); //レジスタアドレス
  L6470_send(0x00);
  L6470_send(0x41);//値(10bit),デフォルト0x41
  //最低回転スピード設定
  L6470_send(0x08);//レジスタアドレス
  L6470_send(0x00);
  L6470_send(0x01);//値(10bit),デフォルト0x41
  //モータ停止中の電圧設定
  L6470_send(0x09);//レジスタアドレス
  L6470_send(0x20);//値(8bit),デフォルト0x29
  //フルステップ駆動
  L6470_send(0x15);
  L6470_send(0x00);
  L6470_send(0x3ff);//値(10bit),デフォルト0x41

  //モータ定速回転時の電圧設定
  L6470_send(0x0A);//レジスタアドレス
  L6470_send(0x20);//値(8bit),デフォルト0x29
  //加速中の電圧設定
  L6470_send(0x0B);//レジスタアドレス
  L6470_send(0x20);//値(8bit),デフォルト0x29
  //減速中の電圧設定
  L6470_send(0x0C);//レジスタアドレス
  L6470_send(0x20);//値(8bit),デフォルト0x29
  //フルステップ,ハーフステップ,1/4,1/8,…,1/128ステップの設定
  L6470_send(0x16);//レジスタアドレス
  L6470_send(0x03);//値(8bit)
}

③ モータを制御するためのコマンドを送信する

今回は1回転づつ回り続けるプログラムを書いてみます。

//**********************************************
// メイン処理 - loop()
//**********************************************
void loop(){
  //360度 - 1回転させる処理
  L6470_send(0x51);//Run(DIR,SPD),0x51:正転,0x50:逆転
  L6470_send(0x00);
  L6470_send(0x20);//回転スピードの設定
  L6470_send(0x00);

  delay(1604);//1604msで約1回転
  L6470_send(0xB8);
}

まとめ

サーボモーターだと専用の関数があるので、 わかりやすいのですが、ステッピングモーターはまずはどうやって動かすんだ? ところからスタートしたので先人の知恵にかなり助けられました。

今回は秒で制御していますが、本来であればステップ数で動かすこともできます。 最初のステッピングモーターを動かすサンプルとお考えください。

一番わかりづらいところは、配線かと思います。 私もですが、ソフトウェアの方はあまり回路や配線なんかは苦手な方が多いかと思います。 そのため、他のブログを見て、間違った配線で動かないなんてことがありました。 取扱説明書をよく見ればわかることだったので、 あらためてちゃんと読もうと思いました。

あと、モータドライバーは本当に壊れやすいです。 電圧を間違えなければ大丈夫と思いますが、DCコンバータなどがうまく動かず壊れるなんてこともあるので、 お気をつけください。

参考

L6470をArduinoで簡単に動かすスケッチ - 北の国から電子工作(仮)

ステッピングモーターの基本(前編)〜Arduinoでパーツやセンサーを使ってみよう | Device Plus - デバプラ

「ステッピングモーター」と「ACサーボモーター」の使い分けについて教えてください。|おしえて!照代さん |オリエンタルモーター株式会社

機械設計者用サーボモーターとステッピングモーターの違いと使い分け