Most small microcontrollers will be capable of doing what you need. You could even ditch the Arduino "wrapper" and use a USB capable micro in it's place.
Microchip, Atmel, TI, ST, etc all have 8, 16, 32-bit uCs of varying RAM/FLASH/EEPROM sizes to pick from. All the modern uCs come with at least UART, SPI, I2C peripherals that can be used for your communications.
There is not a lot in them really, I'd just pick one and see how you like it.
I (currently) use ST's 32-bit ARMs and Microchip 8, 16 ,32-bit PICs.
I'd probably use a few PIC12F or 16Fs for the slave uCs and a PIC18F or PIC24F for the master.
You mention needing ~10kbits of memory (not quite clear what type or which uC needs it from your description to me though)
It's easy to determine what is suitable though, just check the RAM/ROM/EEPROM specs of each uC you look at.
For example the PIC16F1938 has:
Parameter Name Value
Program Memory Type Flash
Program Memory (KB) 28
CPU Speed (MIPS) 8
RAM Bytes 1,024
Data EEPROM (bytes) 256
So 28KB of program memory is more than enough to store non-volatile data if your program is small enough (on the newer PICs you can also read/write to program memory at run time) 10kbits will not quite fit into the RAM though, at 1024 * 8 = 8192 bits.
The 16F1527 has 1536 bytes of RAM though, so you could use this if necessary.
For the master (alternatives to Arduino) there is something like the 18F25J50 or similar, which has a USB 2.0 peripheral. Microchip provide a USB stack an plenty of example firmware to get you started with USB.
If you need something more powerful for the master, have a look at the PIC24 series with up to 256K of Flash and 96K of RAM. Or even the PIC32 which is 32-bit and up to 80MIPS.
The PICKit3 is a low price programmer that will program all the above mentioned PICs, and MPLAB (or MPLABX) is a free IDE for firmware development.
Communication can be done with I2C, which deals with the master/slave configuration and addressing easily. All you have to worry about is sending the data. 7 meters should be no problem with a reasonably quiet environment and the right setup (low value pullups - say 2.2k, low capacitance cable)
I actually worked on a bicycle data logger a bunch of years ago (Used to be called the Tune PowerTap, then was bought by Graber and I don't what happened to it after that), so I am familiar with the issues .
As you say, low power is key. That means you have to do it right and not just grab a arduino just because that's all you know about. Arduinos are microcontrollers with a some hardware and a lot of software sugar coating around them. They are for people that don't want to know what is going on that just want to get a basic project working. Many tradeoffs were made for the sake of apparent simplicity. Ultra low power operation is one of them. To acheive really low power operation and near zero power standby, you need to design for that from the start, both electrically and in the firmware architecture. Physical size will also be a problem with a arduino.
It is unclear exactly what data you want to record. It appears you are only interested in distance traveled, which can be measured in terms of wheel rotations. The PowerTap used a fixed magnet on the wheel with a reed switch that would get close once per rotation. That sounds like a good transducer for you too, since it takes no power unless you want it to.
Basically, you need only a small micro connected to the reed switch signal, a large EEPROM, a 32768 Hz watch crystal to keep real time, and some sort of communication interface so that you can get a data dump. None of this is hard individually, but you need to wake up to design the hardware and the firmware architecture carefully to minimize power at every opportunity. So my answer is, yes it can be done, but it will require more expertise to do right than it appears you are currently imagining.
Best Answer
A lot of the arduino stuff is handled underneath. You will see how much FLASH memory a sketch (program) will take upon compilation, but not the amount of SRAM memory. I recently had to discover this as well, and this is how I did it.
In the arduino IDE directory there is the avr-gcc compiler. It also contains a tool named 'avr-size'. Go to hardware/tools/avr/bin/ and it should be there.
When compiling, the IDE will create a temporary directory in your temp directory and copy all the C(++) files to it. It will compile the libraries, your sketch (it also adds the required things to make it functional) and create a hex and elf file. What you need to do is compile your sketch (by either clicking upload or verify) and look for a build[hash tag] directory in your temp folder. You need to run avr-size.exe and hand it the elf file.
It's quite tedious console work, but I usually navigate to the bin folder, run avr-size.exe and type the path to my temporary folder. This is C:\Users[your username]\AppData\Local\Temp\build[random tag][Sketch name].cpp.elf (Windows 7)
You could probably make up some (batch) script for this, but as the build folder remains constant on each arduino session, I don't bother.
The output of avr-size looks very similar to this (I have compiled an Xbee example program).
Where:
The Arduino IDE reported to me this program is 3956 bytes big (FLASH). That's related to 3924 (code flash) + 32 (initial RAM values) = 3956 bytes FLASH. The RAM usage is data+bss combined(!) = 32+320 = 352 bytes SRAM usage.
Note the ATMEGA328 only has 2KiB of SRAM, and problems can already occur if you're below that (I've had unexpected behaviours at 1700 bytes out of 2048). The ATMEGA168 has 1KiB of SRAM. All Arduino mega's have got 8KiB of SRAM.
As an additional note. There are also 'free memory indicators' code available. What they do is try to allocate as much memory , count how big it was and free it up (malloc() & free()). If you initially haven't used malloc yet, this will add more code to your program you sometimes don't have space for. This is not ideal and I neither have found it to give stable results. In my own project I had ethernet+xbee+SD card + own library code running on an Atmega328. There just wasn't enough SRAM available, and FLASH became scarce as well).
And last but not least, this indicator doesn't account for memory allocated with malloc().