Firstly, here's a diagram to clarify how the system is connected:
In summary, the arduino converts the analog input from one or more (up to 8) sensors, concatenates the data into a 32 byte value, and sends the value over SPI to the NRF24 module. On the receiving end, puredata polls the NRF module at regular intervals to see if any data is available. If it is, then the received data is split into eight lots of two byte values, and output from the puredata extension as eight separate outputs. Note: I only transmitted data from eight sensors. However, by modifying the source code for the external you could have up to 16 sensors & outputs.
Why concatenate the data?
Concatenating allows us to transmit data from multiple (up to sixteen) sensors as a single packet, rather than sending the value of each sensor as a separate packet. This increases our bandwidth.
What happens to lost packets?
At the moment, the receiving and transmitting code isn't configured to use auto acknowledgement or to retransmit failed packets. This means that any data that isn't received properly - e.g. from interference - is lost forever.
How quickly can the data be received?
At the moment, about 1kHz, or one 32 byte packet every millisecond. The external I wrote for puredata is limited by the puredata programming environment, because it uses the metronome function to trigger polling of the NRF24 module.
What is the range of the NRF24L01+ modules?
In my setup, I used the cheap modules shown below:
With a 1uF capacitor soldered across the supply terminals (as suggested here), and the unit enclosed in a box made from 7mm plywood, the range was a measly 3m or so. As a few people have suggested, the poor range was likely due to the metal bolts and cable in the photo above - replacing them with nylon bolts would apparently fix the problem!
Can I transmit data from puredata to the arduino?
Not with the current code. However, the RF24 library I used does allow data to be transmitted and received both ways, so by modifying the source code for the puredata external you could definitely achieve this!