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

2011年6月6日月曜日

arduinoでLCメータを妄想してみる

morecat_labさんのtwitterでaruduinoの周波数カウンタのライブラリを知りました。
精度、安定度は不明ですが周波数から逆算するLCメータが作れるのでは? なんて考えました。
基本的考え方はtiny2313vでLCメータと同じでソフト部分だけ妄想してみました。

実数を使うとどれくらいメモリーを消費するか調べるために基本部分だけです。
コンパイルサイズは
Binary sketch size: 6406 bytes (of a 32256 byte maximum)
なので余裕です。

ハード部分は後日tiny2313vでLCメータを分解して再利用予定。

/*
  Martin Nawrath KHM LAB3
  Kunsthochschule f¸r Medien Kˆln
  Academy of Media Arts
  http://www.khm.de
  http://interface.khm.de/index.php/labor/experimente/
 */
/*
  Masahiko KANETAKA
  kane4d@gmail.com
  http://kane4d.blogspot.com/
 
  Port MAP
  D0   I  RX
  D1   O  TX
  D2
  D3   I  LC Mode SW (High: C, Low: L)
  D4   I  Zero Adjust Botton
  D5   I  Wave(Frequency)
  D6   O  LCD d7
  D7   O  LCD d6
  D8   O  LCD d5
  D9   O  LCD d4
  D10  O  LCD enable
  D11  O  LCD rs
  D12  O  Relay drive
  D13  O  LED
*/
#define USE_SERIAL
#define USE_LCD
#include <FreqCounter.h>
#ifdef USE_LCD
#include <LiquidCrystal.h>
#endif
double getfreq(unsigned int f_comp = 10, int gateTime = 100);
#ifdef USE_LCD
LiquidCrystal lcd(11, 10, 9, 8, 7, 6);
#endif

double frq1_r = 0.0F, frq2_r = 0.0F, frq3_r = 0.0F;
double val_r;
int cnt;
bool cal_bool = false;
#define pinLed (13)
#define pinRelay (12)
#define pinZeroAdjBtn (4)
// High: C, Low: L
#define pinLCModeSW (3)
#define DEFAULT_TRY_COUNT (3)
//1000pF + 100uH
#define CAL_CAP (1000.0F)
double getfreq(unsigned int f_comp, int gateTime)
{
  double _frq_r = 0.0F;
  FreqCounter::f_comp = f_comp;   // Cal Value / Calibrate with professional Freq Counter
  for(int i = 0; i < DEFAULT_TRY_COUNT; ++i){
    FreqCounter::start(gateTime);  // 100 ms Gate Time
    while (FreqCounter::f_ready == 0) ;
    _frq_r += FreqCounter::f_freq;
  }
  return _frq_r / DEFAULT_TRY_COUNT;
}
void setup() {
  pinMode(pinLed, OUTPUT);
  pinMode(pinRelay, OUTPUT);
  pinMode(pinZeroAdjBtn, INPUT);
  pinMode(pinLCModeSW, INPUT); // High: C, Low: L
#ifdef USE_SERIAL
  Serial.begin(9600);        // connect to the serial port
  Serial.println("LC Meter v0.1");
#endif
#ifdef USE_LCD
  lcd.clear();
#endif
  //frq1_r = frq2_r = frq3_r = 0.0F;
}
void loop() {
  if ( ! digitalRead(pinZeroAdjBtn) && ! cal_bool ){
    //zero cal
    digitalWrite(pinRelay, false);
    delay(30);
    frq1_r = getfreq();
    digitalWrite(pinRelay, true);
    delay(30);
    frq2_r = getfreq();   
    digitalWrite(pinRelay, false);
    cal_bool = true;
  }else{
    cal_bool = false;
    if ( frq1_r > 0.0 && frq2_r > 0.0 ){
      digitalWrite(pinRelay, false);
      delay(30);
      frq3_r = getfreq();
      if (digitalRead(pinLCModeSW)){
        //CALC_C
        //val_r = CAL_CAP * ( (frq1_r / frq3_r) ^ 2 - 1.0 ) / ( (frq1_r / frq2_r) ^ 2 - 1.0 );
        val_r = (frq1_r + frq3_r) / frq3_r;
        val_r *= (frq1_r - frq3_r) / frq3_r;
        val_r *= frq2_r / (frq1_r + frq2_r) ;
        val_r *= frq2_r / (frq1_r - frq2_r) ;
        val_r *= CAL_CAP;
      }else{
        //CALC_L
        //val_r = CAL_C * ( (frq1_r / frq3_r) ^ 2 - 1.0 ) * ( (frq1_r / frq2_r) ^ 2 - 1.0 ) / CAL_CAP /( (2 * M_PI frq1_r)^2 );
        val_r = (frq1_r + frq3_r) / frq3_r;
        val_r *= (frq1_r - frq3_r) / frq3_r;
        val_r *= (frq1_r + frq2_r) / frq2_r;
        val_r *= (frq1_r - frq2_r) / frq2_r;
        val_r /= CAL_CAP;
        val_r /= 4 * M_PI * M_PI * frq1_r * frq1_r;
      }
#ifdef USE_SERIAL     
      Serial.println(val_r);
#endif
#ifdef USE_SERIAL     
      lcd.println(val_r);
#endif
    }
   
  }
  digitalWrite(pinLed,!digitalRead(pinLed));  // blink Led
 
}

2011年5月7日土曜日

ペーストハンダではんだ付け

Deal eXtremeで買ったペーストハンダではんだ付けしてみました。
LodeStar Soldering Paste (50g) $3.37
今日のpaypalのレートで$3.37 x 82.6447円 ≒ 279円


注射器は無いけど待ち切れずに開封。




注射器の代わりにビニール袋の角を切って絞り出しました。


マイコンPCB[PCB-ATMEGA128] + ATMEGA64Aで練習です。



温度制御のリワークステーションなんか持ち合わせてないので、コテライザーのホットブローを感を頼りに使います。


適当にはんだを盛って


部品を載せて


温風を当てて出来上がり。
 コテライザーは650℃なので注意しながら遠くからすこしずつ近づけました。
灰色のペーストハンダから煙が出て銀色のなると部品が中心に勝手に移動します。





調子に乗って残り部品を一気に載せて出来上がり。


調子に乗って


丁寧に温風を当てなかったのでいくつかの部品がずれてしまいました。

多ピン部品の顛末は次回ということで...

2011年5月1日日曜日

RTC DS1302のモジュールを作ってみた

ここの情報を参考に家庭内JJYを作成
イーサーシールドを持ってないので、aitendoで売ってるDS1302(50円)をarduinoで使えるモジュールにしてみました。
coconet液晶工房の閉店セールで買えば30%引きなのでさらにお得です。
DS1302にはバックアップ用充電池をトリクル充電する機能も付いているのでこれも試してみました。


端子は上から

  • SCLK
  • I/O
  • CE
  • Vcc
  • GND

ここで少し後悔が...
電気二重層コンデンサの電圧も外部に取り出せるようにすればよかったと後になって気付きました。この端子をMCUのADCもしくはコンパレータの入力につなげば充電具合を確認できたんですよね。

ここのページで電気二重層コンデンサのバックアップ時間を計算できます。
arduinoのDS1302用ライブラリを使いました。


DS1302
50円aitendo

電気二重層コンデンサ 0.047F 5.5V
80円madoelecさん

クリスタル 32.768KHz
30円秋月

PS.
福島のJJYが暫定復旧したので家庭内JJYは用済みとなりました。

2011年4月1日金曜日

5x5duinoに全部品を載せてみた最強仕様

手持ち部品で使えそうなものを全部載せてみた。


リセッタブルヒューズの容量が少なくてXBeeが使えませんでした。
USBコネクタとMCU間のリセッタブルヒューズを取り外すのは面倒。
ラジアルリードのリセッタブルヒューズを亀の子状態で取り付けられるか???

今回初導入したリセットIC ミツミPST3427URは期待した動作にならなっかた。
2度リセットがかかってしまう。
別回路で検証してみる予定。

リセットICの不具合で新発見
  • atmega328側リセット長押し
  • atmega8u2リセット
  • atmega328側リセットを離す
この操作でatmega8u2のDFUモードに移行できるんです。
atmega328側リセットボタンはコンデンサ経由でHWB端子に接続されてるんですもんね。
comopさんのPEKEも同じ回路として作ったからHWBボタン無しでもOKですね。
PEKEの場合は
  •  atmega328側リセット長押し
  • atmega8u2 ISP端子のRSTとGNDをジャンパーピンでショート
  • atmega328側リセットを離す
本家UnoはFuseビットでHWBを禁止してるのかな?

2011年3月31日木曜日

dotsduinoを作ってみた

発熱で調子が出ないのでdotsduinoを作ってみた。

dotsduinoのサンプルスケッチは2KBでおさまるので
  • Atmega8L(comopさんに分けていただいたもの)
  • 8MHz RC
で組んで見ることにします。

参考回路図は本家を参照
ブログで私の勘違いの質問に丁寧に答えてくれてarms22さんありがとうがいました。

dotsduinoのライブラリは接続ピンを柔軟に変更できるように作られているので回路図なしでISP関連とTxD、RxDの端子を除外して適当に配線しました。


映像が傾いてるのは熱のせいです。



裏面にペンで配線をじかに書き込んでます。
電池2本駆動としてLEDの電流制限抵抗は220Ωにしました。



0.3mmすずメッキ線をラッピング(レガシー技術)でLEDに配線
ラッピングははんだ付けではないので飽きたらメッキ線をほどいてLEDとMPUを再利用できます。



Optibootを8MHzRCにしたもので動作確認しました。

赤外線リモコン受信モジュールOSRB38C9AAと組み合わせて家庭用リモコンでゲーム作れそうです。
100マス計算ゲームくらいなら作れそうです。

5x5duinoの基板が届いた

FusionPCBから基板は届いたが発熱のためだるくて何もできない。
一応デジカメで撮っておいた

確認したら基板の裏面しか撮ってない。発熱ボケです。




atmega8u2側だけ部品を取り付けて動作確認
atmega8u2はcomopさんから分けていただいたものです。





1μF 2012サイズの手持ちが無いので無理やり3216を取り付けてみた。
UCAPだから重要
ポリスイッチは100mAしか手持ちがなかったのでXBee動作は無理



atmega8u2 DFUとして認識されたがWindows7 64bitでは署名なしのドライバは使えなかった。
仕方がないのでXP Modeを立ち上げてFLIPを使ってUnoのシリアルファームを書き込み。
動作確認OK。
HWBボタンも動作したので一安心。

熱のせいかはんだ付けの調子がでない。

blogger.comにeagleやPDFのファイルをのせる良い方法はないか思案中。

2011年3月21日月曜日

arduino400を再設計してみる

PIC18F14K50(DIP) + Atmega328p(DIP)
PIC18F14K50(SOP) + Atmega328p(DIP)
MCP2200(SOP) + Atmega328p(DIP)
で使えるようにしてみた。

DIPとSOP両対応のため凄い配置になってしまいました。
八潮秋月でRGB LED(GB-339RPGBC)が10円だったので、これを使えるように変更するか思案中

50mm x 50mmの基板10枚を$12で作成できるところを見つけたのでそこに頼む予定


「50mm x 50mmのarduino Uno互換 + Xbeeの基板を作ろうかなぁ」を注文した

FusionPCBに注文した基板が発送されたみたい
FusionPCBより安いところを見つけたけど、今回は見送り

FETでXBeeの電源を制御するようにしてみました。
3.3v -> 5vのレベルシフタもFET
FET三昧です。

POV-Rayの最終イメージはこれ


2011年2月17日木曜日

「50mm x 50mmのarduino Uno互換 + Xbeeの基板を作ろうかなぁ」の続き

「50mm x 50mmのarduino Uno互換 + Xbeeの基板を作ろうかなぁ」の続き
部品箱にある部品を出来るだけ使うようにしました。
2SC1815がまるで塔のようです。

5Vと3.3Vのレギュレータを無理やり乗せました。
XBeeの信号取り出し用に20pinの取り出しよう穴を追加できそうだぁ。

Eagle3D + POV-RAY使うと隙間を再発見できて非常に便利。
シルクを再配置したらFusionPCBに注文するかな。


2011年2月12日土曜日

50mm x 50mmのarduino Uno互換 + Xbeeの基板を作ろうかなぁ

FusionPCB 50mm x 50mmでこんな基板を作ろうと思ってる。

USBシリアルはatmega8u2
メインはatmega328p
裏面にXBeeProを無理やり配置


arduinoのピン配置+adc6,7 + mega8u2のI/Oすべて取り出し可能
そのまま使うとUno + XBee
中心部分のスロットで切断すると
左側はatmega8u2でシリアル変換 + XBeePro
右側はatmega328pのMetaboardになる予定

このサイズだと水晶、リセットボタン、スロットの専有面積比率が高くて集積度が上がらない感じ。
1KΩの抵抗もチップ抵抗アレイにしたい。

裏面にXBeeを横配置
裏面のXBeeはアンテナ部分をはみ出る構造にして感度低下を避けてるつもり。
3.3vをTAR5SB33を予定していたけどXBeeProは270mAも消費するのかぁ。
すでにXBeePro2個買ってしまったよ。

5v -> 3.3vトレラントにツエナーダイオードを使う予定だけど、うまく動くか不安だよ。
3.3v -> 5vは2sc1815を使う。背が高すぎるから2sc4116に変更しようかなぁ。

今日時点でまだFusionPCBが旧正月から復活してない。

2011年1月31日月曜日

Arduino風 パソコン制御とマイコン制御

小山智史さんの「Arduino風パソコン制御とマイコン制御」を作成したのがこれです。


HT7750を使った電池駆動出来るように基板右側を使う予定。HTAプログラムとして動かすコンセプトが秀逸。
gainerと同じようにhidmon88.dllを127.0.0.1経由で操作するProxyを作ればIE以外のブラウザからも制御できそう。
proxyさえあればchrome上で動作させたProcessing.jsと連携できる。

arduino400の基板を作成

気を良くしてarduino400の基板を作成しました。
昨年末Fusion PCBで50mm x 50mmサイズを発注。
初めてEagleCADで作ったりました。抵抗、コンデンサはすべて表面実装
秋月のAE-ATMEGAが出るのを知ってれば自分で作らなかったでしょう(涙)。
  • arduino互換
  • Metaboard互換
  • PIC18F14K50のUSBデバイス(pic18spxとして動作可能)

ピンフレームはarduinoの配置にしてあります。

再度作りなおすなら

  • USB Miniコネクタにする
  • atmega8u2 + atmega328 SMD版を使ってUno互換にする
  • 裏にatmega1284 SMD版のパターンも入れる
  • xBeeのパターンも追加する
  • 3.3vレギュレータのパターン
この基板(+チップ部品)をirukaさんに差し上げたいがどうしたものか...
arduino400互換

普通に作るとこんな感じ
撮影用として大きい3225サイズのチップ抵抗を使いました。ランドを大きめに作ってるので簡単にはんだ付けできます。
右下に 赤外線受信モジュール(PL-IRM0101)を配置してます。
SIIのボルテージディテクタS-8053HNBをリセットICとして使う贅沢な設計


Metaboard互換

Metaboard互換(裏面)

入手性の悪そうな部品(ツェナーダイオード)パターンはアキシャルリードも使えるようにしてます。

ソケットの間にクリスタルを配置
秋月八潮で買った2色LED 300円/200個を使ってる。単色2本でも使えるようにカソードの穴は2つある。
作りかけ(裏面)

リビングで使ってるやつ

arduino400 + USB IR Toyしてみました

irukaさんのarduino400を再度作りました。
picはcdcとhidキーボードとして切り替え可能にしました。
arduinoの結果をシリアルで受け取りキーボードのイベントに変換するようにプログラムしました。

かわいそうにMPUが抜かれてます

リモコン受信モジュールはSHARP GP1UD282XKです。秋月八潮店特価50円/2個でした。
200円で手に入れたHP社のリモコン

リモコンフォーマットはRC5でした。

appleのリモコンも対応可能に

appleのリモコンフォーマットはNECでした。

arduino400

次に作ったのがirukaさんのarduino400
pic18f14k50(200円) + atmega328(250円)でarduino互換機が作れるというすばらしいコンセプト!!
この時点ではまだarduinoに興味は無かったんですけど、作ってみて使わないと判らないことがあるんですね。

MPUをはずされたarduino400

サンハヤトのICB-86G基板で作りました。
picのcdcはWin7(64bit)でも快適に動いてarduino環境を学ぶことができました。
ここからarduinoへ傾倒していきます。

2011年1月26日水曜日

AE-ATmegaのポリスイッチ配置

AE-ATmegaのポリスイッチ配置場所を考えてみた。
電源切り替えジャンパー部分にポリスイッチを配置しました。

中央部分にポリスイッチ配置
















0.1μFの赤セラコンはJAXA仕様だったりします。
秋月(八潮店)でJAXA仕様ジャンクを入手。