🧠 概要:
概要
この記事は、専門学校でのプログラミング実習とウェブ制作実習に関する5月27日の授業内容を詳細に説明しています。ロボットプログラミングでは、Javaのクラスやインスタンスに関する知識を深め、ロボットの動作をプログラムする方法を学びました。また、ウェブ制作では、YouTube動画の埋め込み方法やスライドショーの実装について学び、実際にコードを書く実習を行いました。
要約の箇条書き
-
ロボットプログラミング実習 (1〜3時限目)
- 5回目の授業で、来週試験がある。
- ロボットの動作をプログラムし、他人と相談せずに課題を解決。
- Javaのクラスとインスタンスに関する理論学習。
- クラスフィールドとインスタンスフィールドの違いを学ぶ。
- ライントレースプログラムの実行とセンサーの動作について学ぶ。
- 音を鳴らすプログラムや前進・後退の簡単なメソッドを実行。
- ウェブ制作実習 (4〜6時限目)
- 5回目の授業で、YouTube動画の埋め込み方法を学ぶ。
- スライドショー実装についての試験説明。
- slickプラグインを使っての実装方法を学習。
- CSS上書きの方法について学び、参考サイトの再現作業を行う。
1時限目~3時限目
ロボットプログラミング実習
本日で5回目の授業です。来週は試験です。
前方に動かしたりといった課題を先生の前でロボットを動かしてみて得点となる。AIを使ったり検索してもよいが、他の人と相談するのはダメだそうです。コードはAIを使えばそれらしいのがすぐにできるので、評価の対象にはしないようです。
前回はジャイロセンサーまで動かしてみることが出来ました。
今日は座学的なことを少し学びます。クラスとインスタンスクラスはなんであるかというと、設計図みたいなものでjavaではnewしてインスタンスを作る。インスタンスは設計図から作ったもの。型から取った製造物みたいなもの。インスタンス化して初めて使えるフィールドとメソッドがある。インスタンス化しないと使えないということがあらかじめ決められてクラスが作られるから。インスタンス化しなくても使えるのをクラスフィールドとクラスメソッドという。インスタンスフィールドは各インスタンスごとにデータ領域がある。複数のインスタンスが同じ値を持つこともあれば異なる場合もある。インスタンスメソッドはそれぞれの中身のデータを参照する。インスタンスが異なればフィールドの値が格納されている場所が異なるのでそれぞれを参照する。
要するに区別して使うときはインスタンスを生成して、そうする必要がなければ生成しなくとよいということになりますでしょうか。
クラスフィールドはクラス内につき1個みたいな感じになる。インスタンスメソッドからもクラスメソッドからも参照できる。どのインスタンスのデータかわからないような場合は参照できない。LCD.clear()などはクラスメソッドになる。これはnewせずに呼べて、ドットを付けて記述すればクラス内で使える。LCDやButtonは一つしかないので分ける必要もなく、このような記述になっている。センサーは複数のポートにつながっているものは、タッチセンサーを複数用意することができ、それが理由でインスタンス化して使う。どのポートにさすかはフィールドで管理するのでnewして使う設計になっている。staticを付けるとクラスフィールドになる。メソッドにもstaticを付けるとクラスメソッドになる。クラスフィールドはnewしなくても、いきなり変数として扱える。今まで動かしたサンプルプログラムでは、タッチセンサーを入れていたのはstaticがついていてクラスフィールドだった。
メイン関数から参照する変数だからstaticを付けてクラスフィールドにしなければならなかった。
より詳細を知りたい人は
https://pikawaka.com/ruby/class
https://programming-world.net/java/java_class/
を参照すること。
次はライントレースプログラムを動かす。
これも資料からのコピペで動きました。カラーセンサーが色を読み取るまで動き、黒いラインにセンサーを当てながら少しずつ動いていくという動作でした。
先生の解説がありました。クラスフィールドで左右のモータを覚えておくようになっている。クラスフィールドとすることでどこからでも参照できる。もう使えるような状態になっているので、自分の箱に入れている。クラス全体で共有できるものにしてあるということ。名前を変えているくらいな感じとして受け取ってよい。自分でmain関数から呼ぶ場合はstaticを付けて宣言する。自分で自由にコードを書いてロボットを動かすときに必要な知識となります。自作メソッドを追加している。voidは戻り値のない場合で、returnを省略できる。
motor_init();モータの初期化メソッドで、motor_set(100,30);は値をセットするメソッド。
color.getColorID() == BLACKで黒っぽい色を受け取ったら左モータを速くし右旋回になる。車だとステアリングを変えて旋回するが、授業のロボットでは速度差で制御している。その場で回転させたい場合は、片方をマイナス値にする。
速度が正ならforwardを呼んで、負ならbackwardを呼んでというようなことをせずに制御できるようにメソッドが作られている。
停止するときは、左のモータの制御コードが先に動くので、若干のタイムラグが生じる。
より黒線を判定できるように反射光の強さで動作するようにしたコードも実行しました。
反射光は0~1の範囲の値で、黒色は光を吸収するので値が小さくなる。それで値が0.5未満なら黒っぽい何かと認識させモータが動くという内容でした。そのためにゲットレッドモードを用意し、それに加えて値を受け取るfloat型の配列を用意し、そこに格納して値の大小を判定するといった流れです。実際はどんな値が返ってきているかを調べて調整していく。
次は教科書p.45にあるメロディを奏でようという課題に取り組みました。Soundクラスを使い、setVolumeで音量を設定する。playtoneはすぐに音を鳴らす。メソッドの中にはすぐに返すものとそうでないものがある。mainスレッドの裏でSoundスレッドが動き、そこに出力を依頼するようになっている。同期を取っていないので、ざっくりと見計らって次の依頼を出すようになっている。これはモータも同じようになっている。前に動けと言った後に少し待ってから指令を出さないといけない。
この辺は調べるなりして対応するとよい。
次は前進と後退をさせる簡単なプログラムを実行しました。ライントレースのプログラムで使ったメソッドを流用して、速さ50で動作させました。特にループさせてずっと動かすなどではなく、最後に速さ0をセットしてif文での分岐で0より大きければ前進、小さければ後退、0なら停止というコード通りに動作しました。
4時限目~6時限目
web制作実習
本日で5回目の授業です。前回は先生の助けを得ながら、youtubeの動画をHTML内に埋め込む方法を学びました。
さらに素の埋め込んだ状態だと大きさが小さいので、見本のwebページと同様にサイズを調整しようというところまで進みました。
来週の試験の説明
試験ではスライドショーの実装をしてもらう。スライドショーはいろんなプラグインがあるので、スリックスライダーというのを使って実装してもらう。
スライダーのないサイトの場合は関係のある画像を用意して、WordPress内の模倣にページに実装することを試験内容にします。とはいっても今日の授業の中で実装している人もいました。slickのプラグインがいろんなwebページで拾うことができ、それを活用して実際に取り込んでみました。AIに聞いてphpでやっていることを話すと、functionファイルにslickを取り込むのがいいといわれたが、それだと自分で書き替えられるCSSで上書きすることが出来ず、先生からheader.phpファイルで、自分のCSSを取り込む前の行に入れて読み込ませると上書きできるようになると教えてもらいました。
あとの時間は引き続き参考サイトを再現すべく作業をしていました。
Views: 0