2014年12月31日水曜日

製品力はもちろんロジスティクスの力も必須、IoT戦略をON Semiconductorに聞く - 半導体デバイス - 日経テクノロジーオンライン

製品力はもちろんロジスティクスの力も必須、IoT戦略をON Semiconductorに聞く - 半導体デバイス - 日経テクノロジーオンライン:



'via Blog this'

注目されているIoTだが浸透はまだまだ 日本の製造業の今後の取り組みに注目|デジタルビジネスの勝ち方|ダイヤモンド・オンライン

注目されているIoTだが浸透はまだまだ 日本の製造業の今後の取り組みに注目|デジタルビジネスの勝ち方|ダイヤモンド・オンライン:



'via Blog this'



会員登録不要

2014 Agile Cat:新しい動向の マトメ | Agile Cat --- in the cloud

2014 Agile Cat:新しい動向の マトメ | Agile Cat --- in the cloud: "01/13"



'via Blog this'



2014年の新しい流れをピックアップし、4つの分類を行っている。
4番目にIoTがあります。

インテル日本法人社長 江田麻季子 ファッション企業とも提携 IoT分野で地歩築く|短答直入|ダイヤモンド・オンライン


インテル日本法人社長 江田麻季子 ファッション企業とも提携 IoT分野で地歩築く|短答直入|ダイヤモンド・オンライン:



'via Blog this' ダイヤモンドインライン会員登録が必要(無料)

2014年12月25日木曜日

Espruino 抵抗なしでなんかするやりかた

この記事はJavaScriptでファームウェアを記述するプロトタイピング基板"Espruino"のAdvent Calenderのために作成しました。Espruino Advent Calender 24日目です。
ちなみにEspruinoは、SeeedStudioから購入しました。$50を超えないと送料がかかってしまうので知り合いの分と2個購入してわけわけしました。

さて本題。プロトタイピング歴が長いためかワイヤケーブルや抵抗などを極力減らす癖がついています。
Espruinoですと普通A15ピン(LED3と同じ)などにLEDをつないで点灯させたい場合、以下のように接続します。


 抵抗はLEDの制限電流に応じた値にしないといけません。一応、1kΩを入れておけば大丈夫と言われてます(Arduinoなどの5Vベースの場合ですが。3.3VのEspruinoはもうちょっと低い値の抵抗でも大丈夫)。
こうつけたくなりません?
ここまでくると、更にこうつけたくなりません?


そうすれば、ブレッドボードもいらなくなって、それなりに楽です。



ソースでA14側をGNDにすれば可能です。カソードコモンのLED(足の短いカソードがGNDで0V)の場合、digitalWriteで0(LOW)を書きます。


var on = false;
var id = setInterval(function() {
  on = !on;
  A15.write(on);
},500);

function onInit() {
  pinMode(A15, "output");
  
  //A14番ピンを出力モードにする
  pinMode(A14, "output");
  //A14番ピンにLOW(0V)を出力してGNDにする
  digitalWrite(A14,LOW);

}
onInit();

抵抗なしの実装例

オン/オフでは面白くないので、明暗がでるようにanalogWite()を使った実装例を示します。
赤、緑、青のLEDとRGB LEDを直 に刺しています。光ファイバーは、三菱レイヨンのエスカを購入。東急ハンズやAmazonで購入できます。
 配線実体図は以下の通りです。B6/B7ピンに赤色LED(B7側をGND=短い足)、B8/B9ピンに緑色LED(B9側をGND)、A0/A1ピンに青色LED(A1側をGND)を接続しています。
 向かって右側には、RGB LEDをC9/C8/C7/C6ピンに接続しています(C7をGND=一番長い足)。
4つのLEDのGNDピンは、onInit()関数で初期化しLOWまたはHIGHを書き込みます。
function onInit() {
  pinMode(A0, "output");//A0番ピンを出力モードにする
  pinMode(A1, "output");//A1番ピンを出力モードにする
  //A1番ピンにLOW(0V)を出力してGNDにする
  digitalWrite(A1,LOW);
  
  pinMode(B6, "output");//B6番ピンを出力モードにする
  pinMode(B7, "output");//B7番ピンを出力モードにする
  //B7番ピンにLOW(0V)を出力してGNDにする
  digitalWrite(B7,LOW);

  pinMode(B8, "output");//B8番ピンを出力モードにする
  pinMode(B9, "output");//B9番ピンを出力モードにする
  //B9番ピンにLOW(0V)を出力してGNDにする
  digitalWrite(B9,LOW);

  pinMode(C9, "output");//緑 C9番ピンを出力モードにする
  pinMode(C8, "output");//青 C8番ピンを出力モードにする
  pinMode(C7, "output");//GND C7番ピンを出力モードにする
  pinMode(C6, "output");//赤 C6番ピンを出力モードにする
  //アノードコモン C7番ピンにHIGH(3.3V)を出力してGNDにする
  digitalWrite(C7,HIGH);
}
onInit();
C7ピンにはHIGHを指定します。手持ちのRGB LEDはアノードコモンの指定があり、普通のカソードコモンのLEDと違い、極性が逆になります。アノードコモンのGNDにはHIGHをかけておきます。
明暗はPWM(パルス幅変調)で3.3Vを0%〜100%まで細かくアナログ出力できるanalogWrite()を使い、変化量はゆるやかな変化を持たせるためにsinカーブにしました。
var deg = 0;
var id = setInterval(function(){
  //カウンタ変数degを度としてラジアンを計算
  radian = deg * Math.PI / 180.0;

  // Update output along with sin function
  // initial angle: red = 0, green = 2/3*PI, blue = 4/3*PI
  red     = Math.sin(radian) * 0.4 + 0.6; 
  green = Math.sin(radian+2/3*Math.PI) * 0.4 + 0.6; 
  blue   =  Math.sin(radian+4/3*Math.PI) * 0.4 + 0.6;
  
  analogWrite(C9, green);  //RGB 緑
  analogWrite(C8, blue);    //RGB 青
  analogWrite(C6, read);   //RGB 赤

  analogWrite(B8, 1.0-red);//赤
  analogWrite(B6, 1.0-green);//緑
  analogWrite(A0, 1.0-blue);//青
  
  deg++;

},10);
10ミリ秒おきに明るさを変えています。sinカーブは赤・緑・青に0度、120度、240度と位相をずらしています。
PWMのアナログ値は0〜1.0を指定するところsinカーブの計算で0.2〜1.0が出るようにしています。RGB LEDはアノードコモンのため1.0で消灯、0で最大輝度になります。
赤・緑・青のLEDはカソードコモンのため0で消灯、1.0で最大輝度になります。そのため各変数はアノードコモン用のため1から引いた差を出力させています。

自分でもわからなくなるのでw MacのGrapherで計算してみました。図示すると以下のようになります。
 実行してみると、ゆっくりと明暗を繰り返しています。が、RGB LEDだと3色が重なる時間が長いためか明るめで色の変化がイマイチ楽しめないようです^^;
どなたかソースを改良して素敵な照明インテリアに仕上げてください。
(のちほどソースをアップします)