忍者ブログ
RoboCup Junior Japan Rescue Kanto OB

             2005~2013
[73]  [74]  [75]  [76]  [77]  [78]  [79]  [80]  [81]  [82]  [83
最後に残ったC言語の主な条件文がこのswitch文です。

ちょっと前に紹介したif文の派生系みたいなものでしょうか。

基本的なswitch文のプログラムはこんな感じになります。


#include <stdio.h>
int main(void)
{
     int x;
     printf("数字を入力してください。");
     scanf("%d",&x);

     switch(x){
  
       case 1:
       printf("入力された数字は1です。/n");
       break;

       case 2:
       printf("入力された数字は2です。/n");
       break;

       case 3:
       printf("入力された数字は3です。/n");
       break;

      default:
       printf("1、2、3以外の数が入力されました。/n");
      }

     return 0;
}


数字を入力し、それが1か2か3だったら「入力された数字は~です。」と出力し、

それ以外の数字なら、「1、2、3以外の数が入力されました。」と出力するプログラムです。

switch文はこのようにcaseというものとセットで使います。

switchのカッコ内に入れた値とcaseと:の間に入れた値が等しければ、

それ以下のプログラムを実行するようになっています。

なのでxの値が1ならcase1以下の文を、2ならcase2以下の文を、3ならcase3以下の文を、それぞれ実行します。

xの値がcaseのどれにも該当しない場合はdefault以下の文を実行することになります。

このdefaultは省略することもできます。

そして最後にbreak;をつける。これがswitch文の定型となります。(defaultには無くても良い)


このbreak;という文ですが、これはbreak文といって、これもひとつの構文になっています。

これはどういう命令かというと、「一番中側の中括弧から抜ける」命令です。

例えばさっきのswitch文ですが、

あのプログラムでは例えば、case1のときの処理とcase2の間にbreakがありました。

あのプログラムだと、case1の処理が終わったら、breakを使って、switch文の中括弧から抜け出ているのです。

もしあそこでbreakをいれなかったら、xの値が1だったときに

case1の処理を行った後でcase2の処理を行ってしまうことになります。

もっと単純な例を出すと、whileでの無限ループの例、

int x=0;
while(1){
     if(x==100)
           break;
     x++;
}

このようなプログラムがどこかにあったとします。

これはwhile文で無限ループをしていますが、xが100になると、if文に入って、breakします。

つまり、このwhileループを抜けでるのです。

このようにbreakはswitch文以外でも、様々な条件文で使用することができます。


「一番中側」という定義があるのは、

こういった場合は、永遠にループから出られないということです。

int x=0;
while(1)
{
      while(1)
      {
           if(x==100)
            break;
      x++;
      }
}

中側のループはbreakで出られますが、直ぐ外側のループによってまた戻ってしまいますからね。


このような文がbreak文です。似たようなもので、continue文というものがあります。

これはbreakと逆で、ループの一番最初に戻ると言う構文です。

なのでプログラム内で、これがあれば、一番中側の中括弧の部分の一番最初に戻ると言うわけです、

つまりこれも無限ループです。


#include <stdio.h>
int main(void)
{
     int x;
     printf("数字を入力してください。");
     scanf("%d",&x);

     switch(x){
  
       case 1:
       printf("入力された数字は1です。/n");
       continue;

       case 2:
       printf("入力された数字は2です。/n");
       continue;

       case 3:
       printf("入力された数字は3です。/n");
       continue;

      default:
       printf("1、2、3以外の数が入力されました。/n");
      }

     return 0;
}

最初に1,2,3以外の数字を入力しないと、無限にループします。

コンパイラによってはこれだとエラーがでるかもしれませんけど・・・

こっちはbreakと違って、結構使いどころが限られそうな構文ですね。


とりあえず今日はswitch文とbreak文とcontinue文についての紹介でした。


次は・・・フリプロセッサかなぁ。まぁなにかしら紹介すると思います。


それでは今日はこの辺で・・・


(^・ω・)ノ RadiumProduction in RoboCup Junior
最後まで残ってたNXTを今日完全に直しました。

ちゃんとつくようになったよ!


なんとか・・ですね。秋葉行って、NXT直して・・・

って部活してねー!(笑)


とりあえず缶を避難場所に置くことができることを確認できたので、今日の活動は終了です。


それではー。

これらのNXTの話

(^・ω・)ノRadiumProduction in RoboCup Junior
結果がこれだよ!
KC270036.JPG


















この袋の大きさを見ろ!(笑)

今日の主な戦利品は

ペンタブ(2900)

タブレットPC(2万9800)

半田こて台(580)

LANルーター(1480)

そしてサングラス(3900、一番の事故)です。

前半二つもかなり事故ってますが・・・やっぱり最後の事故が凄まじいですね。


まぁこのサングラスの話はまた今度するとして、とりあえず今日のアキバの話。

とりあえず、まず人が少ない。まぁこれはコミケの影響でしょうね。今日からですから・・・


そして液晶とSSD、特にメモリの暴落が酷いことになってる・・・ちょっと前にUSBの第3次暴落がおきたところなのに・・・

そしてソフマップで無線LANルーターが大変なことになっていました。

11nの高速で通常4800円の品が1480円という状態、期間限定特価だってさ・・・。

今のアキバ、どうなってんだ・・・色々ととんでもないことになっています(CPUの暴落も相変わらずだし・・・)


今日買ったものだけで考えても、同じ(ような)ものを去年買おうとしたら

おそらく倍以上かかるでしょうね・・・

まぁタブレットPCとか去年はなかった気もしますが(笑)


という訳でいろんな物の価格が暴落している秋葉から?の報告でした。


(^・ω・)ノ RadiumProduction in RoboCup Junior
 
ノー勉で受けた電子回路のテスト


なんか知らない公式を書け。という問題が多数出てきたので悲惨な結果・・・になるはずだったのですが・・・

なんか適当に考えた公式の6式のうちの

全てが正答にクリーンヒット(笑)


なんと全問正解になりました。

あれ?レベル上がったかな?

事故ったはずの試験がまさかの大逆転劇。


ここで得た結論は

「わからない回答はとりあえず適当に書いてみよう」ということで・・・。


それでは今日はこの辺で(笑)

(^・ω・)ノRadiumProduction in RoboCup Junior
あと若干3ヶ月半。副部長のロボットがそこにあったはずなのに、今はもうNXTとモーターが転がっているだけ。


どういうことなの・・・(泣)

そして僕はといいますと、4月の終わりに使ったロボットがそのまま大会にでることになりそうです。

チームメイトはワンワンに出てるからね。とりあえずこっちはおあずけなんです。

という訳でロボットのメインはぼくがつくっているんですが・・結局原点帰り(笑)

因みに、今年はセンサーの数を例年より1桁少なくしてみることにしました。


加速度とか、コンパスとか、昨年と使っているセンサーはあまり変わらないのですが、

なぜか総数が半分くらいになっているような・・・

とりあえず今のところ、
ライトセンサ-3個
タッチセンサー2個
通電センサー1個
加速度センサー1個
コンパスセンサー1個
超音波センサー1個

で行こうかな・・・


とかいって結局増えるんですよね、例年のパターンだと(笑)

本当はライトセンサーは5個欲しいのですけど、ちょっと搭載する幅が足りない・・・


どうにかならないかなぁ。


(^・ω・)ノRadiumProduction in RoboCup Junior
忍者ブログはどんどん改悪が進んでどんどん使いづらくなっていきますね。最悪。

とりあえず今日も「ちゃんと」部活を行いました。

一年生も真面目にロボットを作り、僕もアームを作り、

総書記様は・・・

サマーチャレンジのフィールドを作っていました。
サマーチャレンジのフィールドです。
というより作らせたんですけど’(笑)

という訳で彼によって生み出されたそのサマーチャレンジフィールドは1階の未来工房に置かれることになりました。

ちょうど模造紙2枚分くらいのサイズですかね、というより模造紙2枚そのものですけど・・・

結構人出余ってた感が否めなかったけど、一人で頑張ってくれました。お疲れ様です。


でも本番18日前にフィールド完成で調整開始って・・・おい(笑)

まぁこれでも例年よりは2週間以上活動開始が早いんですよ。

それに、いつもだったらフィールドなんて作りませんし。(というより作れる場所が・・・なかった(笑))

本番当日の調整が初調整!なんて状態だったりしているんです。

それに比べれば随分の進歩ですよね。


まぁそれでも子供たちに比べれば極端に遅いですよね。

まだプログラムどころかロボットができている人が誰もいませんから(笑)


まぁと云うわけで、今日は活動の第一歩、フィールド作りを総書記様が行ってくださいました。

でも彼・・・サマーチャレンジでないんだよね(笑)


そして同じようにサマーチャレンジに出ない副部長、彼はレスキューロボットを作っています。

今日になって、やっと今までの課題であった、ライトセンサーの取り付けが終わったらしいのです。


でも、できた!と叫ぶ彼の手の中には・・・某TAKUMI臭が否めないような物体が存在していたのです・・・。


・・・。


After,he was mad and  shouting "Mirakurun! Mirakurun!" while running.


どうやら人生の壁にぶち当たったようです。強く、逞しく生きてください。

ついでに僕の進行状態ですが、とりあえずアームっぽい何かはできました。

缶がずるずるーっとなる残念な現象は解決したので悪しからず(笑)

そんな感じで今日の部活は終了です。


それとあの恒例のゆるゆりは部活動の一環で・・・は・・・ない・・・か・・・?も。

まさか2回リピートする羽目になるとは思ってなかったんだ。急展開すぎたんです。仕方ない(笑)


(^・ω・)ノRadiumProduction in RoboCup Junior

P.s 近々、NXTの修理録でも書こうかな。
とりあえず、今日は被災者を助けるアームを作っていました。

去年は色々と吹っ切れた機構を使ってしまい、ライントレースに支障・・・というより死傷がでてしまったので

今回は・・・その・・・もうちょっと小型のものを使おうかな・・という雰囲気になっています。

まぁまだアームで行くかも確定ではないのですけど・・・


とりあえずいろいろ作ってみています。

そろそろやらないと時間的にも厳しいですからね。


それはそうと・・・サマーチャレンジにでるうちの高専生・・・

未だに何もやってないんだなぁこれが(笑)

若干一名ロボットを作り始めてはいるのですが、全体的に間に合わないだろ(笑)

さて、みんなどうするつもりなのでしょう。

やっぱりテコ入れいるかなぁ・・・。


そうそう、副部長が今年はPICで出るそうです♫(本人談)


(^・ω・)ノRadiumProduction in RoboCupJunior
恐ろしいレベルの雨が降ってたのでやめにしました。コワイコワイ。


という訳で今日はずっと自宅ニートです。ロボット・・・作ってないなぁ


とりあえず今のうちにサマーチャレンジの競技、レスキューについての紹介をしちゃいましょう。

まず、競技フィールドは通常のレスキューフィールドで行います。

でも、競技の内容が全然違う・・・シンガポール世界大会の時のレスキューCに似てますね。

まぁあれよりはだいぶ楽な競技ですけど・・・

競技の流れとしては、まず2台のロボットで競技を行います。

スタートは2台とも1階の一部屋目で、時差スタートになっています。

一台目のスタートから30秒以降ならいつでもスタートができます。

只、競技時間の8分は一台目のスタートからの計測なので

二台目のスタートのタイミングには気を付けないといけませんね。



それでもう1階の二部屋目からラインがありません。

部屋の中央に缶の被災者が置かれていて、

部屋の四隅のどっか(実質2カ所しか可能性はないけど)にプライマリの避難場所があります。


また、そこからさらに坂を上った2階の部屋のどっかにも被災者がいます。

2階には、避難場所が二つあり、片方はプライマリ用の避難場所、片方はセカンダリ用の避難場所です。


これも部屋の四隅の何れかに置かれます。

全ての被災者をどこかしらの避難場所に置くことで競技は終了となります。


被災者に2対して避難場所は3、これには理由があり、置いた避難場所によって得点が変わってきてしまうのです。

簡潔に言うと

2階セカ>2階プラ>1階

となります。

つまり、一番高得点を取れるのは、2階のセカンダリの方の避難場所に缶を二つとも押し込む方法ですね。

でもそれをするとなると、被災者を持って坂を上ったり、倒さずに2つの缶をあの狭い中に押しこむ必要がありますね。

さて、こんなことができるチームは現れるのでしょうか・・・

チームは当日のくじで決定するので、いくら自分のロボットが優れていても、相手もそうでないと・・・難しいですよね。


まぁそういったパフォーマンスにも期待です。

また、1階の避難場所は被災者がとりあえず入ればいいという、2010ルールに準じていますが、

2階の避難場所は2011の厳しい方のルールに準じています。



その他のルールは2011ロボカップジュニアレスキュールールに準じているはずです。

また、競技進行停止の原点は5点となっています。


とりあえずこんな感じの派生レスキューみたいな競技となっています。

なんか本家のレスキューAより難しいような・・・


とりあえずうちの高専からは、この競技に1名参加することになりました。

彼には高専の実力とやらを見せつけてほしいですね(投げやり)

え?僕ですか?僕は・・・・

それではーさよーならー

(^・ω・)ノRadiumProduction in RoboCupJunior
トランジスタの続きです。


前回はトランジスタってどんなもの?なんて話を簡潔にしたかと思います。

今日は前回の最後に話、なんであの回路がダメかという話からです。


前回の回路・・・例を取ってnpnの方で説明しましょうか。

前回の回路はこれです。
前回の記事で出てきたnpnの回路です

これでこのBATTERYが繋がっていればトランジスタはONになり、

繋がっていなければOFFになる・・・となるはずですよね。

結構教科書とかでも、この図が正しいつなぎ方として書かれていることが多いんですよ。

要するにこれはトランジスタを理解するうえでの理論上は問題ない回路図なんですよね。

でも現実にこの回路は作ると色々と問題が生じます。

今回はその主な問題を順々に解決していきます。


まず、一つ目の問題、

この状況、この状況でトランジスタがONになったらどうなるでしょう。

コレクタとエミッタが繋がるんだから・・・コレクタの先にはBATTERY2の+側、エミッタの先にはBATTERY2の-側。

これ、ショートしてませんか?

電源の+と-が繋がっている訳ですから・・・ねぇ。

まぁ厳密にはトランジスタにも微量に内部抵抗がありますから、ショートはしてませんけど・・・


それでもC-E(コレクタ‐エミッタ)間にとてつもない大電流が流れてしまいます。

となると、当然、ダイオードと同じでトランジスタにも流して良い電流の上限、絶対最大定格がありますから

それを超えた電流がトランジスタに流れると弾けます。
トランジスタは弾けると良い音しますよ♪

まずこれが一つ目の問題。


次の問題同じように今度はベースとエミッタを見てみましょう。

ベースの先はBATTERYの+側、エミッタの先はBATTERYの-側、これもショートしてますね。

B-E(ベース-エミッタ)間に大電流が流れてしまっていますね。これも結構やばいです。

絶対最大定格を超えてしまい、良い音で爆ぜることでしょう。

特にベースに流せる電流量はとても少ないので、電池なんか直でつないだら確実に爆ぜることでしょう。


そして最後の問題、

例えば電池の+がベースに繋がっていなかったらこの回路、どうなりますか?


もちろん繋がっていませんからONにはなりませんよね。

じゃあOFF?

実はOFFともいえないのです。


デジタルの電子回路では、常に信号はONかOFFのふたつのみ。つまり必ずどちらかでなくてはならないのです。

ONというのは電気が来ている状態、つまり+に繋がっている状態を指しますね。


ではOFFというのは?

電気が来ていない状態?いえ、そうではなく、

正確には-に繋がっている状態を指すんです。

それ以外に該当するのは全部「不定」という状態として扱われます。オープン、ハイインピーダンスとも言いますね。

これは一部の素子を除いて、結構まずい状態です。ONかOFFの二つで判断するのに、どっちでもない状態・・・

これはトランジスタの動作がどうなるか、まったくわかりません。とても安定しない、不定な状態になります。

こういった状態も0か1かのデジタル回路では一般にタブーです。

という訳でこれも避けなければなりません。

このような3点の問題がこの回路にはあるのです。


じゃあこの問題、どうしたら解決するでしょうか。




答えは全部、「抵抗」です。

ではどのように抵抗を配置すればいいのでしょうか。


まぁこのような感じになります。
npnトランジスタの実用的な回路の例です

抵抗が3つ追加されました。

まずR1について。

これは一つ目の問題を解決する抵抗です。というよりこれは抵抗でなくても構わないのだけど・・・

ここになにかしらの負荷を配置することで、BATTERY2はショートしなくなります。

実際に使うときはこの部分をトランジスタを使って制御したいものを繋ぎかえます。

こういったものを負荷といってこれを抵抗で置き換えたもの?を負荷抵抗といいます。



次にR2について、

これは単純に、ベースに流れる電流を制限するための抵抗です。電流制限抵抗ともいいます。

これの原理はオームの法則ですね。抵抗のところで紹介しました。

この部分に流せる電流は少ないのでこの抵抗は5~20k程度の大きい抵抗になることが殆どです。


最後にR3について。これはちょっと難しいです。

Bと電源のマイナス、つまりGNDの間に繋がっていますね。この抵抗、どういったものなのでしょうか?

例えばBATTERYが繋がっている時、これは普通に書き換えるとこんな風になりますね。

上の回路をBに関する部分だけ抽出してみました。
これだとBにいくらかの電圧がかかり、Bに電流が流れることがわかります。

次にBATTERYが繋がっていない場合。どうなりますかというと・・・
今度はBにBATTERYが繋がっていない場合の回路を抽出してみました。R2はないも同然なので消えますね。
このようなります。

この時、R3には電圧がかかっていないので電流は流れず、R3は電圧降下を生みません。

従ってR3の電圧降下が0なのでR3の両端の電圧は同じになります。

という訳で片方が、BATTERYのー側・・・つまり0Vのところに繋がっているので反対側も0V、

つまりBの端子は不定ではなくしっかりと0Vになるのです。

これでトランジスタをしっかりとOFFにすることができます。

この抵抗はそのために使われる抵抗なのです。

このように外部から電流が流れてこないときに端子をOFFにする抵抗をプルダウン抵抗といいます。

逆にONニするすような抵抗をプルアップ抵抗といいます。


これで3つの抵抗によって3つの大きな問題は解決しました。


ようやく、トランジスタを使って回路をON,OFFするような回路を作製することができます。

簡単な回路だとこんな感じに作れます。
トランジスタを使ったLEDの点滅回路です。

右上の四角いのはスイッチです。この回路はスイッチを押すとLEDが付き、離すとLEDが消える回路です。

今までの説明がわかれば、この回路は理解できるでしょう。きっと(笑)


このように押すと、つく、といった論理を正論理といいます。

逆に押すと、消える、という風な論理を負論理といいます。負論理の話は何れまた。


という風にこのようなトランジスタで電気的なスイッチを作成するとトランジスタの作用を

トランジスタのスイッチング作用とかいいます。

次の記事では、もうひとつのトランジスタの主な作用である、増幅作用について紹介しようと思います。


因みに今回使ったのはエミッタ接地回路という回路です。他にもコレクタ接地とベース接地があります。

増幅の問題上、ロボカップでは基本、エミッタ接地しか使わないとは思いますが、興味があれば調べてみると面白いかも。

この話もいつかするかも知れません。

それでは今日はこの辺で。


(^・ω・)ノRadiumProduction in RoboCupJunior
今日はなんと真面目に部活をしています!久しぶりだ・・・この状況。

まぁテストも終わって、危機感を覚えたのでしょうね。

とりあえず、今は副部長が隣でロボット作っています。

なんかどっかで見たことのあるものに戻っているような気もしますけど・・・


あ、僕ですか?僕はというと・・・


高専祭のことで頭がいっぱいで、ロボットの充電器を忘れてきた・・・(笑)

ということで、プログラムとかは何もできず、とりあえず串避けでも作っていました。

それでロボットの若干の設計変更が起きたり、という感じで終わりました。


うーん。なかなか先に進まない、倦怠期か?

とりあえず今日はそろそろお帰りの時間なのでこの辺で終了します。


それでは~

(^・ω・)ノRadiumProduction in RoboCupJunior
とりあえずPIC講習ドタキャンされたので急に暇になりました。

試験は終了しましたよ。2重の意味で(笑)


ついでに個人面談も行いました。

結構適当に流しましたけど・・・(笑)


とりあえず今日は、チームで(?)ロボットを作りました。

といってもまだプロットですけど・・・

さて、こんな速度で間に合うのか・・・?

サッカーの方なんか、一番経験があり、サーカーチームのリーダー的存在になるであろうと期待していた総書記様が

予想通り留年の危機(というより手遅れ?)に瀕してしまったので部活どころではなく・・・

どうすんの?(笑)

とりあえず、総書記様は東京湾に放流したいと思います。

(^・ω・)ノRadiumProduction in RoboCupJunior
カレンダー
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...