ZYBO(FPGA)いじるよ


この記事は、群馬大学電子計算機研究会 IGGG Advent Calendar 2017 - Adventar 23日目の記事です。


担当の記事は今回で最後です!

最近、時間の管理が大切だな〜と思うことが多くなりました。 時間の管理が下手くそな上、実験レポートの提出が毎週あったのでここ最近の成果なしです。

やりたいことがたくさんあるので、タスク管理と時間の管理を来年はしっかりやりたいです😃

はい

ZYBOいじります

ZYBOはLinuxを動かせるらしく、本の通りに手順を踏んだんですが動きませんでした。 他にも、個人のサイトの解説を参考に色々やってみたんですが、動きませんでした🤷

とりあえず、Linuxを動かすのはやめときます。 とにかく、今はZYBOの扱いについてもっと知りたいなと思って、tutorialをやってみました。

  1. Getting Started with Zynq [Reference.Digilentinc]
  2. Creating a Custom IP core using the IP Integrator [Reference.Digilentinc]

1のPrerequisitesにあるリンク先のInstalling Vivado Board Filesの解説が若干不親切なので、Vivado Version 2015.1 and Later Board File Installation [Reference.Digilentinc]を参考にするっていうのが、ちょっとしたコツでしょうか。

その他は、サイトの通りにやればエラーなくできました。

動いたワーイ


1の方

ボタンを押すと、どのボタンが押されたか表示される。シリアル通信使ってる。 f:id:SmarterThanMonkey:20171223020935j:plain スイッチのON、OFFがLEDのON、OFFと同じになる。 f:id:SmarterThanMonkey:20171223020939j:plain

2の方


こっちの方は、PWMを使ってLEDの光の強さを調整するもので、やり方をちゃんと理解できれば他にも色々と応用できそうです。


感想

うごいたとき、ウォー!!となりました(特に2)。 これまでエラーがでまくりで、どう進めたらよいかと思っていたんですが、 Zybo [Reference.Digilentinc] の下の方の資料が参考になりそうです。

あと、毎度、記事の手抜き感がすごいですね、内容のある記事を書かなければ〜と思いました😇

おしまい

3dプリンタでつくったやつ適当に


この記事は群馬大学電子計算機研究会 IGGG Advent Calendar 2017 18日目の記事です


ゆるくかきます。

レポウットと定期テストに生命力を奪われる男、ziyuu(SmarterThanMonkey)です。

3dプリンタ買いました。色々なパーツを作れて、おもピろいです。

データを20分ぐらいで作って、あとは大学行ってる間にパーツ作らせてるので、 ロボット作りを頑張っているのは、3dプリンタくんです。

ロボットアーム作りに挑戦して、パーツを3dプリンタで作りました。

一号(他の記事でも紹介した)

二号

この不安定さが、なんとなくいきものっぽくておもピろいです。

三号

二号をパワーアップさせただけっていう雑な作りをしております。

3dプリンタの扱いに慣れてきたので、こんなのも作ってみました。

シャフトとタイヤを繋ぐパーツ。

ギヤ。

電池ボックス。 ボールペンの中身のバネが、電池のマイナス側に付いてます。

電池ボックスは、さすがに買ったほうがよさげです。 なんというか、なんでも作れんじゃね~~?(雑)という気持ちで、作ってしまいました。 まあ、実際思いつくものは大抵作れそうです。 みなさんもおひとつ3dプリンタいかがですか?

以上、3dプリンタいいっすねえ!という記事でした。


ゆるいというか雑というアレ

OSっぽいなにかを作ってみた

つくったもの


コマンドなんてなかった...。

見た本

自作エミュレータで学ぶx86アーキテクチャ-コンピュータが動く仕組みを徹底理解!

本当は、CPUの仕組みを勉強できたらいいなと思ってその本を読んでいたんですが、
シミュレータを作っていくのがめんどうくさくて、実装編だけ読みました。


実装編のサンプルプログラム(アセンブリ)を、USBメモリの最初の512byte(ブートセクタ?)に書き込み、
そのUSBメモリをパソコンにさしてから起動すると、文字が表示されます。


BIOSの機能を使って、文字を表示しているらしいです。


ここで、
「キーの入力に対して、何かしらの文字を表示できたらOSっぽくなるんじゃね?」
と思ったので、実装編のプログラムを改造して作ってみました。


正直なところ、"わかんないけど試す"というやりかたで作ったので、よくわかってません。


細かい話はわからないので、
軽く、自分が付け加えた部分だけ紹介します。

本にのってなかった部分

1.入力を受け取る
mov ah, 0x00 ;ahレジスタに0x00をいれる
int 0x16

このあと、キーボードのキーが押されると、ahレジスタにスキャンコードがセットされます。
押したときはメイクコード、離したときはブレイクコードがセットされます。
(参考:0から作るソフトウェア開発)

例えば、割り込みのあとにエンターキーを押すと、ahレジスタに0x1c(エンターキーのメイクコード)がセットされます。

2.シャットダウン(のつもり)
int 0x19

シャットダウンのつもりで加えたんですが、
これをやるとハードディスクに入っているOSが起動してしまいます。
動画の後にパソコンのハードディスクにはいってるlinuxが起動してます。

感想

実際に動くっておもしろい!

アセンブリとか全然わからないんですが、
サンプルコードの空気を見ながら調べているうちにそれっぽいものができたので、

「あれもこれも調べないと! アアア!! この本ゴツイなオイ!」 となるよりも、
必要な部分だけペラペラと読んで実際に作ってみるのが自分には合っているのかな

と思いました。(おしまい)


参考:
https://www.embeddedarm.com/documentation/third-party/x86-ebios-43.pdf

arduinoでマイクロサーボを動かしてみよう

これは

群馬大学電子計算機研究会 IGGG Advent Calendar 2017 - Adventar

の4日目の記事です。

 

アドベントカレンダー初参加で初記事です。

はてなブログの記事の書き方とか、ろくにわかってないです。スミマセン😣

 

なにするの?

arduinoを使ってマイクロサーボを動かしてみたいと思います。

 

なぜ?

自分で書いたプログラムを使って、目の前でガチャガチャ動くものを作るというのは楽しいです。

 

他の方もそれを体験してもらいたいので、

第一歩として、簡単に手に入り、

簡単に使えるマイクロサーボで遊ぶのが良いかなという。

 

どうやるの?

じゃあまず、

 

Arduino IDE のインストール

Arduino - Getting Started の "Install the Arduino Desktop IDE"から自分のOSにあったやつをインストールしてください。

 

起動するとこんな感じです。↓

f:id:SmarterThanMonkey:20171203145627p:plain

Arduino IDE

では次、 

 

必要なもの

 

  • arduino nano
  • USBケーブル(A オス to miniB オス)
  • マイクロサーボSG90
  • ブレッドボード
  • ジャンパー線 3本くらい(今回は少なくとも3本必要で、あればあるほど便利です。)

arduino nano は、amazonで安く買えます。

自分が持ってるのは、arduino nanoが3つで1000円でした。

(あ、これ最初に、はんだづけ必要なやつじゃん...!!)

 

USBケーブルは、パソコンとarduino nanoを繋げるのに使います。

 

マイクロサーボ(SG90)も、amazonで買えます。

5個で1500円とか、それくらいだったと思います。

 

ブレッドボードも、amazonで買えます。

arduino nanoをブレッドボードにぶっ挿して、ジャンパー線でSG90とarduino nanoのピンを繋ぐので、はんだづけがいりません。楽です。

 

ジャンパー線は、arduinoのピンとsg90を繋ぐために使います。

 

ふう... アレ? 思ったより準備めんどくさっ

私は、ロボット作りを始めて半年ぐらい経ったので、意外と上記のものって家にあったりするんですよ....。

 

組み立て

さーっと組み立てましょう。

  

f:id:SmarterThanMonkey:20171203152148j:plain

とりあえず、こんな感じでarduino nano をブレッドボードの上にぶっ挿します。

ポイントは、ブレッドボードの中心の溝をまたいで挿すことです。

 

次に、3つジャンパー線の、片方をそれぞれ arduino nanoの 5V、 GND、 D2と書かれたピンの横に挿します。 上の画像と同じようにすれば問題ないと思います。

 

色は特に関係ありません。

 

今、3つのジャンパー線の片方がarduino nanoのピンに繋がっている状態です。

もう片方をSG90につなげていきます。

 

SG90から、3本の線が出ています。↓

f:id:SmarterThanMonkey:20171203152006j:plain

 

これに、ジャンパー線を以下のようにつなげていきます。

ここでは、SG90から出てる線にどのジャンパー線を繋げるか気をつけましょう。

arduino nano GND → SG90 茶色

arduino nano 5V → SG90 赤色

arduino nano D2 → SG90 オレンジ色

です。

f:id:SmarterThanMonkey:20171203153312j:plain

 

あとは、arduino nanoとパソコンをつなげましょう。

USBケーブルでつなげてください。

 

f:id:SmarterThanMonkey:20171203154729j:plain

(ロボアームの失敗作にくっついてるやつSG90を使っています。色々くっついていて見づらくなってしまってすいません)

 

arduino nanoについてるLEDが光ってますね。ちゃんと動きそうです。

 

あとはプログラム書いて、書き込めばマイクロサーボは動きます。

 

プログラムを書きます。

 


#include <Servo.h>
Servo servo;
void setup() {
// put your setup code here, to run once:
servo.attach(2);
}
void loop() {
// put your main code here, to run repeatedly:
servo.write(90);
delay(1000);
}

 arduino IDEで、コードを上と同じにしてください。

はい、コードできました。

 

これをですね、arduino nanoに書き込みます。

f:id:SmarterThanMonkey:20171203161245p:plain

メニューのツールから、

ボード:Arduino Nano

プロセッサ:ATmega328

シリアルボード:arduino nanoを指していると思われるやつを選んでください笑

 

これが設定できたら、書き込みです。

Arduino IDEの画面の左上にある、右矢印(→)を押してください。

はい、書き込めましたか?

 

書き込みがおわったあと、マイクロサーボが"ギョッ"と鳴って少しだけ回転します。

 

少しだけ、コードの説明です。

setup()の中は、arduino nano が起動したあとに一度だけ実行されます。

loop()の中は、setup()のあと、繰り返し実行されます。

 

servo.write(90);

の90という数字は、角度を表しています。

これでマイクロサーボのやつを90度にしてくれます。

0~180度に設定できますが、私の安物マイクロサーボは20~160度ぐらいにしておかないと"ガチガチ"鳴って壊れそうです。

 

delay(1000);

は1000ms秒待つ、という意味です。

つまり、

delay(50);

と書けば、50msだけ待ってくれます。

 

最後に、20度と160度を行き来させるコードを書いて、動かしてみましょう。

 


#include <Servo.h>
Servo servo;

void setup() {
// put your setup code here, to run once:
servo.attach(2);

}

void loop() {
// put your main code here, to run repeatedly:
servo.write(20);
delay(1000);
servo.write(160);
delay(1000);
}

上のコードを書き込んでみましょう。

 

できましたでしょうか?

 

今回の記事はこれでおしまいです。ありがとうございました。

ポテショメータなどを使うと、"つまみを回すとサーボの角度が変わる"というのも簡単にできます。

 

今回の話の注意点なんですが、本当はマイクロサーボを動かす電源は別にしたほうが良いです。 今の状態だと、PC→arduino nano →マイクロサーボ という給電のやり方をしています。

 

たしかPCのUSB給電では500mAほどしか流せないと思うので、それ以上流そうとすると、PCが急にシャットダウンしたり、再起動がかかったりします。

 

自分の場合、普段は単3電池と電池ボックスで、単3電池*4 を直列接続したものをつなげたりしてます。

 

おまけ話

私は、このマイクロサーボの使い方と、ポテショメータでマイクロサーボを制御するやり方を知ったあと、以下の動画を見つけました。

www.youtube.com

 

最初にみたとき、「簡単に作れるやん!!」

と思いました。

 

で、興奮して一気に作りました。

これです↓

 

どうやら、マイクロサーボ(SG90)ではトルクが足りないため、ある角度でしっかり止まることができずガタガタと震えてしまうようです。まったく動きが安定してません。

 

今は、強いトルクのサーボモータを手に入れたので、それでロボットアームを作ろうかと思っています。(まぁ、大学の授業に追いつくための勉強が大変すぎて特にこういったことやれてないんですけど...)

 

 

おわり。