macsbug

Just another WordPress.com site

Archive for 1月 2015

Kinoma Create で エアコンを自動化

leave a comment »

エアコンを、設定した時間にオンにする装置を作る。
ORG = 2015.01.31
Ver.1 = 2015.02.02 : Front Pin の GND は、Digital Pin で “0” を出力する。
Ver.2 = 2015.02.07 : Kinoma 鈴木バスケ氏の回答。GNDはDigital pin “0” で良い。
Ver.3 = 2015.02.12 : 使用時の注意。使用前にリモコンとエアコンを一度認識させる。

kinoma Create で エアコン・コントローラーを自動操作します。

ec ac

 

こまったエアコン:
エアコンのタイマーは、数時間後にオンはできるが、何時何分という時間設定ができず。毎回セットするのも面倒。
そこで、時間が来たら自動的にオンする装置を作ろうと思い立つ。Arduinoが正解だろうが、Kinoma Create で作る。

準備:
ハード:エアコン・コントローラー。フォトトランジスター。
ソフト:ソフトはさっぱり解らないので、Kinoma のデジタル時計を応用する。
_   Periodic Update(デジタル時計) に Digital Output LED (GPIO出力)を組み込む。
_   デジタル時計は、時分秒 を表示。 Digital Output は、GPIO を操作して LED を ON/OFF する。

機能: 例:エアコンを朝4時半に自動でオンにする。起きる5時頃には部屋が暖まっている。

詳細:
エアコン・コントローラー:1000種対応 エアコン用ユニバーサルマルチリモコン K-1028E で、
アマゾンで480円と格安。これなら、赤外線回路の製作やコード解析が不要で簡単に作れます。
リモコンの改造方法は、ON/OFF ボタンから2本の線とコネクターを付ける。
インターフェイスは、Kinoma ->1Kohm -> フォトトランジスター -> コントローラー へと接続。

ソフトの解析と実際:
「デジタル時計」は、時分秒を取得して、ディスプレーに表示する。
この時間と希望の時間を比べて、一致したらイベントを宣言する。
宣言により「Digital Output LED」にある Led.js (BLL) で、ピン番号に ‘1’ (600msecのパルスを1つ)を出す。

追加修正2015.02.02
フロントピンのグランドが、どうも不明。KinomaのSampleは、ソフトでの設定は何も説明していない。
事前に手動でグラウンドにしておくのか? Kinomaの鈴木バスケ氏より以下で良いとの事。2015.02.07
フロントピンをグランドに設定する命令が解らない
そこで、グランドピンは、デジタルピンを出力に設定し、”0″ ( GND) としてみた。
尚、I2C等の内部のPinを使用する場合は、ハードのグランド端子を使用する為、問題は発生しないと思う。
使用時は、一度エアコンと通信を実施してから使用する。(通信しないと認識しないようだ)2015.02.12

プログラムの変更:
eriodic Update(デジタル時計) :main.xml の変更

var ss = time;                  // time を ss に入れる
if ( ss == '4:30:00' ) {        // 4:30:00 に設定
  application.invoke(new MessageWithObject("pins:/light/turnOn"));
  } else {
  application.invoke(new MessageWithObject("pins:/light/turnOff"));
}

main.xml の script の変更

application.invoke(new MessageWithObject( "pins:configure", {
		    light: { require: "led",
		    	pins: {
		    	led: {pin: 59},
		    	gnd: {pin: 60}                       // gnd pin の追加
		    	}
		    }
		}));

Digital Output LED:led.js の変更

exports.pins = {
    led: {type: "Digital", direction: "output"},
    gnd: {type: "Digital", direction: "output"}     // gnd pin の設定
};

exports.configure = function() {
    this.led.init();
    this.gnd.init();                                // gnd pin の initialize
    this.gnd.write( 0 );                            // gnd pin を "0" にする
}

exports.turnOn = function() {                       // pin 59 pulse
    this.led.write( 1 );                            // pin 59 "1" ( ON )
    sensorUtils.mdelay(600);                        // 600msec delay
    this.led.write( 0 );                            // pin 59 "0" ( OFF )
}

exports.turnOff = function() {
    this.led.write( 0 );
}

exports.close = function() {
	this.led.close();
	this.gnd.close();                               //  gnd pin の close
}

 

ソフトのポイント:  注:Kinomaのプログラムは初めてですので、間違いがあるかもしれません。
1. エアコンは短い時間でオンにする必要がある。理由は、長押しすると他の操作に変化してしまう。
_ よって、短時間のオン信号を供給する様にする。
2. Kinomaのデジタル出力は、ちょっと特殊な仕組みになっているらしいのを発見。
_  500msec以内の Logic ‘1’ を出力すると、その後、約500msec 後に Logic ‘1’ がもう1つ出力する。
_ 命令を与えていないのに出力がでる。これでは、エアコンがオン、オフとなるかもしれない。

pck 2p

 

3. 1つのパルスを出すには、 Logic ‘1’ の期間を 約600msec にすると、2個目のパルスと重なり
_ 1つのパルスになります。よって、命令は、delay時間「sensorUtils.mdelay(600);」となる。
_ これは、Arduino の「delay(600); 」と同じです。

はまったところ:
Kinoma Create:Front pin の GND設定。どうも、Pinの設定と現状が解かりにくい。
Kinoma Studio:500msec 2_Pulseの理解。出力パルス幅。イベントとはなんだ。JavaScriptの勉強が必要。
_       プログラムの進行状態を液晶に表示。時間は1桁と2桁がある。
インターフェイス:フォトトランジスターの入力抵抗。綺麗に出来ない。無しで出来ないか?
コントローラー:液晶固定方法。
複数のコントローラー:コントローラーから信号は送るがエアコンが動かない。一度エアコンと通信をしてから使用する。

不明な点:
1. Front pin の GND設定は、ソフトでどうやるのか?  どなたか教えてください。 
_ 答え:Digital Pinに、”0” を出力する。
2. Kinoma Create は、時間計測において、常にネット接続状態が必要なのか?
3. 電源、ネット接続、システムの安定を含め、長時間使用に耐えられるか?
4. コントローラーが複数の場合の接続は問題なくできるのか? 追加:2015.03.07

感想:
1. IO出力の500msec 2_Pulse は、理由は不明だが、チャタリング防止の為と勝手に想像。
2. Kinomaの外にコントローラーがあるのは、見栄えが良くない。
_  インターフェイスは、コントローラーの中に組み込んで、コントローラーは、
_  Kinomaにガチャッとハメル様な感じではどうだろうか?
3. Kinoma Create は、ネット接続が切れたらどうするの、という不安がある。
4. どうも、イベントという考えが解りにくいし慣れていない。イベントが無いと動かないのか?
5. エアコンを動かすだけで、Kinomaが2万円は高すぎる。
6. コントローラーの中にArduinoを組み込んだ方がよいかもしれない。その場合、Arduinoの方が安い。
7. Kinoma Create のチームが家電製品をコントロールできる追加ハードとサンプルを出せば販路が広がると思う。
_  すでに次の様な製品があり、価格は 29,800円ですから対抗できると思う
_  Plutoタップリンク 、gigazineより 追加:2015.03.07

Written by macsbug

1月 31, 2015 at 1:46 am

カテゴリー: Kinoma Create

SplitRadixRealP FFT Analyzer of Arduino DUE

with 2 comments

Arduino DUE で SplitRadixRealP FFT Analyzer を製作。                 2015.01.29

FFT Library は、SplitRadixRealP FFT LIbrary を使用しました。

coolarduino.wordpress.com に感謝致します。
Append(追記):上記のサイトはリンクが切れ「pierinz/randusynth」に保存されています。2016.06.29
The above sites are stored in the link expired “pierinz / randusynth“.
Arduino DUE のスケッチは下に記載しました。

右下は、coolarduino氏のVscroll機能のあるWaterFall Spectrogramを見て作りました。

fft_1 line_1
fcs d

 

3Dプリンターでケースを作る。色は Kinoma Create と同色。以前作ったケースのデーターを使用し、
厚みを変える程度で楽に出来ました。こういう点、CAD や3Dプリンターは便利です。

速度について:
Arduino DUE での FFT Library は、動く物を探すのが難しいですが、私の知りうる所、
SplitRadixRealP FFT Library が、最も速く動作すると思われます。
入力装置について:
入力マイクアンプは、秋月電子通商の高感度マイクアンプキットで、コンデンサーマイクを使用し、
増幅率は、100倍。周波数帯域は、50Hz 〜16KHz です。

表示:
DUE + SplitRadixRealP の最大帯域は、計測していません。
今回は、マイクの帯域に合わせて、20KHz までの表示としました。
ま〜、周囲には高い周波数はなかなかありませんので、広いくらいかも知れません。
画面をタッチすると、バーグラフとライングラフと交互に切り替わります。

表示と速度について:
表示には、UTFT Library を使用しています。
データー数は、1024個で、これを、表示するとなると Arduino DUEの速度が響きます。まして、その下の Arduino MEGA だと更に遅く、Arduino UNOだとかなり厳しいですね。速度を上げるには、256 bit とか、データー数を減らしますが、そうすると帯域が狭くなります。
1024個のラインで表示する場合(写真右)の掃引時間は、約0.5secで少し遅いです。
バーグラフ(左)は、10個分で1つのバーを表示しています。これなら、音に合わせて充分見れる速度です。
データーと表示の関係では、1024個取っていますが表示には、450個(横軸)と半分以下しか使用していません。
プログラムを工夫すればもっと良い方法があるかも知れません。
表示方法の高速化もやってみたいテーマです。

構成:
1. Arduino DUE     :32bit ARM Cortex-M3 84MHz( Atmel SAM3X8E )
2. 3.5int 480×320 TFT  :aitendo 3.5インチ液晶 (1980円)(海外では$9位のものあり)
_ この製品は、Color(R,G,B) 設定が違いUTFT Library に合わない為、値をずらします。
3. Mic AMP       :秋月電子通商 高感度マイクアンプキット (500円)
4. SplitRadixReal FFT Library :上の ↓ を選択する。
_ pierinz/randusynth:SplitRadixRealP.zip :追加:2016.06.29
_ LIbraryは、ユーザー > USER > 書類 > Document> Arduino > libraries へ入れておく。

速度:幾つかの製作結果。
1. MicroView(ATMEGA328)(UNO)(8bit 16MHz) で 10KHz。
2. Arduino MEGA 2560(16bit 16MHz) で 13KHz。
3. Arduino DUE(32bit 84MHz) + Radix4 FFT Library は、30KHz。
4. Arduino DUE(32bit 84MHz) + SplitRadixRealP FFT LIbrary は、90KHz 位?。

メモ:
1. coolarduino は、高度な記事で、とても参考になります。
2. Arduino DUE + TFT Display ( ILI9486 ) での記事
3. 今回の帯域:
_ 1024bit 取得し、表示には、450 bit で 20KHz。
_ SplitRadixRealP は、2048 bit まで取得できるので、単純計算では、91KHz。 えっ、どうなんだろう。
4. USB5V電源の動作電流は、340mA。

他のFFT :coolarduino
1. waterfall-spectrogram:20 – 20000Hz, スペクトラムの垂直スクロール機能。
_ 、、やり方によっては、ここまでできるんですね。
2. Rdax4 FFT:スケッチは、ほぼ同じで動作しました。

 

スケッチ:

</pre>
<pre class="brush: plain; title: ; notranslate" title="">// SplitRadixRealP FFT Audio Analyzer for Arduino DUE
// ORG 2015.01.28            s.ono
// https://coolarduino.wordpress.com/2015/01/16/waterfall-spectrogram/
// https://coolarduino.wordpress.com/2014/09/25/splitradixreal-fft-library/
// FFT --------------------------------------------------------------------------------
#include <SplitRadixRealP.h>
#define   SMP_RATE     48000UL 
#define   CLK_MAIN  84000000UL
#define   TMR_CNTR    CLK_MAIN / (2 *SMP_RATE)
#define   FFT_SIZE        1024 //2048
#define   MIRROR      FFT_SIZE / 2
#define   INP_BUFF    FFT_SIZE         
volatile   uint16_t   sptr              =   0 ;
volatile    int16_t   flag              =   0 ;
           uint16_t  inp[2][INP_BUFF]   = { 0}; // DMA likes ping-pongs buffer
            int         f_r[FFT_SIZE]   = { 0};
            int         out1[MIRROR]    = { 0}; // Magnitudes
            int         out2[MIRROR]    = { 0}; // Magnitudes
const       int         dc_offset       = 1023; //2047;
unsigned long time_start;
unsigned int  time_hamng, time_revbn, time_radix, time_gainr, time_sqrtl, time_sqrtl2;
              SplitRadixRealP     radix;
// TFT --------------------------------------------------------------------------------
#include <UTFT.h>                              // UTFT Routine
#include <UTouch.h>                            // UTouch Routine
extern uint8_t SmallFont[];                    // Small Font
extern uint8_t BigFont[];                      // Big   Font
extern uint8_t SevenSegNumFont[];              // SevenSegNumFont
UTFT   myGLCD(CTE35IPS,38,39,40,41);           // Model=CTE35IPS 480x320 (aitendo)
// Because Display of aidendo is out of Color, the change of the value is necessary.
UTouch myTouch(6,5,4,3,2);                     // Touch setup
int mode = 2; int mx;                          // display mode

void setup(){
 //Serial.begin (115200) ;
 adc_setup ();         
 tmr_setup ();         
 pinMode( A0, INPUT);                          // Analog A0 input
 // TFT setup -------------------------------------------------------------------------
 myGLCD.InitLCD(LANDSCAPE);                    // LCD Initialize
 myGLCD.lcdOn();                               // -
 myGLCD.setContrast(64);                       // -
 demo();                                       //
 myGLCD.setFont(SmallFont);                    // Font : smallfont
 myGLCD.clrScr();                              // LCS Clear
 myTouch.InitTouch();                          // Touch Initialize
 myTouch.setPrecision(PREC_EXTREME);           // Touch Sence MAX
 myGLCD.setColor(255,230,230);                 // panel background color 222,222,222
 myGLCD.fillRect(0, 0, 480, 320);              // panel all fill
 myGLCD.setColor(255,100,100);                 // waku color
 myGLCD.drawRect(19, 29, 475, 301);            // waku
 myGLCD.setColor(0, 0, 0);                     // moji color=white
 myGLCD.setBackColor(255,230,230);             // moji background color
 myGLCD.print(" SplitRadixRealP FFT ANALYZER FOR ARDUINO DUE ", LEFT, 1); // TITLE
 myGLCD.setColor(0,0,0);
 myGLCD.setBackColor(255,230,230);             // moji background color
 myGLCD.print(" 1  2       5            10           15           20KHz", 30, 305);
}
//-------------------------------------------------------------------------------------
inline int mult_shft12( int a, int b){ return ((a * b) >> 12);}
//-------------------------------------------------------------------------------------
void loop(){
  while (myTouch.dataAvailable() == true) {    // interupt Touch
    if ( mode == 1 ){ mx = 2;}
    if ( mode == 2 ){ mx = 1;}
    mode = mx;
  }
  if ( flag ){
  // FFT ------------------------------------------------------------------------------
   uint16_t indx_a = flag -1;
   uint16_t indx_b = 0;
   time_start = micros();
   for ( uint16_t i = 0, k = (NWAVE / FFT_SIZE); i < FFT_SIZE; i++ ){
      uint16_t windw = Hamming[i * k];
      f_r[i] = mult_shft12((inp[indx_a][indx_b++] - dc_offset), windw);
   }
   time_hamng  = micros() - time_start;
   time_start = micros();
   radix.rev_bin( f_r, FFT_SIZE);
   time_revbn  = micros() - time_start;
   time_start = micros();
   radix.fft_split_radix_real( f_r, LOG2_FFT);
   time_radix  = micros() - time_start;
   time_start = micros();
   radix.gain_Reset( f_r, LOG2_FFT -1); 
   time_gainr  = micros() - time_start;
   time_start = micros();
   radix.get_Magnit1( f_r, out1);
   time_sqrtl  = micros() - time_start;
   time_start = micros();
   radix.get_Magnit2( f_r, out2);
   time_sqrtl2  = micros() - time_start;
   // ---------------------------------------------------------------------------------
   switch(mode){
     case 1:
         prnt_out5( f_r, MIRROR);                // line type
         break;
     case 2:
         prnt_out6( f_r, MIRROR);                // bar  type
         break;
   }  
   flag = 0;
  }   
}
//-----------------------------------------------------------------------------

void prnt_out5( int *yd, int ct){                // fft data,count
  int xr=20; int yr=300;
  int x1; int x2; int y1; int y2;
  yd[0]=0; yd[1]=0;                              // first clear
  for ( uint32_t x = 2; x < 450; x++){           // 1 - 450
      yd[x] = abs( yd[x] );                       //
      //if ( yd[x] > 270 ){ yd[x] = 270;}          // display limiter
      x2 = x + xr;                               // x2 : 480/(1024/3)
      x1 = x2 - 1;                               // x1
      y1 = yr - 4*yd[x-1];                       // y1
      y2 = yr - 4*yd[x];                         // y2
      if ( y1 < 30 ){ y1 = 30;}                  // Limitter
      if ( y2 < 30 ){ y2 = 30; yd[x] = 270;}     // disp,data Limitter
      myGLCD.setColor(255,255,255);              // clear(black)
      myGLCD.drawLine(x2, yr, x2, 30);           // clear(black)
      myGLCD.setColor(255,0,0);                  // blue draw
      myGLCD.drawLine(x1, y1, x2, y2);           // blue draw
   }
}
//-----------------------------------------------------------------------------

void prnt_out6( int *yd, int ct){                // fft data,count
  int x0=20; int w = 10;                         // w : bar width
  int x1; int x2; int y1=300; int y2;            // y1
  int c1=250; int c2=190; int c3=130; int c4=70; //
  yd[0]=0; yd[1]=0;                              // first clear
  for ( int x = 2; x < 450; x = x + w ){         // 1 - 450
      y2 = 0;                                    // y2 reset
      for ( int k = 0; k < w; k++ ){             // 0 to 9
        y2 = y2 + abs(yd[ x + k]);               // x + 0  to  x + 9
      }                                          //
      y2 = y1 - 4*(y2 / w );                     // y2 *4
      x1 = x + x0;                               // x1
      x2 = x1 + w - 2;                           // x2
      if ( y2 < 30 ){ y2 = 30;}                  // Limitter

      myGLCD.setColor(255,255,255);              // clear(black)
      myGLCD.fillRect(x1, y2, x2+2, 30);         // clear(black)   

      if ( y2 < c4 ){                            // < 70
        myGLCD.setColor(0,255,255);
        myGLCD.fillRect(x1, c4, x2, y2);
        myGLCD.setColor(0,255,0);
        myGLCD.fillRect(x1, c3, x2, c4);
        myGLCD.setColor(0,0,255);
        myGLCD.fillRect(x1, c2, x2, c3);
        myGLCD.setColor(255,0,255);
        myGLCD.fillRect(x1, c1, x2, c2);
        myGLCD.setColor(255,0,0);
        myGLCD.fillRect(x1, y1, x2, c1);
      }
      if ( y2 > c4 && y2 < c3 ){                 // y2 =  70 - 130
        myGLCD.setColor(0,255,0);
        myGLCD.fillRect(x1, c3, x2, y2);
        myGLCD.setColor(0,0,255);
        myGLCD.fillRect(x1, c2, x2, c3);
        myGLCD.setColor(255,0,255);
        myGLCD.fillRect(x1, c1, x2, c2);
        myGLCD.setColor(255,0,0);
        myGLCD.fillRect(x1, y1, x2, c1);
      }
      if ( y2 > c3 && y2 < c2 ){                 // y2 = 130 - 190
        myGLCD.setColor(0,0,255);
        myGLCD.fillRect(x1, c2, x2, y2);
        myGLCD.setColor(255,0,255);
        myGLCD.fillRect(x1, c1, x2, c2);
        myGLCD.setColor(255,0,0);
        myGLCD.fillRect(x1, y1, x2, c1);
      }
      if ( y2 > c2 && y2 < c1 ){                 // y2 = 190 - 250
        myGLCD.setColor(255,0,255);
        myGLCD.fillRect(x1, c1, x2, y2);
        myGLCD.setColor(255,0,0);
        myGLCD.fillRect(x1, y1, x2, c1);
      }
      if ( y2 > c1 ){                            // > 240
        myGLCD.setColor(255,0,0);
        myGLCD.fillRect(x1, y1, x2, y2);
      }      
  }
}
//-------------------------------------------------------------------------------------

void pio_TIOA0 (){
  PIOB->PIO_PDR = PIO_PB25B_TIOA0 ;    // disable PIO control
  PIOB->PIO_IDR = PIO_PB25B_TIOA0 ;    // disable PIO interrupts
  PIOB->PIO_ABSR |= PIO_PB25B_TIOA0 ;  // switch to B peripheral
}
//------------------------------------------------------------------------------------- 
void tmr_setup (){
  pmc_enable_periph_clk(TC_INTERFACE_ID + 0 *3 + 0); // clock the TC0 channel 0
  TcChannel * t = &(TC0->TC_CHANNEL)[0] ;            // pointer to TC0 registers for its channel 0
  t->TC_CCR = TC_CCR_CLKDIS ;                        // disable internal clocking while setup regs
  t->TC_IDR = 0xFFFFFFFF ;                           // disable interrupts
  t->TC_SR ;                                         // read int status reg to clear pending
  t->TC_CMR = TC_CMR_TCCLKS_TIMER_CLOCK1 |           // use TCLK1 (prescale by 2, = 42MHz)
              TC_CMR_WAVE |                          // waveform mode
              TC_CMR_WAVSEL_UP_RC |                  // count-up PWM using RC as threshold
              TC_CMR_EEVT_XC0 |     // Set external events from XC0 (this setup TIOB as output)
              TC_CMR_ACPA_CLEAR | TC_CMR_ACPC_CLEAR |
              TC_CMR_BCPB_CLEAR | TC_CMR_BCPC_CLEAR ;  
  t->TC_RC = TMR_CNTR;              // counter resets on RC, so sets period in terms of 42MHz clock
  t->TC_RA = TMR_CNTR /2;           // roughly square wave
  t->TC_CMR = (t->TC_CMR & 0xFFF0FFFF) | TC_CMR_ACPA_CLEAR | TC_CMR_ACPC_SET ;  // set clear and set from RA and RC compares
  t->TC_CCR = TC_CCR_CLKEN | TC_CCR_SWTRG ;  // re-enable local clocking and switch to hardware trigger source.
}
//-------------------------------------------------------------------------------------
void adc_setup (){
  pmc_enable_periph_clk(ID_ADC);
  adc_init(ADC, SystemCoreClock, ADC_FREQ_MAX, ADC_STARTUP_FAST);
  NVIC_EnableIRQ (ADC_IRQn);                 // enable ADC interrupt vector
  adc_disable_all_channel(ADC);
  adc_enable_interrupt(ADC, ADC_IER_RXBUFF);
  ADC->ADC_RPR  =  (uint32_t)  inp[0];       // DMA buffer
  ADC->ADC_RCR  =  INP_BUFF;
  ADC->ADC_RNPR =  (uint32_t)  inp[1];       // next DMA buffer
  ADC->ADC_RNCR =  INP_BUFF;
  ADC->ADC_PTCR =  1;
  adc_set_bias_current(ADC, 0x01); 
  //  adc_enable_tag(ADC);
  adc_enable_channel(ADC, ADC_CHANNEL_7);    // AN0
  adc_configure_trigger(ADC, ADC_TRIG_TIO_CH_0, 0);
  adc_start(ADC); 
}
//-------------------------------------------------------------------------------------
void ADC_Handler (void){
  if((adc_get_status(ADC) & ADC_ISR_RXBUFF) ==	ADC_ISR_RXBUFF){
    flag = ++sptr; 
    sptr &=  0x01;
    ADC->ADC_RNPR  =  (uint32_t)  inp[sptr];
    ADC->ADC_RNCR  =  INP_BUFF;
  }
}
//-------------------------------------------------------------------------------------
void demo(){
  myGLCD.setColor(255,0,0); myGLCD.fillRect(0,0,480,320);delay(200);
  for ( int i=0; i<240; i=i+2){
    int r=random(0,255);int g=random(0,255);int b=random(0,255);
    myGLCD.setColor(b,g,r); myGLCD.drawRect(i,i*0.7,480-i,320-i*0.7);
    delay(i/30);
  }
  for ( int i=240; i>0; i=i-3){
    int r=random(0,255);int g=random(0,255);int b=random(0,255);
    myGLCD.setColor(b,g,r); myGLCD.drawRect(i,i*0.7,480-i,320-i*0.7);
    delay(i/30);
  }
  delay(200);
}
//-------------------------------------------------------------------------------------

 

Written by macsbug

1月 29, 2015 at 4:21 am

カテゴリー: Arduino

ちょっと遊べる小道具リスト

with one comment

小道具のリスト作りを始めました。           2015.01.29〜

   画像    名前  販売先(リンク)  価格         メモ  (済):動作確認済み
USB LED Night Light  worldchips
116円
11day=1.17-1.28
 (済) LEDが点灯する。 電流=90 mA
USB Touch switch 4LED Night Light  worldchips
135円
 (済) タッチでLEDが点灯/消灯する。
電流=70 mA
STM32F103C8T6 ARM STM32 Minimum System Development Board Module  worldchips
553円
 入手済。IDE調査中。
Arduino Support Package For Maple
maple-ide
Roger Clark
4 Channe IIC I2C Logic Level Converter Bi-Directional Module 5V to 3.3V  worldchips
139円
  入手済
Mifare RC522 Card Read Antenna RFID Reader IC Card Proximity Module  worldchips
396円
  入手済
RFID IC Key Tags Keyfobs  worldchips
10個 289円
  入手済
USB Charger Doctor Voltage Current Meter  worldchips
193円
  (済) 上海問屋では977円。
Male to Male Jumper Wires  worldchips
221円
  (済) 秋月で 220円。
TFT/SD Shield for Arduino DUE TFT LCD Module SD Card Adapter  wkws20(信頼有)
1174円
19day=1.13-2.1
 (済)Arduino DUE用TFT Display接続CARD。DUE+Sheeld+TFT となる。
入手済
HC-SR501PIR Motion Sensor  kxnkxk
5個 766円
12day=1.18-1.30
 入手済
秋月は1個600円。
I2C  OV7670 CMOS Camera Module Lens 640X480  kxnkxk
763円
12day=1.18-1.30
 入手済
Welding Goggles  sx4us
409円12day=1.22-2.3
  入手済。低級、購入ミス。
14-in-1-Solar-Robot-Car-Boat-Kid-Educational-Toy  sx4us
2494円12day=1.22-2.3
 入手済。低級、購入ミス。
10X + 15X Eye Magnifier Loupe Lens Set  sx4us
374円12day=1.22-2.3
  入手済。低級、購入ミス。
WS2812 5050 RGB LED Module for Arduino  flyfuntech2014
351円
 (済)複数個の連結が可能。libraryでLEDの数を設定する。libraryにより多機能の表示可能。
8 x WS2812 5050 RGB LED with Integrated Drivers
Adafruit_NeoPixel library
Microphone Sound Module for Arduino  flyfuntech2014
210円
 (済)マイクの入力部が狭く感度が低い。
 40pcs×20cm 2.54mm male to female survy2014
291円
*day=2.1-
 注文中。2ea=583円
Digispark Kickstarter ATTINY85 Arduino General Micro USB Development Board survy2014
356円
*day=2.1-
注文中。おおっ、あのKickstarterのである。
2PCS DC 3.7V 22000RPM Coreless Motor Propeller for RC Aircraft Helicopter Toy survy2014
2ea=338円
**day=2.1-
注文中。 4ea=680円
IR Infrared Obstacle Avoidance Sensor Module for Arduino Smart Car Robot 3-wire survy2014
148円
**day=2.1-
 注文中
DS1302 Serial Real Time Clock RTC with Battery  survy2014
220円
**day=2.1-
 注文中。2ea=442円
 BMP180 Replace BMP085 Digital Barometric Pressure Sensor Module survy2014
177円
**day=2.1-
 注文中
 2.54mm 20cm Dupont wire cable 8P-8P Connector Female to Female  survy2014
150円
**day=2.1-
 注文中。4ea=601円
 5PCS 5V Mini USB 1A Lithium Battery Charging Board Charger Module NEW  survy2014
5ea=281円
**day=2.1-
 注文中
 10Pcs 4N25 6Pin Optoisolators Transistor DIP New  survy2014
10EA=234円
**day=2.1-
 注文中
 5PCS 32.768 kHz 32.768k Hz Crystal Oscillator 3 x 8 mm Cylinder  survy2014
5ea=152円
**day=2.1-
注文中
10pcs 8 Pin Female tall stackable Header Connector socket for Arduino Shield  survy2014
10ea=279円
**day=2.1-
 注文中。20ea=560円
 new Sound detection sensor module sound sensor Intelligent vehicle  survy2014
148円
**day=2.1-
注文中
 Digital Sound detection sensor module loudnes voice Intelligent vehicle Arduino  wkws20
351円
**day=2.1-
 注文中。5ea=1757円
Vibration Sensor Module Theft prevention shake digital output  wkws20
351円
5day=2.1-2.6
 入手済
PWM Generator Controller Adjustable Frequency 100-400kHz SG3525  wkws20
704円
5day=2.1-2.6
 入手済
 Mini Flame Fire Sensor for Arduino 760nm to 110nm IR Wavelength Sensor AVR PIC  wkws20
234円
5day=2.1-2.6
 入手済
 5″ 5.0″ inch TFT LCD module Font IC 800×480 SSD1963 arduino DUE MEGA2560  wkws20
5994円
5day=2.1-2.6
 入手済
 5V Relay Module For Arduino DSP AVR PIC ARM 220/110V 10A control appliance  wkws20
351円
5day=2.1-2.6
 入手済。2ea=703円

Written by macsbug

1月 29, 2015 at 12:45 am

カテゴリー: Arduino, Make

Kinoma Create で遊べる小道具

leave a comment »

Kinoma Create で遊べる小道具のリスト作りを始めました。      2015.01.25〜

pins

注:個人の備忘録にて内容を保証するものではありません。

   画像    名前  販売先(リンク)  価格         メモ  (済):動作確認済み
pin  ピンソケット   1x8 秋月電子通商
50円
スイッチサイエンス=51円
千石=53円
(済) Front Pinの延長に使用。Arduinoでおなじみの物。Front Pinは肉厚薄く幅広のピンは要注意。このPinは肉厚薄く本体側を壊さない。Pinは基盤の底に当たる為1〜2mm切るとケース枠に収まる。
6led 抵抗付き
6bit LED
ebay:canton-electronic 

5個=824円

ebay: cantonrf
2個=470円

(済) 配線なしで、Front Pin に接続できる。
抵抗値=1Kohm ( 5V=5mA, 3.3V=3.3mA )
どの向きへ接続しても本体は壊れない。
FRONTのGPIO は、最大 370mA 
( Arduino UNO は、最大40mA )
複数接続の時は合計電流に注意する事。
kamera 小型TTLシリアルJPEGカメラ
30万ピクセル
秋月電子通商

3850円

(済) I2C カメラ。(3.3V電源)。解像度は低い。
Sample CodeのCameraがそのまま動く。
sampleの10Kohmは無くとも動く。
アプリはボタン(WireでJumperでも良い)を押した時に写るだけ。
pin 小型ソレノイド
5V
SparkFun ROB-11015
千石電商

650円

電圧を加えるとバネが縮まる。
電流=630mA (測定してみた定常値)
ドライバー回路が必要ですね。
リモコンのボタンは押せない強さ。
rimokon 1000種対応 エアコン用ユニバーサルマルチリモコン amazon

480円

(済) リモコンの改造:液晶の取り付け状態要注意。
コネクター取り付けと電源ボタン(ON/OFF)から2本配線。
赤外線回路製作不要やコード解析不要。
rimokon 抵抗内蔵LED
5V用
秋月電子通商

10個200円

抵抗内蔵で安心。
rimokon 37 in 1 Sensor Modules Kit for Arduino ebay:fzeroinestore
4867円

amazon=6280円

(済) Front Pin に接続して使えます。
Arduinoのピンソケットを使用の事。
説明とArduino Sample Code
ebayで最も安い所をお探しください。
pin I2C
TCS34725
カラーセンサーモジュール
秋月電子通商

880円

(済) 配線は6本のみ。
アプリは、Samplesにある。
Documentation:Color Sensor
色の判別を確認した。
alt I2C
MPL115A2
大気圧センサー
秋月電子通商

600円

入手済
temp I2C
ADT7410
高精度・高分解能16Bit
温度センサー
秋月電子通商

500円

入手済
12da I2C
MCP4726
12ビットD/A変換
秋月電子通商

150円

入手済
12da I2C
MCP3425
16Bit ADC
秋月電子通商

250円

入手済
12hda I2C
STTS751
高精度12ビット
温度センサー
秋月電子通商

80円

入手済
touch  Capacitive touch button ebay: wkws20
信頼有り
470円
19day=1.13-2.1
入手済
sw collision switch sensor ebay: wkws20
信頼有り
470円
19day=1.13-2.1
入手済
light Light sensor ebay: wkws20
信頼有り
470円
19day=1.13-2.1
 入手済
mic Digital Sound detection sensorFC-04 ebay: wkws20
信頼有り
352円
19day=1.13-2.1
LM393。Comparatorでデジタル変換。LEDで変化が見れる。ボリュームで比較レベルを変えられる。fc04

 

案:

1. 部品を簡単に安く、入手する方法は、ebay へ共同購入する方法があります。
_ 注文が面倒な人。海外発注が苦手な人。カードが使えない人も便利になると思います。
_ 不良品や金銭が絡みますので、信頼できる関係が必要です。

2. Kinoma Create 初心者向けのサイトや集まりを希望しています。

Written by macsbug

1月 25, 2015 at 12:58 am

カテゴリー: Arduino, Kinoma Create

Kinoma Create と Arduino DUE で FFT ?

leave a comment »

Kinoma CreateとArduino DUE + TFT で FFT してみた。
Kinoma で Audio Analyzer を作りたいがそんな頭脳なし。
そこで、Kinoma のネットラジオと Arduino FFT を合わせてみた。
キモは、Kinoma のスピーカーからマイクで Arduino で送り、表示しています。

kino_ardu

 

 

 

 

 

 

 

 

 

 

 

 

メモ:周波数帯域について
_コンデンサーマイクのの周波数帯域は、50Hz〜16KHz。
_FFTの機能は最大30KHz。
_よって、最大10KHz程度の表示で良いかと思っている。

2015.01.24

Written by macsbug

1月 24, 2015 at 2:06 pm

カテゴリー: Arduino, Kinoma Create

Kinoma Studio ver 1.3.33.3 & Pin Exploler

leave a comment »

初期のKinoma Studio は、ver 1.3.27.1 で、アプリを Kinoma Create へインストールできませんでした。

application.xml の Main 項目
ks3

 

 

 

 

 

2015年1月22日 ver 1.3.33.3  UP DATE がでました。

Install on launch が追加され、アプリを Kinoma Create へインストール可能となりました。

Studioup

 

 

 

 

 

 

 

 

 

 

そして同日、Pin Exploler がアップされました。
Kinoma Createのピンに接続したセンサーをKinoma Create上の操作で動作を試す事ができるアプリケーション。
プログラム不要でセンサーの動作をモニターする事ができます。

pin-explorer-screens-4-up-sm

 

参考:

Previewing Pin Explorer for Kinoma Create at MIT

Exploring Pin Explorer

感想:
Pin Exploler は、待ち望んだもので、操作性やデザインも素晴らしい。
電子工作での重要なポイントは、センサーの入力状況を把握できるモニタープログラムが必要。
入力の状態が把握できれば、プログラムの作成が速くなり楽しくなります。

私が仕事用に製作した、HT Basicによる無線装置のモニタープログラムと似ている点に感心しました。
解り易い操作性と見やすいグラフ等の、表示が大切。

☆ Kinoma Create チーム 及び 代理店のスイッチサイエンス を応援します。

Written by macsbug

1月 22, 2015 at 1:17 pm

カテゴリー: Kinoma Create

Kinoma Create はじめの問題点

leave a comment »

以下の記事は、Kinoma Studio v 1.3.33.3 ( 2015.01.22 )により、多くが解決致しました。
よって、メモ書き程度にしておきます。( 2015.01.22 )

Kinoma Create の問題点。2015.01.19

結論:開発環境である、Kinoma Studio は、Kinoma Create にアプリをインストールできない。 2015.01.21現在。
_  Kinoma Studio of the development environment cannot install application in Kinoma Create.
_  現在のVerには、インストールする項目が無く、次期バージョンで、インストール項目が追加されると思われる。

質問:
アプリを実機(Kinoma Create)でシュミレーションできるが、インストールできない。
詳細: Kinoma Studio の「RUN」ボタンで Kinoma Create へアプリを送り動くが、
「RUN」ボタン もしくは、Kinoma Create の電源を切るとアプリが消える。
どのようにしたら、Kinoma Create へインストールできるか?

この件を、スイッチサイエンスのお問い合わせに聞いてみた。
翌日に返事があり、スイッチサイエンスのサポートは素晴らしい。
前回、Kinoma Create の初期故障に対する対応も丁寧かつ迅速であった。

スイッチサイエンスの回答:2015年1月19日
_ 弊社でも試したのですが、現ver.ではKinoma Create側にアプリをインストールしておくことは
_ できないようです。
_ ただ、Kinoma Createのフォーラムの情報によると、IDEの次ver.でようやく”install”がサポート
_ されるとのことです。
_ ”coming very soon”とのことですので、今しばらくお待ちいただけますと幸いです。

That’s great news – congratulations!
The next release of Kinoma Studio (coming very soon) will include “install” support. Here’s how it will work:
http://forum.kinoma.com/discussion/53/how-do-i-get-my-application-to-the-create
どうぞよろしくお願いいたします。

Marvek社の、鈴木バスケさんの回答。2015年1月21日
_ application.xml画面で、デバイスの横のギアアイコンをクリックして表示される画面に、
_ Install on launchというオプションがあります。
1.Enable debugging
2.Break on exceptions
3.Enable profiler on launch
4.Install on launch
nks

 

 

 

 

 

 

 

Kinoma Studio の現在の ver は、1.3.27.1 で以下の Option 状態になっています。「Install on launch」が無い。
1.Enable debugging
2.Break on exceptions
3.Enable profiler on launch
4.Compile source
ks3

 

 

 

 

 
状況:
1. Kinoma Studio でインストールできない「商品」である事が明示されていない。
2. 個人が開発した記事が1、2あるが、これはどうやってできたのか?
3. 肝心かなめの事(問題点)が、Kinoma HP や Kinoma の FaceBook には、書かれていない。
4. Kinoma create Meetup では、この問題点について述べていない。
5. Arduinoの方が簡単である。
6. >ハードウェア開発に詳しくないソフトウェア開発者から、個人のMaker、プロのハードウェア開発者まで、
_ >だれでも簡単に素早く、IoTの実験ができます。
_ これは、現在、無理です。できたアプリを公開して欲しい。

疑問:
1.  アプリをインストールできなければ、商品として価値を持たない。
2.  FaceBook Kinoma では、インストできない件が書かれていない。何故か?
3.  購入者がいるのも関わらず、だれもこの事を公表していない。何故か?
4.  アプリのインストールは、KinomaのSamplsからは、インストールできる。Kinoma Studio からは出来ない。何故か?
_   バージョンが違うからと思われます。
5.  Kinoma は、FAQ で質問されて、初めて書いている。何故か?
6.  システムを購入者がインストールできない状況にある。壊れた場合はどうするのか?
8.  システムを破壊するアプリがあると、使用不能となってしまう。
9.  Kinoma は、コピー製品がでた時に、どう対処するのか?
10. アプリの作成は容易ではない。Arduino のアプリ作成は、素人でも出来るレベルだから広まっている。
11. WiFi での接続は不便である。まだまだ、WiFi環境ができていない場所が多い現実を知るべきだ。
12.
_

Written by macsbug

1月 19, 2015 at 12:42 pm

カテゴリー: Kinoma Create