Prototype Bicycle Navigation
by eigenaarkoelkast in Outside > Bikes
88 Views, 1 Favorites, 0 Comments
Prototype Bicycle Navigation
Project Statement
Every cyclist knows the struggles of navigation: the sun glaring on your screen, the ambient noise, or a momentary distraction can easily cause you to miss your directions, leading to inconvenient stops in the middle of your ride to find your way again.
Another problem with navigation is distraction by the screen or the noise [1]. In traffic, it is crucial to pay attention to the environment. If a cyclist is distracted by noise or by looking at a navigation screen, it can lead to an accident. Everyone understands how quickly an accident can occur if you don't stay focused on the road. To avoid distraction from the environment but still receive the directions for navigation, our solution is a haptic interface in the bicycle's handlebar.
Imagine if haptic technology were implemented in the bicycle's handlebars. This innovative approach would allow you to feel the instruction from your GPS by tactile feedback, providing a solid and intuitive means of communication. However, it's essential to consider that interacting with technology, even by haptic feedback, could distract you from focusing on the road ahead and potentially lead to accidents. Despite this concern, haptic navigation could still enhance the overall cycling experience by providing safer and more effective guidance, particularly in busy environments where visual or auditory cues may be obscured.
The aim of our project is to improve the overall cycling experience by providing a safer, more effective, and less distracting means of navigation, particularly in busy or challenging environments where traditional visual or auditory cues may fall short. The potential impact of our system is a more suitable solution for a lot of bicycle users for navigation. Implementation of the technology can be designed in such a way that only the rubber part of the handlebar needs to be replaced.
State of Art
At this moment, there are three primary types of communication used for navigation while cycling. The most commonly used method is visualization, where a small screen is mounted on the bicycle's handlebar. This screen displays information about upcoming turns—such as distance and direction—and offers additional details like speed and ride duration. The advantage of this visual approach is its ability to convey a significant amount of information quickly and conveniently. The biggest problem with this type of communication is that it needs the rider's full attention. They are distracted from the road because they can't look in front of them and at the screen simultaneously. Also, battery consumption on long rides can be problematic. After a while, the battery can become low.
The second communication method is audio-based. Cyclists use earplugs or headphones to receive directions audibly. This method minimizes distraction from the road, as there's no need to look down at a screen while riding.
The third and final method combines elements of both visual and audio communication [5]. In this approach, a small GPS unit is attached to the handlebars. As a turn approaches, the GPS emits a sound alert, prompting the cyclist to glance at the screen for specific directions. This hybrid approach addresses a key issue with the visual method—potential distraction and missed turns if not paying close attention.
Each of these navigation methods has its advantages and drawbacks, offering cyclists various options to choose from based on their preferences and safety considerations.
Haptic interfaces are already used for navigation in cars. Some experiments have focused on integrating haptic feedback into the steering wheel. This choice is logical because the hands occupy a large area in the somatosensory cortex, making them highly sensitive. However, the feedback from vibrating steering wheels often became irritating to drivers over time. In these tests, various types of vibrations were used to signal turns and communicate distances to the driver.
Another method of haptic communication that has been explored is the use of wristbands [7]. The concept is similar, but the haptic input is applied to the wrist. However, this method also faced issues, as users reported the wristbands to be slightly uncomfortable. Still, overall, people mentioned that navigation with a haptic interface makes it easier to stay aware of the environment.
Navigation can enhance the experience of exploring new environments during vacations. However, using a standard navigation system can quickly lead to a sense of disorientation or feeling lost. A study has shown that providing fewer navigation guidelines can help maintain a person's sense of direction. This approach makes the bike ride much more enjoyable, which aligns perfectly with our implementation [8].
Haptic interfaces have shown promising results in navigation test cases. In an initial study, a haptic device using skin-stretching stimuli was employed, and all users were able to navigate effectively with limited directions. However, real-world implementation could still be improved. This issue is significant not only for cyclists but also for motorcyclists, who face similar challenges. Research has been conducted on haptic interfaces in gloves or on the back of the rider, yielding very positive results. Haptic navigation has been proven to be an intuitive and safer alternative for guidance. [3]; [10].
In conclusion, our goal is to develop a navigation system that enhances safety and convenience for cyclists without distracting them from their surroundings. Building upon previous research, we believe that haptic feedback offers a promising solution if implemented thoughtfully. The feedback must strike a balance,subtle yet effective,to provide clear navigation cues without causing irritation. By installing vibration motors within the bicycle handlebar, we aim to create a solution that meets all the requirements for seamless navigation during cycling. This advancement not only improves the cycling experience but also contributes to safer journeys for cyclists navigating busy urban environments.
Supplies
Bill of materials
1. Arduino microcontroller (1 unit)
2. Breadboards (2 units)
3. Connection cables (29 units)
4. Battery module with 9V battery (1 unit)
5. TCA9548A I2C multiplexer (3 units)
6. DRV2605L haptic motor drivers (3 units)
7. Bluetooth module HC-05 (1 unit)
8. Motor connections (6 units)
Connection of Devices
The first step is to connect the Arduino microcontroller with the motors. To connect multiple motors to the Arduino, it is recommended to use a multiplexer. The multiplexer simplifies the process of establishing fast and reliable connections. The multiplexer is connected to the haptic motor drivers, which then send pulses to the vibration motors to generate the haptic feedback. The entire system is powered by a 9V battery connected to the Arduino microcontroller. GPS signals are sent via a Bluetooth connection to the Bluetooth module connected to the Arduino microcontroller. To ensure proper cable connections, please refer to the diagram. Be aware that the connections to the motors aren't provided on the diagram. Each motor needs to be connected to the motor drivers, ensuring that the positive and negative motor pins are properly connected to the motor.
Install Code of Haptics on Arduino
Before the system can be used, remove the battery and connect the Arduino Micro to your computer using a micro USB cable. Open the Arduino IDE on your computer and copy the provided code into the IDE. Once the code is successfully copied, upload it to the Arduino by clicking on the arrow in the upper left corner of the IDE. After the code is uploaded, the Arduino is ready for use. At the end of the paper, you will find the full code. The code begins by defining the analog pin A5 for a PWM signal. The next step sets up the communication between the Arduino microcontroller and the multiplexer. The multiplexer then distributes the information to the correct motor via a motor controller. Following this, the code establishes a Bluetooth connection between your phone and the microcontroller to receive navigation inputs. Once the inputs are available, a loop checks the direction indicated by the inputs. For each specific input, a corresponding haptic feedback is generated within the loop. Finally, the code includes the setup for the PWM signal on pin 13.
You can now disconnect the Arduino from your computer and connect a 9V battery to power it. To give directions to the module, pair your computer with the Bluetooth module attached to the Arduino. This will enable wireless communication between your computer and the Arduino system. The commands include “turn left“, “turn right“, “take the first, second or third exit at the roundabout" and "turn back“ when you made a mistake.
Bluetooth Connection
To connect the module with your phone, you have to install a bluetooth controller on your mobile device. An example of a bluetooth controller is lightBlue for IOS devices. After the installation, you can open the app and search for your own Ardiuno HC-05 device. With the controller, you can send directions to the Arduino. This module allows the modulation of input signals from a real GPS module. While one person gives inputs, another can navigate with the bicycle through the use of the haptic device. This setup enables the haptic device to mimic the real-world experience as accurately as possible. Unfortunally our bluetooth module had a small defect and wasn't be able to connect.
Installation on Bicycle
The next step is to install the system on your bicycle. The system is now ready to be installed before use. Secure the vibrating motors in the positions shown in the picture above. Ensure that they are firmly attached and correctly positioned to provide effective haptic feedback.
Once installed, the system is ready to fully operate. The prototype can receive instructions from your computer to control the GPS module. The vibrating motors will provide haptic feedback to guide you safely through busy traffic with minimal distraction. This setup ensures you can navigate effectively while staying focused on the road.
The code is shown below:
#include <Wire.h>
#include <SoftwareSerial.h>
#define PWM13 OCR4A
int analogPin = A5;
int val = 0;
// SETUP I2C
byte DRV = 0x5A; //DRV2605 slave address
byte ModeReg = 0x01;
// SETUP I2C for the multiplexer
byte TCA =0x70 ;
/*
Array to access the SDA/SCL ports of the multiplexer
If more motors added, please increase the array size and include those extra
ports you would like to use
*/
SoftwareSerial BTSerial(10, 11);
String input;
int ports[3] = {1,2,3};
void setup() {
Wire.begin();
while(!Serial){}; // Sequence will not run until we activate the serial port (or monitor)
Serial.begin(9600);
BTSerial.begin(9600);
// Wait for the Bluetooth module to establish connection
delay(1000);
// Send a message to the Bluetooth module to set it to master mode
BTSerial.print("AT+ROLE1\r\n");
// Wait for the response from the Bluetooth module
delay(1000);
// Send a message to the Bluetooth module to set the baud rate to 9600
BTSerial.print("AT+UART=9600,0,0\r\n");
// Wait for the response from the Bluetooth module
delay(1000);
// Send a message to the Bluetooth module to save the changes
BTSerial.print("AT+RESET\r\n");
// Wait for the response from the Bluetooth module
delay(1000);
// Print a message to the serial monitor to indicate that the setup is complete
Serial.println("HC-05 Bluetooth module setup complete!");
pwm13configure(); //sets up PWM signal
delay(2);
initializeDRV2605(); //initializes DRV2605
delay(10);
pulse(0.1, 10);
}
void loop() {
if (BTSerial.available()) {
input = BTSerial.readString();
Serial.println(input);
if (input == "left") {
left();
}
else if (input == "right") {
right();
}
else if (input == "exit 1") {
roundabout(1);
}
else if (input == "exit 2") {
roundabout(2);
}
else if (input == "exit 3") {
roundabout(3);
}
else if (input == "turn back") {
turnback();
}
}
}
void left() {
for (int i = 0; i < 3; i++) {
TCA9548A(ports[i]);
pulse(0.1, 10);
delay(20);
}
delay(2000);
for (int i = 0; i < 3; i++) {
TCA9548A(ports[2 - i]);
pulse(0.1, 10);
delay(200);
}
}
void right() {
for (int i = 0; i < 3; i++) {
TCA9548A(ports[i]);
pulse(0.1, 10);
delay(20);
}
delay(2000);
for (int i = 0; i < 3; i++) {
TCA9548A(ports[i]);
pulse(0.1, 10);
delay(200);
}
}
void roundabout(int exit) {
for (int i = 0; i < 3; i++) {
TCA9548A(ports[i]);
pulse(0.1, 10);
delay(20);
}
delay(2000);
delay(exit*2000);
for (int i = 0; i < 3; i++) {
TCA9548A(ports[i]);
pulse(0.1, 10);
delay(200);
}
}
void turnback() {
for (int i = 0; i < 3; i++) {
TCA9548A(ports[i]);
pulse(0.1, 10);
delay(20);
}
delay(200);
for (int i = 0; i < 3; i++) {
TCA9548A(ports[i]);
pulse(0.1, 10);
delay(20);
}
delay(1000);
}
// Basic functions:
/*
1. void pulse(double intensity, double milliseconds)
pulse drives the hammer towards the closed end of the TacHammer
intensity defines the strength of the pulse. It ranges from [0-1] with 1 being strongest
When the hammer rebounds off of the repelling magnetic array, the inaudible pulse haptic
sensation is created milliseconds is the length of time the coil is activated in ms pulse is
intended to be sequenced with subsequent pulse and hit commands and if called on its own,
the hammer may travel after the rebound and strike the open end
*/
void pulse(double intensity, double milliseconds)
{
int minimumint = 140;
int maximumint = 255;
int pwmintensity = (intensity * (maximumint - minimumint)) + minimumint;
standbyOffB();
PWM13 = pwmintensity;
usdelay(milliseconds);
standbyOnB();
}
void usdelay(double time)
{
double us = time - ((int)time);
for (int i = 0; i <= time; i++)
{
delay(1);
}
delayMicroseconds(us * 1000);
}
void standbyOnB()
{
Wire.beginTransmission(DRV);
Wire.write(ModeReg); // sets register pointer to the mode register (0x01)
Wire.write(0x43); // Puts the device pwm mode
Wire.endTransmission();
}
void standbyOffB()
{
Wire.beginTransmission(DRV);
Wire.write(ModeReg); // sets register pointer to the mode register (0x01)
Wire.write(0x03); // Sets Waveform Mode to pwm
Wire.endTransmission();
}
void initializeDRV2605()
{
Wire.beginTransmission(DRV);
Wire.write(ModeReg); // sets register pointer to the mode register (0x01)
Wire.write(0x00); // clear standby
Wire.endTransmission();
Wire.beginTransmission(DRV);
Wire.write(0x1D); // sets register pointer to the Libarary Selection register (0x1D)
Wire.write(0xA8); // set RTP unsigned
Wire.endTransmission();
Wire.beginTransmission(DRV);
Wire.write(0x03);
Wire.write(0x02); // set to Library B, most aggresive
Wire.endTransmission();
Wire.beginTransmission(DRV);
Wire.write(0x17); // sets full scale reference
Wire.write(0xff); //
Wire.endTransmission();
Wire.beginTransmission(DRV);
Wire.write(ModeReg); // sets register pointer to the mode register (0x01)
Wire.write(0x03); // Sets Mode to pwm
Wire.endTransmission();
delay(100);
}
void TCA9548A(uint8_t bus){
Wire.beginTransmission(TCA);
Wire.write(1 << bus);
Wire.endTransmission();
}
/*
DEAR STUDENTS, PLEASE DO NOT MODIFY THIS SECTION
iF YOU NEED ANY ASSISTANCE, PLEASE NOTIFY THE TA OR THE MAIN LECTURER
*/
// Configure the PWM clock
#define PWM12k 5 // 11719 Hz
void pwm13configure() {
// TCCR4A configuration
TCCR4A = 0;
// TCCR4B configuration
TCCR4B = PWM12k;
// TCCR4C configuration
TCCR4C = 0;
// TCCR4D configuration
TCCR4D = 0;
// TCCR4D configuration
TCCR4D = 0;
// PLL Configuration
// Use 96MHz / 2 = 48MHz
PLLFRQ = (PLLFRQ & 0xCF) | 0x30;
// PLLFRQ=(PLLFRQ&0xCF)|0x10; // Will double all frequencies
// Terminal count for Timer 4 PWM
OCR4C = 255;
//pwmSet6();
pwmSet13();
}
// Set PWM to D13 (Timer4 A)
void pwmSet13() {
OCR4A = 0;
DDRC |= _BV(7);
TCCR4A = 0x82; }
The video of the presentation is available via this link:
Bibliography
[1] R. Li, Y. Zhang, J. Zhang, W. Hu, en Y. V. Chen, ‘Effectiveness of Haptic Modality in an Intelligent Bicycle Safety Driving Device Supporting Bicycle Delivery Service’, International Journal of Human–Computer Interaction, sep. 2023, Geraadpleegd: 23 mei 2024. [Online]. Beschikbaar op: https://www.tandfonline.com/doi/full/10.1080/10447318.2023.2254627
[2] ‘Enhancing outdoor navigation systems through vibrotactile feedback | CHI ’11 Extended Abstracts on Human Factors in Computing Systems’. Geraadpleegd: 23 mei 2024. [Online]. Beschikbaar op: https://dl.acm.org/doi/abs/10.1145/1979742.1979760
[3] M. Prasad, P. Taele, D. Goldberg, en T. A. Hammond, ‘HaptiMoto: turn-by-turn haptic route guidance interface for motorcyclists’, in Proceedings of the SIGCHI Conference on Human Factors in Computing Systems, in CHI ’14. New York, NY, USA: Association for Computing Machinery, apr. 2014, pp. 3597-3606. doi: 10.1145/2556288.2557404.
[4] M. Pielot, B. Poppinga, W. Heuten, en S. Boll, ‘Tacticycle: supporting exploratory bicycle trips’, in Proceedings of the 14th international conference on Human-computer interaction with mobile devices and services, in MobileHCI ’12. New York, NY, USA: Association for Computing Machinery, sep. 2012, pp. 369-378. doi: 10.1145/2371574.2371631.
[5] ‘Garmin Edge® 1040 Solar | multi band GPS fietscomputer’. Geraadpleegd: 23 mei 2024. [Online]. Beschikbaar op: https://www.garmin.com/nl-BE/p/731136
[6] R. L. Koslover, B. T. Gleeson, J. T. de Bever, en W. R. Provancher, ‘Mobile Navigation Using Haptic, Audio, and Visual Direction Cues with a Handheld Test Platform’, IEEE Transactions on Haptics, vol. 5, nr. 1, pp. 33-38, jan. 2012, doi: 10.1109/TOH.2011.58.
[7] ‘(PDF) Design of a Wearable Haptic Navigation Tool for Cyclists’. Geraadpleegd: 23 mei 2024. [Online]. Beschikbaar op: https://www.researchgate.net/publication/321155566_Design_of_a_Wearable_Haptic_Navigation_Tool_for_Cyclists
[8] ‘Tacticycle | Proceedings of the 14th international conference on Human-computer interaction with mobile devices and services’. Geraadpleegd: 23 mei 2024. [Online]. Beschikbaar op: https://dl.acm.org/doi/abs/10.1145/2371574.2371631
[9] ‘Visual map and instruction-based bicycle navigation: a comparison of effects on behaviour’. Geraadpleegd: 23 mei 2024. [Online]. Beschikbaar op: https://www.tandfonline.com/doi/epdf/10.1080/00140139.2017.1282628?needAccess=true
[10] A. I. Giesa, ‘Navigating through haptics and sound’. Malmö university, spring 2019.