2012-09-16 10 views
5

私はいくつかのステッピングモーターといくつかのハイパワーLEDを使用するアートインストールのためにいくつかanimatronicsに取り組んでいます。過去に、私がこのようなことをしたとき、論理とタイミングを扱うためにつながれたコンピュータを使用しました。このプロジェクトでは、自己完結型(Arduinoボードなど)にしたいと考えています。 Arduinoのハードウェアについては、Arduino Megaがあり、必要に応じてさらに格納するためSD cardshieldで展開できます。構造をプログラミングしてアニマトロニクスシーケンスを保存するための提案

私は本当にこれにアプローチする方法(コードを要求していない)に関するアイデアや提案を歓迎します。

データについては、基本的に私は各ステッパーと各LEDのキューを保存していました。もちろん、私は物事を追跡するために何らかの種類の時計やタイムスタンプが必要です。

  • キュー開始時刻
  • ステッパID
  • ステッピング方向
  • ステップのステッピング速度

LED:

ステッパキューは次のようになるであろうキューは次のようになります:

  • キュー開始時間
  • LED ID
  • スタート明る
  • エンド明る
  • 期間

だから私はおよそ疑問に思って何:データに関する

  • アイデアをロットを保管するのに十分なコンパクトなフォーマットキューの詳細
  • クロックまたはタイムスタンプの提案。

私はちょうどこれを始めて以来、どれだけの手掛かり/データ量があるのか​​というと、私はどのような限界にもぶつかります。

+0

MIDI形式がしばしばある(AB)非音楽データのこの種のために使用。 (劇場の照明など)あなたもあなたのロボットバレエ用に使うことができます。 MIDIは非常に軽量の記憶容量で、比較的解析が簡単です。 – wildplasser

+0

@wildplasser - 面白い、ありがとう。私はMIDI ab /これも使用されている見てきましたが、それは私には全く起こりませんでした。 –

+0

これは、タイミング、キューイング/同期、複数のボイス/チャンネルといった組み込みのコア機能を備えています。 (IIRCループ/繰り返しが後で追加された)。 – wildplasser

答えて

0

今のところ私はプロジェクトを動かすために自分のシンプルなデータフォーマットを使うことに決めました。私はまた、RAMを食べないような方法でキューデータを保存することを心配していました。

128kバイトのフラッシュメモリを搭載したArdunio Megaを使用しているので、SDカードを使用する前にそれを使用したいと思います。優れたFlash Library PROGMEMへのアクセスは非常に簡単で、数分でテストスケッチを作成することができました。

モータ制御については、シリアル通信を使用する専用のモータコントローラボードを使用しています。各基板は2つのモーターを制御します。私が送信する必要があった最大データサイズをテストするためには、モータのデータフォーマットを決定するように動かすために、レート、スロープ、xターゲット、yターゲットの4つの値がありました。これはタイムスタンプとボードID値を追加すると変わります。

Flash libでは、FLASH_TABLEを定義してPROGMEMに格納し、単純な配列ブラケットアクセスを使用してアクセスできます。何千ものエントリを使ったテストでは問題はありません。

したがって、データを取り出してスタンドアロンボードに送信するか、内部で使用するという簡単な作業になります。

//簡単な例:

#include <Flash.h> 

FLASH_TABLE(int, command_table, 4 /* width of table */, 
    {111, 222, 333, 444}, 
    {1001, 900,, -4567}, 
    {1002, 1000,, -4567}, 
    {1003, 1100,, -4567}, 
    {666, 777, 888, 999} 
    ); 

void setup() { 
    Serial.begin(9600); 
    Serial.print("Mem: "); Serial.println(availableMemory()); 

    // Determine the size of the array 
    Serial.print("Rows: "); Serial.println(command_table.rows()); 
    Serial.print("Cols: "); Serial.println(command_table.cols()); 
    Serial.print("RAM: "); Serial.println(sizeof(command_table)); 

    Serial.print(command_table[8][0]); 
    Serial.print("s"); 
    Serial.print(command_table[8][1]); 
    Serial.print("r"); 
    Serial.print(command_table[8][2]); 
    Serial.print("x"); 
    Serial.print(command_table[8][3]); 
    Serial.print("y"); 
    Serial.println("gi"); 
} 

void loop() { 


} 

int availableMemory() 
{ 
    int size = 1024; 
    byte *buf; 
    while ((buf = (byte *) malloc(--size)) == NULL); 
    free(buf); 
    return size; 
} 
関連する問題