Arduino(未だに発音できませんw)はじめました。

冷やし中華Arduinoはじめました。

2017_03_05_18_15_43.jpg

 正直なところ、ちょっと軽いカルチャーショックを受けていますw

よく考えたらず〜〜〜っと前に「週間SL」の記事「転車台の電動化」でarduinoを使っていました。

ただ当時はなんのことか全くわからずに使っていました。

で、レッサーかずさんも使用されて、ホビコム等でも使用者が増えている様でしたので勉強してみようかな〜と思いアマゾンでスターターセットみたいなものを購入したのですが、そのままになっていました^^;

ところが、先日ちょっとした時間があったときにこちらのサイト「Arduinoのすすめ」を見てムムムムム!!!となりましたw

arduinoのスケッッチを見てもdigitalWrite(2, HIGH);とか全く意味がわからなかったのですがこのサイトを見て意味がわかると、え〜〜〜〜っD2ピンをhighにするのにこれだけ??

さらにanalogWrite(9, 50);に至っては、A9ピンを50/255のPWMでの出力です・・・・PMWの設定全くなしでピンのoutputの設定のみ。AVRやPICでPWMの設定がわからずにどれだけ悩んだことか^^;

アナログの読み込みもanalogRead(4)とするだけで4番ピンが5Vを1023とし、0Vを0とする1024段階で読み取ります。あのビットシフトしてレジスターに格納するとかの設定ありませんw

もうこの辺でarduinoの凄さがわかってきました。

正直なところ簡単なLチカレベルならarduinoを少し勉強すればすぐにできる様になりそうです。

 

てなことでarduinoの勉強を始めたのですが、やはりこういったものは奥が深い(> <)

最初のLチカは簡単でも色々な関数を組み合わせてスケッチを組んで行くのは結構大変ですね。

まだまだ私には手に負えないことばかりです^^;

そこで先達であるレッサーかずさんのスケッチを拝見しながら色々と勉強させていただいています。

レッサーかずさんさすがですね〜。よくまとまったスケッチを書かれています。

幸いなことにAVRでC言語を少しかじっていましたのでなんとか理解できる範囲です^^;

今現在は色々な関数のサンプルスケッチが沢山あるのでそれらを少しずついじっては動かしてみてを繰り返しながら勉強しています。

 

ちなみに、私がAVRを使いながらarduinoを学んでなかったのは今の所AVRで事足りているのもありますが、arduinoのあの基盤ごとの大きさが模型に入れるには辛いな〜と思っていたのですが、

2017_03_09_18_53_05.jpg

 左が私がよく使うATmega168Pで、右がarduino nanoです。あんまり大きさ違わないかもw

かなりスペースがシビアな模型でなければ十分nanoで使えそうですw

値段もATmega168Pは200円、arduino nanoは安いもので350円です。模型に入れ込んでしまっても惜しい金額ではないですよね。

ただ、それでもスペースがギリギリの場合は、なんとarduinoのスケッチがそのままAVRに書き込めることが判明w

ただ、欠点もあってarduino IDE(arduinoのスケッチを描くソフト)で書いたスケッチはプログラム容量が大きくなる様です。

 

ここからはその方法を備忘録として手順を書いておきます。

まずはこのサイトから「nomolkのブログ」さんのこちらの記事とQitaさんのこちらの記事を参照させていただきました。

全体の手順は、

1.arduino IDEでATmega168Pを扱える様にします。

2.arduino IDEでHEXファイルを作成しこれを取り出します。

3.Atmel StudioでAVRISP mk2を用いてAVRに書き込みします。

この流れで行きます。3のAVRへの書き込みはAVRISP mk2を使用していますが、今は廃盤になっている様なので、以前入手したaitendのAVRライター「記事はこちら」でも書き込めると思います。

1、

まずは「nomolkのブログ」さんのこちらの記事に沿って行きます。(途中からやり方が変わっています)

使いたいAVRをここから探します。Unofficial list of 3rd party boards support urls · arduino/Arduino Wiki · GitHub

今回はATmega168Pを使用します。ちなみにATmega168とはPが無いだけですが互換性がありません。

スクリーンショット_2017-03-09_17_23_44.png

MiniCoreと書いてある後ろの部分のURL記録しておいてください。

次にarduino IDEのArduino→References(windowsの場合はファイル→環境設定)をクリックすると下の様なボックスが出ます。スクリーンショット_2017-03-09_17_52_00.png

このボックスの赤矢印部分に先ほどのURLを間違わない様に記入して行きます。

ちなみに私の環境ではURLのコピペができませんでしたので打ち込みました^^;

okを押して閉じると、次はツール→ボード→ボードマネージャーをクリックします。

スクリーンショット_2017-03-09_17_55_00.png

するとこんなボックスが出てくるので先ほど入れたMiniCoreの168Pと書いてある部分をクリックすると色が変わりますので、次にインストールをクリックします。

スクリーンショット_2017-03-09_17_55_28.png

これでarduino IDEに168Pのボードが追加されました。

再度ツール→ボードで確認すると下の方にATmega168P等が追加されています。

スクリーンショット_2017-03-09_17_55_42.png

2、

書き込みたいスケッチを開いてボードの部分でATmega168pを選択します。

するとこんな感じでボードが変更されます。

スクリーンショット_2017-03-09_17_25_33.png

クロックの部分は関係あるのかはよくわかりませんが、とりあえずinternal8Mhzを選択しておきました。

これでスケッチがATmega168P用のコンパイルをしてくれます。

ただ、プログラム容量が大きすぎるとか何か問題がある場合はコンパイルできません。

スクリーンショット 2017-03-09 17.18.42.png

こんな感じで容量が足りないとエラーが出る場合もあります。

コンパイルしたHEXファイルですが、arduino IDEは元のままだとHEXファイルを残してくれない様です。

そこで、referenceファイルを書き換える必要があります。ここからはQitaのこちらの記事を参照させていただきました。

Arduino→References(windowsの場合はファイル→環境設定)をクリックして。このボックスを出します。

スクリーンショット_2017-03-08_19_53_11.png

矢印の部分をクリックするとreferences.txtがあるフォルダが開きますので、このファイルをメモ帳等で書き換えます。

スクリーンショット_2017-03-09_17_48_23.png

 まずはこの一文を加えます。この文はどこに記入しても構いません。自動的に並べ替えられます。

build.path= (references.txtが入っていたフォルダ)¥temp  と指定した方がいいです。

私の場合だけかもしれませんが、これ以外の場所にtempフォルダを作ってもうまくHEXファイルが残ってくれませんでした。

もちろんreferences.txtが入っていたフォルダにtempフォルダを新規作成しといてください。

次に

スクリーンショット_2017-03-09_17_49_50.png

 preproc.save_build_files=falseとなっている部分をpreproc.save_build_files=trueと書き換えます。

これでコンパイルするとtempフォルダ内にHEXファイルが生成されます。

ちなみにtempフォルダ内はコンパイルするたびに書き換えられますので、必要なHEXファイルは移動もしくはコピーして保存してください。

3、

次にAtmelStudioを適当なプロジェクトで新規作成して使用AVRは目的のAVRを選んでおきます。

AVRISP mk2はもう繋いでおきます。

プログラムは書き込まずにツールバーの書き込みアイコン

スクリーンショット_2017-03-09_20_37_47.png

 をクリックして書き込み用のダイアログを出します、

スクリーンショット_2017-03-09_16_42_07.png

1 書き込みツールを選択AVRISP mk2とします

2 使用AVRを選択します。今回はATmega168P

3 Applyをクリックします、。

4 Memoriesをクリックすると上の写真の様な画面になります。

5 5の矢印部分をクリックして書き込みたいHEXファイルを選択します。

6 Programをクリックすると

7 緑丸部分に書き込み経過が出ます。ここでOKが3つ出れば完了です。

Fusesは必要があれば変更してください。ちなみにATmega168Pは出荷時は内臓1MHzです。FusesのCKDIV8のチェックボックスを外してProgramをクリックしてFusesを書き込むと内臓8MHzになります。

書き込み時のATmega168PとAVRISPmk2の接続は「いつきの技的日記」さんのこちらの記事を参考にしてください。

そして一番重要な事ですが、arduinoのピンとATmega168Pのピンの対応は

(www.arduino.ccから写真拝借しました。)

Arduino-To-Atmega8-Pins.png

となっているようです。

 

これでarduino IDEで書いたスケッチが書き込めました!AVRでarduino用の機器のサンプルプログラムが使い放題ですw

ただ、arduinoは16MHzらしいのですが、ATmega168Pは内臓8MHzなのでその辺の問題はあります。まっ、16MHzで動かしたいときは外部クロックをつければいいのですがね^^;

下の写真は単なるAVRによるLチカにみえますが、arduinoのスケッチを書き込んでLチカしていますw写真じゃわからんてw

2017_03_09_18_17_11.jpg

0.96インチのI2C用の有機液晶も動きました^^。あっ、いっちょ前にI2Cとか書いていますが、もちろんC言語でI2Cのプログラムなんて書けませんよ^^;

2017_03_09_18_17_47.jpg

レッサーかずさんのデロリアン用のスケッチも動きました^^。ただ、駆動周波数の違いからかAVRでは動きが遅かったので少しMatrixCntの増加式に細工させていただきスピードアップしました^^。レッサーかずさん素晴らしいスケッチです!

2017_03_09_18_17_35.jpg

ちなみに8×8マトリックスLEDモジュールのLED取り付け方向はこちらです。

2017_03_09_18_17_24.jpg

この方向でちゃんと動きました。

 ATmega168Pで動いている8×8マトリックスのテスト動画がこちらです^^。

 

関連すると思われる記事:

6 comments

  1. こんばんは~!

    おお~なにやら凄い♪
    後半のAVRは自分にはサッパリ解らなかったですが(汗)
    Arduinoのスケッチが1チップで動くの便利そうですね~~

    ArduinoNanoで大抵の模型は大丈夫そうですが、
    さらにUSBポートが別になった小さいProMiniなんてのも有りますよ(^^)

  2. レッサーかずさん こんばんは!

    arduinoすごく便利ですね〜^^。
    なんか急に扱えるモジュールの数が激増して嬉しいですw
    まだまだ慣れていないのでわからない事だらけですが、なんとか進めています。
    arduino IDEで書いたスケッチがAVRでも使えるのも大変便利ですね。
    私が今まで使っていた最も小さいAVRはAttiny13Aなのですが、これにさえもスケッチでプログラムできる様です。またすこしやれる幅が広がった気がしてとても嬉しいです^^。
    レッサーかずさんのスケッチもとてもお見事でした!読ませていただいてとても勉強になります^^。

    なんとあれ以上小さいarduinoがあるんですねwこりゃ本当にarduinoだけで済みそうですねw

  3. おはようございます!

    ついにarduinoの禁断の世界に足を踏み入れられましたか!!(笑)
    私もずいぶん以前から気にはなっていたのですが、まだPICの世界にかろうじて踏みとどまっておりました。
    arduinoの良いところは、多様な各種モジュール(シールドというのですか?)がすでに提供されていて、それらを接続するだけでいろいろなことができるところですよね。
    PICだと、一からハードとソフトを組まねばなりませんので。
    このシリーズで、勉強させていただきます。
    余談ですが、ラズベリーパイにも興味があって、PCとの連携や複雑なプロジェクトになるとラズベリーパイの方も魅力的だし、、、
    と思っています。

  4. Vividさん こんにちは!

    arduinoの世界に踏み込んでみましたw
    いままでPICとAVRで悩んでいたことが嘘のように簡単にできますw
    ただ、やはり細かいことまで設定したい時は、暗黒の底なし沼のように奥が深そうでとても私の力量では無理そうです^^;
    まっ、私の目的はLチカできてモーターやサーボが少し動かせれば事足りるのでどうにか使っていけそうです。
    各種モジュールもかなり便利なものが多くて、これから先色々と楽しみです^^。

    ラズベリーパイは汗んちゅさんも使用されていましたが、小さなPCてな感じなんですね。これも興味をそそられますねw

  5. こんばんは!
    ご無沙汰しまして…。
    やっと出張から戻り普段の生活に戻りつつあります。
    arduino、何やら流行っているようですが、簡単にPWMが出来たりとka
    …そういうことだったのですかぁ。
    といっても、扱い方は分かりませんが…(苦笑)
    おなじくナント読むのか分かりません(爆)

  6. yangminさん こんばんは!

    長期の出張でしたのでお疲れモードじゃないですか?ごゆっくり休んでくださいね^^。
    arduinoは色々なモジュールがあって、サンプルコードも豊富なので色々できて楽しいですね。
    PWMとかアナログ入力が簡単にできるのにはびっくりしましたw
    私もまだ勉強中でプログラムを組んだりしていませんが、c言語と基本的には同じ感じなのでarduinoでもプログラム組めるようになりたいなと思います^^。
    ちなみに「アルデュイーノ」らしいですが発音できませんw

Leave a Reply

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

wp-puzzle.com logo