Since I put the 18650 battery in the reverse side of the charger unit twice, I started thinking about how to prevent this. I found a tutorial on the web, where a development is presented, with step by step improvements. The address is:
From this I have only picked out the last protection circuit:
I made myself an isometric picture of this, because I have no idea about the placement of the MOSFET transistor pins.
Here is a photo of the circuit, you can see what kind of leads I have used and how I have soldered the components to the board.
Another photo of the same circuit. I did indeed connect the 18650 correctly first. No fume rose from that. I was quite relieved. I had to gather all my courage before I put the 18650 battery in the wrong way round. Now I have a new multimeter, which also has a current measurement feature. The right way up the charging current was about 14.3 mA, the wrong way up there was no current at all. So it works now. I soldered another copy of this wiring tonight, so if I have two compass belts, I could protect both from inserting the battery the wrong way into the case!
I've heard that smart clothing is being developed nowadays. There's a website http://www.plusea.at/ which has surreal suggestions for smart clothing. In real life, for example, there is a smart shirt that detects if a person's back is not straight and then vibrates to remind them to straighten their back. Then there are smart socks that measure the temperature of a diabetic's feet and vibrate to warn if there is risk of infection. So this compass belt is a smart garment that tells me with a vibration which way is the north pole. It also works at night or if I'm totally blind. Through this electronics design, I got my first contact with the so-called I2C bus. To understand it better I put two Arduinos together, for example, so that one Arduino sends a text via I2C bus to the other and the other Arduino acknowledges the text as received. I also tried putting two separate sensors (MPU6050 and QC5883L) on the same I2C bus to the Arduino, and got it to work. In previous Arduino builds, I always put 9V batteries to power the Arduino, but for this project I found that the marketplace has a much better power supply unit with 2 Lithium - 18650 cells as power supply.
I have followed an instruction by Kyle Corry. That seems to be good for me, as I am going to orienteering competionions, even by night. Instructables, Kyle Corry
I would not have been able to write such a program, thumbs up to Kyle Corry! Github, Kyle Corry
My adaption here is still unfinished. Because MPU9250 seems to be not anymore produced, I use BNO055 (after going through QM5883L and MAG3110 and, because they were bad quality sensors, I shift to the better model). I also use logic level shifter, although most tutorials for BNO055 don't use them. I think, even though I connect only GND and 3.3V from Arduino, there still might get 5V from the Arduino through the A4 (SDA) and A5 (SCL) pin. There is a tilt compensation algorithm in compass.cpp with Xm=mag_xcos(thetaRad)-mag_ysin(phiRad)sin(thetaRad)+mag_zcos(phiRad)sin(thetaRad); and Ym=mag_ycos(phiRad)+mag_z*sin(phiRad); following the tutorial by Paul McWortherPaul Mc Worther
In my program the tilt compensation doesn't seem to work. For my own visualization and while testing I add the python program cuboid_draw_ursina_B.py, which reads out the COM6 port and draws a 3D cube like a symbolized arduino on the screen and writes the present orientation of the sensor on the same screen. "N", "NE", "E", "SE", "S", "SW", "W", "NW" So I checked with a compass at the same time, and it seems to work fine. I delete code rows from Kyle's program, which are related to calibration, because the BNO055 (Adafruit) has an own calibration routine.
Arduino Nano Uno (Sertronics Berrybase)
BNO055 (magnetometer) Sertronics Berrybase
coin vibration motors (Aliexpress)
Button switch
10K resistor
USB cable Belt Battery pack
Breadboard
Logic level converter
glue
Soldering kit
Adafruit_BNO055
utility/imumaths.h
Adafruit_Sensor
Kalman Filter
Instructions: While wearing the belt, make a mark on it every 45 degrees starting with directly in front of you. This is where the motors will be placed. The motor directly behind you is indicating south and the one to the right or left of it are southeast and Southwest. I will refer to all motors by their cardinal direction, assuming the North is the front of the belt. Secure the vibration motors onto the belt where marked. The vibration motors I used had sticky backings which made this easy. Assemble the circuit shown in the following schematic. Put the connected circuit consisting of Arduino Nano, magnetometer, button switch, logic level converter, and Power supply based on rechargable 18650 cells inside a suitable box, and secure the box onto the belt. Note: The schematic shows the vibration motors sharing a common ground wire - this makes attaching to the Arduino easier but is not required. In the photo, the power supply is not there, because at the time when I made this instruction, it was broke, because I inadvertently put the 18650 with wrong polarisation into the box. Some smoke rose and it smelled.
Fix the cables with electric tape. For the best results, get electrical shrink tube with equal width as the belt and wrap the whole belt, leaving just a USB cable exposed for the Arduino. Upload the sketch to the Arduino after installing the required libraries. Press the button to toggle between discrete mode (small pulse toward North only when direction changes) or always on mode (always vibrate toward North).
The vibration motors are very fragile, and the cables are hair-thin and the smallest pull destroys the connection. It is therefore necessary to protect the vibration motors against mechanical damage. For this, I glue vibration motor to a plastic base, which protects the vibration motor connectors. The plastic base is U-shaped. I use a soldering iron to make little holes in the side of the U-profiles, through which I braid the wires. I tie a knot in the ends of the wires so that the tension is not transferred to the soldering points. Then I solder the vibration motor to the supply cable and the ground cable.
I cut off the tips of an old glove and sewed these tips at regular intervals onto the rubber band, creating "nests" for the vibration motors. Then I first use Teflon tape to tape the motors inside the protection and cables firmly to the plastic base. The Teflon tape allows me to dismantle one of the motors later in case of a failure. (A normal scotch tape is very sticky and when unraveling scotch tape, one has to use scissors, and then it's easy to unintentionally cut the cables) I put a few more turns of surgical tape on top of the Teflon. Surgical tape is not so sticky, but yet strong.
This is what the test board looks like with the MLX90393 sensor, Arduino Uno and a voltage level shifter. This also shows the start end of the rubber band belt, where I sewed the buckle, and the "nest" of the first vibration motor. You can also see that I protected the belt with a bicycle inner tube. The black cable is the grounding cable that runs to each vibration motor. Powering the unit are two rechargeable 18650 cells. I have a lot of these 18650 cells because the night vision headlamps work with them, I also have a decent charger for them because of that. The power supply unit has one toggle switch "Normal" - "Hold" and its position must be "hold". On the other side is a white push button, and when you press it, the LED lights on the power supply unit turn on. Most of the time the LED lights don't switch on anyway, then I briefly plug in the USB cable, then it should turn on. The edge of the power supply unit has 3V pins on one side, and 5V pins on the other. In this setup, I attach the 5V pins to the 5V side of the arduino. Basically, this power supply unit also works as a charger, you just have to plug in the USB cable. Note that the cells must be inserted in the right way, otherwise the device will break with a bang and smoke will rise. That's why I taped the 18650 cells with white tape on the plus side, and the same for the unit with white tape. I destroyed two such units already. I think it's better to use a voltage level shifter, because the internal voltage level of most sensors is 3.3V rather than 5V, and 5V can break the sensors.
breadboard with the basic components: BNO055, logic level convertor, switch between continuous-intermittent and Arduion Nano. Clearly arranged so that it is easier to reproduce the electronic circuit.
The electronics box opened in a horizontal position, with the Arduino nano, logic level converter, power supply and IMU sensor, which is now horizontally. I don't think, it is possible to change the code so that the BNO055 can be in a vertical position, it is not meant to be like this, internal calibration of BNO055 will not work.
The vibration motor fixed to a leather belt in a simple fashion. To make the vibration more noticable, I put wadding under the vibration motor. If the vibration motors would be glued directly to the leather belt, the vibration doesn't feel so well.
Whole configuration of a haptic compass belt based on a leather belt, and the electronics box directly fixed in vertical position to the leather belt. In the vertical position, the box will swing very much, and it causes much distortion, but it is easier to put on, because everything is in one piece. Simple, but in practice this version is not that good.
The haptic compass belt with textile rubber band on the hips, and opened. I cut the breadboard, so that the BNO055 can be in the horizontal position. the vibration of the motors can be clearly felt on the skin because the textile elastic band holds the vibration motors gently on the skin. The fact that the box with the electronics is horizontal means that the electronics are less likely to be shaken when running quickly through the bushes and there are fewer signal errors. This means that there are fewer sudden tilting movements of the sensor, for example when you jump off a rock or stumble and fall. it is also better that all the electronics are separate from the actual haptic compass belt.
Elastic textile band variant, with bicycle inner tube as protection and a plastic quick-release buckle. The electronics are in the electronics box within a hip pocket. The conductors go from the belt to the hip pocket. To protect this section with small electrical conductors, a silicone tube is cut into a spiral with a knife and then wrapped it around the electrical conductors so that they cannot get tangled up in the bushes and on the branches of shrubs. I still want to leave the electronics on the breadboard, because I'm still not quite sure whether I want to stick with the BNO055 sensor, or whether it might be possible to switch to a circuit with a simpler and cheaper magnetometer without an acceleration sensor. (i.e. a full scale IMU sensor)
I am not happy with single wires from the arduino to each vibration motor. It creates a mess. Flat cable solution seems to be the cleaner solution. The distance from the bucke should reflect more the true directions, but as the waist of the human is not true round, but more like an ellipse, adjust the distances between the motor points. In case, other people with bigger waist want to use the compass belt, I use a waist circumference of 110cm. The point is, I want to make 2 vibration belts, so I do everything so , that I get 2 identically cutted flat cables. Everything is symmetrical around the center mark. All the cable ends I furbish with dupont connectors, and - very important - I test all cables, to be able to know, that there are no faults, and each and every wire is conducting from connector to connector.
The flexible textile band with sewed on buckle, a tape measure and the flat cable laid on the ground. I mark the middle point. On the flexible textile band, there are trial "nests" for the vibration motors, laid down in the distance.
The end of the female part of the buckle. In fact, the buckle is wider then the normal distance between two vibration motors, so there will be some mistake.
The ends of the flat cables are taped to the floor, so the flat cable is stretched straight. The number of wires on the flat cable is 26, so I leave the outer 3 wires without a cut. The cut point is marked first with felt-tip pen according to the table with cut length. Then, after all marks are done and also checked (from both sides, it should be symmetrical)
After all single wires are marked, I use a knife to slit the flat cable around the marked spot. I go through all the marked points.
This is the last stage. When the slittling has been done, continue the slitting so that finally the both symmetrical cutted flat cables come apart. Finally make the cuts with cutting pliers.
The vibration motors come with JST-SH male connectors. I therefore purchase the appropriate female connectors. These need to be soldered. The connector pins are very small.
It is better to use only a little tin to keep the wire strands as flexible as possible. The soldering point is more brittle and does not take as much bending.
I scraped open the earthing cable with a hot soldering iron under a magnifying glass. I firmly clamped the flat cable with the stand and the clamps. I pushed a piece of sheet metal into the gap between the earthing cable and the other cable as a base. Then carefully scrape away the cable sheathing with a hot soldering iron, taking care not to break off the strands. Also run the soldering iron under the strands. I stripped the connecting cables all together beforehand. When soldering, clamp the wires firmly and solder under a magnifying glass. Once you have managed to get the first solder joint right, the next solder joints are much easier because you only ever have to move the cable.
It is clear that soldered joints break off easily if a cable is constantly exposed to slight bending back and forth, as will certainly be the case with a compass belt. That's why I glued all the soldered joints firmly with epoxy glue (2-component adhesive). So first I wrapped a scotch tape around the plug to form a kind of “trough”. And then all the cable ends with the plugs are firmly glued to the table with Scotch tape so that nothing can move. Then I mix the epoxy glue and fill all the solder joints as well as I can with epoxy glue.And then I wait a day for everything to set. The next day I remove the Scotch tape and wrap insulating tape around the two conductors.
a diagram of the circuit. The picture shows an Adafruit BNO08x, but I actually have a BNO085 slimeVR. The interfaces are the same. The protection diodes are used to eliminate the sudden voltage spike in the inductive load when the supply current is interrupted. Indeed here the current spike is apparently small enough, the Arduino has not yet broken.
the picture shows how the flatcable is attached with two clamps. Below, a wire brush, which I used to remove the melted plastic from the soldering iron. Supporting the stable soldering iron with another bendable goose neck. I first look past the magnifying glass to make sure the soldering iron is roughly on target, then look through the magnifying glass.
the yellow wire is attached to the second goose neck clamp from below. The soldering iron rests on the second goose neck. Be sure to smear the soldering point with soldering fluid. I try to be sparing with the tin, as tinned wire is fragile, so it's best to have as short a length as possible tinned. Soldering with magnetic flexible goose collar clips speeds up the job, as you will be needing more than two hands.
The picture shows how I wrapped electrical tape around the outlet wires to the vibration motors to keep them neatly together. There may also be a shrink tube at this point.
The picture shows the entire flatcable. At this stage, it is important to test everything to make sure that all solder points are conducting electricity. I think this is a much neater solution than the previous one with separate wires, resembling spaghetti.
In connection with the flower watering arduino experiments, I wanted the same amount of water to always go to the four flower pots. I imagined it would be easy to do, but it's not. For some reason, the water always goes to one flower pot too much, and the other flower pot has nothing. I imagined that if I made holes of the same size, it would work. First, I made a trial version out of plastic blocks by gluing, and by poking with a needle I made holes of the same size as possible, a bit similar idea to hospital infusion drip devices. It didn't work, always a hole was a little bigger and then the water only went to one pot. That's why I decided that if I tried 3D printing, the holes should be precise. It still didn't work. What it looked like on the inside looked like half.
That's what the stl model looked like from the outside. I saved the "stl" file of that 3d model to the Cloud server, because the file was too big, I could not sent it as an email attachment. When I drew the model with the Unigraphics program, nowadays the name of the program is "Siemens NX", it was also a nice exercise in 3d modeling for me. For example, I had to remember that a 3d printer cannot have arbitrary protrusions, because it always prints a layer of plastic on top of another layer, and when that plastic is a bit hot, it might clump up a bit and lose its shape. Siemens NX is very suitable for modeling special wavy and curved surfaces.
I found the printing service on the www.tori.fi website. www.tori.fi is mainly an online sale of used goods, similar to what the yellow pages used to be. The 3-d model cost me about 15 Euro, and it came by mail quite quickly. Anyway, that 3d printing experiment wasn't worth the effort because my principle doesn't really work. The water dispenser must have a different shape. A functioning shape is on the website:
As an impulse buy, I bought a very cheap LIDAR. Partly also becuase I already saw from a youtube blogger that it is possible connect some lidars to the arduino. And even though the construction of the robot still seems like a too large project for me, well, I can still have dreams. ... to use servo motors, an arduino and other sensors to make such a nimble looking toy that can drive around my flat, and of course the Lidar would be the eye of the robot, so that it would not crash into doors and hurt himself, but my robot would always stop safely before any obstacle. This is still a complete dream. The hindrance is a lack of time and maybe also patience. I would probably need quite many weeks in a row to focus only on this, but I can't spend all weekends on this, after all, I have many other hobbies and other mandatory household chores. Anyway, this little project could be one little step forward on the long road to making my own robot. This is the link to where I bought this wonder device.
When I bought this LIDAR, I still imagined that I would connect it directly to an Arduino, at least that's what the Swiss blogger did, where he had a completely different converter, which I also bought, but which is now still awaiting its destiny while lying around among in the heap of my other electronic stuff. But actually this connection directly to the USB port of the computer is at least for me already easy, because the programming tool Visual Studio Code, and python is pre-installed and reasonably familiar to me. The required plug-in module for the computer's USB port can be found at the following link. According to wikipedia TTL stands for Transistor-Transistor Logic, the name means that transistors, bascially 2 circuits in series both amplifiy and performs logical functions. I don't think it means anything, but it's a converter between the USB port and the RS232 serial signal. I still remember that the abbreviation RS232 appeared with the C64 computer. Link:
There is also a reference on Lidar's sales site to find the right program snippets for decoding the signal. This Discord discussion group came into the public eye because an American posted secret photos and other information about the war in Ukraine, apparently just bragging how much he knew. On that specific channel named mb_1e2tydlidar-s4b there is a man called VIDICON who has been investigating this lidar deeply. Apparently the seller has not provided any documentation about this device. Not to say that it is not untypical of Chinese vendors. VIDICON apparently has the appropriate signal analysers to gradually work out what all the its and bytes of data packet means that the device is putting out. Wow, I have great respect that such gurus like VIDICON are around in this world. By the way, even though the code comes from github, that for me it was not exactly a one-to-one, but I had to experiment a bit, what kind of baud-rate it works with, turned out to be 153600. Fortunately my computer already had python installed with VS Code, but I had to add the additional modules pygame, serial, math and enum. I can't remember, something similar like sudo apt-get install -y enum was necessary or maybe the equivalent on a windows machine.
The program as listed here is not exactly the same as the github program, but in addition to baudrate, I changed the pygame command set_at, which produces only a very faint dot on the screen, and replaced it with a rectangle pygame.draw.rect, which is much better visible. I also tried pygame.draw.circle, but it's just too slow, makes a lot of horizontal lines on the screen. I also changed the magnification factor, distancef = distance / 40 then when I want more details to be highlighted, my own face profile as an example, then I set this factor to 3. However, I am quite unfamiliar with pygame and the whole program is like Hebrew to me, especially this class State(Enum). I'll still have to get familiar with it.
LIDAR connection scheme to computers USB port
Testing the LIDAR by walking around in my flat
This seems to be a pretty common type of Arduino project. I’m terribly lazy to water my flowers, often forgot for weeks, and I want the flower to be watered automatically with a pump whenever the water runs out. The setup includes an Arduino Uno, water pump, water hose, water level sensor and Arduino adapter card, and a blue relay.
Arduino program code