忍者ブログ
RoboCup Junior Japan Rescue Kanto OB

             2005~2013
[43]  [44]  [45]  [46]  [47]  [48]  [49]  [50]  [51]  [52]  [53
今回の記事は電池についてです。

以前にもやったような気も致しますが、恐らく適当だったような気がするので、

もう一度最初から書いてみようと思います。


まず電池には、大きく分けると一次電池と二次電池に分けられます。

簡単にいうと、一次電池は充電できない使い捨ての電池、二次電池は充電ができて、繰り返し使える電池ということです。

まず一次電池には、主にマンガン電池とアルカリ電池の二種類がありますね。

マンガン電池といえば、安いとか、弱いとか、そういうイメージがありますが・・・


まぁ大体その通りです。

結構内部構造が原始的なので、性能は割と残念ですが、生産コストが異様に安いので、

需要が無い割に値段はかなり安いです。

しかし、電流をあまり流せないので、ロボット等のモーターを動作させる系の機器にはお勧めできません。

光ったりする程度の使用電力の低い機器に使われることが殆どです。

電圧はどれも大体1.5Vが標準ですね。




アルカリ電池は・・・説明するまでもないでしょう。今一番メジャーな一次電池ですね。

品質にもよりますが、大体1000~5000mA/hくらいなのではないでしょうか。

このmA/hという単位は時間分の電流で、電池の場合は簡単にいうと、

「一時間ずっとこの電流を流し続けると一時間で電池が切れますよ。」という指標になっています。

ちなみに、単1とか、単3とかっていうアレは、この電流量の違いで決まっています。

この電池も単体は1.5Vで構成されています。

ボタン電池や角電池だとそれより高い電圧になっているようにも見えますが、あれは中で電池を直列に繋いでいるだけです。だから1.5Vじゃなくても、1.5の倍数のハズ・・・


二次電池だと、今主に使われているのは、

・ニカド電池
・ニッケル水素電池
・リチウムイオン電池
・リチウムポリマー電池
・リチウムフェライト電池
・鉛蓄電池

この辺りでしょうか。あとは太陽電池?

二次電池についてはちょっと種類が沢山あるので、また別途紹介しようと思います。

という訳で、今回は一次電池の紹介でした。それではまた。

(^・ω・)ノ RadiumProduction in RoboCup Junior
前回の記事では、ポインタってなんなんだ?というお話をしましたね。

今回の記事は、ポインタの宣言の仕方や使い方について書いていこうと思います。


まずはポインタの宣言の方法から、

例えば、ポインタpを宣言するにはこんな風に記述します。

int *p;

変数の宣言と似ていますね。というか、間に*を入れるだけです。

これで、int型のポインタpを宣言することができました。

ここで注意するところは、ポインタを宣言する際は、使用する型の扱いについてです。

これは、実際にポインタに代入するアドレスの指し示す変数の型に合わせる必要があります。

つまり、今宣言したポインタpは、int型の変数のアドレスを格納できるということになります。


次は変数のアドレスの表現方法です。

例えば、変数xのアドレスは以下のように表現できます。

&x

つまり、変数名の前に&をつけてやることで、その変数のアドレスは表現することができる訳です。

だから、ポインタpに変数xのアドレスを代入しようと思ったら、

p=&x;

となりますね。

逆に、ポインタを使って変数の値を表現することもできます。

さっきの続きで、例えば、ポインタpが指し示す変数の値を示す時は、

*p

となります。だから今度はポインタの前に*をつけてやることで、そのポインタが指し示す変数の値、

つまりこの場合、変数xの値になる訳です。


だからこの場合、xと*p、&xとpはそれぞれ同じ値を示すことになります。


まずはここがちょっとややこしいですね。変数が&でポインタが*で・・・

宣言だけでこんなややこしいのがポインタです。

Cの中でも、特に難しいと言われる理由がわかって頂けたのではないかと思います。


次回の記事では、実際にポインタを使ったプログラムを書いてみようと思います。

それではまた次回ー。


(^・ω・)ノ RadiumProduction in RoboCup Junior
今日は一年生のおーでーの講習に乱入してきました。


まぁなんでこんなことになったかと言いますと、

まず、PIC同士の相互のI2C通信に成功したのが大きいです。

これは、何故かクロックストレッチが無効になってしまっていたのが原因でした。

一度有効にしてるのに、再度有効にして・・・そしたらできました。

結局ここに行き着くのに3日かかってしまいましたね。

オシロがあっても信号自体はごちゃごちゃで見れないのでやっぱり難しいです。


それであぁよかった。

なんて思っていたら急に第六感的なアレが働いて、講習会に乱入しなきゃいけないような予感がしたんです。

それでそれを頼りに講習会に乱入してみたら・・・


何故か最後に1,2年生相手に講義(笑)をすることに。予感ってこれのことだったのか・・・?


内容はプルダウン抵抗について。

以前にこのブログでも話題になったかと思います。

なんでそんな流れになったのかさっぱりですが、話をしてきました。


まぁなんとか一年生にはわかって貰えたようですね。良かった良かった。


そしてその後、また部室に戻って、今度は超音波センサーの実験を行いました。

もちろん型番はMaxSonar社のLV-EZ1です。
超音波センサー。意外と曲者でしたねぇ。
送受信一体で出力もアナログ、

しかも検出角範囲が狭いという代物です。しかも3150円と安い!

コレのテストを行ったのですが・・・

何度やっても値が出ない。

オシロで直接測っても出力が出ていなかったのです。

これはおかしいと四苦八苦。繰り出された結論は・・・


検出距離長すぎ(笑)


6m以上の距離を検知するような仕様だそうなので、

従って数10センチの距離変動では、数10mA程度しか値が変わらなかったのです。

という訳でオシロのレンジを変更、再び調べてみると・・・


なんだ。読んでるじゃないですか。

という残念なミスによって使えるセンサーを一個葬りそうになった今日この頃でした。


(^・ω・)ノ RadiumProduction in RoboCup Junior
今日はもう・・・相当な事故り様でしたね。

全員が全員酷かったなぁ。特に安定の副部長!!


そんな今日は、さりげなくちゃんと部活もやっていたり。

今日取り組んだのは、コンパスセンサーHMC6352という型番です。
HMC6352というコンパスセンサーです。I2Cバスに対応していますね。
http://www.alpha-crucis.com/en/accelerometers-gyros-compasses/1607-compass-module-hmc6352-0845156000517.html

昨日辺りからプログラムを作ってはいたのですが、謎の値を読み出さない現象が発生していました。

これがとっても厄介な状態で、I2Cの通信自体は成功していて、結果も返ってくるのに、

何故か一部の方位の値のみを返さなかったんです。

今日はそんな謎の状況と戦っていました。


それから、戦うことだいたい一時間。

とりあえずちゃんと値を読み出すことに成功しました。

結局原因はタイミングやらノイズやら。

色々重なった結果のようです。


最後面倒になって一気にパラメータを変えたらなんか成功しちゃったので、

最終的に何がいけなかったのかは・・・謎です。

まぁとにかく成功しましたっていう報告です。


今できていないのは・・・後はPICでのI2Cの相互通信だけなのですが・・・何が原因なんだろう。

とりあえず明日、通信速度を下げてもう一度やってみようと思います。

24Fならできるのに、なんで16Fだとこうも時間がかかるんだろう。

謎は深まるばかりです。


(^・ω・)ノ RadiumProduction in RoboCup Junior
特に文章にする気はないのですが、まぁメモ的なアレも込めてNXTコネクタのピンアサインでも載っけます。

ピンアサインとは要するにピン配置のことですね。つまりどの端子が何に繋がっているかを示したものです。

どっちかっていうとこの場合ピンアサインよりインターフェイスの方が正しいのかな?日本語難しいです。

ピン番号 入力 出力
1 アナログ モーター1(+)
2 GND モーター2(-)
3 GND GND
4 +4.3v +4.3v
5 DIGI0/SCL/RS485A TACHO0(A signal)
6 DIGI1/SDA/RS485B TACHO0(B signal)


まぁだいたいこんな感じですね。

出力側の5、6ピンは要するにモーター内のエンコーダー、つまり回転センサーの信号の部分です。

後はRCXケーブルに該当する部分は入出力共に1,2ピンであるということぐらいでしょうか。

後は特記することもあまり無いような・・・。という訳でメモ書き程度に。


(^・ω・)ノ RadiumProduction in RoboCup Junior


という訳で、全く脈略もないままに16F19XXHITECコンパイラでのPWMの作動方法について書くことになりました。


PWMについての説明やらなんやらはもう以前の記事で再々やっているような気がいたしますので、

ここでは省略させて頂きます。

という訳で今回はプログラムのお話を。
因みに今回の記事はデータシートが手元にあることを前提としていますので、レジスタの中の詳しい紹介等は行いません。

まず、PWMを行なうにはタイマーの設定が必要です。

これは要するに波の周期を決定するために使われるもので、一般には慣例としてタイマー2が使われるようですね。

別に1でなければどのタイマーでも大丈夫なはずです。

タイマーの設定をするレジスタはT2CONレジスタ。

今回は特に何か指定することもなかったのでEnable、つまりタイマーを有効にする設定のみを行なっています。


あと重要なのが、PR2レジスタで、この値でPWMの周期を決めます。

この値はある計算値を基にして求められるのですが、わざわざ求めなくても、

データシートにPRレジスタの値と主なPWM周期の表が載っていたりします。

ということで今回はこの表に基づいて0xFFとしました。これだと周波数は31.25kHzになりますね。

因みに計算式もその表の付近に載っています。


こんな感じであっけなくタイマーの設定は終了。タイマーのレジスタについてはまた別途の記事で詳しく説明します。


そして今度はPWMの設定。PICではPWMはCCPとかECCPというモジュール内に含まれている機能ですので、

このCCPのレジスタを利用してPWMの設定を行います。

まずは、CCP2CON、今回はCCP2を使うのでこのレジスタを使います。

このレジスタは

ビット7-6:拡張PWMの設定

ビット5-4:デューティ比の最下位2ビット

ビット3-0:モードの選択

となっています。

今回は拡張に興味が無いので7-6は00、

デューティ比はこのPICの場合、最高10ビットで設定出来るようなので、下位ビット分がこんなところで設定できます。

でも、下位ビットっていうと1か2の違いですから、正直どうでもいい。どっちも00でいいでしょう。

3-0は当然PWMの設定になりますね。ECCPの場合はアクティブハイがどうたらと書いてありますが、

どちらもアクティブハイでないと後々面倒なので全部アクティブハイになる1100でいいでしょう。



こんな感じでPWMの初期設定は終了です。

あとはCCPR2Lレジスタで上位8ビット分のデューティ比をプログラム内で設定してやれば

後は勝手にモジュールの方が波形を出力してくれます。

因みにデューティ比は実際には、 設定した値/4(PR+1) になります。

なのでそのあたりはちょっと注意が必要です。


でもこの値ってよく考えるとPRがFFだと分母は10進数で1024になりますよね。

だから単純に1024段階と思って頂ければ何も考えることは無いかと思います。


とまぁPWMのプログラムはこんな感じ。

細かいレジスタ等の紹介はまた別途で行いたいと思います。

という訳で今日は最後に適当なプログラムを乗っけて終了です。このプログラム動いたっけかなぁ・・・?

もしかしたらPICのヘッダをhtcかそこら辺にしないと動かないかもしれません。
 
#include "pic16f1939.h"
#define _XTAL_FREQ 32000000
 
__CONFIG(
FOSC_INTOSC & WDTE_OFF & PWRTE_ON & MCLRE_OFF & CP_OFF
& CPD_OFF & BOREN_OFF & CLKOUTEN_OFF & IESO_OFF & FCMEN_OFF
);
__CONFIG(
WRT_OFF & PLLEN_ON & STVREN_ON & LVP_OFF
);
 
 
int main(void)
{
PORTA = 0b00000000;
PORTB = 0b00000000;
PORTC = 0b00000000;
PORTD = 0b00000000;
ANSELA=0;
ANSELB=0;
ANSELD=0;
TRISA = 0b00000000;
TRISB = 0b00000000;
TRISC = 0b00011000;
TRISD = 0b00000000;
 
OSCCON=0b01110000;
 
CCP2CON = 0b00001100; //PWMモードにする
PR2 = 0xFF;
T2CON = 0b00000100; //Timer2 Enable
 
while(1)
{
CCPR2L = 0x80;
}
 
}

(^・ω・)ノ RadiumProduction in RoboCup Junior
ロボカップジュニアレスキューにおいて、一番最初に現れるであろう課題がライントレースというものです。
ライントレース中のロボットの写真。これがあの有名なSAINⅩⅢです(笑)
ライントレースとは、床に描かれたラインをロボットが辿る(トレースする)動作のことで、工場のライン等に使われています。

基本的にはロボットの下部にラインセンサーと呼ばれるセンサーを搭載して、

そのセンサーからの情報を元にロボットの動作を決定するような仕組みです。

ラインセンサーにはよく、赤外線の反射型の光センサーが使われます。

これは、センサーから光を放出し、床に反射した反射光の量を測定するセンサーです。

反射光の量から床の色の明暗がわかりますので、だいたの色を把握することができます。

しかし、モノクロにした際に色の違いがわからないような色同士だと、やっぱり区別がつきません。

という訳なので、ライントレースを行わせる際にはラインの色と床の色の明暗をはっきりとさせる必要があります。

ロボカップの場合はラインの色が黒、床の色が白となっています。

これをロボットにトレースさせて、競技を進行していく訳です。

ロボットによってセンサーの数は様々で、

1個でライントレースするロボットもいれば、10個以上使用するロボットも存在します。前に作ったロボットだと12個あったっけかなぁ。

また、LEGOだと赤外線ではなく、普通の赤色LEDを使用していますね。

以上がライントレースの簡単な紹介です。

簡単なので、特に課題とするまでもなさそうですが、これにギャップやら串やらが加わると難しくなってきます。


そもそも、これが出来れば一階はほぼ完璧ということになりますので、

ノード大会くらいならこれだけで突破できるのではないでしょうか(笑)

まぁ今ロボカップ自体のレベルはどんどん下降傾向にありますから、

この辺りができていればまぁなんとかなるのではないでしょうか。


という訳で今回の記事はこの辺で。

(^・ω・)ノ RadiumProduction in RoboCup Junior
ロボカップをやっていると、やっぱりどうにも、機械も回路も両方なんとかなる人が出来上がりますよね。

僕もそれは例外ではなく、色々意味不明なものを作ったりもしています。

今日は家の倉庫と呼ばれる部分からコイツを掘り出してきました。
電動ノコギリ、略して電ノコです。

電動ノコギリ、略して電ノコですね。小、中学校の図工や技術の授業で一度は見たことがあるのではないでしょうか。

経緯は知りませんが、何故かうちにはコレがあるんですよね。

ウチは工学系の高専なんだからわざわざ掘り出さなくても学校でやればいいじゃないと思うかもしれませんが、

うちの学校の機械科って金属加工が専門なので金属加工しかできないんです。

実は電ノコが一台も無いと噂されています。使えない旋盤はあんなに沢山あるのに・・・。

勿論刃も金属用しかありませんので、金属加工以外の加工はこの学校ではできないんです。

という訳でそれ以外の加工をしようと思ったら・・・採掘作業が始まるわけです。


まぁ実際金属以外実用はあまりしないような気がするのでこれが普通なのでしょうけど、ちょっと意外な気もしますよね。
うちとしては、金属は重いから余り使いたくないので,金属以外のモノも加工できるような子を導入して欲しいですけどね・・・

そんな感じで今日は採掘とレポートの一日でした。それではまた。


(^・ω・)ノ RadiumProduction in RoboCup Junior
今日は秋葉→池袋→練馬と慌ただしい一日でした。お台場にも行こうかと考えていたのですが、体力的に断念しました。


まずは秋葉、秋月千石スパラジのいつもの短時間巡回コースでした。

秋月では、PIC16F1823という小型のPICを購入しました。

12ピンのPICですが、アナログピン6個搭載の上、MSSPが搭載されているので、

サブPICとして非常に優秀な機能を持っています。

そして、千石では・・・何も買わなかったなぁ。

欲しいものが売ってなかったので・・・


という訳でそのままスパラジへ。

スパラジでは、とりあえずこの辺を買い漁りました。
この前買ったYOKOMOのバッテリーやら端子やらです。
なんかしばらく見ないうちにT字コネクタ安くなってるし・・・

回路制作において、一番金がかかるのがコネクタなので、これは非常に嬉しいです。


それで今度は池袋。東急ハンズに行ってきました。

ハンズでは、とりあえずポリ板買いました。

別にハンズである必要はなかったのですけど、練馬に行くついでだったもので・・・。


という訳で最後に練馬に行ってきました。いつものようにTruthですね。

ついたらいきなり模様替えが行われていたのでかなり焦りましたね。なんか棚運んでる・・・


それでお仕事終了、家に帰ってきて今に至る感じです。


それにしても秋葉から直で池袋ってだいぶ事故っているような・・・。残念な街ツアーをしてしまいましたね。

まぁでもこれで大体買いたいものは買ってしまったので暫くはどこにも買い出しに行かなくて済む・・・よね?


(^・ω・)ノ RadiumProduction in RoboCup Junior
今日はイオンの5%OFFの日ですね。


今回の記事はポインタについてです。

今回は一回目なので、また例の如く、ポインタってなんなんだ!?という概念的な説明を行います。


ポインタはC言語の基本のなかでは最上級に難しい部類に入りますので、

ここが理解できるかどうかで、C言語が出来るようになるかどうかが決まると言っても言い過ぎではないと思います。

というわけで内容に入る訳ですが、まずポインタの前に、アドレスというものについて紹介します。


アドレスとは、端的にいうと、変数の格納場所を示す数列です。住所みたいなものですね。

コンピューターの場合、変数は一次元で配列されていますので、

上から何番目の変数かが分かればそこが指し示す変数は一つに特定されます。

実際にはアドレスは、メモリ内における変数の値の保存場所だと思って頂ければ大丈夫です。


それでポインタというのは、そのアドレスを保存する変数という位置づけけになります。だから変数の仲間のようなものです。

このアドレスをポインタに格納することによってプログラムをもって効率的に走らせることが出来るのですが・・・

ちょっと複雑なので、今まで以上に記事を分けて紹介することになるかと思われます。

という訳で、今日の記事はこのくらいで。

最近NXTやってないなぁ。


(^・ω・)ノ RadiumProduction in RoboCup Junior
またI2Cが動かなくなりました。

なんていうか、アドレスをずっと送り続けているのか、SSPBUFが空になっていないのか。

原因は不明です。

とにかくまともに動作をしなくなってしまいました。

プログラム変わってないのに・・・おかしいなぁ。


とりあえず、訳がわからないのでプログラムを書き直すことにしました。

回路にも異常はないし、一体なんなのでしょうね。

とにかくこれは解決しないと・・・

今回作成した基盤はi2cがないと話にならない仕様なので困りましたね。

参考資料も乏しいので嫌な予感がしますがもうちょっと頑張ってみようと思います。


(^・ω・)ノ RadiumProduction in RoboCup Junior
カレンダー
08 2024/09 10
S M T W T F S
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
最新CM
[05/09 ONE RoboCuper]
[05/07 HDD ほしいよー]
[04/21 ブラック3辛]
[12/26 bols-blue]
[06/08 ONE RoboCuper]
かうんた
カウンター カウンター
らじぷろ目次
らじぷろ検索機
プロフィール
HN:
Luz
性別:
男性

PR

忍者ブログ 2007-2021,Powered by Radium-Luz-Lα+-Rescatar in RadiumProduction [PR]


Related Posts Plugin for WordPress, Blogger...