2016年4月30日土曜日

ArduinoDue X ArduinoEthernetShield2


秋月では、
「本ボードのマイコン電圧が3.3Vの為、 一般的な5V用のシールドを使用すると故障する恐れがあります。 十分注意してお使い下さい。」
スイッチサイエンスでは、
「他の主なArduinoボードと違って、Arduino Dueは3.3V版です。 各I/Oピンに入力できる最大電圧は3.3Vです。I/Oピンに5Vを入力するとボードにダメージを与える可能性があります。」
と書かれていたのでちょっと心配だったけどArduinoDue X ArduinoEthernetShield2で使えた。
※ただし4時間連続SDカードへの書き込みしか試していない。
たぶん入力だけ気をつければ大丈夫であろう。

2016年4月14日木曜日

arduino ethernet shield 2

10・11・12・13ピンは使えない。

2016年4月4日月曜日

ArduinoMega DigitalPin51 DigitalRead become HIGH

DigitalPin50 is MISO(Master In Slave Out)
DigitalPin51 is MOSI(Master Out Slave In)
DigitalPin52 is SCK(Serial Clock)
DigitalPin53 is SS(Slave Select)

Maybe MOSI is  automatically overrides to OUTPUT.

ArduinoMega's PinMapping

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);
}