Tamesuke-Goto Maker的Blog -6ページ目

Tamesuke-Goto Maker的Blog

地域ISP管理者だけれど、ここ3年ほどMakerなJobが増えたのでまとめてみたいと思います 旧ハンドル Ringoro

Arduino MEGA 2560の互換機で 中国 Robotdyn 社 Mega2560 pro というものがあります。

Aliexpress,amazonからオーダーできます。時間はかかりますがAliexpressからが安価でよいです。モノはだいぶ前から知られていましたが動作例がこれまで無かった様なので今回こいつを試してみました。


{135A0F1D-468F-4118-9012-2915E5CCBE65}

 

超ミニサイズです。

 

{7EA4D538-FA85-48E7-AE2D-B55EB6F2E29F}

 

 

ピンヘッダが2列づつ並んでいます。ピンはArduino Megaと同じものが全部配置されています。

 

USBはmicroUSBです。シリアル変換はおなじみCH340です。

 

{D2AD97A2-2EA7-423B-83FF-83BF4E89F949}

 

 

ピンヘッダをつけてもピン名が分かるようにちゃんとシルク印刷されています。

 

{B25F45CE-C7D1-418B-8542-B83EDE82C246}

 

 

 

USB接続して電源が入りますとLEDが点滅します。最初からBlinkスケッチが入っています。互換機は簡単なスケッチが書き込まれているのが多いです。

 

{EF381349-47FE-4B72-B48F-5C24E9B1B99B}

 

 

Arduino IDEでボードを Arduino Mega2560を選ぶだけで何の変更も無く動作します。

 

これだけではつまらないので拡張してみる事に。

 

秋月の2列のピンヘッダを切って使いましょう。ベースのボードは同じく秋月のBタイプ。

 

 

{BC1CD624-7061-4EB4-84BD-BBFFDD104A80}

 

 

{AF936288-116F-4EFB-97EB-0EC0D42C2C59}

 

 

{843802A5-9CAE-4F69-A6D8-40EF840D3A95}

 

 

こんな感じ。

 

{B354CB99-8C23-4977-B1A9-4EE771D50136}

 

 

 

i2cの端子を引き出してみます。i2cの接続は D20,D21 のピンを使います。

 

前に書いた MCP23017  のスケッチをそのまま使ってLEDのコントロールができました。

 

D20 --- SDA

D21 --- SCL

 


 

これは使える。

 

 

image

リアルタイムクロックの無いArduinoやRaspberryPiへクロック機能を追加するためにリアルタイムクロックモジュールをよく用います。

この辺が有名どころですが

https://www.switch-science.com/catalog/3038/

 

このモジュールはマキシムのDS1307を使ったものでチップだけも秋月電子からも入手可能です。DS1307は安価で良いのですが、水晶と負荷キャパシタをつける必要がありまして、クロック精度が水晶とキャパシタに依存するのであんまり精確ではありません。電源も5V。普通水晶の誤差が20ppm で加えてキャパシタの誤差等ありますので、実際に使った所では日に2秒くらいずれるのは普通でもう少し精確なクロックは欲しいところです。


高精度のRTCモジュールでは他に同じくマキシムのDS3231チップを使ったものがあります。

https://www.switch-science.com/catalog/3036/

 

DS3231 は精度が2ppm - 3.5 ppmと高精度です。でも少し高価。

水晶、温度補償内蔵で使いやすいので以前はRTCモジュールというとこればかりだった様ですが最近はメジャーでなくなってしまって、チップ単体も国内でも手に入らなくなってしまった様です。チップはMouserから入手可能ですが、一個1000円くらいしてやたら高いです。何ででしょ。。。

 

ところがAmazonにこのモジュールと同等のモジュールがやたら安価に出ています。調べてみるとAliEspressからはチップ単体がこれまた安価に入手可能でした。まあまさかニセモノではないだろうと思うのでとりあえずオーダーしました 20個で14ドルくらいでした。2週間くらいかかりましたが届きました。

 

{8C7EDEA0-654C-46D3-829C-CB6CC73F0CF5}

厄介なのはチップが幅広のSOPで、変換基板にちょうど良いものが見つからない。。。
しばらくほったらかしにしておいたのですが、後で気がついた、

秋月のArduinoユニバーサル基板に1.27mm表面実装パターンがあるので、それがそのまま使える

 

http://akizukidenshi.com/catalog/g/gP-07555/

 

 

というわけでRTCシールドを作ってみました。回路図はデータシートのサンプルの通り、プルアップ抵抗とキャパシタ、バックアップ用バッテリー だけです。

 

 
{7C376DB7-F76D-4D58-9CCD-86CB3B904AD6}
 
{4BC9E88C-80BB-4627-BD87-0DFC77EF1544}

抵抗はウラに
 
{D8341820-A550-4048-88FF-71B767E7C1E7}


テストスケッチは以下になります
あらかじめRTCLibをインストールしてください。RTCクラスは RTC_DS1317を指定していますがRTCLibのバージョンによってはRTC_DS3231 でも結構です。

起動すると一秒おきにRTCの時刻をシリアルコンソールへ出力します。
シリアルコンソールへ入力された文字列を 2018/02/01 12:00:00 のフォーマットで読み込みRTCへセットします。文字列はエラー確認していませんのでデタラメを入れるとデタラメの時刻になりますのでご注意下さい。
 
 ==================================

// Date and time functions using a DS1307 RTC connected via I2C and Wire lib

#include <Wire.h>
#include "RTClib.h"

RTC_DS1307 RTC;
char instr[256];
unsigned char chpt=0;
boolean linein = false;

void setup () {
    Serial.begin(9600);
    Wire.begin();
    RTC.begin();

  if (! RTC.isrunning()) {
    Serial.println("RTC is NOT running!");
    // following line sets the RTC to the date & time this sketch was compiled
    //RTC.adjust(DateTime(__DATE__, __TIME__));
  }

//  RTC.adjust(DateTime(year, month, day, hour, minute, seconds))
//  RTC.adjust(DateTime(2018, 2, 14, 12, 34, 0));

}

 

void loop () {
    DateTime now = RTC.now();
    Serial.print(now.year(), DEC);
    Serial.print('/');
    Serial.print(now.month(), DEC);
    Serial.print('/');
    Serial.print(now.day(), DEC);
    Serial.print(' ');
    Serial.print(now.hour(), DEC);
    Serial.print(':');
    Serial.print(now.minute(), DEC);
    Serial.print(':');
    Serial.print(now.second(), DEC);
    Serial.println();

     if(linein){
      setrtc();
      Serial.print(instr);
      chpt=0;
      linein=false;
    }

    delay(1000);

}

void setrtc(void)
{
  int yr,mo,dy,hr,mi,sc;
  sscanf(instr,"%4d/%02d/%02d %02d:%02d:%02d",&yr,&mo,&dy,&hr,&mi,&sc);
  Serial.print(yr,DEC);
  Serial.print(mo,DEC);
  Serial.print(dy,DEC);
  Serial.print(hr,DEC);
  Serial.print(mi,DEC);
  Serial.println(sc,DEC);
  RTC.adjust(DateTime(yr,mo,dy,hr,mi,sc));
}



void serialEvent() {
  char  c;
  while (Serial.available()) {
    c = Serial.read();
    instr[chpt++]=c;
    if (c == '\n') {
      linein = true;
    }
  }
}
==================================
時刻を設定した後3日ほど放置してズレがどれくらいになるか調べてみました。
普通2,3秒のずれが発生すると思いますが誤差は一秒未満の様で、精度は十分良くなったと思います。






 
 

 普段ハードの動作確認・治具等にLEDを使っています。数が出るので出来るだけ安いのを選んでいます。
 秋月の3mm 3133A シリーズの 赤、黄緑色、黄色の100個入り袋から使っていますが、電流を減らすとイマイチ暗いのと光角度が狭いので横から見たときの視認性が悪いです。
 
 もちょと明るいかスモークの入ったLEDが使いたいなぁと探していたのですが高輝度のLEDは高いしなあ。。。というところでアマゾンに中国製の格安LEDが何種類か出ているので買ってためしてみました。評価を見たところ結構明るいとの評判です。実際のところどうなんでしょう?
 
 今回購入したのは
 
KKHMF 100個 3mm 5色セット
 
{CA558B2B-F8E9-4E4B-BAA9-DABC440C79FF}
 
SODIAL 100個入り 赤と青 です。
 
{18DA8239-AEE7-4C3E-BF86-6D1418F23C8F}
 
いずれも 150円前後の格安LED 秋月の1/3以下ですね。
 
明るさを比較するのに治具を作ってみました。3.3V入力で1.3KΩ抵抗を挟んで VF2Vの時1mA程度になるようにして明るさをを比較します。
 
先ず緑色 
 
左が秋月、右が格安LED。緑は元々暗いものなのですが、1mAでの比較では秋月と格安でほぼ同じ明るさですね。ただ、格安中国製はスモーク処理がしてあるので横から見た場合は明るく見えます。視認性は良いです。
 
{5F5897F3-2ED8-4032-842E-067F57924336}
 
青色
 
これは比較するLEDが手元に無かったのですが、緑や黄色と比べて明るいです。スモーク入りのLEDは横からの視認性も高いです。秋月の青色LEDは安くても100個1300円からになるのでこれはお買い得か。
 
{03CD9E8F-6B65-44E4-8A75-611DAB5C9268}
 
赤色LED 
 
右が秋月 左が中国製 明らかに中国製の方が明るいです。正面から見ても中心の明るさが違いまして横から見ても見やすいです。
{55B5E5D0-8BEF-46FA-8B69-F150A8B4EED8}
 
{F10E1E9B-F7F0-4251-972D-23BA93789FA5}
 
黄色
 
右が秋月 左が中国製
明るさは秋月が少し明るいです。ただ、スモーク処理のため視認性は中国製の方が良いです。
 
 
image
 
5色を並べて見たところ。
 
白色LEDがすごい明るいですね。次は青色LED。
白色はスモーク無しクリアです。高輝度白色LEDは秋月では100個で900円なのでやはりお買い得。
 
{EA2EA901-E0DC-48A0-8C97-EAD98D8590B0}

白色LEDのVFどれくらいかと計って見たところです。2.8Vでした。
 
というわけでアマゾン格安LEDは大分お買い得と思います。
 
image