Bouw een Ultrasonische Kaartmaker met Arduino Yun – Stap-voor-Stap Handleiding
Onderdelen en benodigdheden
| Onderdeel | Aantal |
|---|---|
| Arduino Yun | 1 |
| Ultrasonische Sensor | 1 |
| Servo's (Tower Pro MG996R) | 1 |
| Draadbruggen (generiek) | 10 |
Apps en online diensten
- Arduino IDE
- MATLAB
Over dit project
Stap 1: Theorie
In dit project gebruiken we een ultrasonische afstandssensor. Het genereert geluidsgolven boven het bereik van het menselijk gehoor en meet afstand door de tijd te berekenen die deze golven nodig hebben om een obstakel te raken en terug te keren. Dit is vergelijkbaar met het principe dat vleermuizen en cruiseschepen gebruiken.

Een ander component dat we gaan gebruiken is een servomotor. Het verschilt van de gewone DC-motor doordat het heel precies naar een gegeven hoekpositie kan draaien en daar zijn toestand kan vasthouden. Wanneer een servomotor pulsen van een specifieke duur krijgt, beweegt het naar de corresponderende hoekpositie.

We zullen beide componenten gebruiken om een 180 graden zichtveld voor onze robot te krijgen.
Stap 2: Materialen Verzamelen
Dit project gebruikt de volgende hardware:
- Arduino Uno/Yun (Let op: elk Arduino footprint bord kan gebruikt worden in plaats van de Uno of Yun)
- Arduino Prototyping Shield
- Een HC-04 Ultrasonische Sensor
- Een servomotor (Ik heb de Tower Pro SG90 gebruikt omdat hij erg compact is)
Aan de softwarekant gebruiken we de volgende programma's:
- De Arduino IDE om besturingscode naar de Arduino te uploaden om de servo te draaien en afstandsgegevens van de ultrasonische sensor te krijgen en deze ook naar de seriële poort te sturen.
- Mathworks MATLAB om gegevens van de seriële lijn te ontvangen, te verwerken en te visualiseren in een grafiek.
Stap 3: Mechanische Montage

Met een klein stukje universeel PCB, maak een kleine header voor de HC-04, en bevestig het aan een servo-arm met een stukje dubbelzijdig tape.

Deze stap is optioneel, maar om het systeem compacter te maken, heb ik de servo ook aan de uitstekende deel van het protoboard shield bevestigd met dubbelzijdig tape.

Het eindresultaat moet eruitzien als Wall-E's buik.
Stap 4: De Arduino Code
De Arduino-code controleert de beweging van de servomotor, en wanneer de metingen van de ultrasonische sensor worden vastgelegd en hoe frequent. Het stuurt ook de sensordata naar de seriële poort.
- Importeer libraries
- Initialiseer variabelen en pinnen
- Initialiseer servo object
- Initialiseer seriële communicatie
- Wacht 3 seconden
- Initialiseer tellers op 0
- Draai servo met 1 graad
- Krijg ultrasonische sensordata 10 keer (standaard ingesteld)
- Gemiddelde de data
- Stuur het gemiddelde naar seriële poort
- Ga terug naar stap 7
Stap 5: De MATLAB Code
De MATLAB-code gaat meer over data dan over de daadwerkelijke besturing van het bord, dus alle sensordata wordt via serieel naar de PC gestuurd, waar het door MATLAB wordt ingelezen.
Nu vertelt de data die we van de Arduino ontvangen twee dingen: de draaihoek van de servo en de afstand van een obstakel in die richting. Dus de data die we op dit moment hebben is in het polaire coördinatensysteem. Om het voor menselijke ogen zinvol te maken wanneer gevisualiseerd, moet het omgezet worden naar het Cartesische of X-Y coördinatensysteem.

De MATLAB-code doet precies dit. Het krijgt data serieel van de COM-poort, bewaart het in een matrix met de draaihoek, en zet het dan om in Cartesische coördinaten met de bovenstaande formule.
Eenmaal gedaan, geeft het een output door de punten op een grafiek te plotten. Ik plaatste het bord in de doos, en kreeg het volgende resultaat.

Stap 6: Conclusie

Hoewel het systeem niet perfect is, doet het zijn werk. Het kan een ruwe schatting maken van de breedte en lengte van de doos en stuurt de data nauwkeurig door.
De enige fouten die ik nu zie zijn door het schudden van de sensor terwijl de servo beweegt en foutieve metingen van de sensor zelf.
Naast dit werkt het systeem prima en kan het gebruikt worden voor diepteperceptie experimenten alsook basale computer vision projecten.
Code
matlab_code_to_run_on_pc.m
MATLAB code om te compileren en uit te voeren op PC
theta = 0:(pi/180):pi;
s = serial('COM10');
s.BaudRate=9600
fopen(s)
i = 0;
inc = 1;
while i<180
A = fgets(s);
num(i+1) = str2num(A);
i = i+1;
end
fclose(s)
j = 1
while j<181
tab(j,1) = (j-1)*inc
tab(j,2) = num(j)
tab(j,3) = num(j)*cosd((j-1)*inc)
tab(j,4) = num(j)*sind((j-1)*inc)
j = j+1
end
%figure
%polar(theta,num)
plot(tab(:,3),tab(:,4))
Arduino Code
Arduino code om te uploaden naar Arduino Yun
#include <Servo.h>
#include <NewPing.h>
#define TRIGGER_PIN 12
#define ECHO_PIN 11
#define MAX_DISTANCE 200
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);
Servo myservo;
int pos = 0;
int it = 10;
void setup() {
myservo.attach(9);
Serial.begin(9600);
delay(3000);
}
void loop() {
int i = 0;
int t = 0;
int a = 0;
for (i = 0; i < 180; i ++) {
unsigned int uS = sonar.ping();
myservo.write(i);
delay(20);
for (t = 0; t < it; t++) {
uS = sonar.ping();
a = uS/US_ROUNDTRIP_CM + a;
delay(30);
}
a = a / (it-1);
t = 0;
Serial.println(a);
a = 0;
}
}
Schema's
Fritzing bestand voor servo en ultrasonische sensor verbindingen YunConfig.fzz
Productieproces
- Bouw een indrukwekkend monitor Ambilight-systeem met Arduino
- Arduino Uno Gebaseerde Mensendetectie Robot: Stap-voor-stap Sensorintegratie
- Bouw een Ultrasonische Zweefapparaat met Arduino – Stap-voor-stap Handleiding
- FlickMote: Gebarengecontroleerde IR-afstandsbediening voor Slimme Huizen
- Een slimme voltmeter bouwen met Arduino en smartphone – Eenvoudig DIY-project
- Real-time IoT hartslagmonitor met Arduino en MAX30100
- Bouw een Android-bestuurd extern voertuig met Raspberry Pi Motor Shield
- Bouw een Slimme IoT Pot met ESP8266, Arduino & Ultrasonische Sensor – Real-time Monitoring
- Arduino Uno WiFi Webserver: LED aan/uit schakelen via browser
- Bouw Een Autonome Lijnvolgende Robot Met Arduino UNO
- Bouw een geautomatiseerde Google Chrome Dino Game met Arduino