Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Bluetooth Robot met Obstakelvermijding: Slimme Remote-gecontroleerde Voertuig

Onderdelen en Benodigdheden

OnderdeelAantal
Arduino Nano R31
SparkFun Dual H-Bridge Motor Driver L2981
Ultrasonische Sensor HC-SR041
HC-05 Bluetooth Module1
RGB Diffused Common Anode LED1
SparkFun Logic Level Converter Bi-Directional1
Weerstand 330 ohm1
Breadboard1
Breadboard Voeding 5V/3.3V1
DC Motor 12V2
Male/Female Dupont-draden1 set

Apps & Online Services

  • Arduino IDE
  • Arduino BlueControl (beschikbaar in Play Store)

Over dit Project

Dit project gebruikt een mobiele telefoon om via Bluetooth met een robot te communiceren. Ik wilde al lang een robot bouwen en via telefoon besturen. Na meer dan 12 jaar nam ik de uitdaging aan tijdens de Covid-19 lockdown. Elektronica en robotica is een van mijn favoriete hobby's.

Bluetooth Robot met Obstakelvermijding: Slimme Remote-gecontroleerde Voertuig

De robot ontvangt Bluetooth-signalen van de telefoon via de HC-05 module en stuurt de motoren aan. Ik gebruikte de ArduinoBlueControl app voor besturing.

Bluetooth Robot met Obstakelvermijding: Slimme Remote-gecontroleerde Voertuig
Bluetooth Robot met Obstakelvermijding: Slimme Remote-gecontroleerde Voertuig
Bluetooth Robot met Obstakelvermijding: Slimme Remote-gecontroleerde Voertuig

De Arduino Nano is het hart. Hij ontvangt signalen van de HC-05 via seriële communicatie en stuurt de motoren aan via de L298N motor driver voor vooruit, achteruit, links en rechts.

Bluetooth Robot met Obstakelvermijding: Slimme Remote-gecontroleerde Voertuig

Let op: TX en RX van de HC-05 correct met de Arduino Nano verbinden. Een logic level converter wordt hiervoor gebruikt.

De robot gebruikt de HC-SR04 ultrasonische sensor voor obstakeldetectie. Bij een obstakel tijdens vooruitrijden stopt de robot. Een RGB LED toont de robotstatus.

Bluetooth Robot met Obstakelvermijding: Slimme Remote-gecontroleerde Voertuig

De robot is gemonteerd op een 2-wiel chassis met getande aandrijvingsmotoren. De elektronica zit op een breadboard met voeding (3.3V en 5V). De Arduino Nano kan motoren niet direct aansturen (te veel stroom), daarom de L298N. PWM signalen van de Nano regelen de motortempo via ENA en ENB pinnen van de L298N.

Bluetooth Robot met Obstakelvermijding: Slimme Remote-gecontroleerde Voertuig
Bluetooth Robot met Obstakelvermijding: Slimme Remote-gecontroleerde Voertuig

Hier is een korte video van de robot in actie:

[Video embed]

Hopelijk vind je mijn Bluetooth-gestuurde obstakelvermijdingsrobot leuk! Deze kan uitgebreid worden voor thuisautomatisering, winkelvloer voertuigen, en nog veel meer.

Code

Bluetooth Gestuurde Robot - Arduino Code

/* Bluetooth Controlled Obstacle Avoidance Robot
   Prepared by: Alok Talukdar
   Date: 09.05.2020 */
#include <SoftwareSerial.h>

// L298 Motor pinnen
#define IN1 5  // rechter motor
#define IN2 4  // rechter motor
#define IN3 3  // linker motor
#define IN4 2  // linker motor
#define ENA 9  // PWM rechter motor
#define ENB 10 // PWM linker motor

// RGB LED pinnen
#define redLED 8
#define greenLED A0
#define blueLED 11

// HC-SR04 Ultrasonische sensor
const int trigPin = 6;
const int echoPin = 7;
int i, j, k = 0;
float duration, distance;

// HC-05 Bluetooth
SoftwareSerial mySerial(12, 13); // 12 → RX, 13 → TX
String data;
int btVal;

void setup() {
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  mySerial.begin(9600);
  pinMode(IN1, OUTPUT); pinMode(IN2, OUTPUT);
  pinMode(IN3, OUTPUT); pinMode(IN4, OUTPUT);
  pinMode(ENA, OUTPUT); pinMode(ENB, OUTPUT);
  pinMode(redLED, OUTPUT); pinMode(blueLED, OUTPUT); pinMode(greenLED, OUTPUT);
  digitalWrite(IN1, LOW); digitalWrite(IN2, LOW);
  digitalWrite(IN3, LOW); digitalWrite(IN4, LOW);
  analogWrite(redLED, 255); // RGB LED common anode = uit
  digitalWrite(blueLED, HIGH);
  digitalWrite(greenLED, HIGH);
}

void loop() {
  while (mySerial.available()) {
    data = mySerial.readStringUntil('\n');
  }
  btVal = data.toInt();

  switch (btVal) {
    case 1: forward(); digitalWrite(greenLED, LOW); analogWrite(redLED, 255); digitalWrite(blueLED, HIGH); dist(); break;
    case 2: reverse(); digitalWrite(greenLED, HIGH); analogWrite(redLED, 255); digitalWrite(blueLED, LOW); break;
    case 3: left(); break;
    case 4: right(); break;
    case 5: stoprobot(); digitalWrite(greenLED, HIGH); analogWrite(redLED, 0); digitalWrite(blueLED, HIGH); break;
    default: digitalWrite(greenLED, HIGH); analogWrite(redLED, 255); digitalWrite(blueLED, HIGH); break;
  }
  if (mySerial.available() < 0) { /* geen data */ }
}

// Motor controle functies
void forward() {
  for (i = 0; i <= 100; i++) {
    analogWrite(ENA, i); analogWrite(ENB, i);
    digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW);
    digitalWrite(IN3, LOW); digitalWrite(IN4, HIGH);
  }
}
void reverse() {
  for (j = 0; j <= 100; j++) {
    analogWrite(ENA, j); analogWrite(ENB, j);
    digitalWrite(IN1, LOW); digitalWrite(IN2, HIGH);
    digitalWrite(IN3, HIGH); digitalWrite(IN4, LOW);
  }
}
void left() {
  analogWrite(ENA, 127); analogWrite(ENB, 0);
  digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW);
  digitalWrite(IN3, HIGH); digitalWrite(IN4, HIGH);
}
void right() {
  analogWrite(ENA, 0); analogWrite(ENB, 127);
  digitalWrite(IN1, HIGH); digitalWrite(IN2, HIGH);
  digitalWrite(IN3, LOW); digitalWrite(IN4, HIGH);
}
void stoprobot() {
  analogWrite(ENA, 0); analogWrite(ENB, 0);
  digitalWrite(IN1, LOW); digitalWrite(IN2, LOW);
  digitalWrite(IN3, LOW); digitalWrite(IN4, LOW);
}
void dist() {
  digitalWrite(trigPin, LOW); delayMicroseconds(2);
  digitalWrite(trigPin, HIGH); delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);
  distance = (duration * 0.0343) / 2; // cm, geluidssnelheid 340 m/s
  if (distance < 20) { // < 20 cm → STOP
    stoprobot();
    digitalWrite(greenLED, HIGH); analogWrite(redLED, 0); digitalWrite(blueLED, HIGH);
  }
  delay(1000);
}

Schema's

Schakelingsschema van de robot.

Bluetooth Robot met Obstakelvermijding: Slimme Remote-gecontroleerde Voertuig

Productieproces

  1. Visie-gebaseerde Obstakel-Vermijdende Mobiele Robot op Raspberry Pi
  2. Bouw een Bluetooth-gecontroleerde Raspberry Pi Robot met Audio Feedback
  3. Bouw een Internet-gecontroleerde Video-streamende Robot met Arduino & Raspberry Pi
  4. Gebaren-gecontroleerde Robot Aangedreven door Raspberry Pi
  5. Bouw een WiFi-gecontroleerde Robot met Raspberry Pi & Android Smartphone
  6. Bouw een Spraak-gecontroleerde Robot met Windows 10 IoT Core op Raspberry Pi 2
  7. Bouw een Wi-Fi-gecontroleerde Raspberry Pi Robot met Python – Stap-voor-stap Gids
  8. ROObockey: Precisie-geassisteerde Remote-gecontroleerde Straathockey-robot
  9. AI-gestuurd obstakelvermijdingssysteem met Arduino en ultrasone sensoren
  10. Bouw een Stemgecontroleerde Robot met Arduino Nano
  11. Ethernet-gestuurde robotarm: Remote control gemaakt simpel