For my Interactive Devices project, I set out to make a little buddy that faces people when they come into proximity.
Initially the idea was a fibre optics tree so that the visuals would be interesting when it spins around.
But I realized that I was kind of making a turret, and looked into the various forms that I could make for it’s turret form.
Form aside, I also contemplated between IR sensors and Ultrasonic sensors, of which I settled for ultrasonic sensors because I found a (much) cheaper deal on them.
This project was an immense learning experience with my two main electronic components, the ultrasonic sensors and servos.
As stated at the end of the sem presentations, and as I and the rest of the class probably learnt along this project, is that nothing is ever clean, digitally speaking.
Bulk of my problems were trying to get “proper” readings from my ultrasonic sensors.
I started with using the NewPing library for ultrasonic sensors in Arduino, along with using their base code in their examples for multiple ultrasonic sensors in an array.
The above gif is my first success of having the ultrasonic sensors running and the servo running my “noBody();” function. The function which runs when the sensors don’t detect anyone. But this incident were two separate events running, where the sensors were not affecting the servo.
An issue that popped up at this stage that I didn’t figure out for a while, was that the servo turning blocked my ultrasonic sensors from taking a reading.
And with the readings not being clean, there odd numbers were especially prevalent at this stage. Very VERY often, the sensors would read at very odd and erratic numbers, sometimes reading 0 (depending on the code). I borrowed everything from an iCubeX to an arduino mega to try my device on but to no avail.
This was really a big problem I had with the interaction as these odd reading would trigger things that I didn’t need being triggered.
Eventually I whittled down the problems to the delay. Delay was the thing that stopped my device from moving along smoothly AND was making my reading odd for some reason I still don’t fully understand. I came to this conclusion by first reducing the delay down from 500 to 33, and this was a big breakthrough because the reading were suddenly much smoother, at which point I took it out completely and it was like magic with how smooth the reading were at first.
At this stage it was working decently, but this was not to last, subsequent addition to the code seemed to have broke it once again.
Servos were also another big problem, with my bigger (INSERT MODEL NUMBER) servo, it wasn’t working very well, and I was very afraid that I had a power issue on hand; or that I had a faulty servo.
Fortunately, I bought two! Neither of which worked. This was also another big issue and learning point for me in the project. I scoured the web and eventually found a way to test these servos.
I discovered that both the servos could spin continuously, not something that I had expected, but the problem with these servos was that they would go off centre very easily and then not be able to spin again. Causing me to be unable to control them in a precise manner that I needed.
Fortunately, (a constant word with these projects) I was able to borrow servos from a fellow classmate.
But the issues of reading were now getting very tricky, with most of the hardware settled, the code was still somehow not working.
I scrapped my initial base code and rewrote it without using the array, that way I could more easily call to the individual sensors in a way that I understood easier than with them in an array.
My next fix that came about was using DC to power the Arduino, that actually made quite a big difference in my ultrasonic sensor readings and seemed to have made it run smoothly again.
The next step was putting it together, and once again, something wasn’t quite right, and still this portion is a bit of a mystery, but it sorted itself out.
While my final form was quite janky, I was pleasantly surprised with how well it worked.
The project brought with it quite a number of learning points.
Helping me fine tune my troubleshooting abilities, working within the limitations of the “dirty” nature of electronics and it’s sensitivity to interference (and power supply).
And with that, draws the end of DM3005. Thank you very much~
(I’m quite pleased with the video, especially with that prime moment at 0:38)