Monthly Archives: July 2016

Pi:Co Classic Ver3 改造例(3)

Pi:Co Classic Ver3 改造例(2)からだいぶ経ってしまいましたが、まだ完結していないので続きます。
今回の改造例(3)では、7セグを制御するPICとそのプログラムについて語ります。
なぜPICにしたのか?それは、サンプルプログラムがインターネット上にいろいろあり、それを参考に組み合わせれば、さくさくとプログラムが完成し、開発時間を短縮できるという理由でPICを使おうと考えました。
PICの型番の選定ですが、Pi:Co Classic Ver3 改造例(1)にも書きましたが、Pi:Co Classic Ver3の残りの端子で7セグにデータを送る手段としてUART(SCI)を選択しています。少なくともUART機能があるPICを選ぶ必要があります。その次に、7セグを制御する端子として、アノードの制御として3端子、カソードの制御して8端子の合計11端子とUARTの制御に2端子必要になります。それと電源(VDDとGND)の2端子を合わせると合計15端子が最低必要端子数になります。そのほかにPICにプログラムを書き込む端子があり、その端子は7セグの制御の端子と兼用にしない方が無難なので、PICにプログラムを書き込む3端子(ICSPCLK、ICSPDAT、VPP)を別にしました。合計18端子以上のPICを選定すればよいことになります。あとは、型番探しです。
近くに秋月電子通商があるので、秋月電子通商で売っているPICから選択しました。PICのカテゴリーの中で価格でソートし、18端子以上てUART機能ありを探すと16F687にたどり着きました。価格でソートしているのは、今回の7セグの制御では、周辺機能(A/DやSPIなど)はUART以外使用しないので、高性能なPICにする必要がないため、価格が低いものから選んでいます。
プログラミングに入る前に、ご存じ方もいらっしゃると思いますが、PICはバンクという機能があり、バンクを切り替えてレジスタの設定をする必要があります。たとえば、PortAの入出力の設定レジスタはBankB、PortAのデータの入出力はBankAといった具合です。アセンブラでは、Bankを切り替えて、レジスタにアクセスする必要がありますが、MPLAB X IDE V3.20とXC8のC言語コンパイラを使用するとバンクの切り替えはコンパイラが勝手にやってくれて便利なので、この環境で開発しています。
MPLAB_IDE

さて、本題のPICのプログラムですが、Pi:Co Classic Ver3 改造例(2)からUARTを使い、7セグ3個を切り替えて表示するところまでは何となくわかると思います。しかし、実際、プログラムを書こうとすると何から書けばよいのかわからないと思います。わからない時は、順番に整理していくと いつの間にか形になっています。
まず、最初に仕様を決めます。その次にフローチャートを書いてみます。最後にプログラミングし、実行して確認します。間違っていたら修正します。これは、PDCA(Plan Do Check Action)サイクルそのものです。つまり、最初に何をするかわからない人は、Plan(仕様)ができていないという事になります。
最初の仕様は、こんな感じでざっくりと決めました。最初は間違っていてもよいです。あとのActionの工程からのフィードバックで修正すれば、より良いものになりますので。
・UARTは割り込みを使用し、割り込みが入ったらデータを更新をする。
・7セグのデータはシフトレジスタ形式にする。
・7セグの繰り替えは、3msごとに切り替える。main文の中でwhileでまわす。
今回の仕様では、条件分岐がないのてフローチャートを省略しています。条件分岐がある場合、ある条件のときの処理を忘れていた~というのがあるので書いた方が良いです。
最初に、UARTを使用せずに7セグの点灯の確認をしました。(すべて書いた後で動作しない時に、切り分けが必要になるため、可能ならば、ブロック毎に確認した方が開発の効率が上がります。)
以下が最初に書いたプログラムです。

以下の様に1,2,3と点灯すれば成功です。
IMG_1906

プログラムの解説をしますと、
1行目:レジスタ名が設定されているヘッダをインクルードしています。
2行目:クロックの周波数を定義しています。_XTAL_FREQはこの環境で決められた変数なので変更はできません。この設定がないと__delay_ms()関数が使えません。
4行目:7セグのカソードの端子の制御データを格納する変数を配列で定義しています。
6、7行目:Configuration Word register(CONFIG)を設定しています。(設定内容の詳細はPICのマニュアルを見てください)
10行目:クロックをデフォルトの4Mから8MHzに変更しています。少しでも早くしてシリアル通信の設定値によるエラー率を軽減させています。
11~20行目:PORTA、B、Cを出力に設定しています。PortAは7セグのアノードの制御、PortCは7セグのカソード制御です。PIC16F687はA/Dの機能があります。デフォルトでA/Dが選択されているため、汎用ポートを使うには、ANSEL、ANSELHレジスタで汎用ポートに切り替える必要があります。
22~24行目:7セグのカソード制御の初期データを入れています。7セグは、LEDなので、カソード側を”0″、アノード側を”1″にすると点灯します。今回アノード側にはPchFETを使用しているため、7セグのアノード側を”1″にするにはPICの出力を”0″にする必要があります。
26行目:whileを使用しないと一回だけ点灯して終了になるため、3つの7セグがすべて点灯したようになりません。
27行目:7セグの右側のアノードに”1″、他の7セグのアノードに”0″が入るようにしています。
28行目:7セグのカソード側に点灯データを送信しています。この行では1のデータを転送しています。
29行目:3msWait。これがないとLEDの点灯時間が短すぎて暗くなってしまうため少し点灯させてから次の7セグに移ります。
31行目:7セグの真ん中のアノードに”1″、他の7セグのアノードに”0″が入るようにしています。
32行目:7セグのカソード側に点灯データを送信しています。この行では2のデータを転送しています。
35行目:7セグの左側のアノードに”1″、他の7セグのアノードに”0″が入るようにしています。
36行目:7セグのカソード側に点灯データを送信しています。この行では3のデータを転送しています。

続きは、Pi:Co Classic Ver3 改造例(4)のUART通信編で説明します。

続きを読む ›

Posted in 技術情報


マイクロマウス研修(2016金沢草の根大会)

こんにちは。山本です。

7月17日に金沢工業専門学校にて行われた金沢草の根大会に参加しました。

金沢草の根大会は今回で6回目です。参加者は年々増えており、今回は40人を超す参加者が集まりました。

DSCF4996

金沢大会ではYoutubeLiveにてインターネット配信が行われました。
マイクロマウスクラシック競技前半

マイクロマウスクラシック競技後半

マイクロマウス(ハーフサイズ)競技前半

マイクロマウス(ハーフサイズ)競技後半

表彰

クラシックの迷路は、名古屋城とその周辺をモチーフに設計されたそうです。
前半は直線、後半はターンが多いコースです。
大会では配信が直前まで不安定だったり、初出場の学生さんが出走直前にLiPoバッテリの端子をショートさせてしまい煙が出るというハプニングもありましたが、無事終了しました。
大会の結果はこちら(NTFマイクロマウス大会結果)から確認できます。

Pi:Coシリーズが2台以上出走したため、Pi:Co杯対象となり佐野さんの「さのうす」がPi:Co賞を獲得しました。
また、今大会では当社のキットであるRaspberryPiMouseV2が初の公式大会出走しました。
からくり工房A:Macの猪野さんです。
DSCF4902
風邪を押しての出場でしたが、結果は残念ながらバッテリー切れのためリタイアでした。
今後、出走台数が増えればRaspberryPiMouse杯も検討するそうなのでがんばってもらいたいです。

金沢工専の吉澤さんです。
DSCF4819
彼は製作中に2台も発煙し、今大会で出走するのは3台目だそうです。
センサの調子が悪かったのか、結果はリタイアでした。

中野さんです。マウス女子が全国レベルで増えているようです。
DSCF4987

 

今回出走したpica2。

DSCF4849

関西大会よりもセンサを下げてみました。なんとなく調整しやすくなった気がします。
ハードの改造はPi:Co杯の資格は失いますが、マイクロマウスのレギュレーション的には問題ないので速くかつ安定するよう、どんどん改造していきたいと思います。

ソフトは最短走行時のスラロームを実装してみました。少し雑な実装だったため、スムーズな動きには程遠いカクカクした速度調整になってしまいましたが、デフォルトの超信地旋回のみの時に比べ3割ほど速くなりました。

次の大会までにはもうちょっときれいなスラロームにしたいと思います。

続きを読む ›

Posted in 研修
Tags:

マイクロマウス研修(2016関西地区大会)

みなさまおひさしぶりです。山本です。

7月10日、マイクロマウス関西地区大会(http://mmk.rulez.jp/)に参加してきました。
今回の会場は大阪のアジア太平洋トレードセンター(ATC)内、ODPデザインギャラリーにて開催されました。

Cm98MEkUIAASsR-

DSCF4269

DSCF4249

試走会と大会当日(7/9-10)はATC内にてデジタルものづくりメーカーズのための展示会イベント「メーカーズバザール大阪」(http://makersbazaar.jp/)が同時開催されました。
昼休憩の少しの時間だけしか見れなかったのですが、面白そうなガジェットが多数展示・販売されており、1日中楽しめそうなイベントでした。

DSCF4267

DSCF4264

自分は地方大会は初の参加だったのですが、予想以上に参加者が多く驚きました。

参加者は前回と比べ地元大阪の学生が多数参加されていたそうです。

前日の試走会も多くの参加者がおられ、おのおの調整をされていました。

当日の様子はこちら。

DSCF4243

今回出走したPi:Co(pita2)です。

Cm98MElUIAA3GTb

Pi:CoClassic2にPi:CoClassic3の開発時にあまった基板やCPUなどを使い組み合わせてあります。
プログラムは今回はほぼサンプルで、パラメータの調整とwaitなどを削り、できるだけPi:CoClassic3のままのアルゴリズムでどこまで速くできるかを試してみました。

前日、社内ではちゃんと走っていたのですが、会場ではセンサまわりのエラーに苦しみ、ほぼセンサの調整だけで終わってしまいました。(後日判明したのですが、CPUボードの故障でした。前に、バッテリのバランスコネクタがピンに当たった時にバチッと音がしたので、その時かも)当日は片側センサだけの情報を使った姿勢制御に変更してなんとか完走することができました。姿勢制御は片側だけでもとても安定してまっすぐ走ってくれました。結果は8位でした。

ロボトレースは赤尾さんの「楓Ⅱ」が優勝、マイクロマウスクラシックは宇都宮さんの「紫電改」、ハーフは松井の「Fantom」が優勝されました。

DSCF4338
写真は去年の優勝機体「Sapphire」

Pi:Coシリーズが2台以上参加されていたため、Pi:Co杯も行われ、益田さんの「でじまる」(Pi:CoClassic2)がPi:Co賞を獲得されました。「でじまる」はスラロームも実装されており、とても速かったです。

協賛品。Pi:Co賞はSIXPADでした。
DSCF4362

現在、今週末の金沢大会に向けて簡易スラロームの実装に挑戦中です。

続きを読む ›

Posted in 研修
Tags:

RaspberryPi3+Ubuntu 14.04+ROS indigo+にデバイスドライバをインストール

少し前に、RaspberryPi3にUbuntu 14.04とROS indigoをインストールでRaspberryPi3にROS indigoをインストールする方法を掲載しました。
今回は、その環境に弊社が開発したデバイスドライバをインストールする方法です。
RaspberryPi3+Ubuntu 14.04+ROS indigoの環境では、SPIがdisableになっています。
RapberryPiMouseのセンサはSPI通信を使用してセンサの値を取得しているためSPIのenableにする必要があります。

SPIがdisable時のlsmodの結果
lsmod

/boot/config.txtに以下のコマンドを追加します。

一度rebootします。

lsmodでSPIがenableになっていることを確認します。
spi_bcm2835があればOK。
lsmod2

githubからコンパイルされたデバイスドライバを入手します。

カーネルバージョンが4.1.19-v7+になっている(uname -rで確認できます)と思いますので

でデバイスドライバのインストールができます。

echo 1 > /dev/rtled0で LED0が点灯
cat /dev/rtlightsensor0 でセンサの値取得
などができようになります。

続きを読む ›

Posted in 技術情報


Pi:Co Classic Ver3 改造例(2)

Pi:Co Classic Ver3 改造例(1)では、7セグを使用した改造例を示しましたが、今回は、その7セグの制御のハード側の設計について語ります。
今回使用した7セグは、アノードコモンの3桁緑色のshen Zhen Tekivi社の2381BGを使用しました。秋月電子通商で100円で売っているものです。アノードコモンはLEDの電源側(VDD)が共通になっていてカソード側で点滅の制御をするタイプです。下の回路図が今回開発した7セグとPICの回路図です。
7セグ回路図
回路図から3桁の7セグとPIC16F687とPchFETと抵抗で構成していることが分かると思います。先ほど、アノードコモンの7セグはカソード側で点滅を制御すると書きましたが、3桁の7セグは、カソード側も共通化されているため、アノード側も制御する必要があります。アノード側をすべて電源(VDD)につなげてしまうと3つとも同じにしか点灯しません。何となく想像がつきますよね。3つの7セグを個々に点灯をさせるには、アノード側で電源のON/OFFを切り替えて制御します。
アノード側で電源のON/OFFすると三つ同時に点灯できないのではないか?という疑問が沸くかと思います。しかし、安心してください。実際には、3つ同時には点灯していません。3つ同時に点灯しているように見えているだけです。
Pi:Co Classic Ver3 改造例(1)のブログの2枚目の写真で”115″と表示されてると思います。よ~く見ると左の”1″が暗く、右の”5″が明るくなっているのが分かると思います。これは、撮影する角度の問題も少しはありますが、7セグの点灯方法によるものです。
どこかでPWMの言葉を聞いたことがあるかと思います。ロボコンマガジン2016.9号のマイクロマウスではじめようロボットプログラミングwithロボット女子会でPWMについて解説していますので、ご参考に見ていただけると幸いです。
なぜ、PWMという用語を持ち出してきたかというと、PWMはON/OFFだけで、LEDの明るさの調整やモーターの速度の調整に使用されています。前者のLEDの明るさの調整にPWMを使用していますが、LEDがチカチカとしていません。この技術を使用して7セグを3つ順番にON/OFFして点灯の制御をしています。
7seg-2
左図が7セグとPICのブロック図になります。7セグの電源を制御するのにPchのFETを使用していますが、PNPのトランジスタでもOKです。Pchはローアクティブです。ローアクティブとは、FETのゲートに”0″を入力したときにFETがONになることを言います。逆に、Nchのアクティブはハイです。Nchはゲートに”1″を入れたときFETがONになります。
使用した7セグのVF(Forward Voltage) が1.93Vで、電源が3.3Vで10mA程度流そうと抵抗値を決めました。7セグの直流電流は20mAとなっていますが、MAXで流すと壊れやすくなるため半分にしています。パルスでは100mAまで流せますが、デバッグ中は何が起きるかわからないので直流で計算した方が無難です。
R=(3.3-1.93)/0.01 = 137Ωになりますが、
入手しやすい抵抗値にすると120Ωと150Ωが近いですが、安全をとって抵抗値が大きい150Ωを選択しています。
最初は、PICなので、大電流を流せる(マイコンの中ではI/Oからまたは、I/Oに大電流を流せることで有名)と思いFETが必要ないと思って設計していましたが、マニュアルをみると1portあたり25mAしか流せないことが分かりました。カソード側は7本バラバラなので問題なのですが、アノード側は7個すべて点灯すると10mA×7=70mA必要になるのでFETスイッチングするようにしました。
150Ωでは少し暗めでしたので100Ωぐらいがいいのかなぁと思います。

次回は、PICのプログラミングについて語ります。

続きを読む ›

Posted in 技術情報


Pi:Co Classic Ver3 改造例(1)

Pi:Co3が発売されて、もう1.5か月が過ぎようとしています。
皆さんは、どのくらいマイクロマウスの開発が進みましたか?
さて、本日は、Pi:Co3のデバックの方法について語ります。
通常、マイコンの開発のデバックというと、JTAGという端子を使ってマイコン内部のレジスタの内容を見たり書き換えたり途中で中断することができるエミュレータという機械を使っています。
Renesas_E1

マイクロマウスの場合、止まっているときと動ているときの状態があります。止まっているとき、エミュレータを使ってデバックすることが可能ですが、動いているときにエミュレータをもってデバックすると、エミュレータのケーブルに引っ張られて走行の挙動がちがってしまいほしいデータが取得できないことがあります。

Pi:Coの場合は、LEDが前方に4つあるので走行中でも0~15の値を表示するとは可能です。しかし、0~15しか表示できないため、センサの値を表示することはできません。なぜならば、Pi:Co3のセンサの値は、50~2500ぐらいまで変化することと、4つのセンサがあるからです。Pi:Co3にはシリアル通信やUSBがあるではないか?と思いますが、有線の場合は、先ほどのエミュレータと同じ結果になります。

上級者はどのようにしてデバックをしているのかというとデバックの方法の1つして、マイコン内のSRAMやEEPROMなどにログを記録してあとで、吸い出して解析しています。今回は、ソフトウェアによるデバックの方法ではなく、ハードウェアを使ったデバック方法を紹介します。

Pi:Coで使用できるLEDは最大6個(前方のLED4つと電源監視用LED2色)。これでは、表示できるものは少ないです。そこで、7セグという表示機能を使用してみました。7セグは7個のLEDで0~9までの数字とそれなりのアルファベットを表示することができます。RT-RX631の余りのピンで7セグの制御することがぎりぎり可能ですが、7セグ1つでは、先ほどと同じように表示できることが少ないため、複数使用したくなります。
そこでPIC16F687を使用して、7セグを3つ制御するようにしました。RX631には、I2CやSPIなどの最新の通信機能が内蔵されていますが、Pi:Co3の余りポートに、I2CやSPI機能を用意していないため、むかしながらのUART(SCI)を使ってPICにデータを送っています。

IMG_1864
7セグに電圧を表示(.はまだ未実装)

実験的に製作したため7セグの明るさが少し暗いですが、7セグがあるのとないのとでは別次元になります。
特に2進数を読むことに苦労している方は、お~という感動があると思います。
IMG_1861
LEDに2進数の”13″と7セグに”13″を表示されてみました。
一目瞭然ですよね。

いま、この7セグを使って改良したプログラムのデバック中です。

他にいろいろと、改造をしているので、続きは後ほど。

続きを読む ›

Posted in 技術情報


RaspberryPi3にUbuntu 14.04とROS indigoをインストール

Raspberry Pi 3の発売されてしばらくたちますが、いまだに、公式にRaspberry Pi3 + Ubuntu + ROSの組み合わせが出てきません。
RaspberryPi3でUbuntu14.04を動いたという報告があったので試してみました。

RaspberryPi3にUbuntu14.04をインストールする方法

Ubuntu14.04をRaspberry Pi2で起動し、カーネルとブートローダーをアップデータする方法で試してみました。

1.RaspberryPi2用のUbuntuイメージ(2015-04-06-ubuntu-trusty.zip)をダウンロードます。
私はwindowsユーザーなので、Win32DiskImagerを使ってイメージファイルをMicroSDに書き込んでいます。

2.RaspberryPi2用のubuntuなのでスムーズにubuntuが起動します。
SSHからコマンドを入力できるように、先にSSHをインストールしました。

3.rpi-updateコマンドでカーネルを更新するのでrpi-updateとcurlをインストールします。

sudo curlのところでproblemが発生!!
curl_problem

証明書がないため怒られているようなので

でSSHの確認を無効化することで解決しました。

4.rpi-updateの後にrpi-firmwareのリポジトリのコミット履歴から該当するSHAを指定します。

指定したバージョンは4.1.19-v7+になります。

5.初期RAMディスクの設定をアップデートとeth0を認識させるため以下のファイルを削除します。

6.シャットダウンします。

ここまでRaspberryPi2で作業です。ここからは先ほど作成したMicroSDカードをRaspberryPi3に挿入してubuntuを立ち上げます。
エラー無くインストールできていればRaspberryPi3でubnuntu14.04が立ち上がります。

↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ここから Raspberry Pi 3で作業↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

7.パッケージの更新をします。

ROS IndigoをROS.orgを参考にインストールします。

8.source.listを設定する

9.キーの設定

10.ROSベースをインストールします。

11.rosdepの初期化

12.ROSの環境設定

13.ROSCORで起動できることを確認しました。
roscore

14.RaspberryPi3 ubuntu上でデバイスドライバをコンパイルについては、今度掲載します。

続きを読む ›

Posted in 技術情報