neato xv-12 lcd panel brands

New Neato LCD Display Control panel xv Series xv-11 xv-14 xv-15 xv-12 xv-21 . Neato XV Series LCD Control Panel Brand New Ships out within 24 hours!! Does NOT work with the older Neatos that are 2.5a (check your label on bottom of vacuum) I took all of the pictures, so you know exactly what you"re getting. Thank You

neato xv-12 lcd panel brands

Neato LCD Display Control Panel xv Series xv-11 xv-14 xv-15 xv-12 xv-21 Binky UI. Up for sale is a used working Neato XV-11 LCD display control panel. It should fit most the XV series including the xv-11 xv-14 xv-15 xv-12 xv-21. Please ensure this is the part you need before purchasing.

neato xv-12 lcd panel brands

Removing and replacing the LCD screen on your Botvac requires the removal of a couple of other components in order to gain access to it. Included in this guide are instructions on how to remove the battery and brushes. Make sure to keep these components organized in your removal process to ensure an easy re-assembly process.

neato xv-12 lcd panel brands

On the surface, the Neato Robotics XV-11 vacuum cleaner seems like just another Roomba with a square front, but it caught our attention because of the cheap and innovative Lidar device it uses to sense the room it"s cleaning. It claims to "map" the room it is in and detect doorways so that it can clean a whole room before exiting. So we went ahead and ordered one to tear-down and hack. Then on November 15th, RobotBox announced a $200 prize for the first person to post usable Lidar code. At the time of this writing, the purse is up to $800. While we don"t have a usable hack (yet, muahahaha), we did a thorough tear-down and sniffed around the Lidar signals for all you hackers that don"t want to drop $400 on a vacuum.

On first start up, the bot made some cutesy beep-boop robot noises and insisted that we charge its battery (the robot always refers to itself in the first person on its LCD display). So we stuck it on its wall-charging station for a while. Nothing fancy here, just a couple of spring-loaded contacts that press on the contacts on the back of the bot. However, Neato made the base charger as a simple structure for a standard power supply so the user can remove the power supply and plug it in if desired.

You can see the Lidar assembly sitting on top of the main processor board, the drive motor for the brush, and the daughterboard for the LCD and buttons. In the front of the bot, we can also see the optical switches for cliff detection, as well as the magnetic sensors that detect the magnetic strip. The Lidar device sits on top of the mainboard, which is controlled by a beefy AT91SAM9XE. Since the Lidar is what we"re most interested in, we pulled it off first.

neato xv-12 lcd panel brands

7.2V XV-11 Replacement Battery For Neato Robotics, Neato XV-11 XV-12 XV-14 XV-15 XV-21 XV-25, XV Essential, XV Signature Pro Robotic Vacuum Cleaners, Battery Replacement for Neato Robotics 945-0005

7.2V XV-11 Replacement Battery For Neato Robotics, Neato XV-11 XV-12 XV-14 XV-15 XV-21 XV-25, XV Essential, XV Signature Pro Robotic Vacuum Cleaners, Battery Replacement for Neato Robotics 945-0005

neato xv-12 lcd panel brands

The Neato XV-11(Wikipedia) is a robot which vacuum’s your house. It is unlike any other however because it includes a low cost 360 degree laser distance scanner (LIDAR See Wikipedia). This can be removed from the XV-11 and used in your own robotics projects or used within the XV-11 with the help of the Robot Operating System (ROS). The pages within this wiki document interfacing methods into the XV-11 and is open to anyone who wants to help. For $399 you can’t find a better robotics platform in my opinion, definitely worth the cost even if you do nothing more than strip it down for parts. You will find it is very well constructed by some people who definitely know about robotics.

From this point you need to create your own map using gmapping and save the map so a map of your area is loaded when launching 2dnav_neato. gmapping needs to be modified from the base install on your system at this point to correct the reversed laser scan data. This wiki will be updated shortly with that procedure. gmapping is what will allow you to create a map of your surroundings which you will use to navigate.

A version 2.6 Neato XV-11 can be reverted to a previous firmware by pressing and holding the Back button (curved arrow) and the orange Start button at the same time for 4 seconds. When the robot reboots it will be running an older firmware with all the previous commands available.

Anyone who has updated their Neato firmware will notice a new message is returned when you enter ” Help” when connected to the robots USB port. Entering Help with a space before it used to return an extended hidden help menu with a lot more commands! When Neato released the 2.6 firmware update (or maybe earlier?) they removed the ” Help” and instead you got this response...

Neato is great in cleaning by it self, it also has good “spot clean” algorithm! But, what if you want to clean just a certain spot? In other words - use it like a regular vacuum?

As you may know, you can manually control Neato right out of the box by connecting it to any computer via usb and, through any terminal program, send commands to robot (for some reason article describing command list on official Neato site is unreachable at this moment, but you can get it by typing ‘help’). The way you can control Neato movements is described here: XV-11 API Commands

This is really great, but how can one use it for robot’s intended purpose if he or she is limited by the length of the wire? Of course you can take a laptop!  But for me it was not the answer. Luckily, my friend recently has brought a compact (very compact) WiFi router (Commonly available from eBay as “2g/3g/4g wifi router”, also known as HAME MPR-A5 and MIFI-F5. MPR-A1 and clones are likely to work as well if you manage to fit them in. Some additional material is available on http://my-embedded.blogspot.com/2013/12/mini-4g-router-rt5350f.html) and suggested that we should try to embed it into my Neato.

So, it was obvious that all we needed was to find +5V power supply and connect usb from router to neato’s usb. All that sounds simple, so we did it. (i should say that my Neato has rev.64 main board)

Very soon we realized that, first of all - there is no powerful enough +5V source on the main board, and the second one - Neato’s software blocks it from normal functioning if it senses power supply on its usb

Answer to the second problem was a bit tricky! On the router board there is a source of power which can be turned on/off by changing state of its GPIO8 (echo 1 >/sys/class/gpio/gpio8/value), so my friend suggested that we will be able to control usb power supply by one P-N-P transistor witch base must be connected to that gpio. All that going to be great if only router could gave us +5V, but its voltage is only +3.3V. In the end the answer was found: we’d connected +5V from DC-DC to the Neato’s usb through one p-n-p and one n-p-n transistor (with a pair of resistors) controlled by the router’s +3.3V as shown below.

So now i have a fully functional Neato with a full control from any place in the world ;) I can remotely start cleaning in full cycle, or change its schedule, or use it full manual, or, even, just play like with RC car!

The open source parts of the code are provided on the CD labeled as “Neato Vacuum User Guide” that comes with the robot. The source is located under the directory “LinuxSrc”

The Neato then reappears on the serial bus (on Windows you might have to unplug and reconnect the USB cable for this device to appear) as an another device “XV-11 BOOTLOADER”

Contents of the folder LinuxSrc\boot indicate that U-boot is, or was used as, bootloader on the Neato at some point “Hopefully u-boot doesn’t make it to production, but if it does.., LinuxSrc\boot\arch\arm\cpu\lpc313, line 453.

A lot of the functions available to programmers can only be used if “TestMode” has been enabled on the Neato. Most functions displayed in the Help are listed as “TestMode Only” which will give you an idea as to what can be only be used when TestMode is enabled.

When you are first experimenting with command, I recommend you turn Neato up-side-down so the wheels can free spin. Otherwise you may get instances where your robot drives away faster than you expected, crashing into things and generally making a mess of your room as it lacks logic to stop.

As I tested in firmware 2.6, Neato’s maximum speed is 300. If you exceed this value, Neato will report back something like “Invalid Speed Specified(500). Must be between 0 and 300”

As I have been experimenting, my Neato seems to steer to the left a little as it drives along in a ‘straight’ line. I’ve also had differences in distance travelled depending on my speed setting. I have yet to sit down and measure the accuracy of these movement commands.

A little issue I found in my tinkering exploits, Neato would suddenly power off when issuing commands. This seems to be because I was issuing a large amount of commands within a short period of time. To give you an idea, I was issuing a set of three SetLED commands once every 20ms. Within about 2seconds, Neato would power off. To fix the issue, unplug your USB, power up Neato and reconnect the USB.

IMPORTANT LCD INFORMATION!!! As you can see in the first image, the LCD is labeled “GVLCM128128G 13572A” on its backside. Googling this brings up the following LCD producer: Golden Vision. However, this exact LCD is not listed on their site, but this similar one is. All the measurable specs are similar (dimensions are approximately the same - the XV-11’s LCD measures approximately 61.6 mm x 55.1 mm x 4.36 mm, which is a bit thicker, probably due to the backlight; 128 x 128 resolution). The only differences I could find are the small white line above the ribbon cable at the bottom of the “similar” LCD isn’t present on the XV-11 LCD, and the ribbon cable of the “similar” LCD is 24 pins, not 25 (so the “similar” LCD CANNOT BE USED AS A REPLACEMENT - IT WOULDN’T BE PIN COMPATIBLE!). Anyway, the company only lists a few 128x128 LCD’s in production (none of which match the XV-11’s), so this narrows down the list of possible LCD controllers used in the XV-11’s LCD to just the ST7541 (others are possible but you could say these are more likely since we know this is the only chip the company uses in their 128x128 greyscale LCD’s). We can’t be sure until we test out driving this LCD standalone (on my TODO list for the next 2 weeks - I’m waiting on a FFC Ribbon Cable Breakout to come in from New Haven Display (look here if interested), but from what the datasheet says and the fact that only 2 of the LCD’s ribbon cable pins are appear to have data running thru them, it seems like the LCD is controlled by i2c from the main board (see below for pinouts).

The buttons on the LCD board have a pair of legs connected to ground, so it’s safe to deduce that the main board has these buttons’ signals pulled up (these pullups are not found on the LCD board) and expects to read a LOW signal when these buttons are pressed down. See table below for which button is which.

K1, K2, and K3 labeled in the second image are 3 of the 4 pins attaching the LCD backlight to the PCB. These pins go thru resistors to Q1, which appears to be a transistor driven by pin 10 of the white FFC ribbon cable (going to the mainboard). When a voltage is applied to Q1, it connects K(1-3) to GND, turning the backlight ON. K4, the last of the backlight’s pins, connects to pin 14 of the white FFC ribbon cable (see table below for appropriate voltages).

IMPORTANT DISCLAIMER: I did my best to determine all the dimensions, but there are likely some minor inaccuracies. Looking at the XV-11’s case, the LCD PCB fits snugly in the outline and all the buttons and LED’s have to line up nicely with the plastic to work properly. If for whatever reason you want to use these files to produce a custom LCD peripheral board, just be warned it may not work (but this is probably your best chance at a template for one).

neato xv-12 lcd panel brands

So I bought a robotic vacuum cleaner. The first question is "why would you spend some serious money on such a device? On a toy?". I have some rationalisations for buying this device, but honestly, one reason is that sometimes I just like to buy a new toy. Something to play with. Excuse me for being human. In this blog post I want to explain to you why I bought a Neato XV-15 and not another product.

The XV-15 robot is made by Neato Robotics, a young startup that seems to be started purely for this device. The company started with the XV-11 for the US market, and the XV-15 is identical except that it is meant for the European market. A new XV-12 has also been announced, which seems to be identical to the other two machines, except for the color (white).

The XV-15 has a rubber brush at the front that rotates quite fast and that brush scoops up the dirt. Just behind the rubber brush, a vacuum mouth is present. Anything sucked up through that mouth enters the dustbin. The actual vacuum motor is at the back of the dustbin, protected by the dust filter of the dustbin. The XV-15 is a true vacuum and Neato claims that vacuuming power is way stronger than any other robot on the market. Based on the noise, that may be true.

On top of the XV-15 you can find an LCD screen for configuring the robot and the turret housing its special secret weapon: laser sight. This is the cool part.

The robot has no problem detecting stairs. Neato has also provided a roll of magnetic strip that can be used as a boundary marker. The robot will not cross this strip and will clean around it.

However, how smart the XV-15 may be, you need to make your house robot-proof. The first time you start cleaning with the Neato, it is advised to monitor it"s progress and "fix" difficult spots in your house. I have no experience with other robots, but I think that this is true for all of them.

The robot has a clear LCD screen with a very easy menu for setting the clock and entering a schedule. A few simple buttons allows you to enter a schedule, which probably has to be done once. I have it set to clean every other day except for the weekend.

The XV-15 comes with an additional rubber brush and four additional filters. According to Neato, you need to replace the filter every three to six months, depending on the frequency of your cleaning schedule. At 16 euros ($20) for 4 filters, that"s not a big deal I guess.

Please note that Neato does not suply a USB cable so you need to get a mini USB cable when you want to update the software (firmware) of the robot. Bad news for Apple and Linux users: the firmware update software only runs on Windows. You can update the robot from Windows running inside VMware (Workstation or Fusion).

neato xv-12 lcd panel brands

The author agrees this is a good idea but it has to be done by someone with access to other Neato units, pull requests are welcome. This comment was dated four years ago but my experience indicates no pull requests to improve compatibility were ever merged into this code.

But even though modifications were never merged back into this branch, they are still available. I just had to be pointed to know where to look. That comment thread referenced this particular commit which eliminates those problematic fixed arrays of expected response strings. Now it will read a Neato’s responses without trying to match it up against a preset list. Of course, if a specific response is still required (like LeftWheel_PositionInMM and RightWheel_PositionInMM) all it could do is ensure code will not hang, it is not capable of inferring requested data from other robot responses.

That URL implies it was a link to some type of a programmer’s reference manual, but unfortunately that link is now dead. Still, this claim of control-Z termination (if true) gives me ideas on how I would approach talking to a Neato with my own code.

Since I had just examined getMotors(), I looked at its counterpart setMotors() and found nothing remarkable. getAnalogSensors(), getDigitalSensors(), and getCharger() used the exact pattern as getMotors() which meant they share the same fragility against different Neato responses but they’ll work for now. setBacklight() is nearly trivial.

That leaves the two methods for reading Neato’s laser distance scanner. Wait, two? Yes, and that’s where my concern lies. Other data retrieval methods like getMotors() would issue a command and then parse its response before returning to caller. For the laser distance scanner, this is split into a requestScan() which issues a getldsscan command and immediately returns. Reading and parsing laser distance data is done in a separate method getScanRanges() which the caller is expected to call later.

I got the outdated neato_robot ROS package mostly working just by adding a timeout to its serial communications. But this only masked the symptom of an unknown problem with no understanding of why it failed. To understand what happened, I removed the timeout and add the standard Python debugging library to see where it had hung.

I found the hang was getMotors() in neato_driver.py. It is waiting for my Neato to return all the motor parameters specified in the list xv11_motor_info. This list appears to reflect data returned by author’s Neato robot vacuum, but my Neato returns a much shorter list with only a partial overlap. Hence getMotors() waits forever for data that will never come. This is a downside of writing ROS code without full information from hardware maker: We could write code that works on our own Neato, but we would have no idea how responses differ across different robot vacuums, or how to write code to accommodate those variations.

Answer: it doesn’t affect behavior at all. At the end of getMotors()we see that it only really cared about two parameters: LeftWheel_PositionInMM and RightWheel_PositionInMM. Remainder parameters are actually ignored. Happily, the partial overlap between author’s Neato and my Neato does include these two critical parameters, and that’s why I was able to obtain /odom data running on my Neato after adding a timeout. (Side note: I have only looked to see there is data – I have not yet checked to see if /odom data reflects actual robot odometry.)

Next I need to see if there are other similar problems in this code. I changed xv11_motor_info list of parameters to match those returned by my Neato. Now getMotors() will work as originally intended and cycle through all the parameters returned by my Neato (even though it only needs two of them.) If this change to neato_robot package still hangs without a timeout, I know there are similar problems hiding elsewhere in this package. If my modification allow it to run without a timeout, I’ll know there aren’t any others I need to go hunt for.

Such turned out to be the case for the existing neato_robot ROS package, which was created years ago and while the author kept updated it through four ROS releases, that maintenance effort stopped and so this code is now five releases behind latest ROS. That in itself is not necessarily a problem – Open Source Robotics Foundation tries to keep ROS backwards compatible as much as they can – but it does mean potential for hidden gotchas.

Unsurprisingly, there already exists a neato_robot ROS package for Neato. Equally unsurprisingly, it was maintained up to ROS Hydro and since abandoned. ROS releases are named alphabetically, meaning this code is three releases behind my installation of ROS Kinetic and a whopping five releases behind the current state of the art ROS Melodic.

When I found my Neato XV-21 in a thrift store, it wouldn’t power on and it didn’t have its charging dock. I originally thought I would buy it just for parts but it’s been a long and interesting adventure poking at how these robot vacuums worked. I made enough progress to catch [Emily]’s interest, who saw another Neato robot vacuum in a thrift store and bought it. Hers had the advantage of a charging dock so we could open one up to see how it worked.

Armed with that knowledge, I thought I’d try to build my own replacement charging dock for my Neato XV-21. I bought two 24V DC power supplies similar to that inside a Neato charging dock at the W6TRW swap meet. Since I didn’t have a good way to make contact with a Neato’s charging strips, I opened up my robot vacuum and rigged up a test configuration using clip leads on my crowded workbench.

I then did what, in hindsight, I should have done as my first step: tried charging my vacuum with a bench power supply. I set the dials to 24V and 1.67A, like the label on Neato charging dock’s power supply, and hooked up the wires. My bench power supply immediately hit the current limit I had set, and voltage has sagged to a little over 14V. Since that’s within the range of NiMH battery voltage, it appears the Neato had connected its DC input directly into its batteries.

NiMH batteries are fairly durable so this isn’t necessarily a horrible thing to do in and of itself. But it does mean the Neato will happily soak up more than the rated power of its power supply. Which explains the HP power supply behavior: it is an over-current protection mechanism that is great for safety in case of short circuits but inconvenient for trying to charge a Neato.

The answer is yes. Again its open circuit voltage is 24V as advertised, but once wired to a Neato, the voltage collapses to around 12. After collapse, it quickly builds up to about 15, then the voltage collapses again. The Neato is very optimistic, showing itself to be charging, but there is negligible actual progress in charging the battery.

Out of three DC power adapters that should have worked on paper, zero actually worked for charging my Neato vacuum because the Neato drew far more than their rated amperage. So for the immediate future, my Neato charging will be done with my bench power supply. To make this easier, I made an easy (if not particularly pretty) modification to my Neato vacuum. Two holes were drilled on each side of a charging contact. Something I now have the confidence to do, because I’ve taken apart the charging contacts and saw there were no critical parts at risk.

A Neato robot vacuum in their initial XV series product line is powered by a pair of identical 6-cell NiMH battery packs. When I picked up my XV-21 from a local thrift store it did not power up, a fault which I’ve isolated to its failed battery packs which I’ve since replaced to get the whole system back up and running with help of [Emily]’s loan of Neato charging dock. When I evaluated my battery replacement options earlier, one was to buy new cells and rebuild the pair of packs myself. I rejected that option because new cells actually would have cost more than pre-built replacement packs.

But since then Emily found a second thrift store Neato, a XV-12 with its own failing battery pack. This makes a total of four identical 6-cell NiMH battery packs. What are the chances we have sufficient good-enough NiMH cells in this pile for one set of healthy batteries? It costs nothing but a bit of time, well within the spirit of the kind of projects we tackle at SGVHAK meetups, and so it’s worth a shot.

First, the XV-12 battery packs were trickle charged overnight to get a sense of their capabilities, just like I did for XV-21 batteries earlier. Fortunately, the self-discharge profile looked promising.

Our little cell-swapping experiment did not result in a battery pack capable of running a Neato. It might find a future life powering low drain electronics projects, but it wasn’t enough to run a robot vacuum’s high drain motors. Emily ended up buying new battery packs as well to restore her XV-12 back to running condition.

So now that we have the entire Neato robot vacuum system including charging dock, it’s time to see how did they perform at the job they were built to do. Not that their performance was important, as I bought my Neato intending to scavenge it for parts and it was only a happy accident to end up with a fully functioning robot vacuum. But before I start having fun with robot experiments, I should at least see how it works in its original capacity. Mostly just from curiosity, but if I’m going to show up at places with a modified robot vacuum, I also expect to be asked by people if it’s worthwhile to buy one to vacuum their home. Those who paid full price for their robot vacuums will have very different expectations from people like Emily and I who picked up our robot vacuums for cheap at a thrift store.

The common wisdom with Roomba robot vacuums is that they still miss a lot of surface area due to their random walk nature. A Neato, with its laser distance scanner, is supposed to provide full ground coverage. In reality, all open spaces are indeed very efficiently covered. However, the laser scanner meant a Neato is less effective at cleaning edges and corners. Because they’re smart enough to not run into edges and corners, a Neato’s cleaning brush never get close to those areas. We can see this most clearly in this picture of a dusty doorway after a Neato vacuuming pass, showing the smooth path it took swerving around a door frame instead of digging in and cleaning out those corners. (Note: my house is not quite as disgusting as the photo implies: the contrast has been exaggerated via Photoshop.)

And naturally a little robot vacuum would not be able to move furniture out of the way. For example, floor under the dining table is not vacuumed, because the dining chairs legs all around the table blocked access. But it turned out the dining table itself was an obstacle. Just as my earlier experiment with Neato scanner had problem seeing certain furniture features, an actual Neato was unable to see the ramp-like shape of my dining table legs and managed to launch itself into an awkward angle and got stuck.

As a home of a tinkerer, my house had many other features unfriendly to robot vacuums. My Neato kept getting itself tangled up in power cords for various AC-powered electronics gadgets, and of course there are piles of stuff all around the house in odd shapes, some of which share the “important features are out of sight of laser scanner” problem with office chair and dining table. There may be homes where a Neato would be a productive little housekeeping worker, but I’m afraid my home is just too much of a hazardous environment for this little Neato to be effective.

Which is great! I now feel less guilty about relieving it of vacuum duty and put it back to work for the reason I bought it: as a chassis for robotics projects. But it was fun to see a Neato in action doing its job. It was enlightening to see its own mapping and routing software at work, a benchmark to compare against for my own code driving this chassis. It is a really endearing little robot, with friendly messages on its LCD screen and my favorite part: the way it cuddles its charging dock. And now that one Neato is back up to full running condition, [Emily] and I will team up and try to get them both running.

When [Emily] found her Neato vacuum in a thrift store, it had an advantage over mine in that hers still have the company of its charging dock. This is our first look at a Neato robot vacuum charging dock and a chance to determine how one worked. We wanted to have some idea of what to expect when we put it to work charging newly installed replacement batteries.

The charging dock is designed to sit against a wall. The two metal strips are obviously for supplying power, as they line up with the two metal wires at the back of a Neato vacuum. When the dock is plugged in, a volt meter reports 24V DC between those two plates, top plate positive and bottom plate ground. Each of the plate is mounted on a piece of spring-loaded plastic that allows approximately 3-5mm of horizontal movement. A Neato vacuum can press its wires against these plates to draw power.

Above the plates is a black plastic window, we expect something behind that window to communicate with the Neato so a hungry robot vacuum knows where to go to feed itself. How does it work? We hypothesized there are infrared emitters and receivers behind that panel, functioning like a consumer electronics remote control, to talk to a Neato vacuum.

We see a pattern laid out with two types of surfaces. The white segments are highly reflective much like the stripes on high visibility orange safety vests. The black segments are presumed to provide a contrast against the white parts. We found out earlier that a Neato lidar data stream returns both distance and intensity of reflections it saw. The distance is useful for navigation, but using just distance information the charger would be an unremarkable flat surface. This is where intensity comes into the picture: these surfaces behind the black plastic window will create a distinct pattern in reflection intensity, something a Neato robot vacuum can seek to find its charging dock.

The Neato XV-21 I found at a thrift store has bee joined by a XV-12 found by [Emily]. Both Neato robot vacuums found at thrift stores have degraded batteries. This was not a surprise as robot vacuums work their battery packs hard. Not just frequent charge and discharge cycles, but with a heavy power draw under use to run vacuum motors. This means both of these vacuums were retired by their previous owners when the battery no longer hold enough charge to perform its duties.

With previous experiments, I have gained confidence I can verify functionality of individual components using test mode accessible via USB port. And since this XV-12 was found with an official Neato charging dock, it’s time to install replacement batteries and test the full system.

The replacement batteries claim a capacity of 4000mAh which, on paper, is an increase from the original battery’s label capacity of 3800mAh. However, battery manufacturers play pretty loosely with these ratings so I expect the difference of 200mAh to be fairly insignificant in practice. When I took apart the original pack, I saw a thermister for monitoring temperature, an overcurrent protection fuse, and an overheat fuse. I assume the replacement pack has a thermister because the Neato computer can read it, but there’s no immediate way to tell if the overcurrent or overheat protection also exists on the new pack.

Thanks to a second Neato found in a thrift shop, this time a XV-12, we now know #3 is false. This one is well used, and very much looked it! The previous owner didn’t bother cleaning the vacuum before dropping it off at the thrift store. I have several loops of hair tangled up in the roller brush. The largest loop has even snagged what looked like furniture padding foam.

And fortunately, with the arrival of replacement battery packs, we don’t need to drill holes and hack external battery packs for a full system test. We can install the new batteries into this XV-12.

I thought I was pretty lucky to find a Neato robot vacuum in a thrift store for $8. It didn’t work in the store and that’s why it was cheap, but I have since determined it was fully functional except for its battery pack. While waiting for its replacement battery pack to arrive, Player 2 has entered the game! [Emily] managed to find another Neato robot vacuum in a different thrift store. The new find is a model XV-12 and it included the charging dock for $11.

A little web research indicated that these two robot vacuums are contemporaries, both followed up Neato’s XV-11. The XV-12 is the direct successor that replaced the XV-11, and the XV-21 is a premium offering sold simultaneously with the XV-11. Aside from the cosmetic difference of purple plastic top on the XV-12, there are a few functional differences.

The cleaning brush roller is different. The XV-12 uses a bidirectional design with flat flexible plastic blades. The XV-21 uses a unidirectional design with a combination of flexible plastic blades and bristles. The XV-12 brush can be mounted in either direction – note that geared teeth to engage the toothed belt on both sides of the roller. The XV-21 is designed to spin a specific direction – brushing debris towards the center of the vacuum – and only has geared teeth on one end of the roller because it won’t work properly if mounted the other way.

The dust bin filters are also different between these two models. While the XV-12 uses a flat sheet, the XV-21 uses a pleated design for greater surface area. This partially compensates for the more restrictive filter used in a XV-21 that captures more particles from the vacuum air stream.

In addition to the design differences between the XV-12 and the XV-21, there are additional differences between these two specific thrift store finds. The XV-21 was surprisingly clean hinting at a very low usage in its previous life, but the XV-12 shows signs of a well-used robot vacuum.

With a successful all-up system test of Neato XV-21, running on hacked-up battery packs through a full vacuum cycle, we have confidence everything works on this thrift store bargain except for the battery pack. So focus returns to these NiMH battery packs.

The default option is to buy some battery packs specifically built and sold as replacement batteries for a Neato robot vacuum. A straightforward Amazon search for “Neato battery pack” will return this “Amazon’s Choice” item (*) at $30 for 4000mAh NiMH packs.

A tempting choice is to purchase some lithium-ion batteries that would also fit in the Neato battery bay. However, battery packs sold on Amazon are typically designed for very high draw applications like multi rotor aircraft. Batteries designed to survive such use tend to have lower energy density. Thus lithium packs that fit within the bay’s dimensions actually don’t have much significantly higher capacity than 4000mAh.

Another concern with installing lithium batteries is the fact the Neato’s on board charging circuits are designed for NiMH battery cells, which has a different charging profile. Charging lithium cells as if they were NiMH cells risks damaging the lithium cells and possibly lighting them on fire.

There is, however, this item (*) which are lithium replacement packs intended and designed as an upgrade option for Neato vacuums. Not only are they sized appropriately to fit, they also have an integrated battery management system. Presumably, the circuit will make the Neato brain think there’s a NiMH battery pack installed but treat the lithium cells properly. At 4400mAh it offers 10% higher claimed capacity relative to default option, but at over double the cost, the cost/performance ratio is poor.

There is also the option to purchase new NiMH battery cells and rebuild the battery pack myself, reusing all the associated parts from the existing pack. I had expected this to be the lowest-cost option by supplying my own labor, but when I searched for NiMH battery cells in 4/3A form factor with 4000mAh capacity, I was surprised to find that they were selling for more than $3 per cell. There are 6 cells per pack and a Neato requires two packs, for 12 total cells. This means buying raw cells and rebuilding them myself would cost over $36, more than just buying a prebuilt pack from Amazon!

With this little bit of research into lithium upgrade option and rebuild option, it looks like the default $30 option is the best way to go. But before that replacement battery pack arrived, my Neato got a friend!

Using small batteries I hacked into existing battery bays, I was able to query sensor status and command individual motors. However, those small batteries were not powerful enough to run multiple motors simultaneously, which meant a full system test would not be possible until larger batteries are installed. At this point I could order some Neato-specific replacement batteries and have decent confidence it will work, but I would like additional confirmation before I spend money.

But I didn’t have any batteries that were more powerful and still small enough to fit within Neato vacuum’s existing battery bays. This meant batteries had to be installed externally. And if they’re going to be external, I might as well go with the biggest batteries I have on hand: those I purchased for Sawppy the rover.

The most obvious place: is to put them on top of the dust collection bin. This is a popular location for Roomba battery retrofits, because it preserves weight balance and does not hinder Roomba operations. However, it won’t work for a Neato: this position blocks the line of sight for the laser distance scanner.

With this hack, the robot vacuum can run on my pair of Sawppy rover batteries, which are plenty powerful enough to run all vacuum systems simultaneously. Now this little Neato is alive and can run through a full vacuum cycle, verifying that all systems worked.

Obviously, this won’t be the final long term solution. For one thing, Sawppy wants its batteries back. For another, the additional height on top of the robot hampers its ability to get under furniture for vacuuming, and the exposed wires are vulnerable to tangling on protrusions. What we need next are batteries powerful enough to run a Neato and fit within existing battery bays.

But those little batteries weren"t powerful enough to run the vacuum so I mounted big #sawppy batteries up top. Like @TooManyScooters does for Roomba, but above Neato lidar line of sight. It all works! And now that I know it works, I will buy proper Neato replacement batteries. pic.twitter.com/MAucz9OPvG

I’ve managed to establish a serial connection to my Neato XV-21 robot vacuum’s USB port, putting it into test mode and querying sensor status. The next step is to start issuing commands to see if individual components respond. We left off on querying control panel user interface buttons, so the next test is to see if I can draw my own user interface on that control panel screen. Typing in help setlcd retrieved the following information:

With the experimental batteries in place, the computer boots up and stays up for longer than three seconds. I tried to run a vacuum cycle but that was too much for these batteries to handle, so for now I’ll stick with digital exploration starting with the standard UI to dump revision information on components inside this particular Neato XV-21 robot vacuum.

If I were to create my own control logic for driving my Neato around, the most important parameter here is FuelPercent. I’ll have to be responsible about not draining the battery too far, beyond that I can leave the rest in the capable hands of Neato’s existing battery management system. Speaking of power consumption, the biggest drains are the motors, and I can monitor them all with getmotors.

But if I want to actually have my own user interface using those buttons, I would need to also display my own information on the LCD. Which brings us to phase 2 of playing over USB: start sending commands to see if components follow orders.

My Neato XV-21 robot vacuum now boots up and stays running on a pair of old remote control helicopter batteries. This is a vast improvement over its comatose state when I found it in a thrift store. I pressed the start button to see if it’ll actually vacuum, but spinning up the motors drew too much current and aborted. Looks like these batteries are only good for probing electronics, which is still more than what I had before. And a good incremental step forward.

A few web searches on Neato technical details all pointed to posts on “Neato Robotics” forum on robotreviews.com. I guess this is where all the Neato robot tinkerers hang out. From this forum I learned of a tool for Neato maintenance that can help communicate with the vacuum as well as uploading firmware updates. Unfortunately, this forum also shared an update that Neato has taken these tools off their website. Without them, plugging the vacuum into my laptop running Windows would only result in a device without a driver.

On a lark, I rebooted my laptop into Ubuntu Linux and plugged in the vacuum. There were never any Neato drivers for this operating system, and I was curious what I could see via Linux tool

Well, that was more straightforward than I had expected. The ACM in ttyACM1 here stands for abstract control model. The operating system sees a communication device where all control is handled by the device, and all I had to do is treat it like a serial port. It’s not a true serial port, but close enough the technical differences aren’t important right now. What matters is the fact that I can run minicom --device /dev/ttyACM1 and issue a simple call for help. We are in business! The channel has been opened to talk to a Neato vacuum brain and see what it says in return.

My Neato XV-21 vacuum couldn’t power on when I found it in a thrift store, and the problem (or at least, the first problem) was its battery pack: it could only deliver enough power to boot up the onboard computer and run it for about three seconds before its voltage dropped and the computer shut down again.

In order to assess the rest of the vacuum, I need to find a replacement power source. Since the actual condition of vacuum components are still unknown, I’m not inclined to spend money buying batteries specific to a Neato robot vacuum. The next experiment, then, is to wire up something out of batteries already on hand. I looked through my pile of batteries to see which would satisfy the following criteria:

The winner was a pair of batteries I had for my E-Flite remote control helicopter. The aircraft itself had long since been crashed and trashed, but I kept its batteries. Two cell lithium polymer batteries have nominal voltage of 7.4 volts, within operational range of 6-cell NiMH batteries. Physically they were small enough to fit within the battery compartment, but at 800 mAh their power capacity is too low for full vacuum operation. They were designed to deliver high power to fly a small helicopter toy though only for a few minutes. Ideally they can run the vacuum motors briefly to verify their operation, but mostly I just need them to run the Neato computer for more than three seconds.

The batteries from a Neato XV-21 were found to be flat and possibly damaged. This would certainly explain why the little robot vacuum failed to power on in the thrift store where I found it. Since the thrift store didn’t have its associated charging base, my fallback was to leave its batteries to trickle charge (at 100 milliamps) overnight on a bench power supply.

Overnight charging gave me a runtime of three seconds. Good news: thrift store Neato boots up, woohoo! Bad news: this pair of battery packs are unusable. pic.twitter.com/p37PTg0v68

We’ve pulled the battery packs out of a Neato XV-21 found in a thrift shop. We’re pretty sure the red and black wires are battery positive and ground, but if so we expect to see a few volts across those wires. The fact we measured less than a volt indicates this battery is flat and may even be damaged. Well, at least this would be consistent with the fact it wouldn’t power on in the thrift shop.

The thrift store didn"t have corresponding charger for this Neato botvac, so batteries (12 NiMH cells in series) were charged overnight with bench power supply set to 14.4V and 100 mA. pic.twitter.com/DCac1CKEIk