1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

プロ生ちゃんAdvent Calendar 2016

Day 18

プロ生ちゃんを日焼けさせるやつ

Posted at

はじめに

とあるスライドとイラストを共有します。
スライドは、Arduinoの説明、軽い電気回路の説明、
Adafruit SI1145というパーツを使った実験についてです。
イラストは、かわいらしい暮井慧ちゃんを日焼けさせたやつです。
ピンときた方は全力でヌルーしてください。ただの供養ですので。

とあるイラストとスライドです

https://www.dropbox.com/sh/bhttbdeis05fvfk/AAAz-HHTHfH5IfyOe7imvdYQa?dl=0
都合上、編集・トリミングをしておりますが、
元イラストはこちらの「画像データ>イラスト」のOneDriveにあったものをお借りしています。
本当にありがとうございます。

C#側のポイント

ネットに転がっていたBitmapオブジェクトの透明度をいじるサンプルソースを流用して作っていたため、
まるまるは公開できませんが、軽い仕組みをポイントとなるコードを書きます。

日焼けの流れ

1.プロ生ちゃんの画像をリソースとして登録しておく
2.日焼けしていない画像をPictureBoxのBackgroundImageとして表示させておく
3.currentImageとして日焼けした画像のリソースを指定してImageオブジェクトを生成する

Image currentImage = Properties.Resources.hiyake_resize;

4.TrackBarの値が変更されたら、currentImageのAlphaを再設定してPictureBoxのImageにcurrentImageを設定する

これで、背景の上に半透明の日焼けイラストが重なるので、徐々に日焼けしていくように見えます。

UVの取得

Arduino側からAdafruit SI1145で取得したUVの強さが改行文字区切りで逐一送られてきます。

        private void serialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            try
            {
                string data = serialPort1.ReadLine();
                if (!string.IsNullOrEmpty(data))
                {
                    Invoke((MethodInvoker)(() => AddSuntan(data)));
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

こんな感じで、ReadLine()で改行毎にデータを取得して、
その値をAddSuntanに入れています。
AddSuntanは取得した値を計算して表示している日焼け画像のAlphaを更新していきます。

Arduinoのポイント

こちらも、当時書き込んだプログラムがノートPC死亡と共に消えてしまいましたので、
当時を再現したもので説明します。

処理の流れ

  1. void setup()でSerial.begin(9600)を使ってシリアル通信の準備をする
  2. loopでSerial.println(uv.readProx());する

基本的にはAdafruit SI1145のサンプルコードを更にシンプルにした感じです。

キモとなるコード

特に無いです。

#include <Wire.h>
#include "Adafruit_SI1145.h"

Adafruit_SI1145 uv = Adafruit_SI1145();

void setup() {
  Serial.begin(9600);
}

void loop() {
  float UVindex = uv.readUV();
  UVindex /= 100.0;
  Serial.println(UVindex);

  // 当時はUVだとあんまり反応がよくないのでIRの値を使っていた
  // Serial.println(uv.readIR());

  delay(1000);
}

こんな感じのコードだったと思います。

さいごに

アドベントカレンダーの締め切りを過ぎてしまい申し訳ありませんでした。
また、関係者の方々ありがとうございました。
ちなみに、日焼けのイラストはどうやって作ったのか、という質問がありましたが、
技術が無いので愛と気合で作りました。
やり方を忘れてしまいましたが、Photoshopの介護を受けながら作業していたと思います。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?