surga Lab

読者です 読者をやめる 読者になる 読者になる

surga Lab

営業部でも開発したい!!

営業だけど応用情報に合格してみました

2016年秋季の試験にて、応用情報処理技術者試験に一発合格することができました。
勉強法などを参考にしていただけたら幸いです。

f:id:hisurga:20170112232007p:plain:w300

なぜ受けたのか/メリット

“情報技術についてはある程度知っているよ” と示せる

応用情報技術者試験の対象者は

高度IT人材となるために必要な応用的知識・技能をもち、高度IT人材としての方向性を確立した者

となっています。
つまり合格すれば、国が「この人は高度IT人材としての方向性を確立したものだ!」と証明してくれるようなものです。
もちろん実務経験までは証明してくれませんが、、、

知識の幅が広がる

ITといってもたくさんの意味を含みます。
アルゴリズム、ソフト、ハード、セキュリティ、マネジメント、法務、、、

応用情報はそれらほぼ全ての分野から出題されます。広いです。
試験に合格するための勉強を行うだけでも、幅広い知識を得ることができます。

会社から金一封もらえるから

ちょっとしたボーナス。
これが主な目的かもしれない。

勉強時間

午前対策

1ヶ月弱前~1週間前

仕事帰りに喫茶店で2-3時間ほど参考書で勉強しました。
その際ペンをほとんど使わず、計算問題も解法だけ答え合わせを行い、解説が少ない用語を見つけたら理解するまでスマホで確認という形式をとりました。
そうすることでいいペースで参考書を進めることができたと思います。
土日は平日勉強したとき苦手と感じた分野の復習を行いました。

その際使用した参考書はこちらです。

徹底攻略 応用情報技術者教科書 平成27年度 (Tettei Kouryaku JOHO SHORI)

徹底攻略 応用情報技術者教科書 平成27年度 (Tettei Kouryaku JOHO SHORI)

  • 作者: 株式会社わくわくスタディワールド瀬戸美月
  • 出版社/メーカー: インプレス
  • 発売日: 2014/12/04
  • メディア: 単行本(ソフトカバー)
  • この商品を含むブログを見る

数年ぐらい誤差ですし、抵抗がなければ中古品でも十分だと思います。

なお私はすでに基本情報を取得しているため、いきなり応用情報から受ける場合はもう少し余裕を持ったスケジュールにすべきかと思います。

1週間前

午前問題は過去問から出題されていることが多いため、ネットの過去問集サイトを利用してひたすら過去問を解きました。

応用情報技術者過去問道場|応用情報技術者試験.com

これだけでかなり安定して点を取れるようになったと思います。

午後対策

2~3日前になんとなく過去問を眺め、当日選ぶ問題を考えていました。
正直午前が不安で午後に時間を割けられなかったからです。

とはいっても、午前問題さえ解ける力を持っていれば午後問題の多くは"国語"に変化します。
問題文をよく読めばわかることが多いです。

また、プログラミングを少しでも触ったことがあればプログラミングの問題はおすすめです。
比較的安定して点が取れます。

(私の得点はかなりぎりぎりでしたが)

感想

メリットにも書きましたが、知識の幅が広がったことが一番嬉しいです。
今までなんとなくで理解していたものを正しい知識で修正することで、ITに関してより興味が湧き、さらには自信にもつながりました。

ちなみに応用情報技術者試験に合格すると、2年間は高度情報処理技術者試験の午前Iが免除されます。
せっかくなので、ここで満足せずに情報処理試験の高みを目指すつもりです。

Arduinoで超音波式メジャーを作ってみました

以前試した超音波距離センサと7セグを利用して簡易超音波式メジャーを作成しました。

f:id:hisurga:20161130233251j:plain

hisurga.hatenablog.com

hisurga.hatenablog.com

基本的に組み合わせるだけですので、追加の部品などは不要です。

回路

隣に繋げるだけです。

f:id:hisurga:20170222191624p:plain:w400

コード

#include<SPI.h>

#define ECHO 6
#define TRIG 7

#define SCK 13
#define LATCH 10
#define SDI 11

const byte digits[] =
  {
    0b11111100, // 0
    0b01100000, // 1
    0b11011010, // 2
    0b11110010, // 3
    0b01100110, // 4
    0b10110110, // 5
    0b10111110, // 6
    0b11100000, // 7
    0b11111110, // 8
    0b11110110, // 9
  };

void setup()
{
  //hc-sr04
  pinMode(ECHO, INPUT);
  pinMode(TRIG, OUTPUT);
  Serial.begin( 9600 );
  //7seg
  pinMode(LATCH,INPUT);
  pinMode(SCK, OUTPUT);
  pinMode(SDI, OUTPUT);
  SPI.begin();
  SPI.setBitOrder(LSBFIRST);
  SPI.setDataMode(0);
}

void loop()
{
  double Interval = 0;
  double Distance = 0;
 
  digitalWrite(TRIG, HIGH);
  delayMicroseconds(10);
  digitalWrite(TRIG, LOW);
  Interval = pulseIn(ECHO, HIGH);

  if (Interval != 0)
  {
    Interval = Interval / 2;
    Distance = Interval * 340 * 0.0001;
    Serial.print(Distance);
    Serial.println("cm");
  }
  
  //7seg  
  int d_seg = 0;
  if(Distance < 10.0)
    {
      d_seg = 0;
    }
  else if(90.0 < Distance)
    {
      d_seg = 9;
    }
  else
    {
      d_seg = Distance / 10;
    }

  digitalWrite(LATCH, 0);
  SPI.transfer (digits[d_seg]);
  digitalWrite(LATCH, 1);

  delay(500);
}

7セグが表示する値

1桁しか表示できないので、一定の範囲で変動するようにしました。
測定距離 < 10cm
0表示

90cm < 測定距離
9表示

それ以外
10の位の値のみ表示

完成

10cm未満

f:id:hisurga:20161130233255j:plain

15cmくらい

f:id:hisurga:20161130233301j:plain

30cmくらい

f:id:hisurga:20161130233305j:plain

今回はソフト面の変更が多かったですね。
それっぽい機能を実装できました。

Arduinoで7セグLEDとシリアルドライバを使ってみました

Arduinoは取得したデータをシリアルモニタなどで確認することができますが、
その場ですぐ知りたい時に7セグは便利かもしれないですね。

ということで秋月電子で購入しました。

f:id:hisurga:20161031215905j:plain

akizukidenshi.com

7セグLEDとシリアル通信可能なドライバが付属したキットということではんだ付けが必要です。
初めてのはんだ付け、楽しいけど難しかったです。
はんだミスをしてしまい、動作させると一部光らなかったこともありました。なんとか直りましたが。

回路

説明書はこちら(秋月電子)
説明書ではセグを2つ使っていますが、1つの場合はこんな感じになります。

f:id:hisurga:20161108215213p:plain:w400

少しピンがたくさんあって複雑そうですね。 ちなみに5V電源とGNDは繋げなくても光りました。光量はもちろん減りますが。

コード

秋月電子のサンプルコードを参考にしました。

#include<SPI.h>

int sck = 13;
int latch = 10;
int sdi = 11;
int d_time = 300;
const byte digits[] =
  {
    0b11111100, // 0
    0b01100000, // 1
    0b11011010, // 2
    0b11110010, // 3
    0b01100110, // 4
    0b10110110, // 5
    0b10111110, // 6
    0b11100000, // 7
    0b11111110, // 8
    0b11110110, // 9
  };

void setup()
{
  pinMode(latch,INPUT);
  pinMode(sck, OUTPUT);
  pinMode(sdi, OUTPUT);
  //SPI通信の準備
  SPI.begin();
  //ビットオーダを指定します(LSBFIRST or MSBFIRST)
  SPI.setBitOrder(LSBFIRST);
  //データモードの設定
  SPI.setDataMode(0);
}

void loop()
{
  //digits分ループさせます
    for (int i = 0; i < 10; i ++)
    {
      //latchのON OFFで更新します
      digitalWrite(latch, 0);
      //引数をSPIで送信します
      SPI.transfer (digits[i]);
      digitalWrite(latch, 1);
      //一定時間待つ = 表示時間
      delay(d_time);
    }
}

byte配列はA,B,C,D,E,F,G,DPの順になっています。(例:0b11111100で0に見える)
詳しくはLED部の仕様書に乗ってます。(リンクは赤月電子)

f:id:hisurga:20161109215714p:plain

11ピンと13ピンは使用していないのに繋げているように見えますが、Arduino UNOでのSPI通信では
10ピン:SS
11ピン:MOSI(SDI)
12ピン:MISO
13ピンSCK
となっているため必要です。

ビットオーダーの指定

  SPI.setBitOrder(LSBFIRST);

LSBFIRSTとMSBFIRSTがあります。
SPIで送信する配列の順番であり、ABCDEの配列があったとき、
LSBFIRSTならABCDE
MSBFIRSTならEDCBA
の順番で処理します。

データモードの指定

  SPI.setDataMode(0);

SPIのアイドリング状態と処理タイミングを決めます。

SPI_MODE アイドリング 処理タイミング
0 Low 立ち上がり
1 Low 立ち下がり
2 High 立ち下がり
3 High 立ち上がり

SPI送受信

 SPI.transfer (digits[i]);

1バイトの引数を送信します。

完成

うまくいくと数字が表示されます。
0-9を順番にひたすらループします。

f:id:hisurga:20161031215906j:plain

7セグLEDだけだと回路が複雑になりますが、シリアル通信を行うことでシンプルに実装できました。

ハロウィンなので怪獣と電気で遊んでみました

ハロウィンですね。
せっかくですので、スイッチサイエンスでArduinoを購入した時の当選品で遊んでみます。
怪獣と電気で遊ぶやつです。おそらく。

f:id:hisurga:20161022193434j:plain

導電性インクを利用するみたいですね。

f:id:hisurga:20161031215907j:plain

メッセージカード3枚
LED3つ
電池3つ
ペンが1本です。

f:id:hisurga:20161031215908j:plain f:id:hisurga:20161031215909j:plain

予想よりインクの粘度が高いです。
適度に伸ばしながら書いていきます。

f:id:hisurga:20161031215910j:plain

一通り書いたあとに、紙に小さな穴を開けて部品を取り付けました。
インクの粘度が高いので、穴を開けなくてもいけるかもしれませんが。

しかし、取り付けても最初は光りませんでした。
どうやらある程度乾かす必要があるようです。説明書によると15分待てとのこと。
簡単そうな製品の説明書は読まない派です。

15分も待てないのでドライヤで乾かしたのですが、
まずは小さく点灯して乾かすにつれどんどん光が強くなりました。

f:id:hisurga:20161031215912j:plain

そこでインクの抵抗値を測ってみます。

直後
約300kΩ
一定時間ドライヤに当てた後
約4kΩ

乾燥度によってかなり変化しました。見てて面白いです。

このメッセージカードを誰かに送るわけでもありませんが、
とりあえずこれでハロウィンぽいことを行ったということで。

Arduinoで超音波距離センサを使ってみました

何かの距離を測りたいって時、あると思います。

Arduinoでは簡単に距離センサも利用できると聞いたので試してみました。

購入したのはHC-SR04、一般的な超音波距離センサです。

f:id:hisurga:20161029233734j:plain

回路

データシートによるとtriggerを10μs HIGHにすることで超音波が放出され、反射して戻るまでechoがHIGHになるみたいですね。
そのechoの時間を利用して距離を計測します。
データシート

f:id:hisurga:20161030002242p:plain

それをもとにするとこんな感じになりました。
どうすればかっこよく書けるんでしょうかね。

f:id:hisurga:20161031000848p:plain:w400

写真だとこちら。

f:id:hisurga:20161029233735j:plain

コード

上述したセンサの仕様からコーディングします。

#define ECHO 8
#define TRIG 13

void setup()
{
  pinMode(ECHO, INPUT);
  pinMode(TRIG, OUTPUT);
  Serial.begin( 9600 );
}
void loop()
{
  double Interval = 0; //受信間隔
  double Distance = 0; //距離
 
  digitalWrite(TRIG, HIGH);
  delayMicroseconds(10);
  digitalWrite(TRIG, LOW);
  //ECHOピンがLOWになるまでの時間を取得
  //タイムアウトで0が返る
  Interval = pulseIn(ECHO, HIGH);

  if (Interval != 0)
  {
    //片道
    Interval = Interval / 2;
    //距離を計算(音速:340m/s)
    Distance = Interval * 340 * 0.0001;
    Serial.print(Distance);
    Serial.println("cm");
  }
  delay(1000);
}

完成

結果をシリアルで出力しているため、
ツール > シリアルモニタ で確認します。

f:id:hisurga:20161029232913p:plain

予想より容易に実装できましたね。
今後定番の自走カーを作る時などに利用したいです。
音速には温度が影響するため、そちらも考慮するとより精度が上がると思います。