2007.7.28

  • LEDの明るさ
pwm制御しているのだけど、メモ。
High:Lowで、Highの値を大きくするとクオリティ高くなると一瞬思う。
  • try1
    • 明るめ、3:1だと見やすい。(単位msec)
    • 暗め、3:30だともうかなり醜い。
  • try2
    • 明るめ、10:1だと見やすい。
    • 暗め、10:12の時点で醜い。
どのような値だと一番美しく見えるか、研究中です。何か知ってる方いればコメントお願いします。
今、ここが参考になりそうな気がしている。Sim's blog―PWMでLEDぼわっと


明るさ確認用プログラム
/* Blinking LED -> firefly
 * ------------
 */
 
int ledPin = 10; // LED connected to digital pin 10
int i = 0;
int d = 15;
int PW1,PW2;
 
void setup()
{
  pinMode(ledPin, OUTPUT);      
  Serial.begin(9600);
}
 
void loop()
{
  PW1 = 3;
  PW2 ++;
  Serial.println(PW2);
  for(i=0;i<=100;i++){    
      digitalWrite(ledPin, HIGH);// sets the LED on
      delay(PW1);// waits for 10-PW (PW=1000 -> 1sec)
      digitalWrite(ledPin, LOW);// sets the LED off
      delay(PW2);               
  }
}
 

コメント
名前:
コメント:




2007.7.27

  • 違うアルゴリズム
値を処理し、LEDを制御するための、今までのとは違うアルゴリズムを思いついたので、それをやってみようと思う。

  • そのためのメモ
不安定なので絶対やらないが、LEDアナログ制御の方法メモ
(LED 明→暗/analogWright 1→255)
/*
* Code for cross-fading 3 LEDs, red, green and blue,
* or one tri-color LED, using PWM
* The program cross-fades slowly from red to green,
* green to blue, and blue to red
* The debugging code assumes Arduino 0004,
* as it uses the new Serial.begin()-style functions
* Clay Shirky <clay.shirky@nyu.edu> の、改版
*/
 
// Output
int redPin   = 10; 
int greenPin = 11; 
int bluePin  = 12;
 
// Program variables
int redVal   = 255; 
int greenVal = 1; 
int blueVal  = 1;
 
int i = 0;     
int wait = 50; 
 
void setup()
{
  pinMode(redPin,   OUTPUT);
  pinMode(greenPin, OUTPUT);   
  pinMode(bluePin,  OUTPUT); 
  Serial.begin(9600);
}
 
// Main program
void loop()
{
  i += 1;      // Increment counter
  if (i < 255) // First phase of fades
  {
    redVal   -= 1; // Red down
    greenVal += 1; // Green up
    blueVal   = 1; // Blue low
  }
  else if (i < 509) // Second phase of fades
  {
    redVal    = 1; // Red low
    greenVal -= 1; // Green down
    blueVal  += 1; // Blue up
  } 
  else if (i < 763) // Third phase of fades
  {
    redVal  += 1; // Red up
    greenVal = 1; // Green low
    blueVal -= 1; // Blue down
  }
  else // Re-set the counter, and start the fades again
  {
    i = 0;
  }  
 
// Write current values to LED pins
  analogWrite(redPin,   redVal);   
  analogWrite(greenPin, greenVal); 
  analogWrite(bluePin,  blueVal);  
 
  delay(wait); 
  Serial.println(redVal);
}
 

  • デジタル制御の方法
(LED 明→暗/digitalWright H1,L1 → H1,L20 → H0)
int ledPin = 10; 
 int previousMillis = 0;
 int value = LOW;
 int interval = 1000;
 long i=0;
 
void setup() { 
  Serial.begin(9600);
  pinMode(ledPin, OUTPUT); 
} 
 
void loop() { 
    // pwm操作
    digitalWrite(ledPin, HIGH);   // sets the LED on
    delay(1);  
    digitalWrite(ledPin, LOW);    // sets the LED off
    delay(5);                      
    digitalWrite(ledPin, value);
} 
 

  • いや、平均値計算を違う方法にしてみようかなぁ。
で、実行してみたところ、ノイズは相変わらずだったけど、やばいくらいに操作性が高くなった


コメント
名前:
コメント:




2007.7.26

  • 見切りについて
思い切って見切りをつけたのはいいが、良い解決策が思い浮かばない。
結局LED制御もマイコン使わないと駄目なんじゃ・・・とか思いつつ。


コメント
名前:
コメント:




2007.7.24

  • 見切り
思い切って、実装の方法を違う方法にしました。
なぜなら、プログラム実行速度の不安定さが解消されないから!
図7.24 プログラムの実行速度

  • 今まで
■プログラム部分
平均取るforループ{
  平均値計算
  黄色LED制御
   (1)点灯 or (2)消灯
  赤、青色LED制御
   (3)赤色LED点灯、青色LED消灯
   (4)赤色LED消灯、青色LED点灯
}
 
平均値を使って、温度が上昇しているか下降しているか判断{
  上昇していたらLED点灯(1)へ
  下降していたらLED消灯(2)へ
}
平均値を使って最大値を計算
 
振幅幅が減少したら赤色LED点灯、青色LED消灯(3)へ
振幅幅が増加したら赤色LED消灯、青色LED点灯(4)へ
 

  • これから
■プログラム部分
平均取るforループ{
  平均値計算
}
 
平均値を使って、温度が上昇しているか下降しているか判断{
  上昇していたらLED点灯(1)へ
  下降していたらLED消灯(2)へ
}
平均値を使って最大値を計算
 
振幅幅が減少したら赤色LED点灯、青色LED消灯(3)へ
振幅幅が増加したら赤色LED消灯、青色LED点灯(4)へ
 

■実装部分
黄色LED制御
   (1)点灯 or (2)消灯
  赤、青色LED制御
   (3)赤色LED点灯、青色LED消灯
   (4)赤色LED消灯、青色LED点灯
 

コメント
名前:
コメント:





today: -
yesterday: -
最終更新:2007年07月29日 00:57
添付ファイル