iSD超応援お節介記事!「iSD×マイコンを実現させたいのでPICマイコンを解説してみる!」

弾のでないモデルガンでシューティングを行い、

空き缶を飛ばせる夢のデバイス、

 

「iSD」

以前、この記事にてレビューを書かせていただきました。

 

今回、このiSDとそれを生み出したサークル切粉代表、家具屋さんに

大変感動いたしましたので、何か恩返しをいたしたいと思い、

超ウルトラお節介でしかありませんが、

サークル切粉さんがぶつかっている壁である、

「PICマイコン」について、解説したいと思います!!

そもそも何なのこの記事?

時は3/31Vショー数日前の3/27。

サークル切粉様公式ツイッターに、

Vショーに向け制作中のiSDの画像が載ってました。

 

それ以前に、同じくツイッターで、

ノートにリストアップされたパーツリストを見ていた私は

画像とともに、とあることに衝撃をうけました。

 

「こんな複雑なことをやっているのに、マイコン使ってないぞ!?」

 

iSDは、

「トイガンの作動音をマイクで感知して、

赤外線を照射し、

照射を受けたらターゲットを動かす」

という仕組みです。

 

音の発生は一瞬です。

 

しかし、赤外線センサが反応するには

ある程度の時間(ミリ秒、マイクロ秒レベルですが)

赤外線の照射が必要であり、

 

赤外線が感知するまで音が鳴りやんでも

照射する必要があります。

これが、「遅延」という動作です。

 

また、市販されていて、太陽光などの

ノイズ対策が施されている赤外線センサは、

赤外線を特定の周波数で照射する必要があります。

 

「自然界ではありえないON・OFF信号の羅列」のみ感知することで、

ノイズ対策を行っているのです。

 

当然、赤外線を照射する赤外線LEDを

特定の周波数で動かす必要があるため、

その「特定の周波数を作り出すこと」が必要になります。

 

これが「発振」という動作です。

 

他にも、

・感度調整をする可変抵抗電圧を計測して比較する

・電源電圧が変動しても回路には一定電圧を供給する

・的を動かすためのソレノイドを動かす

などなど、とても複雑な動作が必要になります。

 

・・・ここまで複雑になると、

私のような楽ばかりすることを考えている人間は、

「マイコンに逃げよ・・・マイコン使おう!」

となるのですが、

 

サークル切粉代表家具屋さんは、

純粋な電子回路のみでこれを達成されていたのです。

 

しかも、電子工作の知識がゼロの状態から。

 

正直、「努力の天才」というほかありません!

自分だったら無理です・・・

 

・・・ちょっと長くなっちゃいましたが、

そのことをツイッター上でご返信差し上げたところ、

 

「PICマイコンは途中まで勉強したが挫折してしまった」

 

とのこと。

 

その時は、自分がカートリッジ自動組立機で使用している

Arduinoというマイコンをオススメしたのですが、

Vショー当日会場にてその話になったときに、

 

「Arduinoだと一番小さなnanoというモデルでも、

サイズが大きすぎてスペースに収まらない」

というお話をいただきました。

 

また、

「PICマイコンは小さくていいが、

アセンブリで挫折してしまった」

ともおっしゃられていたんです。

 

・・・なぬ、アセンブリ?

 

アセンブリ言語でPICのプログラム作ろうとしたら、

プロじゃない限り死んじゃいます(;´Д`)

 

こ、これはC言語でPICプログラムする方法を

(お節介ながら)解説すれば、

「iSDを小型化したい!」という家具屋さんの願いが叶い、

 

さらに、

・スライド作動音で反応してしまう問題

・横スライドさせながら撃つと隣のターゲットも反応するかもしれない問題

を解決する糸口になるかもしれない!

 

と思い、超ウルトラスーパーお節介ながら、

今回の記事を書かせていただいたわけです!

 

マイコンって何?

さて、読者のみなさんはさっきから唱えられている宇宙人の暗号みたいな言葉が気になっていると思います。

・マイコン

・PIC

・Arduino

 

マイコンとは?

マイコンとは、簡単に言えば「小さなコンピュータ」です。

 

電子部品くらいの大きさながら、

パソコンと同じようにプログラミングして、

様々な計算・判断ができます。

 

小さいので普通のパソコンにはスペック的には遠く及びませんが、

それでも機械を自立して動かすくらいなら十分です。

 

身近な使用例と言えば、全自動洗濯機。

「水が溜まったから洗濯槽を回す」

「柔軟剤投入判断」

など、あれはすべて内蔵されているマイコンが行っております。

 

特に、全自動洗濯機では、洗濯スタートすると

水も入れてないのにいきなり洗濯槽がまわると思います。

 

あれは、

「洗濯槽をモーターで回してみて、回すのにかかった電圧・電流値から洗濯物の量(重さ)を測定している」

動作なのです。

 

それにより、必要な水量を割り出し洗濯を行っています。

こんな感じで、マイコンを使用すれば、単純な回路で複雑な動作が可能となります。

 

PICとは?

PICとは、マイクロチップ社が販売しているマイコンです。

「IC」といってよく思うかべるゲジゲジ部品の見た目をしていますが、

ICとは行えることが全くことなり、小さなコンピュータになっています。

 

ですが、これ単体に電池を繋げても動作せず、

電源を安定化させるための電源回路や、

使用したい機能にあわせた周辺回路が必要になります。

 

PICの特徴は、

・種類がたくさんある(大きさも大きいのから小さいのまで様々)

・小さい

・電源電圧範囲が広い

で、小さなデバイスを作るのには最適なマイコンです。

 

ただし、他の大多数のマイコンも同様なのですが、

・周辺回路が必要

・周辺回路にあわせたマイコンのたくさんの数値決定(レジスタ決定)が必要

・そのために全編英語(しかも専門用語)のマニュアルを読む必要あり

・しかも種類ごとにマニュアルが異なり、中のレジスタも異なるため、マイコンごとにほぼすべてのプログラムを書き換える必要がある

・プログラムをセットにして使いやすくした開発環境もあるが、有料。

 

などなど、初心者、趣味人に対してはあまり優しい環境とはいえないのが、PICマイコンの欠点でもあります。

 

Arduinoとは?

AVRマイコンというマイコンを用いた、イタリア発祥のプロジェクトから生まれたシステムです。

特徴は「とにかく使いやすい」。

 

他のマイコンと異なり、

・電源回路等必要な回路がパッケージ(シールドという名前)されて販売。

・そのパッケージを動かすためのプログラム(関数)がセットで付いてくるので作成する必要がない

・参考書が充実。(公式が出版している本だけで事足りる。)

・開発環境にモーターの可変速に必要なPWMプログラムや電圧を測定するAD変換プログラムなど、豊富なプログラムがセットでついてくるので思いついたアイデア即ためすことができる(しかも無料)

・使用するArduinoの種類を変えてもレジスタ変更などの必要性がない(開発環境側が勝手に変更してくれる)

 

というような、従来のマイコンの欠点を覆すような特徴を持っており、誰もが簡単にやりたいことができるシステムになっています。

 

余談ながら、カートリッジ自動組立機に使用するマイコン選定の際には、このポイントが非常に魅力的に映ったため、PICマイコンからArduinoに乗り換えました。

 

初心者には圧倒的にArduinoをお勧めします。

 

ただ、Arduinoはパッケージ化しているゆえに、どうしてもサイズが大きくなります。

一番小さな「nano」というパッケージでも、4cmくらいあるため、iSDのような小さなデバイスには不向きです。

 

PICマイコン遊びの記録

ちょっとだけ触れましたが、カートリッジ自動組立機を作り始めるまでは、

私の主力マイコンはPICマイコンでした。

大学院生の時に、中国製の1/16ラジコン戦車がはやったことがあって(Henlongというメーカーさん)、

そのブームにのっかったドイツ製の1/16ラジコンを購入したところ、

加減速が出来ない仕様だったので、ブチ切れて気に入らなくて大改造しました(^-^)

目指すは「タミヤ 1/16ラジコン Tiger Iのような重厚な走り」。

・・・なんかスパゲッティになってますが、車体中央左にある緑色の基板以外、全部自作の電子回路です。

狭い車内にいろいろと収めようとした結果、このような惨事に・・・。

大学生院生の頃に作ったので、ほこりかぶってますがご勘弁を。

コントローラーの受信機です。

PICマイコンです。

それぞれ受信機からの信号をもらい、解析し、モーター出力を計算してモーターを制御したり、砲撃の回路を動かしたりします。

左が電源回路、右がモーター駆動回路です。

電源回路はマイコンの電源を安定化させ、モーター回路はマイコンに制御され、モーターを駆動します。

排煙装置とその制御基板です。モーター速度に合わせて排煙の量を自動調整できるように制御しています。

 

キャタピラ(クローラー)を動かすPICのプログラムの一部です。

もう5,6年近く前のことになるため、古い開発環境でのプログラムになります。

 

こんな感じで、作り上げた戦車を動かしました。

実際のTiger I戦車の1/16になるよう、速度も1/16に調整したり、

砲塔回転が手動と油圧で異なる部分を再現するために

スティックの傾きで切り替えたり、色々遊びました。

 

後々、自動化しようとたくらんでいたため、

赤外線測距センサで出力電圧をAD変換で測定して、

距離を計算するプログラムを作ったりしていました。

 

iSDにPICを使うには?

さて、現時点でiSDにPICを使用するにはどうするか、考えていきます。

なお、これは1ファンとしての意見になりますので、ご参考程度に。

また、実際にPICを検討する際には最新の情報を調べてください。

(なにせ、もう5,6年触ってませんので・・・)

使用する言語

冒頭で「アセンブリ」という単語がでてきましたが、

これは、プログラムを記述する際の言語の一種です。

よく聞くC言語や、javaなどと同じです。

 

で、私としては複雑なことをPICにさせたいのであれば、

断然C言語をお勧めします。

 

なぜかというと、人間にとってアセンブルよりもわかりやすいから。

 

アセンブル言語はかなり初期の言語なので、

機械よりの言語となり人間にはわかりにくいです。

また、参考となるホームページなども少ない・・・

 

その点、C言語は昨今のプログラムではほとんどで使われている言語なので

検索しやすく、応用もしやすいです。

 

なので、使用言語はC言語を強くお勧めします。

 

開発環境と参考ホームページ

私がいじっていた時は、無料で使えるPICの開発環境といえば、

・MPLAB IDE

でしたし、それに使用できるC言語の開発環境は

・HI-TECH PIC C

でした。

なので、先ほどの戦車ラジコンのプログラムもC言語で書いております。

 

ところが、どうもHI-TECH PIC Cを制作していた会社がマイクロチップ社に吸収されたらしく、

新しい開発環境、

・Microchip XC8

というものに統合されたようです。

なので、使用したことないのに恐縮ですが、Microchip XC8を使用することをお勧めします。

 

詳しいことは、私が学生時代から参考にさせていただいている下記のページ、

エアーバリアブル:http://www.ne.jp/asahi/air/variable/index.html

の「Contents」内「無料のPIC最強開発環境」の下の方「インストール方法」を参考にしてみてください。

 

また、C言語自体が初めて、プログラミング自体が初めての場合は、まず参考書をご購入いただくことをお勧めします。覚えることがかなりあるので・・・

 

必要な機能の考察

おそらく、iSDにPICを使用すると下図のような構成で機能が達成できるのではないかと思います。

電子回路として必要なのは、大きく分けて以下の4つになるかと思われます。

・電源回路

・可変抵抗回路

・マイクの回路

・LED発光回路

・PIC

おそらく、PICの機能をフルで使用すれば、この回路構成で何とかなるのではないかと思います。

電源回路

個人的には一番これが小型化の障害かと思います。

マイコンは電源電圧範囲が非常に狭いため、電池電圧が変化しても一定に保つ定電圧回路が必要です。

基本的には三端子レギュレーターという部品で構成しますが、やっかいなのはマイコンの電源電圧。

PICの場合は3.3V、5Vの二種類の電源電圧が選べ、電源電圧範囲も他のマイコンに比べれば広いのですが、それでも±0.1V程度。

しかも、三端子レギュレーターは高い電圧をもらって、それより低い電圧で安定させる(減圧させる)部品なので電池を多く必要とします。

DDコンバータという昇圧させる部品を選択するという手もありますが、コイルなどの部品が必要となるため小型化に不向きである可能性があります。

絡め手でチャージポンプなどを実装するということも考えられますが、果たしてそれで電力がもつのかも疑問・・・

純粋に、電池と三端子レギュレーターをがんばって小さくまとめて実装がよいかもしれません。そのあたりはスペースとの相談です。

可変抵抗

感度調整のための可変抵抗です。

PICのアナログ入力端子に接続し、電圧をはかります。

マイクの回路

音を感知するマイクです。

音を電圧に変換します。

なので、PIC側で電圧を測定すれば、音が入ってきたかどうか、音の大きさをはかることができます。

LED発光回路

LEDを発光させるための回路です。

PICから直接出力できる電流は10mA程度なので、トランジスタやFETなどを使用して大量の電流を流せるようにした方が現実的かと思います。

PIC

PICの機能としては、以下の機能は必ず使用すると思います。

・AD変換

また、プログラムとしては、

・delay

は必須です。

もし必要であれば、

・TIMER

も使用するかもしれません。

 

AD変換

入力電圧を測定する機能で、測定範囲は0V~マイコン電源電圧までです。レジスタの設定などが必要となります。

delay

マイコンに「待たせる」命令です。使用する開発環境により仕様が異なるので詳しくは調べてみてください。

TIMER

時間を正確にはかる機能です。また、割込み機能を使用したい場合は必要となります。

 

プログラムフローとしては、

  1. AD変換でマイクの電圧をはかって記憶
  2. AD変換で可変抵抗の電圧をはかって記憶
  3. 両方を比較
  4. マイクの電圧が低かったら1へ戻る。高かったら5へ進む
  5. 赤外線LED点灯。
  6. delayあるいはTIMERで待つ。
  7. 赤外線LED消灯
  8. 最初に戻る

というような感じでしょうか。

 

使用するC言語の命令文

C言語の勉強としては、

・if文

・while文

の勉強は必須です。

if文

判断に使う命令文。

while文

繰り返し処理を行うときに使う命令文。

 

AD変換プログラム例

では、実際にAD変換プログラムを見ながら、主だったところを解説します。

なお、このプログラムはHI-TECH Cの時に書いたプログラムなので、現在では使用できない恐れがあります。

ご自身でプログラムを作成するときは、調べてから作成するようにしてください。

また、すべてを解説すると日が暮れてしまうので、わからないところはご自身で検索、でご容赦ください。

AD変換プログラム(PIC16F88、HI-TECH C)

#define _LEGACY_HEADERS
//省エネ版
//PICの読みこみ
#include<htc.h>

//delay関数のためのクロック周波数打ち込み
#define _XTAL_FREQ 10000000

//コンフィギュレーション
//オシレータモードHS、ウォッチドッグタイマNO
//パワーアップタイマNO、コードプロテクトNO
__CONFIG(0x3F62);
__CONFIG(0x3FFD);

//1msのディレイ関数
//ループディレイ関数にサイクル数制約があるので、希望の時間ディレイする関数を作成。電子工作の実験室参照。
//ms単位まつ
void delay_time_ms(unsigned int time){
while(time>0){
__delay_ms(1); //ループディレイ関数で1ms待つ。
time–;
}
}

//us単位まつ
void delay_time_us(unsigned int time){
while(time>0){
__delay_us(1); //ループディレイ関数で1us待つ。
time–;
}
}

//数字表示プログラム
void numeral(int number);
//電圧表示プログラム
void display(float voltage);

//センサーからの数字を表示する回路
void main(){

//変数の定義
unsigned long int advalue;
float voltage;
int time;

//PIC入出力を設定
//PORT_AはRA1~RA3,RA6は出力、他は入力
//PORT_Bはすべて出力
TRISA=0xb1;
TRISB=0;

//PORT_Bの内蔵プルアップ抵抗を接続しない
RBPU=1;

//RA0 ANALOG
ANSEL=0x01; //ポートAのアナログ/デジタル設定。RA0はアナログ。その他デジタル。
/*setup_adc_ports(AN0);
setup_adc(ADC_CLOCK_DIV_32);
*/

ADCON1=0x80; //右寄せ,clockは2つに分けない,Vref+=Vdd,Vref-=VSS
ADCON0=0x81; //ADCON1でADCS2=0なのでFosc/32,チャンネル0,A/DコンバージョンGOじゃない,A/D変換器電源オン
//A/D変換器の安定まで0.2秒まつ
delay_time_ms(200);

/*
//センサーからの読み込み+数字表示
*/

//無限ループ
while(1){

//AN0のADコンバータ変換
GODONE=1;

//A/D変換されたデジタル値がセットされるまでの時間待ち(50?)
delay_time_us(100);
//取り込み
advalue = ADRESH; //advalueにとりあえずADRESHを代入。ADFM bitが1なので、先頭6bitは0。
advalue = (advalue<<8) | ADRESL; //advalue内で8bit値を左にシフトさせ、ADRESLを入れるスペースをつくり、論理和で代入。
//変換
voltage = advalue*5.0/1024.0;

//数値の表示
display(voltage);

}

return;

}

#define _LEGACY_HEADERS

HI-TECH CはXC8になる前にも何度かアップデートしております。

その関係上、昔の設定ファイルをそのままでは取り込めなくなりました。

この命令文で、昔の設定ファイルを取り込むことをコンパイラに教えて取り込んでもらいます。

#include<htc.h>

各PICごとの設定ファイルを取り込んでください、という命令です。

#define _XTAL_FREQ 10000000

クロック数をここに記入します。

XTAL_FREQというのは水晶発振器のことで、外部に水晶発振器を取り付ける場合はこのように記述します。

PICに内蔵されている発振器を使用することも可能です。詳しくは調べてみてください。

__CONFIG(0x3F62);
__CONFIG(0x3FFD);

PICには様々な機能が実装されています。

__CONFIG( )でそれらの機能のON・OFFを設定します。

0x3F62などは16進数でして、PICはそれを2進数で読み取り、「0」だったらOFF、「1」だったらONにします。

void delay_time_ms(unsigned int time)

オリジナルで作成した(あるいはネットの作例をみて作った)関数です。

HI-TECH Cでは__delay_ms(1);のような形でdelay時間をmsで決定できるのですが、1000ms(1s)のような長い時間はそのままでは設定できません。

そこで、while文を使って1msのdelayを繰り返すことにより、長い時間のdelayを実現しています。

void delay_time_us(unsigned int time)

上記の1us(1マイクロ秒)版です。

void numeral(int number);
void display(float voltage);

測定した電圧を表示するオリジナル関数です。(今回は詳細を省きます)

void main(){

ここからが、実際にマイコンが行う動作を記述した部分になります。一般的に、メイン関数といいます。

TRISA=0xb1;
TRISB=0;

マイコンの各ピンの入出力設定です。こちらも16進数で表しておりますが、PICはこれを2進数で読み取り、「0」だったら出力、「1」だったら入力というように設定します。

PIC16F88は、電源端子(プラスマイナス)2本を除くと全部で16本端子があるので16本分の設定をここで行っています。

RBPU=1;

PICマイコンの罠。内部プルアップの有無を決めるレジスタです。これでよくトラブルになりますので、十分調べてから設定してください。

ANSEL=0x01;

デジタル入力かアナログ入力化の設定です。AD変換を行う際は必ずアナログ入力にします。

ADCON1=0x80;
ADCON0=0x81;

AD変換に使用するPIC内部のAD変換器を設定する部分です。PICマイコンのマニュアルを見て各レジスタを慎重に設定してください。

delay_time_ms(200);

先ほど作ったdelay関数をここで使用しています。200ms待ちます。

while(1){

AD変換を繰り返し行うので、while文で無限ループを開始します。

GODONE=1;

AD変換器にAD変換を指示する命令です。これで電圧を測定し、AD変換器の特定レジスタに保存されます。

advalue = ADRESH;
advalue = (advalue<<8) | ADRESL;

PICによるAD変換においてもっともわかりにくいところです。

PIC16F88は8ビットマイコンです。これは、「一度に8個のスイッチを操作することができる」というイメージを持ってください。

スイッチのオフを「0」、オンを「1」というようにPICは解釈します。

対してAD変換器は16ビット分の変換能力を持っています。

AD変換器はただ値をPICの特定のレジスタ(ADRESH、ADRESL)に入れるだけなので、処理のためにPICはそれを持ってこなければなりません。

なので、16ビット分の情報を処理するためにはPICは以下のように動作する必要があります。

  1. 16ビットのうち、とりあえず一番上から8個分のスイッチの位置を記憶する。→advalue = ADRESH;
  2. 次に残りの8ビットを1の後ろに入れられるように、8ビット分スイッチの位置をずらす。→advalue<<8
  3. 最後に空いた空間に残りの8ビットを入れて電圧(2進数)を完成させる。→advalue = (advalue<<8) | ADRESL;

プログラムを書いたときはここの理解に相当苦しみました。ですが、これをのりこえれば簡単です。

色々なところで解説されていますので、参照してみてください。

voltage = advalue*5.0/1024.0;

電圧は0~1024までの数値であらわされております。

ですので、人間がわかるような電圧値に変換する必要があります。

最大電圧は電源電圧(この場合は5V)ですので、このような式で電圧を計算します。

display(voltage);

作っておいたオリジナル関数で電圧を表示します。

return;

プログラムの終わりを示します。

 

PIC開発のコツ

最後に、PICプログラミングにおいてコツを書きたいと思います。

「マイコン名+使用したい機能(または実現したい機能)」で検索

ネット上にはPICマイコンで遊んでいるマイコンおじさんがたくさん存在します。

中にはマイクロチップ社の元社員だったり、日本のマイコンメーカー、ルネサスエレクトロニクス社の中の人だったりもいます。

そんな人たちが競うように、楽しそうに自身の作ったマイコンによる電子工作事例をプログラムや回路図とともにネットで公開しています。

 

なので、わからないことがあるならば、その人たちのプログラムを真似して、自分用にアレンジしたほうが手っ取り早いです。

 

かくいう先ほどのAD変換も、エアーバリアブルさんほかたくさんのページを真似させてもらって作ったものですし、ラジコン戦車のPWM用割込みルーチンもそうです。

PICのマニュアルには機能の解説は載っていますが、使い方は書いていないので、先人たちの叡智を遠慮なくつかわせていただきましょう。

 

調べ方は、表題の通り

「マイコン名+使用したい機能(または実現したい機能)」

で検索すればだいたい出てきます。

 

レジスタ探しはPDFの簡易検索でレジスタ名を入力

ADRESLなど、レジスタはPICマイコンを使う上でだいぶ悩まされるところです。

同じPICマイコンでも種類や型番が異なると同じ機能なのにレジスタ名が異なる場合が多々あるからです。

しかもレジスタの数が相当数あり、マニュアルは全部英語です。

しかし、そのレジスタをビット単位で設定しなければマイコンは意図通りに動作せず、でもそのビットを0にしたらどんな動きをするのかはマニュアルにしか書いていなく、でも英語で専門用語で読みたくない・・・

 

こんな場合はマニュアルPDF上で右クリック→簡易検索を選んで、出てきた枠にレジスタ名をそのまんま入力して矢印を押していくと、そのうち該当レジスタの解説部分にたどり着けます。

あとはグーグル翻訳など翻訳サービスを駆使して内容を理解してみてください。

iSDの問題点克服案

サークル切粉代表家具屋さんがiSDの問題点として挙げているのは以下の二つです。

・コッキングなどトイガンの作動音で作動してしまう

・故意に横向きに動かされると複数のターゲットが作動してしまう

これらについて、マイコンで対処できないか、ちょっと考えてみました。(あくまで案です)

コッキングなどトイガンの作動音で作動してしまう

とりあえずは、電圧に閾値を設けてみるのはどうでしょうか。

発火の際は大きな音がするので、普通に手で作動させた時よりは音が大きく、電圧も高いのではないかと。

ただ、実銃の世界でも火薬の爆発音より、機構の作動音の方が音の大きな部分を占めるとも聞きます。

 

で、ちょっと非現実的な案ですが、FFT解析というものがあります。

FFT解析とは、音を周波数とその周波数ごとの音の強さ(デシベル)に変換する操作のことです。

これをやれば、高い音、低い音の区別ができ、それごとの強さもわかるので、

火薬の爆発の際にのみ起きる周波数成分のみを抜き取り、その音の強さで作動可否を判定すればいいのではないでしょうか。

 

ただ、FFT解析のプログラムはかなり難しく、そもそもPICの処理能力でリアルタイム処理が可能かもわかりません・・・

と思っていたら、電子工作の実験室さんにありました。こちらのページです(左のフレームがなくなっちゃう・・・)

dsPICというシリーズなら関数が付いてくるとのことですが、dsPICは触ったことがないのでわからないです・・・

 

故意に横向きに動かされると複数のターゲットが作動してしまう

こいつは解決が難しいです。

・ターゲット側に赤外線の強さをはかるセンサーを用意し、閾値を設定して、一番強く照射を受けたものみ反応するようにする。

・ターゲット側にて照射時間を測定、時間に閾値を設定し、一定値以上を超えた場合のみ反応するようにする。

くらいでしょうか・・・これはいい方法を思いつきませんね・・・すみません。

 

最後に

以上、iSD超応援お節介記事!「iSD×マイコンを実現させたいのでPICマイコンを解説してみる!」でした。

1万文字をこえる大文量の記事、いかがでしたでしょうか?

 

紙面の関係上、詳細な説明を多々省いて居ります。

PICマイコンは、使いたい機種を決めて最初がものすごく大変ですが、

使い慣れるとこんなに便利なものはない、と感じられる素晴らしいツールです。

 

それこそ、「なんでもつくれるんじゃね?」と謎の全能感を味わうことができます。

 

最後になりましたが、この記事がきっかけで、

iSDがさらなる発展を遂げてくれたら非常に嬉しいです。

また、少しでもマイコンに興味をもっていただけたら幸いです。

 

P.S. Arduinoの場合

さて、現在、カートリッジ自動組立機で使用しているArduinoの場合、AD変換をさせるプログラムはどのようになるでしょうか。

以下は、オライリージャパン:「Arduinoをはじめよう 第3版」に載っているサンプルプログラムの抜粋です。

↓サンプルプログラム抜粋ここから↓

void setup() {
//注:アナログピンは自動的に入力として設定される

}

void loop() {
// put your main code here, to run repeatedly:
val=analogRead(0); //センサから値を読み込む

}

↑サンプルプログラム抜粋ここまで↑

 

・・・PICはなんだったんでしょうか。

 

ピン設定すらいりません。

ただ、PICでmain関数にあたる部分に

analogRead(AD変換したいピン)

を記述するだけです。

(もちろんこれだけじゃ人間が認識できる形で外部に表示されませんが、AD変換自体はこれで終了です)

 

PICでAD変換するのに何行つかいました?

PICのマニュアル何度頭抱えて読みました?

エアーバリアブル何度見に行きました?

グーグル先生に何度ききました?

 

・・・これを体験した時には、正直、あまりの簡単さに呆けてしまいました。

これくらい、マイコンは簡単になってます。

 

なので、もしこれからマイコンをはじめようとするのであれば、

Arduinoから始めるのを強烈にお勧めします。

 

私も、スペースに制約がなければ基本的にArduinoを使っていきたいと思います。

(小さくしなきゃいけないんだったら、PICを使いますが・・・)

スポンサードリンク

iSD超応援お節介記事!「iSD×マイコンを実現させたいのでPICマイコンを解説してみる!」” に対して2件のコメントがあります。

  1. のぶ@ジョブ・ジョン より:

    この記事を読んだ直後にこんな記事を
    見かけました。

    https://twitter.com/watch_akiba/status/1231569418645168128?s=19

    1. sho- mg より:

      コメントいただきありがとうございます。
      Arduino nanoはサークル切粉様とお会いした時も話題に上がりましたが、これでもまだ大きいそうです。
      もうちょっと小さいサイズが登場すればとても簡単にマイコン組み込みができそうなのですが
      なかなかに難しそうですね。

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください