2016年3月30日水曜日

特殊ねじ

特殊ねじの名前が分からなかったらここを見る
特殊ドライバー列伝
私が欲しかったのはギアの様な形をしていて中心に穴
6溝(穴付)このセットに含まれてました。

2016年3月13日日曜日

トランジスタ[2SC1815Y]でリレー[945H-1C-5D]を動かす。

2SCとは、NPN型の高周波用である事を示しています。
高周波 低周波
PNP型 2SA 2SB
NPN型 2SC 2SD
今回はNPN型トランジスタ[2SC1815Y]を使用してリレー[945H-1C-5D]を動かします。
資料を見てみるとリレー[945H-1C-5D]の定格電流[Nominal Current]は40mAと書いてあるので、30mAくらいで使おうと思います。 Arduinoでこのリレーを直接動かしたら、Arduinoが壊れる可能性があります。
リレー[945H-1C-5D]を30mAで動かすので、トランジスタ[2SC1815Y]のコレクタ電流[IC]は30mA。
下のグラフからベース・エミッタ間飽和電圧[VBE]は0.8V、今回電源は5Vを使用しているので電圧降下分0.8Vを引いて4.2V。
直流電流増幅率hFEは120、30mAを120で割るとベースで必要な電流0.25mAが求められる。
温度で直流電流増幅率hFEが変わるので実際の使用環境も考えたほうが良い。
オームの法則より
電圧(V)=抵抗(R)✕電流(I)
4.2V = R X 0.25mA
R = 16.8k
16.8kの抵抗はないので近い18kの抵抗を使います。

2016年3月8日火曜日

XBee APIモード TX要求(0x10)

Arduino IDE1.7.8では
Serial.print(0x7E,BYTE);
じゃなくて
Serial.write(0x7E);
を使う。

BIN(2進数)、OCT(8進数)、DEC(10進数)、HEX(16進数)を使うなら「Serial.print(data, format)」
BYTEは「Serial.write」

//[0]スタートバイト
Serial.write(0x7E);
//フレーム長バイト数チェックサムを含まない。
//[1]上位
Serial.write(0x00);
//[2]下位
Serial.write(0x10);
//[3]フレームタイプ
Serial.write(0x10);
//[4]応答用フレームID
Serial.write(num);
//64bitアドレス コーディネーター
//[5-8]
Serial.write(0x00);
Serial.write(0x00);
Serial.write(0x00);
Serial.write(0x00);
//[9-12]
Serial.write(0x00);
Serial.write(0x00);
Serial.write(0x00);
Serial.write(0x00);
//[13-14]16bitアドレス コーディネーター
Serial.write(0x00);
Serial.write(0x00);
//[15]ブロードキャストホップ数
Serial.write(0x00);
//[16]オプション
Serial.write(0x00);
//[17]RFデータ1
Serial.write(rf1);
//[18]RFデータ2
Serial.write(rf2);
//Serial.write(0xF0);
//[19]チェックサム
long sum = 0xff - ((0x10 + num + rf1 + rf2) & 0xff);
Serial.write(sum);
delay(10);
参考書籍:XBeeで作るワイヤレスセンサーネットワーク (Make: PROJECTS)

2016年3月4日金曜日

OLEDモジュール SO1602AWWB-UC-WB

I2Cプログラム例
#include<Wire.h>
#define OLED_ADRS 0x3C //SA0=L(SA0=Hの場合は0x3D)

int DisplayON = 0x0F,
ClearDisplay = 0x01,
ReturnHome = 0x02;

void setup() {
  Wire.begin();//Wireライブラリを初期化し、I2Cマスタとしてバスに接続
  init_oled();
}

void loop() {
  char moji[] = "I2C OLED WHITE12345";
  for(int i=0;i<20;i++){
    writeData(moji[i]);
  }
  
  writeCommand(0x20+0x80);//2行目の先頭

  for(int i=0;i<20;i++){
    writeData(i + 0xB1);
  }

  contrast_max();//輝度を最大に設定
  while(1){}
}

//----main end----
void writeData(byte t_data){
  Wire.beginTransmission(OLED_ADRS);
  Wire.write(0x40);
  Wire.write(t_data);
  Wire.endTransmission();
  delay(1);
}

void writeCommand(byte t_command){
  Wire.beginTransmission(OLED_ADRS);
  Wire.write(0x00);
  Wire.write(t_command);
  Wire.endTransmission();
  delay(10);
}

void contrast_max(){
  writeCommand(0x2A);//RE=1
  writeCommand(0x79);//SD=1
  writeCommand(0x81);//コントラストセット
  writeCommand(0xFF);//輝度MAX
  writeCommand(0x78);//SDを0に戻す
  writeCommand(0x28);//2C=高文字 28=ノーマル
  delay(100);
}

void init_oled(){
  delay(100);
  writeCommand(ClearDisplay);
  delay(20);
  writeCommand(ReturnHome);
  delay(2);
  writeCommand(DisplayON);
  delay(2);
  writeCommand(ClearDisplay);
  delay(20);
}

Arduino Pro Mini A6・A7デジタル出力

A6・A7を使うには古いArduino IDEだとboard.txtの書き換えが必要だったみたいですが、Arduino IDE 1.7.8だとeightanaloginputsにすでになっていました。
アナログピンはポートCなのでDDRとPORTレジスタの書き込みはこんな感じ。
//A4・A5・A6・A7をデジタル出力でHIGH
DDRC = B11110000;
PORTC = B11110000;
しかし、A6・A7がHIGHにならない。
調べてみたら「A6 & A7 are analog input only」の文字が。
なんてこった!!

2016年3月2日水曜日

XBee 20番ピン(D0)設定 Commissioning Button[1]の意味

20番ピン(D0) AD0/DIO0 Configuration:Commissioning Button[1]
意味:ネットワーク参加設定
Button Presses ネットワークに繋がっている ネットワークに繋がっていない
1回
詳しくはこちらの50ページ目
https://www.sparkfun.com/datasheets/Wireless/Zigbee/XBee-2.5-Manual.pdf

XBee 6番ピン(P0)設定 RSSI PWM Output[1]の意味

6番ピン(P0) P0 DIO10/PWM0 Configuration:RSSI PWM Output[1]
意味:自分宛ての情報を受信した際、受信信号強度表示(RSSI)を出力(10秒間)。

XBee 15番ピン(D5)設定 Associated indicator[1]の意味

15番ピン(D5) DIO5/Assoc Configuration:Associated indicator[1]
意味:LEDを繋げばネットワークに参加しているか分かる。
ルーター(およびエンドデバイス)
  • 点灯:コーディネーターを探している
  • 点滅:ネットワークに参加
  • 消灯:電源が入っていない?
コーディネーター
  • 点滅:コーディネーターは自分の作ったネットワークに参加するので常に点滅。
  • 消灯:電源が入っていない?