はじめに
とあるスライドとイラストを共有します。
スライドは、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死亡と共に消えてしまいましたので、
当時を再現したもので説明します。
処理の流れ
- void setup()でSerial.begin(9600)を使ってシリアル通信の準備をする
- 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の介護を受けながら作業していたと思います。