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).
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