Errata

Make an Arduino-Controlled Robot

Errata for Make an Arduino-Controlled Robot

Submit your own errata for this product.

The errata list is a list of errors and their corrections that were found after the product was released.

The following errata were submitted by our customers and have not yet been approved or disproved by the author or editor. They solely represent the opinion of the customer.

Color Key: Serious technical mistake Minor technical mistake Language or formatting error Typo Question Note Update

Version Location Description Submitted by Date submitted
Printed Page xv
middle of page

The URL listed does not point to example code as promised in the book. In particular the libraries are not available for download. Without the libraries it is hard to use the example sketches in the book. You need to publish the location of the libraries. They are not easily found through google.

Also not that throughout the book it refers to this page as "page 15" when it should say "page xv".

Chris Thompson  Oct 01, 2012 
Other Digital Version online components list
https://docs.google.com/spreadsheet/pub?key=0AtfNMvfWhA_cdDAzVHRBMVdmM1p3X1B4emhzcWlQN2c&single=true&gid=3&output=html

Parts list should be more detailed. Several times the book mentions that you can leave the specifics of the plan and that it's not unalterably tied to the kit. Specifically it mentions making your own chassis, which I had planned to do.
So it would be helpful to note what kind of motor/gearbox the kit calls for, or at least a description of what kind of motor and gearbox can be used.

Anonymous  Dec 25, 2013 
Other Digital Version parts list
online

The online parts list posted at this web site describes a link to a motorshield at Makershed. The link points to the motorshield v2, and the product description for that item indicates it is not compatible with the kit this book is sold with.

Fred Baerkircher  Dec 26, 2013 
PDF Page 9
United Kingdom

The Motor shield described in this book has been superseded by a version 2.
The assembly instructions are therefore not relevant, but most importantly it is not clear where the sensors should be attached to on the new motor shield.

Will there be a revised chapter 2 on building the electronics?

Max Dobres  Jun 17, 2014 
Printed, PDF Page 11
Figure 2-1

There should only be one jumper in this photo, but it shows two. See the BOM at http://www.ladyada.net/make/mshield/parts.html.

Brian Jepson
Brian Jepson
 
Mar 29, 2013 
Printed, PDF, ePub Page 11-17
Figures and text

The instructions are for the previous motor shield. The motor shield sent with my recent purchase (kit purchased in December 2013) came with the Adafruit Motorshield v2.0. The new motorshield does not look the same as all the figures in the current instructions.

Jorge Borroel  Dec 12, 2013 
Printed Page 15
Figure 2-6

This figure shows a new 3x6 female header in the lower right that wasn't in the previous figure (2.5), and isn't mentioned in the book at all. Also, I don't find that part in the Rovera 4W Arduino Robot Kit. Where do I get this?

Mike Lanza  Jan 25, 2013 
Printed Page 15
1st paragraph

This sentence mentions "three pin female headers." It would have been nice if you had mentioned these in the parts list.

Mike Lanza  Jan 25, 2013 
Printed Page 18
Figure 2-10

I have the kit (4WD), but I see no "stripboard" like what is shown. I have something that is similar (it says "Datak," "CIC," and 21-113" on it), but it's not the same dimensions (it's 15x25 pins), and it has different connections, more like a breadboard.

Where can I get this stripboard?

Mike Lanza  Jan 25, 2013 
Printed, Page 44
see description below

code will not compile, gives following error messages:
sketch_feb12b:11: error: 'CS22' was not declared in this scope
sketch_feb12b:12: error: 'AF_DCMOTOR' does not name a type
sketch_feb12b.ino: In function 'void setup()'
sketch_feb12b:24: error: 'Motor_Right' was not declared in this scope
sketch_feb12b.ino: ln function 'void loop'
sketch feb12b.ino: ln function 'void blinkNumber(byte)':
sketch_feb12b:42 error: 'PinMode' was not declared in this scope

There are more, but you get the idea. I have never had this kind of problem before,and am at a loss as to what I am doing wrong.

I copied the code EXACTLY as shown in the book, twice on a MAC Book Pro, 3 times on an HP Pavillion. AFMotor IS in the Arduino library and contains the required files.
I have never had this kind of problem before,and am at a loss as to what I am doing wrong.

Lee Foster  Feb 12, 2014 
Printed Page 49
Photo

Hi,

I found several minor errors and thought I'd pass them on.

1. There are three right angle brackets with large holes in them in the 4WD kit and I can find no mention of them at all in the book. What are they for?

2. In the 4WD kit, there is supposed to be two lengths of 10" 3-conductor wire but the is only 1 length of 5 conductor wire. I had some ribbon cable and just used lengths of that,

3. One of the mounting holes in the platei is a little off and I was only able to use the two arduino mounting holes that were on the same edge. There was also no mention of the brass standoffs to mount the arduino in the 4WD build section but I found a mention of them in the 2WD section.

4. The book wasn't very clear about the 2-56 bolts and nuts needed to mount the IR sensors and they don't appear in the hardware pack. I picked some up at a local store.

Congratulations on writing a really interesting book and a well constructed rover. I'm really looking forward to working with it. And am already thinking about adding a compass module!

Best regards,
Rob

Rob Moore  Jan 05, 2013 
Other Digital Version 57
Figure 4-17

Trickle Charger Detection
It is unclear where the blue voltage monitoring wire in figure 4-17 is connected. One end is on the charging adapter. Where is the other end? In the sample code it looks like it is attached to digital pin 2, but how is that possible since the motor shield occupies all the digital pins? It would be great if you could supply a picture of the board showing the voltage monitoring wire attached.
Thank you!

Wayne Heller  Nov 29, 2013 
Printed Page 68
Sketch listing

I am unable to successfuly compile the MotorTest4wd sketch using the downloaded software.

List of error messages received when attempt was made to compile MotorTest4wd

MotorTest4wd:14: error: ?AF_DCMotor? does not name a type
MotorTest4wd:15: error: ?AF_DCMotor? does not name a type
MotorTest4wd:16: error: ?AF_DCMotor? does not name a type
MotorTest4wd:17: error: ?AF_DCMotor? does not name a type

MotorTest4wd.ino: In function ?Void setup()?:
MotorTest4wd:28 error: ?Motor_Left_Front? was not declared in this scope
MotorTest4wd:29 error: ?Motor_Right_Front? was not declared in this scope
MotorTest4wd:30 error: ?Motor_Left_Rear? was not declared in this scope
MotorTest4wd:31 error: ?Motor_Right Rear? was not declared in this scope

MotorTest4wd.ino: In function ?Void loop()?:
MotorTest4wd:38 error ?Motor_Left_Front? was not declared in this scope
MotorTest4wd:38 error ?Forward? was not declared in this scope
MotorTest4wd:39 error ?Motor_Left_Rear? was not declared in this scope
MotorTest4wd:41 error ?Motor_Right_Front? was not declared in this scope
MotorTest4wd:41 error ?Backward? was not declared in this scope
MotorTest4wd:42 error ?Motor_Right Rear? was not declared in this scope
MotorTest4wd:46 error ?Release? was not declared in this scope

Please help. Thanks

Bob C  Mar 21, 2013 
ePub Page 68
Example 4-1

Not an error, but a workaround for use with the Arduino Mega

Commented text was changed. Without this change only the right front and left rear motors worked.

/*
AF_DCMotor Motor_Left_Front(4, MOTOR34_1KHZ); // Motor 4
AF_DCMotor Motor_Right_Front(3, MOTOR34_1KHZ); // Motor 3
AF_DCMotor Motor_Left_Rear(1, MOTOR12_1KHZ); // Motor 1
AF_DCMotor Motor_Right_Rear(2, MOTOR12_1KHZ); // Motor 2
*/
AF_DCMotor Motor_Left_Front(4, MOTOR12_2KHZ); // Motor 4
AF_DCMotor Motor_Right_Front(3, MOTOR12_2KHZ); // Motor 3
AF_DCMotor Motor_Left_Rear(1, MOTOR12_2KHZ); // Motor 1
AF_DCMotor Motor_Right_Rear(2, MOTOR12_2KHZ); // Motor 2

Bill James  May 19, 2014 
Printed Page 136
Examples 8-3 & 8-2

My ambient sensor readings are about 800 for white and 1000 for black.

With irReflcetThreshold = 10 and irEdgeThreshold = 90 as given in text p 137 and in the code, and taking my white reading as ambient, I get

irSensorRelfect = 800 x 90/100 = 720
irSensorEdge = 800 x 190/100 = 1520

With this value for irSensorEdge, both white and black ambient reading will give false from the irEdgeDetect code in Example 8-2!

I suggest that the correct formula is

irSensorEdge = ambient * (100 + irReflcetThreshold)/100

For ambient = white = 800 this gives

irSensorEdge = 800 x 110/100 = 880.

In this case a black reading of 1000 give true from irDetectEdge.

Tom Lasinski  Jun 17, 2013 
PDF Page 141
example code

The example code for the Sharp IR distance sensor has a couple of errors. Both are in the mvToDistance function.

First, the code doesn't consistently take the firstElement offset into account. In the "else" portion of the function, the data in the array is addressed as if there is no firstElement offset. This causes all of the readings to be incorrect. To fix this, use the following three lines of code to replace the existing corresponding lines:

int index = (mV - firstElement) / INTERVAL;
int mV0 = (index * INTERVAL) + firstElement;
int result = map(mV, mV0, mV1, distance[index], distance[index+1]);

The same issue also appears in the second conditional if. It returns the lowest distance in the array if mV rises beyond the limit of the array. Again, it fails to take into account the firstElement offset, so it returns the lowest value in the array even when mV is still within the range of the array. Replace the existing if statement with the following:

if( mV > INTERVAL * TABLE_ENTRIES + firstElement - INTERVAL)

The second type of error is also in the mvToDistance function. If the mV reading is outside of the range of the Sharp sensor, the conditional if statements will return either the shortest distance or the longest distance stored in the array. This is fine, but it returns the value in centimeters. The "else" portion of the conditional statement returns the distance in inches. I'm OK working with centimeters so I just removed the cm to inch conversion in the else statement. If you want to use inches, move the conversion to the irGetDistance function where it can be applied consistently on all returned values. Related to this, the irGetDistance function uses a variable named cm. Just make sure that this variable is named consistently with whatever type of units you decide to use.

(I should note that I used a different Sharp sensor, so I had to modify the distance[] array for the values my sensor was returning. In doing this, I chose to use a smaller INTERVAL of 100 mV to get better resolution. This resulted in an array with 28 values and a firstElement offset of 400 mV. I mention this because it is possible that the code in the example works correctly for its specific case. I did not check. But it is broken for the general case in which you might be using different sized arrays, different offsets, and different intervals.)

Lee Ratliff  Jan 21, 2013 
PDF Page 157
United Kingdom

I'm trying to understand Example 9-3 and can't figure out how it makes sense. The returned result of the drift calculation only uses the value from the left sensor and the right sensor. The value from the centre sensor is used in the calculations of 'leftSense' and 'rightSense' but then those values are simply thrown away.

Is it correct that the drift should only be calculated based on the left + right sensors? The text in the paragraphs before the code sample just mentions calculating drift based on left + right sensors.

If that's the case, why have three sensors at all? What should be happening with the centre sensor, and what should be happening with the values of 'leftSense' and 'rightSense'?

Royston Shufflebotham  Nov 10, 2012 
Printed Page 189
Esempio 11-2

In the file myRobotSerialRemote.ino I get the following error compilation:
error: 'SPEED' was not delated in this SCOPE.
I assume it is my ignorance and I would like to understand why it happens.
Than you very much
Kind regards

arnaldo armida  Mar 25, 2014