創造工学演習の発表実施要領を説明
本日は実験の最終週を創造工学に振り替えて、 システム作成を行ってもらう。 これに先立って、創造工学演習の発表会を、どのように実施するのかを説明する。
日時:8月4日AM9:00-12:30まで 場所:4EI教室 発表時間: 各グループ20分、質疑応答5~10分 発表に当たって、各自30秒程度で自分の担当内容を 説明すること。
- 発想の優れたテーマであったか
- 説明の準備がきちんとされていたか
- 新しい技術にチャレンジしていたか
- 説明がわかりやすかったか
- プログラムがどこまで完成していたか
- 未完成の部分と、その問題点を説明していたか
実施方法を説明したあとであるためか、みんな時間内に熱心に課題に取り組んでいました。
高専大会バドミントン終了
バドミントン部は接戦で頑張りましたが結果は以下の通りとなりました。 団体戦男子4位、 団体戦女子3位、 個人戦女子ダブルス伊吹かせ田組3位 個人戦女子シングルス小椋ベスト4
GMC-4で初プログラム
先日購入の4ビットマイコンでプログラム。キー入力した2つの値を加えるだけ。
START:TIY 0 ; Y=0 ; L0: KA ; A = getc() ; JUMP L0 ; if ( flag ) goto L0 ; AM ; mem[ Y ] = A ; CAL SHTS ; short_sound() ; L1: KA ; A = getc() ; JUMP L1 ; if ( flag ) goto L1 ; M+ ; A = A + mem[ Y ] ; AO ; putc( A ) ; CAL ENDS ; end_sound() ; JUMP START ; goto START ;
アドレス | 命令 | 命令コード |
---|---|---|
00 | TIY | A |
01 | <0> | 0 |
02 | KA | 0 |
03 | JUMP | F |
04 | <0> | 0 |
05 | <2> | 2 |
06 | AM | 4 |
07 | CAL | E |
08 | _SHTS | 9 |
09 | KA | 0 |
0A | JUMP | F |
0B | <0> | 0 |
0C | <9> | 9 |
0D | M+ | 6 |
0E | AO | 1 |
0F | CAL | E |
10 | _ENDS | 7 |
11 | JUMP | F |
12 | <0> | 0 |
13 | <0> | 0 |
動作確認
実際に動かしてみる。 [reset]-1-[run] <入力> ピッ <入力> <数字LEDに答> ピロピロ の繰り返し。
キー入力でキーリリースやらチャタリングの心配をしなくていいのが、 4ビットコンピュータもどきである証拠。 でも、入力を伴う実験が簡単に書ける。
講習会:LEGO NXTに外部インタフェース
昨年度の外部の方を対象とした自律ロボット制御の 講習会を今年度も継続して実施している。 昨年度とは違った内容と思い、LEGOに外部インタフェースを つける内容で講習会を行っている。
内容は別日記に記載してあるが、 機械系の業種の方で電子回路などは詳しくない方が対象。 このため半田付けやブレッドボードの配線なども 体験して頂いた。 時間配分がどうなることかと心配したけれど、 予定時間どおりに無事終えることができた。
Listの挿入削除と、演習
先週でのリストの追加のネタの前に、いつもであればリストの挿入削除を説明していたのに、 説明が抜けていたので、挿入処理と削除処理を説明する。
昇順リストにデータを挿入
昇順にデータを保存しているリストに対し、与えられた値を挿入。 授業では、consを用いた例と使わない例をしめした。 ここでは、consを使わない例を記録しておく。
void insert( struct List* p , int key ) { struct List *q = p , *r ; while( p != NULL && p->data < key ) { q = p ; p = p->next ; } r = (struct List*)malloc( sizeof( struct List) ) ; if ( r != NULL ) { r->data = x ; r->next = q->next ; q->next = r ; } }
説明の後、挿入場所が先頭だったら、末尾だったらの確認をしないと、 動かない場合があるから、チェックは大切と「次の番兵」の伏線を…
リスト中の削除
リストの途中のデータを削除する処理。 処理を短く書くために、削除すべき場所を探す処理は、別に行うものとする。 pは消したいデータの1つ前の要素を指している。
void remove( struct List* p ) { struct List* del = p->next ; p->next = p->next->next ; free( del ) ; }
この説明の後、学生さんより「消したいデータが末尾だったら?」と質問される。
# 伏線の効果あり…
ということで、番兵のテクニックの概要を紹介しておく。
UML記法
オブジェクト指向のまとめとして、UML記法を解説中。 構造図と振る舞い図の一連のもので主要なものを解説。 特にクラス図は、宣言などを交え説明を行う。 下記のサイトの説明が、概要把握には記号と説明の対比と、具体例もあって、 短時間に理解するには判りやすかった。
履歴書は絶対手書き?
履歴書の書き方がネタになっている。 一応指導的には、履歴書は手書きとしているが、この記事をみると、 IT系では表計算ソフトで記載してもOKな場合が多い様子。
しかしながら、ワープロ表計算書きでも、プラス評価する企業の比率と、 マイナス評価する企業を比べると、マイナス評価の方が多いんだから、 無難なのは「手書き」ということ。
1日ハードウェア講習をするには?
高専OBの橋本氏と新出氏が、遊びに来た。 福井の電子情報系の技術者の人を対象にした、 ハード寄りの技術講習会を企画したいらしい。 んで、組み込み系で使いやすそうなボードの意見交換が始まった。 私自身、どれがいいのやら…ではあるが、 今後の参考になるので、列記。
- 私のお勧めは、インタフェースおまけのColdFire M52233 のCPUボード。 SilentC搭載で、気軽にプログラムもできそう。 しかし、実際の評価ボードが探しても見つからない…
- 半田付けなんかをしながら、動くものを作るのなら、 AVR-USBマイコンボード AT90USB162
- Gainer
- Arduino(wikipedia)
- AVR-MOD-AT162
追記:
- LUFA (Formerly MyUSB) (2009)推奨:橋本氏
- OAKS16-MINI FullKit推奨:久住氏
NXTでLEDを制御
NXTの外部に自作のモータやセンサーを接続するための実験。
配線
参考記事を元に、 NXTのアナログポートに、抵抗とLEDを接続。
ANA(1)--1KΩ--LED--AGND(2)
NicoSensor基板では、アナログポートを使わないのでラッピングワイヤで、 ANA(1),AGND(2)をユニバーサル基板領域まで延長し、 ジャンプワイヤで配線できるようにICソケット丸ピンを挿しておく。
拡張ブロックの追加
元記事では、『NXTのサイトから、RCXのブロックを使用できるようにする追加ブロックを入れて…』 と書いてあるので、LEGO(R) MindStorms NXT Software Updatesより、 Legacy Block Library(English) [PC用] をダウンロード&解凍。 すると"Legacy_Blocks_EN-US"というフォルダが作られる。
"LEGO MINDSTORMS Education NXT"を起動し、 "ツール"-"ブロックのインポートとエクスポートのウィザード…"を選び、 "インポート"タグの、"次から読み込み:" の"閲覧"ボタンを押し、 先ほどの"Legacy_Blocks_EN-US"フォルダを指定し、"OK"を押す。 すると、"インポートするブロックを選択してください"と表示されるので、 RCXのブロックで使う"Motor*"と"Lamp*"を選ぶ。 (Ctrlキーを押しながら2つを選ぶ) "パレットにブロックを追加"の欄には、"拡張機能"を選び、 "インポート"ボタンを押すと、ランプ*とモータ*が追加される。
このように機能を追加した後であれば、パーツを指定するタブの"拡張機能"を選ぶと、 "Lamp*"が使えるようになる。
LEDを点滅させてみる
実験として、LEDを1秒周期で点滅させてみる。
無限の繰り返し { // プログラムっぽく表現 Lamp*( Port=A, Action=On, Intensity=50% ) ; 待機( コントロール時間, 1秒まで ) ; Lamp*( Port=A, Action=Off ) ; 待機( コントロール時間, 1秒まで ) ; }