Det er irriterende at cykle og pludselig opdage en anden cyklist, der vil overhale uden at give signal. Man ser måske ikke vedkommende og risikerer at støde sammen. Dette projekt forsøger at hjælpe ved at bygge et advarselssystem med en ultralydssensor til at registrere cyklister, der nærmer sig fra siden for at overhale, og en vibrationsmotor som vibrerer for at advare om overhalingen. Dette er en eksperimentel nærhedsindikator, ikke pålideligt trafiksikkerhedsudstyr. Den kan overse cyklister eller reagere på andre genstande; hold fortsat øje med trafikken, og brug den ikke til at kompensere for nedsat hørelse.
Nødvendige komponenter
Du skal bruge følgende komponenter til projektet. Hver komponent har et link til køb på vores hjemmeside:
|
1 |
|
|
1 |
|
|
1 |
|
|
7 |
|
|
1 |
|
|
1 |
|
|
LiPo 18650-batteri |
1 |
|
3D-printet kasse |
1 |
|
Lille fumlebræt med 170 forbindelsespunkter |
1 |
Filerne til den 3D-printede kasse er med i artiklen.
Vejledning
Forudsætninger
Du skal installere Arduino IDE fra dette link, så du kan programmere din Arduino Nano.
Du kan installere denne version:
Efter installation skal programmet sættes op til det Arduino-kort, vi bruger i projektet.Gå til fanen Tools i Arduino IDE:
Skift kortet til Arduino Nano som vist:
Når kortet tilsluttes computeren, finder og vælger programmet automatisk den kommunikationsport, det bruger.
Hardware
Ledningsdiagram
Til strømforsyning af mikrocontrollerkortet kan du bruge en 18650-batteriholder/lader fra vores hjemmeside. Bemærk, at du selv skal skaffe et 18650-batteri.
Du skal lodde to ben på batteriholderen som vist nedenfor:

Den 3D-printede kasse
Den 3D-printede kasse
Det 3D-printede låg
Hent mesh-filerne til at printe kassen via dette link.
Låget kan fastgøres med 4 M4*0.7-skruer, som er mindst 6mm og højst 10mm lange, eller med gaffatape, så det er lettere at åbne. Til fastgørelse på cyklens sadelpind anbefales enten gaffatape eller meget stærk dobbeltklæbende tape.
Kode
Sensoren skal sættes op i koden. For at gøre det lettere gennemgår jeg koden del for del og medtager også hele koden til sidst.
Opsætning af variabler
Variabler gemmer information som tal eller ord. Her bruger vi dem til nemt at flytte information rundt i koden og give Arduino-benene navne, så de bliver lettere at bruge.
En variabel skal erklæres i et scope, hvor den er synlig, og have en gyldig værdi, før den læses, eksempelvis i en sammenligning. Placeringen af erklæring og initialisering har derfor betydning.
Når en variabel oprettes, angiver du typen. Typerne kan variere mellem programmeringssprog, men her betyder ”int” integer og angiver, at variablen er et heltal.
Const betyder konstant: Vi ønsker ikke, at variablens værdi ændres.
Derefter definerer vi lydens hastighed og opretter to variabler uden startværdier.
De bruges til at beregne afstanden med ultralydssensoren.
Ultralydssensoren bruger noget, der ligner ekkolokalisering, og vi bruger tiden, det tager bølgen at ramme genstanden og komme tilbage.
Opsætningsfasen
Et nyt projekt i Arduino IDE indeholder som standard funktionerne setup og loop.
I setup starter vi seriel kommunikation, så afstanden kan udskrives i terminalen. Det bruges til test, når enheden er tilsluttet den computer, vi programmerer fra. Derefter sættes ultralydssensorens relevante ben til input eller output.
Hovedfunktion
Som hovedfunktion bruger vi den forudoprettede loop-funktion, der gentager koden inde i funktionen.
I loop aflæser vi sensoren og laver beregninger for løbende at kontrollere, om nogen er ved at overhale.
Først tager vi en måling ved at bede ultralydssensoren sende en puls og registrere, hvornår den kommer tilbage, med denne kode:
Afstanden findes med en ligning ud fra bølgens rejsetid til genstanden og tilbage. Vi ganger den målte tid med lydens hastighed, cirka 343 m/s omkring stuetemperatur. Når tiden måles i mikrosekunder, giver cirka 0.0343 cm/µs afstanden i centimeter. Til sidst dividerer vi med 2 for kun at få afstanden fra sensoren til genstanden.
Afstand = (Varighed * Lydhastighed) / 2
I koden skriver vi det sådan:

For at udskrive i terminalen bruger vi denne kode:
Nu kommer den del, hvor vi vurderer, om nogen er ved at overhale:
Vi tager målinger, og hvis noget inden for 2 meter hurtigt ændrer sin afstand til sensoren, tolker vi det som en cyklist, der vil overhale. Du kan justere betingelsen i if-sætningen for at tilpasse sensoren til dine behov.
Så aktiveres vibrationsmotoren via en passende driver eller et modul med indbygget driver. En løs motor må ikke forsynes direkte fra GPIO; brug passende beskyttelse mod induktive belastninger. Koden styrer duty cycle ved at skrive en værdi (PWM) på 255 til vibrationsmotoren.
Her ønskede jeg maksimal værdi til test, men du kan ændre den efter behov.
Her er hele koden:
const int trigPin = 9;
const int echoPin = 8;
const int pwmPin = 5;
int x=0;
int y=0;
#define Speed_of_Sound 0.034
long duration;
float distance;
void setup()
{
Serial.begin(115200);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(pwmPin, OUTPUT);
}
void loop()
{
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = duration * Speed_of_Sound/2;
Serial.print("The distance is: ");
Serial.println(distance);
x=distance;
if(y-x>=90&&x<200)
{
Serial.print("Someone comes");
digitalWrite(pwmPin,HIGH);
delay(1000);
digitalWrite(pwmPin,LOW);
}
else
if(x<200)
y=x;
delay(1000);
}
Hele koden findes på dette link.
Når du har skrevet eller kopieret koden ind i Arduino IDE, uploader du den til mikrocontrollerkortet ved at trykke på uploadknappen, som ser sådan ud:
