Hatena::ブログ(Diary)

神村工業 このページをアンテナに追加

2011-12-11

Frduino デモ4

| 23:02 | Frduino デモ4 - 神村工業 を含むブックマーク

f:id:kamimura_industries:20111211230239j:image


※加速度センサーのREADが出鱈目だったので修正しました。

現状のデモのsketchを掲載します。

動作チェックと、加速度センサーの設定の参考にしてください。

動作内容は、

・単色LED明滅

RGB LED PWM点灯

・振った時だけ、POV表示(加速度センサーで検知)

・しばらくするとパワーセーブ

・SW1で復帰


です。振らないと光らないのはバッテリーに優しいPOV

WireライブラリーはIDE1.0では、以前のバージョンと

コマンドの表記が変わっているので注意。



//Frduino DEMO4.1

#include <Wire.h>
#include <avr/sleep.h>


unsigned char i,j,k,w2=15,val,wait=2;
unsigned int c;
unsigned char ledpin[]={4,2,16,17,15,14,13,9,8,7};
unsigned char pwmpin[]={3,5,6};
unsigned char rdata[4];
byte shdet;
int  MMA7660 = 0x4C  ;
#define WAIT 10

//POV
#define DELAYMS 4    // 点滅間隔(ミリ秒で指定)
int LEDPINS[]={15,17,16,2,4};

byte bitmap[]={
0b01000,
0b11110,
0b11110,
0b01111,
0b11110,
0b11110,
0b01000,
0b00000,
0b00000,
0b00000,
0b00000,
0b00000,
0b00000,
0b11111,
0b10100,
0b10100,
0b10000,
0b00000,
0b00000,
0b11111,
0b10100,
0b10100,
0b01011,
0b00000,
0b00000,
0b11111,
0b10001,
0b10001,
0b01110,
0b00000,
0b00000,
0b11110,
0b00001,
0b00001,
0b11110,
0b00000,
0b00000,
0b10001,
0b11111,
0b10001,
0b00000,
0b00000,
0b00000,
0b11111,
0b01100,
0b00010,
0b11111,
0b00000,
0b00000,
0b01110,
0b10001,
0b10001,
0b01110,
0b00000,
};
#define  BITMAPLEN 54

unsigned char pos = 0;
//


void setup() {

    for(i = 0; i < 10; i++){ 
    pinMode(ledpin[i],OUTPUT);
    digitalWrite(ledpin[i],LOW);
  }

  for(i = 0; i < 3; i++){ 
    analogWrite(pwmpin[i],255);
  }  

  Serial.begin(9600);  


   //I2C通信開始 
  Wire.begin();
  
  Wire.beginTransmission(MMA7660); // transmit to device #
  Wire.write(byte(0x06));              // sends one byte  
 //   delay(WAIT);
  Wire.write(byte(0xFF)); //add:0x06 
//    delay(WAIT);
  Wire.write(0x59); //add:0x07
 //   delay(WAIT);
  Wire.write(byte(0x20)); //add:0x08
 //   delay(WAIT);
  Wire.write(byte(0x00)); //add:0x09
 //   delay(WAIT);
  Wire.write(byte(0xE0)); //add:0x0A
   delay(WAIT);
  
  Wire.endTransmission();    // stop transmitting
  
  
  Serial.println("DEMO START");


 //sleep 
  pinMode(2,INPUT); 
  digitalWrite(2,HIGH); 
  set_sleep_mode(SLEEP_MODE_PWR_DOWN);   
  sleep_enable();    
  attachInterrupt(0, powon, LOW );

}


void pov()
{
  pinMode(2,OUTPUT);  
  for(k=0; k<128; k++){
  
       for(i = 0; i < 5; i++) 
    {    // 表示する1byteから1bitを取り出してピンの状態に反映    
    	digitalWrite(LEDPINS[i], (bitmap[pos] >> i) & 0b00000001);  
    } 
     
    if(++pos == BITMAPLEN) pos = 0;  delay(DELAYMS);

  }
  pinMode(2,INPUT); 
  digitalWrite(2,HIGH); 
}

void rgbpwm()
{
  for(i = 128; i > 0; i--){ 
    for(k=0;k<3;k++){
    analogWrite(pwmpin[k],i);
    }        
    delay(wait); 
  }

  for(i = 0; i < 128; i++){ 
    for(k=0;k<3;k++){
    analogWrite(pwmpin[k],i); 
    }
    delay(wait); 
  }        

    for(k=0;k<3;k++){
    analogWrite(pwmpin[k],255); 
    }
    delay(200);
  
}


void powon()
{  
}


void ledoff()
{
    digitalWrite(ledpin[0],LOW);
    for(i = 2; i < 10; i++){ 
      digitalWrite(ledpin[i],LOW);
    }
}


void loop() {

  
//LED ON-OFF 
  pinMode(2,OUTPUT);  
  
  for(i = 0; i < 10; i++){ 
      digitalWrite(ledpin[i],HIGH);
      delay(50);
    }   
  for(i = 9; i > 0; i--){ 
      digitalWrite(ledpin[i],LOW);
      delay(25);
    }   
      digitalWrite(ledpin[0],LOW);


//RGB PWM
for(k=0;k<3;k++){
  
    
  for(i = 255; i > 0; i--){ 
        analogWrite(pwmpin[k],i);
        delay(wait); 
  }
  for(i = 0; i < 255; i++){ 
        analogWrite(pwmpin[k],i); 
        delay(wait); 
  }        
      analogWrite(pwmpin[k],255); 
  }    

//White
  rgbpwm();


 pinMode(2,INPUT); 
 digitalWrite(2,HIGH); 



//Axis
for(c=0; c<64 ;c++){
  
  delay(200);
  i=0;
    Wire.requestFrom(MMA7660, 4);    // request 4 bytes from slave device #MX6225Add
    while(Wire.available())    // slave may send less than requested
    { 
      rdata[i] = Wire.read(); // receive a byte as character
      Serial.print("DATA[");
      Serial.print(i);   
      Serial.print("]:");      
      Serial.println(rdata[i],HEX);  
      i++;
    }
    Serial.println("");    
    Serial.print("DATA[3]:"); 
    Serial.println(rdata[3],BIN);
    Serial.println(""); 

//  for(i=0; i<8; i++) {
  // 表示する1byteから1bitを取り出してピンの状態に反映
//  digitalWrite(ledpin[2 + i], (rdata >> i) & 0x01);
//  }


  shdet = rdata[3] & 0x80;
  if (shdet == 0x80) {
  
    //shake??
   Serial.println("SHAKE!");
    pov();
    ledoff();
    pinMode(2,INPUT); 
    digitalWrite(2,HIGH); 

  }  
}

//sleep
  ledoff(); 
  for(i = 0; i < 3; i++){ 
    analogWrite(pwmpin[i],255);
  }  
 sleep_mode(); 

}

2011-12-08

Frduino ビルドと書き込み補足

| 22:09 | Frduino ビルドと書き込み補足 - 神村工業 を含むブックマーク

HEXファイルの保存先を一箇所に指定することもできるので、

毎回IDEでtempファイルができるのが使いづらい人は下記方法を試してみてください。


・buildフォルダの設定

 Arduino 1.0-rc2をインストールした前提で

 ArdunoをインストールしたフォルダをCドライブ直下だとすると

 c:\arduino-1.0-rc2にbuildフォルダを追加

 c:\arduino-1.0-rc2\build

 となります

 C:\Documents and Settings\[user]\Application Data\Arduino

 の

 preferences.txt

 を開いて

 build.path=build

 を追記して上書き

 上書き後Arduinoを起動して、IDEのVerifyを押すと

 c:\arduino-1.0-rc2\buildの中にHEXファイルが生成される

 (sketchをsaveするとHEXファイルは消えてしまい、再度ビルドになるので注意)

Frduino ビルドと書き込み2

| 22:06 | Frduino ビルドと書き込み2 - 神村工業 を含むブックマーク

書き込み設定の続きです。

f:id:kamimura_industries:20111212084653p:image

YCIT版 avrdudeの初回設定

 書き込み基板をFrduinoに接続する

・programmerの設定

 Programmerに(diecimila FT232 Sync Bang)を選択:(1)

 Command line Optionの欄は

 変更しなくて構いません(2)。 

 Read(3)をクリックしてターゲットデバイスが認識できているか確認

 ((4):Atmeg328P)

・fusebitの設定(5)

  Lo:FF

  Hi:DA

  Ex:07

 と入力し、[write](6)で書き込み

 (間違えると認識しなくなる場合もあるので注意)

これで外部8MHzで動作するので

通信速度が速くなり、書き込み速度も上がります。

 [補足]:

 本家のpro mini 3.3Vだと、Exは:05ですが、これはBODLEVELの設定箇所。

 05だと、BODLEVELが2.7Vに設定され、電源電圧が2.7Vを下回るとAVRが落ちててしまう

 07はBODLEVELを解除して電圧でのリセットは無制限。

 FrduinoでLEDをたくさん明るく光らせたりした場合など、単6電池で供給できず、一時的に電圧が下がる場合があり、05のままだと一瞬でも2.7V下回ると停止してしまいます。

 多少のリスクがあっても実力で動く限りは動作させたかったので、

 Fuduinoのデフォルトではこの設定を解除としました。

 制限なしが不安であれば1.8Vで制限の、Ex:06でもいいと思います。

 詳しくはAtmega328pの仕様書のTable 29-13. BODLEVEL Fuse Coding付近を見てください

http://www.atmel.com/dyn/products/product_docs.asp?category_id=163&family_id=607&subfamily_id=760&part_id=4198

一度これらを設定した後は、下記の作業のみで書き込み可能です。



■HEXファイルの書き込み

f:id:kamimura_industries:20111212084713p:image

 Serial monitorを開いている場合は閉じてください。

 書き込み基板をFrduinoに接続する

 

 IDEでVerify後、[Find](7)をクリックすると、自動でIDEビルドしたファイルを選択して、Flash欄に表示されます

尚、IDEのBoardは”Arduino Pro mini (3.3V 8MHz)”でビルドしてください

 すでにあるHEXファイルを書き込む場合は、flashのfile先(8)を

 任意のHEXファイ保存先に指定してください。

 [Write](9)をクリックするとプログレスバーが出て、書き込みされます。

 自動的にVerifyもされます。

 [Run](10)をクリックすると書き込んだsketchが走り出します。


最初に書き込むのはブートローダーにするとArduino化できます。

 ..arduino-1.0-rc2\hardware\arduino\bootloaders\atmega

 のATmegaBOOT_168_atmega328_pro_8MHz.hex

 を書き込んでください。

 これ以降はIDEを使ったシリアルの書き込みもできるようになります。

 但し、その後avrdudeでISP書き込みした場合は、IDEを使う前にブートローダーを再度書いておいてください。

 (IDEかavrdudeか交互に使うと混乱しそうなので、どちらか一方だけ使ったほうがいいと思います)

 これで初期設定は終わりです。


 [補足]:

 IDEを使ったシリアル書き込みよりも、avrdude-GUI経由でavrdudeを呼び出した方が断然書き込みが速いので、

 常時 avrdude-GUIを利用した書き込みをお薦めします。

 また、sketch名を変更しなければ、ビルドする度に(8)でファイル名を選ぶ必要がなく、

 [Write]を押すだけで再書き込みします。


 個人的には開発時には、何度も書き込みとテストを行うので、

 IDEとYCIT版 avrdudeを同時に開いて、sketch名を変えずに


  1)sketch変更

  2)IDEビルド

  3)YCIT版 avrdudeで書き込み

  4)[TargetRun]

  5)動作確認


 を繰り返してsketchを試行錯誤しています

 ただし、YCIT版 avrdudeで書き込む前に、シリアルモニターを閉じてください。共用はできません。

 また、認識しなくなった場合、[Port_upd]ボタンで、認識しているポートを一覧できます。以下のように

 ポートを認識していることを確認してください。認識されていなければ

 USBコネクタの抜き差しを行うことで回復できる場合があります。

 

 # -- Available COM Ports --

 # COM4 = USB Serial Port 'A6008JNL'=ft0

 # -- 1 Port Added --

2011-12-07

Frduino ビルドと書き込み1

| 21:44 | Frduino ビルドと書き込み1 - 神村工業 を含むブックマーク

開発環境は、Arduino IDE 1.0rc2 で

http://code.google.com/p/arduino/wiki/Arduino1

Arduinoブートローダーの書き込みはavrdudeを想定しています。

avrdudeは様々な種類がありますが、Arduinoとの連携を考えると、

senshu氏の、「YCIT版 avrdude」版がお勧めかと思います。

senshu氏のものは、avrdude自体を精力的に改良され、デバイスの自動認識や、

ArduinoIDEのHEXファイルの取得、右クリックのメニューから、

Arduinoの日本語リファレンス等へのジャンプなどいたれりつくせりです。

入手方法は、senshu氏の掲示板で登録してからDLする必要があります。

自分はちょっと入手までに手間取ったので、

簡単に手順を書きます。


[千秋ゼミ]掲示板の上のメニューで登録し、

http://www-ice.yamagata-cit.ac.jp/forum/

ログイン

[DownLoad]→[YCIT版、avrdude, pic18spx関連の評価用アーカイブ]

から、最新版をDLします。

この記事を書いている時点だと

http://www-ice.yamagata-cit.ac.jp/forum/viewtopic.php?t=637&highlight=download

avrdude-2011-RC18.zip

です。

ログインしていないとDL先が出てこないので注意です。

DLしたらsenshu氏の掲示板への報告をお願いします。

(当方では、YCIT版 avrdudeについての質問については解答できないのでご了承ください。

あくまで、フリーで使いやすいと判断したツールの紹介です。

他のツールや、純正のAVRライター等を使っても

Arduino化するための書き込みが出来ますので、

ご自分の環境に最適なツールをお選びください)

ツールの具体的な設定の仕方は次の記事で記載します。

(初回は誤記、旧バージョンの紹介だったため、修正しました。失礼しました。)

2011-12-06

Frduino 書き込み用基板の作り方

| 03:03 | Frduino 書き込み用基板の作り方 - 神村工業 を含むブックマーク

Frduino書き込み用基板の作り方です。

秋月電子で売っているメジャーな

FT232RL USBシリアル変換モジュール と

1.27mmピッチ変換基板での

での作例ですが、同じFTDIのチップの類似モジュールなら

同じものが作れると思います。

図のように結線してください。

(RESETSW特にいらなかったので削除しました)

f:id:kamimura_industries:20111207214051p:image

1.27mmピッチ基板があった方がよいですが、

なければ、2.54mmピッチの基板で、ピンヘッダが引っかかる程度に

3穴分くらいドリルで穴を繋げてもできると思います。

RESETトグルスイッチをつけると繰り返しの書き込みに便利です。

CN1の4PINと組み合わさる端子は、DC-DCのENです。

本体基板で極性を間違った箇所なので、

Frduinoの修正をVINとR8をジャンパーで飛ばしただけの場合はOPENにしてください。

そうでないと電池電源とGNDがショートして壊れ可能性があります。

Frduino側で100kΩ程度のプルアップ抵抗をいれている場合は、GNDに接続しておくと

書き込み基板を指すと自動的に、昇圧回路がOFFされ、いちいち電池を抜かなくても

電源がぶつからず、電池の消耗も防げます。

煩雑な説明で済みません。

書いている内容がよく分からなければGNDにつながない状態で、

書き込み基板を指す場合は毎回電池を抜いて下さい。

f:id:kamimura_industries:20111231102723j:image

書き込み用基板写真追加

2011-12-05

デモ3

| 03:06 | デモ3 - 神村工業 を含むブックマーク

加速度センサーがちょっと機能するようになりました。

手前に倒すと、RGBLEDが発光

しばらくするとパワーセーブになるので

タクトスイッチを押すと、再起動します。

MTMでもこれくらいは動かしたかった。

Frduino 部品実装図(修正)

| 02:22 | Frduino 部品実装図(修正) - 神村工業 を含むブックマーク

Frduino関連の情報は、カテゴリー管理しているので、購入者の方は右のFrduinoをクリックしてください。

やっと部品実装図面を作成したので、これを見ながら半田付けお願いします。

f:id:kamimura_industries:20111206025350p:image

f:id:kamimura_industries:20120107040503p:image

いくつかパターンミス対策内容と実装順番等注意点、拡張機能の説明を。


DC-DCコンバーターのENは[HIGH]でONですので、

 R8は実装せず、下側を100kΩを介してVINに接続してください。

 100kΩがなくて直接VINにつないでもONしますが、

 100kΩがあると、子基板を挿すと自動的にDC-DCがOFFし、電池を付けたままでも子基板が挿せるので便利です

 (初出で、ENピンを間違えてましたすみません。4pinがENです)

・SW1タクトスイッチ

 通常と90度回転して無理やり取り付け

  or

 表から見て右下のピン以外のパターン接続を両面共カットして通常の方向で挿入


・CN1より先にCN3(SDソケット)をなるべく左側に寄せて実装

 CN1と干渉しますので多少CN1を浮かせぎみで実装

 (ピンヘッダの方が干渉しなさそうですが、穴系合わず刺さりません・・)

microSDソケットの黒い樹脂を削るとCN1もまっすぐ取り付けられます。

 f:id:kamimura_industries:20111231130456j:image

・L1:予定していたものが性能がでなかったので、パットが異なりますが

 同梱した部品は、性能がよい見た目がパッケージが8角形のものに変更しました

 C9と干渉するので

 C9より先にL1を実装してください


LEDは1005と小型で裏返しても方向が分かりにくいです

 表の写真も掲載しました

 発光部のある丸ポチが見えるほうが、カソード側です

 LEDの捺印はLEDの部品番号ではなく、Ardinoのデジタルポート名となっています。

 

・D18のLEDのアノードはopenになっているのですが、隣のPADと接続するとパワーLEDとして使用可能です


・SW1はOPENなので、GNDと反対側にあたる端子をINT0のR16等と

 任意のピンとジャンパーで接続してください


・電池の+−は通常の乾電池と出っ張り方向が逆なので注意が必要です。

 念のため、電池は+−の記載をしておきました。


LEDPOV等に使用する場合は、もっと明るいほうがみやすいです

 電流制限抵抗を300Ω等に小さくしてお使いください。

 SML-P11MTT86

 の仕様はこちら

 http://www.rohm.co.jp/products/opto_device/led/chipled/sml-p11mt/


組み立て手順としては、

まずは、AVRマイコンと8MHz振動子、microSDソケット、書き込み用pinを実装して、

avrdudeでデバイスが認識するかを確認して書き込みできることを確認してから

残りの部品を半田付けするのが良いと思います。

f:id:kamimura_industries:20111231130512j:image

子基板の配線と書き込み方法については、明日投稿予定です。


不明な点や間違いが見つかりましたら、メールかコメントをください。

足がない部品は位置決めが全てと思います。

よろしくお願いします。

SOPHILSOPHIL 2013/09/26 11:23 こんにちは、初めまして。
仕事柄部品実装図を見ることが多いのですが
具体的にコメントを書かれたものはお見掛けしません。
丁寧な仕事をされていることに感心しました。

Maker Faire 出展、おめでとうございます。

ミスター(神村)ミスター(神村) 2013/10/30 22:19 >SOPHIL様
はじめまして。神村工業ミスターです。コメントありがとうございます。
実装図を見られるお仕事をなさっているのですね。素敵です。個人的に気になります。

気になる点等がございましたら、いつでもご連絡ください。
ブログ上、Make Faire会場でも、担当の者が可能な範囲でお答えいたします。