うちの大学の情報工学専攻は...楽すぎる...
まず、今期は月曜日が全休です。金曜日も全休です。
あと火曜日、水曜日、木曜日が基本的に午後休です。
そのおかげで、冬休みが実質2倍に伸びました。
また、レポートはほとんどありません。
コーディングは月に1度程度です。
中間テストもありませんでした。
...将来、大丈夫かな。
このままでは、高校時代の方がコーディングしてる
というわけで、プログラミングができるサークルに入りました。
ロボコンサークルです。
ロボコンの公式サイトは以下のリンクから。
NHK学生ロボコン http://www.official-robocon.com/
ロボット製作ではプログラミングできました。
ちなみにロボットにプログラムを組み込む際には、
マイコンという小さなデバイスにプログラムを書き込み、それを載せます。
マイコンは電圧によって入力・出力を行い、回路を制御しています。
基本的には入力はセンサからの値で、出力はアクチュエータの動作です。
また通信も可能で、回路を作成すればPCと無線通信をすることも可能です。
ここまでが、昨年までの話です。
今年からは後輩の教育係で、後輩が主にコーディングをしてます。
でも、だんだんと教えることが細かすぎるものになってきました。
細かすぎて伝わらないアレです。
...何か後輩に教えられることを新しく勉強しなければ。
よし、AVRやろう。
AVRは安価に入手できるマイコンです。
AVRの中にも種類がありますが、安いものでは秋月で50円ほどで手に入ります。
話はズレますが、秋月電子は電子部品を取り扱っているサイトです。
配達もしていますので、電子工作に興味があれば覗いてみてください。
電子工作と言わずに、今でいえばIoTというやつですかね。
秋月電子 http://akizukidenshi.com/
話を戻して、AVRのATtiny13A。小さくて可愛い。
大きさは10×10×10くらいですかね。これが50円です。
ロボコンとか電子工作とか全く縁のなかった人は、
この子に何ができるか分からないと思います。
でも、違うんです。
この子だけでも、回路があれば大抵のことができます。
皆さんが何をさせるのかが大事だと私は主張したい。特に後輩に。
この子に書き込んだプログラムを以下に紹介します。
至って普通のC言語であることを感じていただければ幸いです。
int main(void)
{
int result;
//出力ポートを設定
set_bit(DDRB, DDB2, 1);
set_bit(PORTB, PORTB2, 1);
//A/D変換のチャネルを選択 ADC3(PB3)
set_bit(ADMUX, MUX1, 1);
set_bit(ADMUX, MUX0, 1);
//基準電圧を選択(Vcc)
set_bit(ADMUX, REFS0, 0);
//結果を右揃えに
set_bit(ADMUX, ADLAR, 0);
//ADTS2-0 = 000(連続変換動作)
set_bit(ADCSRB, ADTS2, 0);
set_bit(ADCSRB, ADTS1, 0);
set_bit(ADCSRB, ADTS0, 0);
//システムクロックの分周値 1/8 -> 150kHz
//ADPS2-0 = 011
set_bit(ADCSRA, ADPS2, 0);
set_bit(ADCSRA, ADPS1, 1);
set_bit(ADCSRA, ADPS0, 1);
//A/D変換自動起動許可
set_bit(ADCSRA, ADATE, 1);
//A/D許可
set_bit(ADCSRA, ADEN, 1);
//A/D変換開始
set_bit(ADCSRA, ADSC, 1);
while (1)
{
//変換結果を取得
result = ADCL + (ADCH << 8);
if(result > 614){ // 614 -> 3.0V
set_bit(PORTB, PORTB2, 1);
}else{
set_bit(PORTB, PORTB2, 0);
}
_delay_ms(10);
}
}
簡単に上のプログラムを説明すると、これはAVRでAD変換を行っているプログラムです。
AD変換とはアナログ電圧値をデジタル数値に変換する機能です。
入力された電圧が3.0Vより大きいならLEDを点灯し、それ以下なら消灯するものです。
教育用のサンプルなので使い道については...触れるな...
まとめ
講習用資料のまとめもいつも数行なので、数行にまとめます。
電子工作たのしい。
マイコン使うと何でもできる。
みんなやるんだ。