Offline
Newbie
Karma: 0
Posts: 2
|
 |
« on: February 09, 2012, 09:17:05 am » |
Hi,
Hope you do very well.
I am doing research on human-induced vibrationand I am currently trying to design a sensor mat which has 2000 sensors to capture dynamic load of people when they are walking on that mat.
each sensor needs to be read with 200 Hz speed. As 3200 analog input is not possible! we decided to scan the sensors with high speed (like video cameras) to read the sensor outputs with lesser analog input channels.
here is the plan: 4 mat each contains 800 sensors. A matrix of sensors with 16 columns and 50 rows. we want to use Arduino mega 2560 to get the data and transfer it to a PC. I have written the below code to scan the sensors but Arduino seems very slow..
how the program works: At each time increment, one digital output (50 digital pin) releases the power to its corresponding row of sensors (16 sensors) each of which connected to an analog input. so we use 50 digital output and 16 analog input to scan sensors.
My question: Is there any way to increase the speed? we need to read 800 sensors * 200 Hz * each outtput is 4 digits * each digit 2 bytes = 10.24 Mbits/second
If Arduino is not capable of doing that, Do you have any suggestions which hardware I can use?
Much regards, Erfan
/* TEST 06 This program scans the matrix of sensors to get data. Assumptions: - A matrix of sensors consist of 800 sensors arranged in the form of 16 columns (Analog inputs) and 50 rows (Digital outputs) - 50 Digital output to supply +5 volts power for each row of sensors - 16 Analog inouts to read the output of sensors - At each time increment, one digital output releases the power to its corresponding row of sensors (16 sensors) each of which connected to an analog input. So at each time increment each analog input read a number. - Sensor numbering: S(Row - digital output)(column - analog input) : S2006 means the sensor which is connected to digital pin 20 and analog pin 06. - "i" index represents rows and "j" index represents columns Connect one end of FSR to power (+5V in this case), the other end to Analog 0. Then connect one end of a 10K resistor from Analog 0 to ground */
//Define Pins int digitalPin [50]={0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49}; int analogPin [16]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
//Define Variables unsigned int analogFSRReading [50][16]; // The analog reading from the FSR resistor divider unsigned long startTime = 0; // Records the starting Time of each complete scan loop unsigned long endTime = 0; // Records the finishing Time of each complete scan loop unsigned long elapsedTime = 0; // Records the duration of each complete scan loop int counter; // Loop Counter int i; // Loop counter - rows - digital outputs int j; // Loop counter - columns - analog inputs
void setup(void) { Serial.begin(115200); // We'll send debugging information via the Serial monitor - I have changed the corresponding com port speed from device manager // to match this speed. for (int counter=0; counter <= 49; counter++){ pinMode(digitalPin [counter], OUTPUT); // sets the digital pin as output } }
void loop(void) {
startTime = micros(); // Records the time when loop starts for (int i=0; i <= 49; i++){ // scans rows one by one digitalWrite(digitalPin , HIGH); // Sets the digital pin voltage to 5V for (int j=0; j <= 15; j++){ // scans columns one by one // Displaying sensor ID //Serial.print("Sensor ("); //Serial.print(i); //Serial.print(","); //Serial.print(j); //Serial.println(")"); // Analog Reading from FSR - ranges between 0 to 1023 analogFSRReading [j] = analogRead(analogPin [j]); // read the input pin //Serial.print("Analog reading = "); Serial.println(analogFSRReading [j]); //Serial.println("--------------------"); } digitalWrite(digitalPin , LOW); // Sets the digital pin voltage to 0 } // Printing time duration endTime = micros(); // Records the time when loop finishes elapsedTime = endTime - startTime; Serial.print("Single loop (reading 800 sensors and feeding outputs to serial port) duration in micro-seconds: "); Serial.println(elapsedTime, DEC); Serial.println("--------------------"); delay(10000); // just to see the speed and elapsed time }
|