ラベル 電気 の投稿を表示しています。 すべての投稿を表示
ラベル 電気 の投稿を表示しています。 すべての投稿を表示

2014年5月31日土曜日

自作Qi対応



こんなのを買ってきて

















偶々運良くクレードル対応の端末があったので
ワイヤレス充電アダプタのコネクタ部をバラしてから
バネ性のある金属を半田付け。
(今回は適当なコネクタの端子を流用しました)

位置を合わせて吸湿性の無いテープでガッツリ貼り付け。
※吸湿性が無いことが最重要!!















2014年5月28日水曜日

Arduinoでタッチセンサ

ちょこちょことググっていたらioポートをタッチセンサとして使えるってのを発見しました。
静電容量式タッチセンサで遊ぶ

何これ、面白うそうって事で
建築発明工作ゼミ2008さんの所からソースを頂いて早速動かしてみたところ

どうも触られる側、つまりセンサ及びマイコン側の環境で誤動作しやすかったので
色々と試して実用化できそうな気がしてきました。

一応現象としてはタッチを話した後に誤作動していたのでタッチ部に貯まった電荷が
逃げ切れていない為と思われるので一旦入力ピンを出力にして貯まった電荷を
逃しています。


まだ、課題としてタッチ側の面積を変えると誤動作もありましたので更に確認してみたところ、
タッチ部の面積と通常時の時間の長さが比例して伸びるだけで
タッチした時の時間はそれほど変化しませんでした。
つまり、コンデンサを並列に繋ぐようなものなので当たり前ですね。
そんなわけで自動キャリブレーション的な事もできないことはないと思いますが
タッチ面積を極端に大きくすると通常時の不安定さが増すだけだし
常識的なタッチ面積であれば実用には大丈夫だと思います。



通常時波形:緑=タッチコントロール出力 黄=タッチ入力




タッチ時波形:緑=タッチコントロール出力 黄=タッチ入力








//
//ioポート式タッチセンサ評価プログラム
//

#define LED_OUT  13     //LEDでタッチセンサのon/off表示
#define TOUCH_MON  12   //タッチセンサモニタ
#define TOUCH_OUT 11    //タッチセンサコントロール
#define TOUCH_IN  10    //タッチセンサ入力

#define TOUCH_AV  3     //移動平均回数
int touchLv=40;         //タッチ判定値
int touch=0;            //フィルタ用変数

int  touchMng(void)
{
  int aa=0;    //静電容量変化量の変数を用意
  unsigned long touchTm;    //タッチ時間保持

  pinMode(TOUCH_IN,INPUT);  //タッチ入力設定
  digitalWrite(TOUCH_OUT, HIGH);  //タッチ出力ピンをHIGHで出力
  digitalWrite(TOUCH_MON, HIGH);  //入力モニタ用出力
  //タッチ入力がHIGHになるまでをカウント
  //※HIGH→LOWの変化では検出不能でした
  touchTm = micros();
  while (digitalRead(TOUCH_IN)!=HIGH){
    if(micros()-touchTm > touchLv) {
      break;
    }
  }
  digitalWrite(TOUCH_MON, LOW);
  aa = micros()-touchTm;             //変化時間をμSecで取得
  digitalWrite(TOUCH_OUT, LOW);
  pinMode(TOUCH_IN,OUTPUT);    //入力を一旦出力にして貯まった電荷を逃します
  delay(1);

  Serial.print(touchLv);
  Serial.print(" \t");
  Serial.print(aa);
  Serial.print(" \t");
  Serial.print(touch);
  Serial.print(" \t");

  //加重移動平均
  //touch += aa-touch/TOUCH_AV;
  //return(touchLv*TOUCH_AV > touch ? 0 : -1);
  //単純移動平均
  touch += -touch/TOUCH_AV + aa;
  return(touchLv > touch/TOUCH_AV ? 0 : -1);
}


void  loop(void)
{
  if(touchMng() == 0) {
    Serial.println("    off");
    digitalWrite(LED_OUT, LOW);
  }
  else {
    Serial.println("on");
    digitalWrite(LED_OUT, HIGH);
  }
}


void setup(void)
{
  Serial.begin(9600);          //シリアルでモニター

  pinMode(TOUCH_OUT,OUTPUT);    //タッチ出力をデジタル出力
  pinMode(TOUCH_IN,INPUT);      //タッチ入力をデジタル入力
  pinMode(TOUCH_MON,OUTPUT);    //タッチ入力をモニタ出力
  pinMode(LED_OUT,OUTPUT);      //タッチ入力をモニタ出力
}



2014.06.19追記

専用IC使ったタッチセンサってどうなってんだ?
ってことで波形見てみました。



緑が通常状態で黄色がタッチしている状態。
2μSecぐらいのパルスを出して、触ると電圧が半分ぐらいに落ちてますね。

2017.11.20 追記
新たに「Arduinoでタッチセンサ その2」を書いてみました。
http://yuzumemo.blogspot.jp/2017/11/arduino.html

2009年3月27日金曜日

ポリスイッチ

装置が短絡により壊れるのがイヤだったので設計者にポリスイッチを入れてくれと依頼した。

ポリスイッチとは、電流が流れることによって温度上昇を伴い抵抗値が急激にあがる素子で、
さらに温度が百数十度ぐらいまで上昇するとトリップ現象を引き起こし、交換不要のヒューズ代わりに使えるもの。

トリップ状態とは高温平衡点で安定した状態で、一度この状態になると、
電源を切って20秒ぐらい待たないと復旧しないらしい。

SMD020の乗った基板で試した所、1A流して100Ωぐらいになっていたが、
トリップすることはなかった。

データシートをみるとトリップ電流は0.4Aとなっているが
20℃静止空気中との条件があるので基板実装時のトリップ電流はもっと大きいと思うし、
それを計算するのは難しそうだ。
だがしかし、少なくとも保護をしてくれてはいるので、よしとしてもいいかもしれない・・・
ハードの設計者って、その辺りを判って設計していないだろうから
機会があれば、部品を変えてくれと今度依頼しておこう。

2009年1月30日金曜日

LEDのオートディマー

 点灯しているLEDに光が当たると、LEDの点灯が見えにくくなる。
って事でLEDを発光兼光センサとして暗い時には、暗く。明るい時には、明るく点灯させよう。
今回はPIC16F884を使用
点滅の機能とかオートディマー以外の機能も入っているけど面倒だから、殆どそのまま載せとく。

////////////////////////////////////////////
// 割込み処理
void interrupt(
void)
////////////////////////////////////////////
{
unsigned char tm;
int nn;

//タイマ1msec割り込み?
if (PIR1.TMR2IF) {
gTimer++; //フリーランニングカウント
TMR2 = DEF_TMRCUNT; //カウント値再設定
PIR1.TMR2IF = 0; //割込みフラグクリア

// LED点灯、点滅制御
tm = gTimer & led.dimmer;
if( tm == 0 ) {
//オートディマー処理
//▼ヒステリシスを追加する予定
nn = ADC_read(4); // ADC値の読み込み(AN4:10bits)
if( nn > 0x40 ) {
led.dimmer = 0xf; //デューティ15:1
}
else if( nn > 0x30 ) {
led.dimmer = 0x7; //デューティ7:1
}
else if( nn > 0x20 ) {
led.dimmer = 0x3; //デューティ3:1
}
else {
led.dimmer = 0x1; //デューティ1:1
}
//LEDフラッシュ
if( gTimer & 0x20 ) {
PORTA |= led.flash; //LED点滅の為に消す
}
//LED点灯
else {
PORTA = ~led.on; //点滅用LEDの点灯
}
PORTB = ~led.on >> 4; //常時点灯LEDの点灯
}
//LED受光量AD変換の為に一旦消す
else if( tm == led.dimmer ){
PORTA = 0x0f;
PORTB = 0x0f;
}
}
}

2009年1月26日月曜日

シールド

シールド線って、どう処理すればいいの?
GNDにつなぐ?
だったら別途GND線って要らないんじゃないの?

って事で調べてみた。

 どうやらシールドをGNDとして使用すると当然電流が流れる
そうすると、グランドループの出来上がり!
で、シールドに流れた電流がノイズ元となり他の線に乗ってしまう。

なので、GND線はちゃんと必要みたいだ。
一方ノイズに対しては、片側だけを安定した側のGNDと繋げば
そちらの方でノイズを吸収してくれるし、グランドループの呪いも防げるようだ。

20091017 ちょっと判りにくかったので補足
シールドのケーブルは、両端をGNDに繋がなずに片側だけを繋ぐのがノイズに対しては、最強。
但し、その場合は別途GND線も必要となる。
しかし、現実にそんなにノイズを気にする回路は少ないのでシールドをGND線代わりにするのが一般的だし、それで事足りていることが多いようだ。