It is possible that you can use the supplied code and your scooter will work fine. But, and there's always a but, your scooter will probably be made differently, different motors & wheels, different ride height & different electronics.
If you can not easily ride your scooter within 5 minutes of trying then it is not set up correctly, the same goes if you keep falling off it or feel wobbly. I didn't fully understand this until I got it set up right, trust me, when it's right you will know.
So John David the guy who made the initial version of the software has put a number of things in the code to help him & us to adjust it. I must admit it has taken me many hours to understand how it fully works, or at least how most of it works but for me it is important to know and a great way of learning so I'm going to pass the important bits on so you can adjust yours.
The first item we are going to look at is the gyro, this is because there are many types & versions out there that tend to get superseded very quickly. So the original gyro that the V3 code was made for is not available any more which is a problem that I will try to explain.
The gyro & the accel are generally combined together onto one small board a little bigger than a postage stamp. This combination board will normally have it's own part number, but if you look into the specification of that part you will be given the accel & gyro part numbers. Then if you look at the gyro & accel specifications you will find what you are looking for. Just google the part number and the word specification after it & you will easily find all the information in an online pdf, just scroll down the pdf until you see a table containing all the information.
One other thing is that the accel/gyro board needs to be fixed to the scooter securely and in the correct orientation. So it needs to be level, with the components facing up, and with the X (accelerometer) arrow facing back and the Y (gyro) arrow facing right. The arrows I'm referring to are printed on my board and I'm assuming they would be printed on other models as well but I can not guarantee this. On some boards it may show the x, y & z of one arrow & just the x or y or both on the other arrow, the accelerometer has 3 axis & the gyro has 2 if using the same board or chips as me (see below for more chip information). So if one of your arrows shows all 3 axis then you know it is the accelerometer arrow.
My board can be see on this page: Electrical and electronic parts for sale.
So we have lots of specifications, most of which we may not fully understand, so here are a few things to look out for:
Below are the specs of my combination board that I used for the V4 code.
Combination board part number--------------5DOF (Mine didn't have a part number but it came with information showing what the chips were)
The gyro part number--------------------------IDG655
The accel part number-------------------------ADXL335
Gyro Zero rate voltage when level-----------1.35v
Gyro Sensitivity in mV/°/s for xout------------0.5
Gyro Sensitivity in mV/°/s for x4.5out--------2.27
Below are the specs of the combo board used in the original V3 code:
Combination board part number--------------SEN-11072
The gyro part number--------------------------IDG500
The accel part number-------------------------ADXL335
Gyro Zero rate voltage when level-----------1.35v
Gyro Sensitivity in mV/°/s for xout------------2.0
Gyro Sensitivity in mV/°/s for x4.5out--------9.1
Because the specification of your accel or gyro may be different then this is probably why your scooter is not performing the way you expected. But there can be other reasons so please read on to set the software up correctly for your scooter.
The good news is that the accel part has not been superseded, in all the combo boards that I've seen they use this same chip which makes things a lot easier for us.
The combo board that we use has an analogue output, the code will only easily work with an analogue output. There are combo boards out there that use a serial interface to communicate to the arduino, I tried one of these & it was very difficult to use, it took a page of code just to talk to it, do not get one of these unless you need the challenge.
The analogue output means that the combo board outputs a voltage, and this voltage varies depending on the angle of the board, the arduino is looking for a voltage between 0 - 3.33v. It converts the voltage to a number between 0 - 1023 & it is this number that is used in the code.
So if the combo board is level, the gyro will output 1.35v (zero rate voltage when level from the spec above).
So using the scale 0 - 3.33, the 1.35v is less than half. This gets converted by the arduino to the 0 - 1023 scale making it 414 as shown below:
(1.35/3.33)*1023=414
So this should be the first thing you change in the code, you will need to put the 414 in the gyroscope values section near the start of the code, the line will look like this:
int gyro_offset = 414;
The same thing can be done with the accelerometer, although my accel was the same as the original I still needed to change the offset slightly.
Another way to check what to set the offset values to is to check what the combo board actually outputs via the arduino serial monitor. To do that then you will need to change what information the code sends to the serial monitor. Make the changes to reflect the code below (it's at the very end of the main code). Any line that starts with// is not read by the arduino, it's a good place to write comments or instead of deleting a line of code just use the // at the beginning, you never know when you may need it again.
void serial_print_stuff(){
// Debug with the Serial monitor
Serial.print("Accel: ");
//Serial.print(accel_angle); // print the accelerometer angle
Serial.print(accel_reading); // print the accelerometer angle
Serial.print(" ");
Serial.print("Gyro: ");
//Serial.print(gyro_angle); // print the gyro angle
Serial.print(gyro_reading); // print the gyro angle
Serial.print(" ");
Serial.print("Filtered: ");
Serial.print(angle); // print the filtered angle
Serial.print(" ");
Serial.print(" time: ");
Serial.print(cycle_time); // print the loop cycle time
Serial.println(" ");
/*
So with the above changes done you can upload them to the arduino via a USB cable, keep the scooters 12 & 24v switches off, it will use the power from the usb cable to run things. Activate the debug switch on the scooter & then the reset switch & if you open the serial monitor on your PC you should see a similar screen output that is shown below:
Accel: 508 Gyro: 414 Filtered: 0.01 time: 50
Accel: 508 Gyro: 413 Filtered: 0.01 time: 50
Accel: 508 Gyro: 414 Filtered: 0.01 time: 50
Accel: 509 Gyro: 413 Filtered: 0.01 time: 50
Accel: 509 Gyro: 413 Filtered: 0.01 time: 50
Accel: 509 Gyro: 414 Filtered: 0.01 time: 50
Accel: 508 Gyro: 413 Filtered: 0.01 time: 50
Accel: 508 Gyro: 413 Filtered: 0.01 time: 50
Accel: 509 Gyro: 414 Filtered: 0.01 time: 50
Accel: 509 Gyro: 414 Filtered: 0.01 time: 50
If you make sure the scooter, or more importantly the combo board, is completely level by putting it up on blocks & checking with a level then you should get the accel & gyro reading output to reflect the offset value we calculated earlier.
The offset values in the V4 code are 509 & 414 the same as the serial output above.
After I set the offsets in the code I also changed the code to show the gyro_angle & accel_angle on the serial monitor, you can do this by removing the // by the 2 accel & gyro_angle lines & adding the// to the gyro & accel_reading lines.
Now when I moved my scooter fully forward & fully back I saw that the gyro_angle was slow to catch up so check yours, we will talk about this later. The angle will show as a decimal value but really 0.10 is 10°. So check your max forward & reverse angles as we will also need them later.
The next thing I looked at was gyro sensitivity, the original code used 9.1mV/°/s but mine used 2.27mV/°/s.
Mine would be 4 times less sensitive unless I done something with the code, well after a quick look I was able to multiply the gyro values by 4 in 2 places in the code so it looked like this:
Original line: gyro_avg = gyro_avg + analogRead(gyro_pin);
Changed line: gyro_avg = gyro_avg + ((analogRead(gyro_pin))*4);
Original line: gyro_raw = gyro_reading - gyro_offset;
Changed line: gyro_reading = ((analogRead(gyro_pin))*4);
This actually worked well, after this I was able to ride the scooter, but it still wasn't a good ride, it just wasn't fast enough, but it gave me the incentive to look further.
So after looking at the code in more detail I changed the 2 lines above back to their original & looked for a better fix. What I started looking at was the correlation between speed and the angle, especially as my design was fairly long which limited the angle that I could tilt the scooter.
So I looked at harnessing all that motor speed and letting it loose within a smaller angular movement and made the changes below:
Original line: motor_out = map(output, -250, 250, -gain_val, gain_val); // map the angle
Changed line: motor_out = map(output, -50, 50, -gain_val, gain_val); // map the angle
This was definitely the big change that got me up & running, my scooter had a forward max tilt angle of 14° & a rear max tilt angle of 23°. The code showed that it was set up for a max angle of 25° so I was definitely not using all the power that was available.
I should explain here that I used the serial monitor on the arduino to output the angles for me as detailed further up the page, it actually outputs 0.14 which equates to 14° & the code above showing 250 equates to 25°. If any of these values are negative then that refers to the rear tilt angle.
So it would seem a good idea to spread that motor power up to 14°, although I didn't want it to scrape the floor so I tried -120 & 120 (12°). This made it faster but it wasn't enough so I set it at -100 & 100 & it was even faster.
After a bit of head scratching I saw that when I use the serial monitor to check the angles the gyros rate of change was much slower than the accel, it would eventually catch up but that delayed reporting of the correct angle was the key to why the 120° angle didn't work as well as it should. I needed the speed earlier on to make the scooter more stable.
If you turn the gain pot to it's max it will increase the speed but my scooter was already set at the max but definitely something to watch out for when testing.
To overcome this I looked at changing the gyro scale in the code but after tinkering around with this it didn't seem to do what I thought it would do so I came back to changing the angle again, after testing I finally settled on -50° & 50°. I'm not convinced that this was the best way to gain the speed but it overcome all the problems & the scooter is now very easy to ride. It gives a very smooth ride & it would seem to be perfect so I haven't looked for any further improvements.
The V4 version of the code is set to -50° & 50° the same as mine but if your scooter can tilt further than mine or the gyro results do not lag then I would increase this value until it feels comfortable to ride.
I am still very new at the arduino coding so please let me know if there are better ways of achieving the same result, I hope you have found that reading through my progress & failures has given you the incentive to build your own. If so then we would love to publish the pictures of your own scooter.
I will certainly be building a version 2 scooter which will be much shorter, apart from that I don't intend to change anything else apart from the overall cosmetic look.
If you would like to buy the same combo board that I used then please email me, depending on the response I may get a bunch of them in. They would be around $40 NZD ($33 USD)+ shipping (price & exchange rate correct March 2013). Please see further update at bottom of page.
One last thing I almost forgot to add was that I found my steering a bit slow, I would have to move the pot quite a lot to get a small movement so I increased the steering range from 7 to 13 which made it much more agile.
It took a bit of trial & error to find the best setting so you may want to adjust yours, V4 of the code already contains this change.
Here is the line of code that I changed:
Before change: int steer_range = 7;
After change: int steer_range = 13;
There are many variables that can be changed within the code, I didn't bother experimenting with all of them, to be honest I stopped as soon as I got my dialed in, there is a variable that switches off the motors over a certain angle, this is there for safety but you may want to adjust it depending on your design.
Good luck & be safe.
Update 20-3-13
Due to the overwhelming email response for the gyro/accel combo board, I have negotiated a great bulk deal price on these & a few other bits including an Arduino copy called the Funduino Uno V3.
We will have to wait for delivery but I'm expecting to be able to sell the gyro/accel combo board (the same one that I used) together with the Arduino copy including the USB cable for $75 NZD which is approx $62 USD plus shipping (Exchange rate correct 20-3-13), we will make some inquiries as to the international shipping cost & we will charge what ever it costs us.
This is a great price and it takes a lot of the uncertainty out of the project.
The Arduino Uno V3 is an open source design meaning it is available for anyone to copy, it is even possible to make your own but at this price it's just not worth it.
Unfortunately I can not get a deal on the Sabertooth 2x25 motor controller so I would recommend buying that from the company who makes it, they only charge $3 USD for international freight, the unit as of March 2013 is $124.99 USD. It's expensive but it works and I do not know of a better alternative. Here is the link:
Dimension Engineering.
I'm also working on getting the motor/gearbox/wheel assemblies, if I can get a good deal I'll post it here, actually we should all be using the new forum but I'll update this bit as well.
Update 25-3-13 We have managed to get a couple pairs of wheelchair motors, these are very hard to get & normally cost a small fortune but I can now offer the Gyro/Accel combo board + The arduino copy V3 + The Arduino USB cable + a pair of wheelchair motors + wheels + tyres + inner tubes + gearbox. All for $275 NZD ($230 USD) + shipping.
We currently stock 2 types of motors which can be seen in the pictures below.
If you are local & want to pick these items up then you can also have the wheelchair frame for free.
We can only sell the motors at this price if buying the complete kit as described above.
We do not have a huge supply of these so if you wish to buy a kit then please email us, first come first served.
Alternatively you can buy just the motor, gearbox, wheels & inner tube assembly below.
If you can not easily ride your scooter within 5 minutes of trying then it is not set up correctly, the same goes if you keep falling off it or feel wobbly. I didn't fully understand this until I got it set up right, trust me, when it's right you will know.
So John David the guy who made the initial version of the software has put a number of things in the code to help him & us to adjust it. I must admit it has taken me many hours to understand how it fully works, or at least how most of it works but for me it is important to know and a great way of learning so I'm going to pass the important bits on so you can adjust yours.
The first item we are going to look at is the gyro, this is because there are many types & versions out there that tend to get superseded very quickly. So the original gyro that the V3 code was made for is not available any more which is a problem that I will try to explain.
The gyro & the accel are generally combined together onto one small board a little bigger than a postage stamp. This combination board will normally have it's own part number, but if you look into the specification of that part you will be given the accel & gyro part numbers. Then if you look at the gyro & accel specifications you will find what you are looking for. Just google the part number and the word specification after it & you will easily find all the information in an online pdf, just scroll down the pdf until you see a table containing all the information.
One other thing is that the accel/gyro board needs to be fixed to the scooter securely and in the correct orientation. So it needs to be level, with the components facing up, and with the X (accelerometer) arrow facing back and the Y (gyro) arrow facing right. The arrows I'm referring to are printed on my board and I'm assuming they would be printed on other models as well but I can not guarantee this. On some boards it may show the x, y & z of one arrow & just the x or y or both on the other arrow, the accelerometer has 3 axis & the gyro has 2 if using the same board or chips as me (see below for more chip information). So if one of your arrows shows all 3 axis then you know it is the accelerometer arrow.
My board can be see on this page: Electrical and electronic parts for sale.
So we have lots of specifications, most of which we may not fully understand, so here are a few things to look out for:
Below are the specs of my combination board that I used for the V4 code.
Combination board part number--------------5DOF (Mine didn't have a part number but it came with information showing what the chips were)
The gyro part number--------------------------IDG655
The accel part number-------------------------ADXL335
Gyro Zero rate voltage when level-----------1.35v
Gyro Sensitivity in mV/°/s for xout------------0.5
Gyro Sensitivity in mV/°/s for x4.5out--------2.27
Below are the specs of the combo board used in the original V3 code:
Combination board part number--------------SEN-11072
The gyro part number--------------------------IDG500
The accel part number-------------------------ADXL335
Gyro Zero rate voltage when level-----------1.35v
Gyro Sensitivity in mV/°/s for xout------------2.0
Gyro Sensitivity in mV/°/s for x4.5out--------9.1
Because the specification of your accel or gyro may be different then this is probably why your scooter is not performing the way you expected. But there can be other reasons so please read on to set the software up correctly for your scooter.
The good news is that the accel part has not been superseded, in all the combo boards that I've seen they use this same chip which makes things a lot easier for us.
The combo board that we use has an analogue output, the code will only easily work with an analogue output. There are combo boards out there that use a serial interface to communicate to the arduino, I tried one of these & it was very difficult to use, it took a page of code just to talk to it, do not get one of these unless you need the challenge.
The analogue output means that the combo board outputs a voltage, and this voltage varies depending on the angle of the board, the arduino is looking for a voltage between 0 - 3.33v. It converts the voltage to a number between 0 - 1023 & it is this number that is used in the code.
So if the combo board is level, the gyro will output 1.35v (zero rate voltage when level from the spec above).
So using the scale 0 - 3.33, the 1.35v is less than half. This gets converted by the arduino to the 0 - 1023 scale making it 414 as shown below:
(1.35/3.33)*1023=414
So this should be the first thing you change in the code, you will need to put the 414 in the gyroscope values section near the start of the code, the line will look like this:
int gyro_offset = 414;
The same thing can be done with the accelerometer, although my accel was the same as the original I still needed to change the offset slightly.
Another way to check what to set the offset values to is to check what the combo board actually outputs via the arduino serial monitor. To do that then you will need to change what information the code sends to the serial monitor. Make the changes to reflect the code below (it's at the very end of the main code). Any line that starts with// is not read by the arduino, it's a good place to write comments or instead of deleting a line of code just use the // at the beginning, you never know when you may need it again.
void serial_print_stuff(){
// Debug with the Serial monitor
Serial.print("Accel: ");
//Serial.print(accel_angle); // print the accelerometer angle
Serial.print(accel_reading); // print the accelerometer angle
Serial.print(" ");
Serial.print("Gyro: ");
//Serial.print(gyro_angle); // print the gyro angle
Serial.print(gyro_reading); // print the gyro angle
Serial.print(" ");
Serial.print("Filtered: ");
Serial.print(angle); // print the filtered angle
Serial.print(" ");
Serial.print(" time: ");
Serial.print(cycle_time); // print the loop cycle time
Serial.println(" ");
/*
So with the above changes done you can upload them to the arduino via a USB cable, keep the scooters 12 & 24v switches off, it will use the power from the usb cable to run things. Activate the debug switch on the scooter & then the reset switch & if you open the serial monitor on your PC you should see a similar screen output that is shown below:
Accel: 508 Gyro: 414 Filtered: 0.01 time: 50
Accel: 508 Gyro: 413 Filtered: 0.01 time: 50
Accel: 508 Gyro: 414 Filtered: 0.01 time: 50
Accel: 509 Gyro: 413 Filtered: 0.01 time: 50
Accel: 509 Gyro: 413 Filtered: 0.01 time: 50
Accel: 509 Gyro: 414 Filtered: 0.01 time: 50
Accel: 508 Gyro: 413 Filtered: 0.01 time: 50
Accel: 508 Gyro: 413 Filtered: 0.01 time: 50
Accel: 509 Gyro: 414 Filtered: 0.01 time: 50
Accel: 509 Gyro: 414 Filtered: 0.01 time: 50
If you make sure the scooter, or more importantly the combo board, is completely level by putting it up on blocks & checking with a level then you should get the accel & gyro reading output to reflect the offset value we calculated earlier.
The offset values in the V4 code are 509 & 414 the same as the serial output above.
After I set the offsets in the code I also changed the code to show the gyro_angle & accel_angle on the serial monitor, you can do this by removing the // by the 2 accel & gyro_angle lines & adding the// to the gyro & accel_reading lines.
Now when I moved my scooter fully forward & fully back I saw that the gyro_angle was slow to catch up so check yours, we will talk about this later. The angle will show as a decimal value but really 0.10 is 10°. So check your max forward & reverse angles as we will also need them later.
The next thing I looked at was gyro sensitivity, the original code used 9.1mV/°/s but mine used 2.27mV/°/s.
Mine would be 4 times less sensitive unless I done something with the code, well after a quick look I was able to multiply the gyro values by 4 in 2 places in the code so it looked like this:
Original line: gyro_avg = gyro_avg + analogRead(gyro_pin);
Changed line: gyro_avg = gyro_avg + ((analogRead(gyro_pin))*4);
Original line: gyro_raw = gyro_reading - gyro_offset;
Changed line: gyro_reading = ((analogRead(gyro_pin))*4);
This actually worked well, after this I was able to ride the scooter, but it still wasn't a good ride, it just wasn't fast enough, but it gave me the incentive to look further.
So after looking at the code in more detail I changed the 2 lines above back to their original & looked for a better fix. What I started looking at was the correlation between speed and the angle, especially as my design was fairly long which limited the angle that I could tilt the scooter.
So I looked at harnessing all that motor speed and letting it loose within a smaller angular movement and made the changes below:
Original line: motor_out = map(output, -250, 250, -gain_val, gain_val); // map the angle
Changed line: motor_out = map(output, -50, 50, -gain_val, gain_val); // map the angle
This was definitely the big change that got me up & running, my scooter had a forward max tilt angle of 14° & a rear max tilt angle of 23°. The code showed that it was set up for a max angle of 25° so I was definitely not using all the power that was available.
I should explain here that I used the serial monitor on the arduino to output the angles for me as detailed further up the page, it actually outputs 0.14 which equates to 14° & the code above showing 250 equates to 25°. If any of these values are negative then that refers to the rear tilt angle.
So it would seem a good idea to spread that motor power up to 14°, although I didn't want it to scrape the floor so I tried -120 & 120 (12°). This made it faster but it wasn't enough so I set it at -100 & 100 & it was even faster.
After a bit of head scratching I saw that when I use the serial monitor to check the angles the gyros rate of change was much slower than the accel, it would eventually catch up but that delayed reporting of the correct angle was the key to why the 120° angle didn't work as well as it should. I needed the speed earlier on to make the scooter more stable.
If you turn the gain pot to it's max it will increase the speed but my scooter was already set at the max but definitely something to watch out for when testing.
To overcome this I looked at changing the gyro scale in the code but after tinkering around with this it didn't seem to do what I thought it would do so I came back to changing the angle again, after testing I finally settled on -50° & 50°. I'm not convinced that this was the best way to gain the speed but it overcome all the problems & the scooter is now very easy to ride. It gives a very smooth ride & it would seem to be perfect so I haven't looked for any further improvements.
The V4 version of the code is set to -50° & 50° the same as mine but if your scooter can tilt further than mine or the gyro results do not lag then I would increase this value until it feels comfortable to ride.
I am still very new at the arduino coding so please let me know if there are better ways of achieving the same result, I hope you have found that reading through my progress & failures has given you the incentive to build your own. If so then we would love to publish the pictures of your own scooter.
I will certainly be building a version 2 scooter which will be much shorter, apart from that I don't intend to change anything else apart from the overall cosmetic look.
If you would like to buy the same combo board that I used then please email me, depending on the response I may get a bunch of them in. They would be around $40 NZD ($33 USD)+ shipping (price & exchange rate correct March 2013). Please see further update at bottom of page.
One last thing I almost forgot to add was that I found my steering a bit slow, I would have to move the pot quite a lot to get a small movement so I increased the steering range from 7 to 13 which made it much more agile.
It took a bit of trial & error to find the best setting so you may want to adjust yours, V4 of the code already contains this change.
Here is the line of code that I changed:
Before change: int steer_range = 7;
After change: int steer_range = 13;
There are many variables that can be changed within the code, I didn't bother experimenting with all of them, to be honest I stopped as soon as I got my dialed in, there is a variable that switches off the motors over a certain angle, this is there for safety but you may want to adjust it depending on your design.
Good luck & be safe.
Update 20-3-13
Due to the overwhelming email response for the gyro/accel combo board, I have negotiated a great bulk deal price on these & a few other bits including an Arduino copy called the Funduino Uno V3.
We will have to wait for delivery but I'm expecting to be able to sell the gyro/accel combo board (the same one that I used) together with the Arduino copy including the USB cable for $75 NZD which is approx $62 USD plus shipping (Exchange rate correct 20-3-13), we will make some inquiries as to the international shipping cost & we will charge what ever it costs us.
This is a great price and it takes a lot of the uncertainty out of the project.
The Arduino Uno V3 is an open source design meaning it is available for anyone to copy, it is even possible to make your own but at this price it's just not worth it.
Unfortunately I can not get a deal on the Sabertooth 2x25 motor controller so I would recommend buying that from the company who makes it, they only charge $3 USD for international freight, the unit as of March 2013 is $124.99 USD. It's expensive but it works and I do not know of a better alternative. Here is the link:
Dimension Engineering.
I'm also working on getting the motor/gearbox/wheel assemblies, if I can get a good deal I'll post it here, actually we should all be using the new forum but I'll update this bit as well.
Update 25-3-13 We have managed to get a couple pairs of wheelchair motors, these are very hard to get & normally cost a small fortune but I can now offer the Gyro/Accel combo board + The arduino copy V3 + The Arduino USB cable + a pair of wheelchair motors + wheels + tyres + inner tubes + gearbox. All for $275 NZD ($230 USD) + shipping.
We currently stock 2 types of motors which can be seen in the pictures below.
If you are local & want to pick these items up then you can also have the wheelchair frame for free.
We can only sell the motors at this price if buying the complete kit as described above.
We do not have a huge supply of these so if you wish to buy a kit then please email us, first come first served.
Alternatively you can buy just the motor, gearbox, wheels & inner tube assembly below.
Below are a pair of wheelchair motors that may be easier to mount a frame onto. These motors have a manual switch on the end of the square gearbox (bottom of picture) for engaging and disengaging the gearbox. It's in a slightly better place than the type I used. Fully tested 24V motor 115 RPM. Good tyres & tubes.
$230
For a pair of Fracmo motor, gearbox, wheels & inner tubes as pictured above. |
All prices, including shipping, are in New Zealand Dollars (NZD) |
I've only got one of these Fracmo motors left, the other was used to make a winch for a fishing torpedo.
Selling just the one for $115. Email me if you need it.
Selling just the one for $115. Email me if you need it.
Below are a pair the same as what I used for my scooter. The gearbox engage/disengage lever is that 'L' shaped thing poking out the top of the gearbox. Fully tested 24v motor 120 RPM. We will even fit an inner tube to the right hand side wheel before selling this pair so it will have good tyres & tubes.
$230
For a pair of Dynamic motor, gearbox, wheels & inner tubes as pictured above. |
All prices, including shipping, are in New Zealand Dollars (NZD) |
If you like our site then please click on the Facebook icon at the top right of this page, thank you.
For more information you can email us via our Contact Us page.