Perlとかphpなどの

投稿日:

 PerlとかPHPなどの、ダラダラと随筆風にプログラミングできるWeb向き言語に慣れると、ArduinoにETHERNET SHIELD 2を取り付けた時のCGI引数の処理にしんどさを覚えるのは確かだ。特に正規表現でいろいろやりたい、という場合が苦しい。

1/fゆらぎでLチカ

投稿日:

 さて、他の人もよくやっている「1/fゆらぎのLチカ」を、私もマネしてやってみる。

 こちらこちらのサイトを参考にさせていただく。よく使われるのはこの「間欠カオス法」だそうである。

間欠カオス法
0.0\leqq x\leqq 1.0として
x<0.5のときx=x+2x^2
x\geqq 0.5のときx=x-2(1-x)^2

 ただし、参考にさせていただいた各サイトによると、この間欠カオス法は、0.0付近や1.0付近に値が貼り付き易いので、0.0や1.0に近くなったら乱数を入れてやるとよいとのことである。実際に試すと、たしかに、長時間ちらつきがなくなったり、消えたままになったりしやすい。そこで、そうなったときに乱数を入れ、中間付近の適当な輝度で光らせるようにしてある。

 青色要素を少なくして、ろうそくの色合い風なちょっと黄色味がかった色にした。

//
//  f1Fluctuation.ino
//    1/fゆらぎでLチカ
//    佐藤俊夫
//    27.06.28(日)1700~
//
const int R = 9, G = 10, B = 11;
//
void setup() {
  pinMode(R, OUTPUT);
  pinMode(G, OUTPUT);
  pinMode(B, OUTPUT);
}

void loop() {
  int f = 0.0;
  
  f = f1Fluctuation();
  analogWrite(R, 255 - f);
  analogWrite(G, 255 - f);
  analogWrite(B, 255 - (f * 0.2));
  delay(20);
}


int f1Fluctuation(){
  static float x = 0.1;
  if(x < 0.5){
    x = x + 2 * x * x;
  } 
  else {
    x = x - 2 * (1.0 - x) * (1.0 - x);
  }
  if(x < 0.05 || x > 0.995){
    x = random(10, 90) / 100.0;
  }
  return((int)(x * 255));
}



どういうワケか蕎麦

投稿日:

 ある時たまたま「蕎麦打ち」の動画をYoutubeで見かけて、それを一度だけ見た。

 一度見ただけなのに、再生リコメンドに蕎麦打ち動画ばかり強迫神経症的に出てくるようになった(笑)。

 蕎麦打ちの動画はなぜか結構多く、全部見きれないほど大量にある。蕎麦打ちが趣味と言う人は多いらしい。

 もういっそのこと、と思い、面白そうなものを再生リストにしてみた。

今度は鬱陶しく

投稿日:

 今度はできるだけ鬱陶しく汚くLEDを光らせてみた。 見ていて疲れる。

//
//  badLight.ino
//    今度は3色LEDをできるだけ鬱陶しく汚く光らせたい。
//    佐藤俊夫
//    27.06.28(日)
//
const int R = 9, G = 10, B = 11;
//
void setup() {
  pinMode(R, OUTPUT);
  pinMode(G, OUTPUT);
  pinMode(B, OUTPUT);
}

void loop() {
  digitalWrite(R, random(2));
  digitalWrite(G, random(2));
  digitalWrite(B, random(2));
  delay(100);
}



蛇の目にLED

投稿日:

 3色・ドライバICなしのLED。Arduinoは20mAくらいしか電流が流せないから、光らせるのに各色いちいち抵抗を付けなければならず、そのたびにブレッドボードでチマチマやるのが面倒くさい。

 それで、昨日作ったAC100Vオンオフモジュールの余りの蛇の目基盤に、同じく余りのピンヘッダと抵抗をつけて、LED基盤にした。

IMG_3055
IMG_3056

 シンプルになって、なかなか良い。



美しくLチカ

投稿日:

 3色LEDにサインカーブでPWMをかけ、できるだけ美しく色変化をかけたい。実はこれは前にもやったが、もうちょっとコードを美しくしたいのであった。

 3項演算子があったらなあ……。

//
//  sinCurvePWM.ino
//    3色LEDをできるだけ幻想的に美しく光らせたい。
//    佐藤俊夫
//    27.06.27(土)
//
const int R = 9, G = 10, B = 11;
//
void setup() {
  pinMode(R, OUTPUT);
  pinMode(G, OUTPUT);
  pinMode(B, OUTPUT);
}

void loop() {
  static float thetaR = 0.0, thetaG = 0.0, thetaB = 0.0;
  const float PI2 = 2.0 * PI;
  const float Rtic = PI2 / 1000.0, Gtic = PI2 / 900.0, Btic = PI2 / 1100.0;
  
  thetaR += Rtic;
  thetaG += Gtic;
  thetaB += Btic;
  if(thetaR >= PI2) thetaR = 0.0;
  if(thetaG >= PI2) thetaG = 0.0;
  if(thetaB >= PI2) thetaB = 0.0;
  analogWrite(R, 255 - sin255(thetaR));
  analogWrite(G, 255 - sin255(thetaG));
  analogWrite(B, 255 - sin255(thetaB));
  delay(20);
}

int sin255(float theta){
  return((int)((sin(theta) + 1.0) * 127.5));
}



AC100Vオン・オフモジュールを作る

投稿日:

 先週、秋月電子のオリジナルキット「ソリッドステートリレー」と超音波センサをArduinoにつなぎ、人が近づくと扇風機が回ったり、電気スタンドがついたりする、というのを試した。

 考えてみると、これからもArduinoで家電製品をオン・オフしたい、ということは欲求として出てくると思うので、この部分だけ切り離し、もう少しきちんと組み立てて、使いまわしのきくモジュールを作っておくことにした。

 またしても千石電商へ行き、1000円ばかり、ささやかに部品を買い込む。

IMG_3045

 AC100Vのプラグ、コンセント、モールドスペーサー、端子台、ヒューズホルダ、ピンヘッダ、2ミリピッチの小さい蛇の目基盤、圧着端子などだ。

 電線には圧着端子を取り付け、素子間の接続は端子台経由にして、飽きたらバラせるように工夫する。

IMG_3046

 ケースにゴリゴリ穴をあけ、部品を取り付けて詰め込み、完成だ。

IMG_3047

IMG_3050

 Arduinoから5Vを入れるには、ピンヘッダが取り付けてあるので、メスのピンコネクタで入れてやる。

 電気製品ならなんでも動かせるモジュールになっている。これを使うと、

  •  1000円ほどの単純な扇風機にArduinoをつなぎ、『1/fゆらぎ送風』をさせる
  •  イーサネットシールドをつなぎ、スマホからトースターをオンオフ

 などということが可能になる。……いや、意味があるかないかは別として(笑)。