2012-09-16 12 views
5

मैं एक कला स्थापना के लिए कुछ animatronics पर काम कर रहा हूं जो कई स्टेपर मोटर और कुछ उच्च-शक्ति एल ई डी का उपयोग करेगा। अतीत में, जब मैंने इस तरह की चीज की है तो मैंने तर्क और समय को संभालने के लिए एक tethered कंप्यूटर का उपयोग किया है। इस परियोजना के लिए, मैं इसे स्वयं निहित करने की कोशिश करना चाहता हूं (उदाहरण के लिए, केवल Arduino बोर्ड)। Arduino हार्डवेयर के लिए, मेरे पास Arduino Mega है और यदि आवश्यक हो, तो अधिक संग्रहण के लिए इसे SD cardshield के साथ विस्तारित कर सकता है।प्रोग्रामिंग संरचना और एनिमेट्रोनिक अनुक्रमों के भंडारण के लिए सुझाव

मैं वास्तव में इस दृष्टिकोण के बारे में किसी भी विचार या सुझाव का स्वागत करता हूं (और कोड के लिए नहीं पूछ रहा हूं)।

डेटा के लिए, अनिवार्य रूप से मैं प्रत्येक stepper और प्रत्येक एलईडी के लिए संकेत संग्रहित किया जाएगा। और निश्चित रूप से मुझे चीजों का ट्रैक रखने के लिए किसी प्रकार की घड़ी या टाइमस्टैंप की आवश्यकता होगी।

  • क्यू प्रारंभ समय
  • स्टेपर आईडी
  • स्टेपर दिशा
  • स्टेपर गति कदम की
  • संख्या

एक एलईडी:

एक स्टेपर क्यू की तरह कुछ होगा क्यू कुछ ऐसा होगा:

  • क्यू प्रारंभ समय
  • एलईडी आईडी
  • प्रारंभ चमक
  • समाप्ति चमक
  • अवधि

तो क्या मैं के बारे में सोच रहा हूँ: एक डेटा के बारे में

  • विचारों बहुत सारे स्टोर करने के लिए पर्याप्त कॉम्पैक्ट प्रारूपित करें संकेतों के
  • घड़ी या टाइमस्टैम्प के लिए कोई सुझाव। (एक साधारण काउंटर स्पष्ट विकल्प है।)

कितने संकेत/कितने डेटा के लिए, क्योंकि मैं इसे अभी शुरू कर रहा हूं, मैं जो भी सीमाओं के खिलाफ टक्कर लगी हूं, उसके भीतर काम करूंगा।

+0

मिडी प्रारूप अक्सर है (ab) गैर-संगीत इस प्रकार का डेटा के लिए इस्तेमाल किया। (रंगमंच प्रकाश, आदि) शायद आप इसे अपने रोबोट-बैले के लिए भी इस्तेमाल कर सकते हैं। MIDI बेहद हल्के wrt भंडारण आकार है, और पार्स करने के लिए अपेक्षाकृत आसान है। – wildplasser

+0

@ विल्डप्लेसर - दिलचस्प, धन्यवाद। मैंने एमआईडीआई एबी/इसके लिए भी इस्तेमाल किया है लेकिन यह पूरी तरह से मेरे साथ नहीं हुआ था। –

+0

इसमें अंतर्निहित मूल कार्यक्षमता है: समय, क्यूइंग/सिंक्रनाइज़ेशन, एकाधिक आवाज/चैनल। (आईआईआरसी loops/दोहराव बाद में जोड़ा गया था)। – wildplasser

उत्तर

0

तो अब के लिए मैंने परियोजना को आगे बढ़ने के लिए अपना स्वयं का सरल डेटा प्रारूप रोल करने का निर्णय लिया है। मैं क्यू डेटा को इस तरह से संग्रहीत करने के बारे में भी चिंतित था कि राम नहीं खाती है।

चूंकि मैं 128 KB फ्लैश मेमोरी के साथ एक अर्डुनियो मेगा का उपयोग कर रहा हूं, इसलिए मैं इसका उपयोग एसडी कार्ड का उपयोग करने से पहले करना चाहता हूं। उत्कृष्ट Flash Library PROGMEM तक पहुंचने के साथ बहुत आसान है और मैं मिनटों में एक परीक्षण स्केच को मोटा करने में सक्षम था।

मोटर नियंत्रण के लिए मैं सीरियल कॉम का उपयोग कर समर्पित मोटर नियंत्रक बोर्ड का उपयोग कर रहा हूं। प्रत्येक बोर्ड दो मोटर्स को नियंत्रित करता है। मुझे भेजने के लिए आवश्यक अधिकतम डेटा आकार का परीक्षण करने के लिए चार मान थे: दर, ढलान, एक्स लक्ष्य, y लक्ष्य एक चाल बनाने के लिए ताकि मोटर के लिए मेरा डेटा प्रारूप निर्धारित किया जा सके। जब मैं टाइमस्टैम्प और बोर्ड आईडी मान जोड़ता हूं तो यह बदलेगा।

फ़्लैश 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; 
} 
संबंधित मुद्दे