Cat-Pot(2年目)始動!
進捗どうですか??
すごく残念なんですが,NHK高専ロボコンでうちの高専は全国大会に行くことが叶いませんでした.
とてもいい出来だっただけに,惜しかったと思います.
部活の雰囲気も明るく,真面目に取り組んでいるので来年こそは全国大会に行って,
ロボットの掲げる目的を達成できるはずでしょう.
さて,言い方は悪いのですが,うちの高専ではNHK高専ロボコンが終わるとオフシーズンと呼ばれる期間に入ります.(僕はNHK高専ロボコン中もオフシーズンでした.
オフシーズン中は様々な大会に参加したり,新たな機構や回路を試して,NHK高専ロボコンにつなげる活動をしています.
ロボカップでも,昨年は機構的なチャレンジで,オムニホイールを使わない複雑な形の4輪のロボットを製作しました.勝つことはできませんでしたが,機構や,回路で学ぶことは多くありました.
大会を通していろいろな知識を学ぶことができ,交流によりまた知識を広げられるのはいいことですね.
前置きは以上で,ここからが本題です.
今年もオフシーズンが始まりました.
チームCat-Potは,今年も皆さんが驚くようなロボットを作っていきたいと思っています.
どうぞ今年もよろしくお願いします.
LPC824M201JHI33の動作確認
今回はスイッチサイエンスさんより販売されているLPC824の石への書き込み法についてまとめようと思います.
スイッチサイエンスさんより販売されているものはこちら
https://www.switch-science.com/catalog/2025/
また石単体の販売はDigikeyから
http://www.digikey.jp/product-detail/ja/LPC824M201JHI33E/568-11572-ND/4975716
主な特徴を以下にまとめます.
・スイッチ・マトリックス
・豊富なADC
・mbedのオンラインコンパイラを利用できる()
いいことばかりですね().惚れちゃいそう(涙).
それでは本題に入りましょう.
書き込み方法(イカ醤油ぽっぽ焼き,FlashMagic)について以下にまとめます.
・書き込み準備
LPC824M201JHI33への接続
PIO0_12: ISP entry pin.
PIO0_5 : Reset pin.
PIO0_4 : TXD pin in ISP mode.
PIO0_0 : RXD pin in ISP mode.
また33ピンはGND,19ピンは3.3Vに接続.
LチカはPIO0_21で行います.
・プログラム
プログラムは以下の通り
#include "mbed.h"
DigitalOut led(P0_21);
Serial pc(P0_4,P0_0);
int main() {
while(1) {
led = 1;
wait(0.2);
led = 0;
wait(0.2);
pc.printf("Hello World!\r\n");
}
}
・注意点
スイッチサイエンスさんより販売されているLPC824のボードにはクリスタルがついていて外部発振となっています.このため,クリスタルを付けずに試す場合は,この点を変更しなければなりません.
mbed-srcをプログラムへインポートして
targets/cmsis/TARGET_NXP/TARGET_LPC82X/TARGET_SSCI824/system_LPC8xx.c
の
#define SYSPLLCLKSEL_Val 0x00000001
の項について
#define SYSPLLCLKSEL_Val 0x00000000
のように書き換えて内部発振をするように変更してください.
・イカ醤油ぽっぽ焼きによる方法について
サイト通りに試します.
https://developer.mbed.org/users/okano/code/ika_shouyu_poppoyaki/
先ほどの接続方法並びにプログラムとサイトの手順を照らし合わせて書き込みを行ってください.
printfdebugについては今回はTera termを用いました.書き込みの様子等も確認ができます.
・FlashMagicによる方法について
ISPモードに入れるため,リセットとISPピンについてスイッチでプルアップして接続しておきます.(図を参照)
初めに,ftdiケーブルやusb to serialモジュール等を用いて各ピンを接続します.
(注意 ftdiを使う場合はドライバのインストールも行っておいてください.こちらに詳しく書かれています.)
rx-- RXD
tx-- TXD
VCC- VDD
GND- VDD
まず,FlashMagicとHexfiletool(binからhexへの変換用)を用意します.
hexfiletoolを使用してbinからhexに変換します.(図を参照)
変換したhexファイルをFlashMAgicに入れます.また,図のようにFlashMagicの画面を合わせます.
ISPモードにいれます.
1リセットとISPを両方Lowにする
2リセットをhighにする
3ISPから手を放す.
以上の手順でISPモードに移行させます.
ISPモードに移行したらStep5-Start!より書き込みをスタートします.
Finishedとなったら書き込み完了です.Resetボタンを押してプログラムの動作を確認してください.
また,toolsのTerminalよりprontfによるデバッグ等が行えます.
以上簡単に説明しました.足りない点があったらまた加筆していこうと思います.
質問ありましたらどうぞ.
参考
イカ醤油ポッポ焼き味付けレシピ
https://developer.mbed.org/users/okano/code/ika_shouyu_poppoyaki/
lpc1114での遊び方
https://developer.mbed.org/users/ytsuboi/notebook/getting-started-with-mbed-lpc1114-ja/
LPCマイコン情報
パルスボールの検知について_ver2
どうもです.
先日のパルスボール検知についての記事の
投稿後,直接でないにしても,いろいろ間接的にコメントをもらったのでその件について試してみました.
以下には,コメントをわかりやすくまとめてそれに対する実験を載せます.
一つ目:普通にもっと読めるでしょ.
なるほど....実験が悪いのかな....
確かに読み込んだ後,そのまま遠くへ持っていくと読み続けます.しかし,そのあと読まない位置にづらしてからもとに戻すと,同じ位置でも読まなくなる現象が起きました.この場合,受光部近傍で手を振ることで,もう一度読み直すよくわからんことで改善するようです.試合中はできないですね...
外乱光とか実験条件も多分にあると思うので精密な実験はできませんでした.
二つ目:IRM2121はON直後長距離まで読めるよ.
これは,Gcraud の人がついったで言ってました.
そこで,任意に周期を弄れてかつ簡単なNE555でVCCにパルスを与えて距離を測ってみました.
とても読めたのですが,コメントをくださった方の言うとおり,素子の裏側でも読めたりと,壁をちゃんと作るかなんかしないと使い物にならない状況でした.しかしながら角度によってパルスの間隔は変わるので,距離によれば,問題はなさそうです.
以上二つ試してみました.
前半の実験では,ボールの位置がずれてしまうと検知が不可能になってしまいます.
一方後半の実験では,繰り返し電源をOFFにするため,回路は少しだけ面倒になりますが,長距離まで読むということは可能になりました.
今後は,後半の実験で組んだ回路をもとに壁の作成や,読める距離の調整等を行っていきたいと思います.
パルスボールを検知するためのセンサについて
名前がIRM2121となっていますが,たいていのものは使えるはずです.
/*IRM2121.h*/
#ifndef MBED_IRM_H
#define MBED_IRM_H
#include "mbed.h"
#define NAKATA 833 //周期833us
#define NOT_F 0
/** IRM2121 class, based on an DigitalIn pin, and a timer
* use RoboCup Junior Soccer to find PULSE BALL.
* Example:
* @code
* // Set Digital and read sensor.
* #include "mbed.h"
* #include "IRM2121.h"
* IRM2121 IR(p21);
*
* int main() {
* unsigned int length;
* while(1) {
*
* length = IR.Read();
* }
* }
* @endcode
*/
class IRM2121 {
public:
/** Create a IRM2121 object connected to the specified pin
**/
IRM2121(PinName IRM_PIN);
unsigned int Read (void);
/** Read the result
*
* @param none
*/
private:
DigitalIn _pin;
Timer _timer;
unsigned int _Time;
};
#endif
/*IRM2121.cpp*/
#include "IRM2121.h"
#include "mbed.h"
IRM2121::IRM2121(PinName IRM_PIN)
: _pin(IRM_PIN), _timer()
{
}
unsigned int IRM2121::Read(void)
// 0 means not valid.
{
_timer.reset();
_timer.start();
while(_pin){
if(_timer.read_us() > NAKATA){
_timer.stop();
return NOT_F;
}
}
_timer.reset();
while(!_pin){
if(_timer.read_us() > NAKATA){
_timer.stop();
return NOT_F;
}
}
_Time = _timer.read_us();
while(_pin){
if((_timer.read_us() -_Time) > NAKATA){
_timer.stop();
return NOT_F;
}
}
_Time = _timer.read_us() - _Time;
_timer.stop();
return _Time;
}
メンバーが決まりました!!!
今日は来年のロボカップに参加するメンバーが決まりました.
といっても今年とメンバーは変わらないんですけどね...(^^)今年残念な負け方をしてしまった悔しさから3人でまた参加することとなりました.なのでチーム名もCat-Potです!
大会まで1年あるので早めに作ってめちゃくちゃ練習して強いロボットにしたいです.
ところで今回は基盤の何枚かに両面基盤を使うつもりです.
部室でも一応両面基盤も作れるのですが,サイズが大きくなるとカット基盤一枚使う計算に...
そうすると一枚1500円で,3枚作ると4500円.高いなぁ.
外注で有名?なelecrowだと同じ大きさを5枚作って10000円くらいです.どっちがいいんでしょうね(T_T)
サイズがサイズなのでeagleのfreeでは限界がありKiCadに移行を試みているのですが,直感的でない操作が多々あってなかなかなじめません.ライブラリの作り方もいまいちでフットプリントの設定とか...もう心折れました. だれかいろいろ教えてくださいo(TへT)o
今日,明日は全国大会ですね.みなさんがんばです!!!!
来年のロボカップについて
早くも来年の話をしているのは,今年は挑戦の結果負けてしまったからなのですが,今年得たものはすごく大きいです.これを生かせるよう来年もロボカップに出場しようと思います.
さて,来年ですが,まず目標は世界大会で...(最後の年だし)
これから作っていくのですがこれだけは必ず守ろうと考えています.
・かけるべきところにお金をかける.
すべてにお金をかけるのでなく,かけなくてよいところ,ロボカップのロボットの場合ラインセンサとか超音波とかですね.ラインセンサなんかはお金のかからない高性能な回路を作りたいと思います.
最後に,チャレンジした人生のほうが後からみてかっこいいというのが持論です.(受け売りですが)
諦めたくなった時も諦めずチャレンジしていくことを誓いロボットを作っていきます.