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

Lego Power Functions met Arduino & Bluetooth Besturen – Complete Handleiding

Onderdelen en benodigdheden

OnderdeelAantalOpmerking
Arduino UNO1
Texas Instruments L293D Dual H-brug motor driver1Kies versie met lange pennen, geen SMD
Breadboard (standaard)1
9V naar Barrel Jack connector1
Lego Power Functions Verlengdraad (item 8886)3
HC-05 Bluetooth Module1

Over dit project

Heb je een geweldig Lego Power Functions model met motoren en servomotoren? In deze tutorial laat ik zien hoe je je Lego-model bestuurt met een Arduino en een minimum aan elektronica. Ik leg schakelingen en programmering gedetailleerd uit – geschikt voor beginners. Het Lego-model bouw je zelf (als je geen zoon hebt), daar help ik niet mee.

We leren ook hoe je met MIT App Inventor je eigen Android-remote maakt. Binnenkort heb je je eigen Lego Mars-rover in de tuin!

Dit is mijn eerste Arduino-project. Mijn zoon heeft een prachtige Lego Technic auto (9398 4X4 Crawler) met Power Functions: één servomotor voor sturing, twee L-motoren voor rijden. Hij leende me de auto (mits ik geen kabels inknipt). Hier testen we de prototype:

De Power Functions bedrading begrijpen

Koop Lego Power Functions Verlengdraden (item 8886). Knip ze door – we maken „break-out” kabels met Lego-stekker aan één kant en pennen aan de andere. Soldeer pennen aan.

Lego Power Functions met Arduino & Bluetooth Besturen – Complete Handleiding

  • GND = minpol (-) van batterijpak (anode).
  • C1 en C2 kunnen polariteit wisselen om motor/servo richting om te keren.

TechnicRobot heeft een uitgebreide videouitleg. WAARSCHUWING: op eigen risico – ik ben niet verantwoordelijk voor schade.

  • Servo-connector: soldeer pennen op alle 4 draden. Gebruik de lichtgrijze stekker.
  • Voedingskabel (batterijdoos → breadboard): alleen +9V en GND nodig, maar donkergrijze stekker gebruiken (male connector).
  • Motorkabel: alleen C1 en C2, lichtgrijze stekker. (Zie schema's voor details).

Lego Power Functions met Arduino & Bluetooth Besturen – Complete Handleiding

Een Lego-motor besturen met de L293D-chip

We willen variabele snelheid (DC-motoren) en positie (servo). Dat doen we met Pulse Width Modulation (PWM). Arduino maakt PWM makkelijk: analogWrite(pin, dutyCycle) (0–255). PWM-pinnen zijn gemarkeerd met ~.

Arduino pinnen: 5V, max 30 mA. Lego-motoren: 9V, >100 mA. We hebben een „schakelapparaat” nodig: een H-brug. De L293D bevat twee H-bruggen op één chip → we kunnen de twee L-motoren parallel aan de ene kant koppelen, de servo aan de andere kant. (Voor onafhankelijke motorbesturing heb je een tweede L293D nodig). De servo heeft ook GND en +9V nodig.

Belangrijk: De chip houdt Lego +9V en Arduino +5V volledig gescheiden. Nooit verbinden! Wel alle ground-lijnen met elkaar en met de L293D GND-pinnen verbinden.

Lego Power Functions met Arduino & Bluetooth Besturen – Complete Handleiding

Pin-indeling:

  • Motor: pin 9 (PWM snelheid), pins 2 en 5 (richting)
  • Servo: pin 3 (PWM positie), pins 6 en 8 (richting links/rechts)

Globale constanten en variabelen

// Motor control pins
const int controlPin1A = 2;
const int controlPin2A = 5;
const int ENablePin = 9;

// Servo control pins
const int controlPin3A = 6;
const int controlPin4A = 8;
const int servoENablePin = 3;

// Motor variabelen
int motorSpeed = 0;        // 0..255
int motorDirection = 1;    // 1 = forward, 0 = reverse

// Servo variabelen
int steering = 0;          // 0..255
int steeringDirection = 0; // 0 = left, 1 = right

Setup

void setup() {
  pinMode(controlPin1A, OUTPUT);
  pinMode(controlPin2A, OUTPUT);
  pinMode(ENablePin, OUTPUT);
  pinMode(controlPin3A, OUTPUT);
  pinMode(controlPin4A, OUTPUT);
  pinMode(servoENablePin, OUTPUT);
  digitalWrite(ENablePin, LOW);
  digitalWrite(servoENablePin, LOW);
}

L293D logica voor richting

Signalen (High = 5V, Low = 0V):

EN1,21A2AResultaat
HighHighLowMotor linksom (Forward; motorDirection=1)
HighLowHighMotor rechtsom (Reverse; motorDirection=0)
EN3,43A4AResultaat
HighHighLowServo links (steeringDirection=0)
HighLowHighServo rechts (steeringDirection=1)

Besturings-subroutine

void SetMotorControl() {
  if (motorDirection == 1) { // Forward
    digitalWrite(controlPin1A, HIGH);
    digitalWrite(controlPin2A, LOW);
  } else { // Reverse
    digitalWrite(controlPin1A, LOW);
    digitalWrite(controlPin2A, HIGH);
  }
  analogWrite(ENablePin, motorSpeed);

  if (steeringDirection == 0) { // Left
    digitalWrite(controlPin3A, HIGH);
    digitalWrite(controlPin4A, LOW);
  } else { // Right
    digitalWrite(controlPin3A, LOW);
    digitalWrite(controlPin4A, HIGH);
  }
  analogWrite(servoENablePin, steering);
}

Eenvoudige RC Android-app met joystick

We bouwen een app met MIT App Inventor 2 (web-based, beginner-vriendelijk). Google's Mark Friedman en MIT-professor Hal Abelson zijn de initiators.

  1. Op Android: installeer MIT AI2 Companion uit Play Store.
  2. Op computer: open mijn RC-app link in Firefox/Chrome (IE niet ondersteund). Log in met Gmail, maak account aan om broncode te zien.
  3. Open Companion-app op telefoon → bekijk broncode in browser, wijzig, test direct op telefoon.

In de Designer-view zie je onderaan een oranje pad met blauwe joystick-bal.

Lego Power Functions met Arduino & Bluetooth Besturen – Complete Handleiding

In Blocks-view is het hart een when-blok dat vingerbewegingen volgt:

Lego Power Functions met Arduino & Bluetooth Besturen – Complete Handleiding

Vingerpositie → variabelen currentX en currentY → bereken steering en speed (bereik -100..0..+100). Begrenzing als vinger buiten pad. Vervolgens wordt een commando-string gegenereerd:

RC,steering,speed,\n

RC = remote control (voor toekomstige uitbreiding). Newline (\n) signaleert einde van commando. String wordt via Bluetooth naar Arduino gestuurd en op scherm getoond.

Bluetooth-commando's inlezen op de Arduino

Sluit HC-05 Bluetooth-module aan.

Lego Power Functions met Arduino & Bluetooth Besturen – Complete Handleiding

Mijn module heeft 6 pinnen, we gebruiken 4:

  • VCC → Arduino 5V (module verdraagt 6V)
  • GND → GND
  • TXD → Arduino RX (pin 0) gekreust!
  • RXD → Arduino TX (pin 1) gekreust!

LET OP: Module is 3,3V logica. RXD (3,3V) mag niet direct op Arduino TX (5V). Maak een spanningsdeler met 3 × 1 kΩ weerstanden (uitgang 2/3 × 5V ≈ 3,3V). TXD (3,3V) kan wel direct op Arduino RX (herkent 3,3V als HIGH).

Pinnen 0 en 1 zijn gedeeld met USB. Tijdens upload RXD/TXD loskoppelen!

Koppel HC-05 met Android: Bluetooth aan, app starten, „Bluetooth connect”, telefoon zichtbaar maken, zoek HC-05, code „1234”. Terug in app: „connected” in groen.

Arduino-code voor Bluetooth-opvragen


#define INPUT_SIZE 30
void loop() {
  char input[INPUT_SIZE + 1];
  byte size = Serial.readBytesUntil('\n', input, INPUT_SIZE);
  input[size] = 0;

  char* command = strtok(input, ","); // "RC"
  char* RCsteering = strtok(NULL, ","); // -100..100
  char* RCspeed = strtok(NULL, ",");    // -100..100

  int iRCsteering = atoi(RCsteering);
  int iRCspeed = atoi(RCspeed);

  // Verwerken...
  SetMotorControl();
}

Serial.readBytesUntil('\n', ...) leest tot newline → compleet commando in input. strtok() splitst op komma. atoi() zet string om in integer.

Vermenigvuldig met 2,55 voor PWM-bereik (0–255). Roep SetMotorControl() aan. Bestudeer de volledige code in de Code-sectie, bouw de schakeling en test!

Wat nu?

  • Gebruik het model als robotics-platform: voeg ultrasone sensoren toe, programmeer obstakelvermijding, maak een zelfrijdende Mars-rover.
  • Voeg meer commando's en functies toe.
  • Eerst: bedenk hoe de Arduino detecteert dat het model buiten Bluetooth-bereik is en stopt.
  • Breadboard en losse kabels zijn slecht voor bewegende modellen. Overstap op Adafruit Motor Shield met grote terminalblokken – vrij ook digitale pinnen voor sensoren. Overweeg een Sensor Shield.

Laat me weten wat je bouwt!

Code

Legocar_v3_bluetooth Arduino
/* Lego Powerfunctions car model controlled over bluetooth
   Arduino Uno controls motors and servo
   Remote controlled with android app developed with MIT App Inventor 2
   Circuit:
   * Serial communication (uses Uno pin 0,1) Bluetooth-module attached (detach when loading over USB)
   * L293D with motor (uses Uno digital pins 2,5,9)
   * L293D with servo (uses Uno digital pins 6,8,3)
*/
#include <SPI.h>
#include <String.h>

#define INPUT_SIZE 30

const int controlPin1A = 2;
const int controlPin2A = 5;
const int ENablePin = 9;

const int controlPin3A = 6;
const int controlPin4A = 8;
const int servoENablePin = 3;

int motorSpeed = 0;
int motorDirection = 1;
int steering = 0;
int steeringDirection = 0;

void setup() {
  Serial.begin(9600);
  Serial.setTimeout(1000);
  pinMode(controlPin1A, OUTPUT);
  pinMode(controlPin2A, OUTPUT);
  pinMode(ENablePin, OUTPUT);
  pinMode(controlPin3A, OUTPUT);
  pinMode(controlPin4A, OUTPUT);
  pinMode(servoENablePin, OUTPUT);
  digitalWrite(ENablePin, LOW);
  digitalWrite(servoENablePin, LOW);
}

void loop() {
  char input[INPUT_SIZE + 1];
  byte size = Serial.readBytesUntil('\n', input, INPUT_SIZE);
  input[size] = 0;

  char* command = strtok(input, ",");
  char* RCsteering = strtok(NULL, ",");
  char* RCspeed = strtok(NULL, ",");

  int iRCsteering = atoi(RCsteering);
  int iRCspeed = atoi(RCspeed);

  if (iRCsteering > 0) steeringDirection = 1; else steeringDirection = 0;
  steering = int(2.55 * abs(iRCsteering));

  if (iRCspeed > 0) motorDirection = 1; else motorDirection = 0;
  motorSpeed = int(2.55 * abs(iRCspeed));

  SetMotorControl();
}

void SetMotorControl() {
  if (motorDirection == 1) {
    digitalWrite(controlPin1A, HIGH);
    digitalWrite(controlPin2A, LOW);
  } else {
    digitalWrite(controlPin1A, LOW);
    digitalWrite(controlPin2A, HIGH);
  }
  analogWrite(ENablePin, motorSpeed);

  if (steeringDirection == 0) {
    digitalWrite(controlPin3A, HIGH);
    digitalWrite(controlPin4A, LOW);
  } else {
    digitalWrite(controlPin3A, LOW);
    digitalWrite(controlPin4A, HIGH);
  }
  analogWrite(servoENablePin, steering);
}
GitHub Lego-car-Arduino

Broncode Arduino, Fritzing-schema, Android-app broncode voor MIT App Inventor:
https://github.com/Notthemarsian/Lego-car-Arduino

Schema's

GitHub repo bevat Fritzing-diagram (Lego rc car v2.fzz).

Productieproces

  1. Betrouwbaarheid van Krachtoverdracht Componenten Verhogen: Bewezen Strategieën voor Mijnbouw, Productie & Industriële Operaties
  2. Betrouwbare energie & HVAC-verhuur voor naadloze klimaatregeling
  3. Anticonceptiepil: Geschiedenis, Voordelen, Risico's en Productie
  4. Windenergie: Omzetten van Luchtbeweging in Schone Elektriciteit
  5. Elektrische Bedieningspanelen: Ontwerpessentiëls voor Veiligheid & ROI
  6. UK fabrikanten verliezen £2,5 mln aan het corrigeren van ontwerpfouten in automatiseringsprojecten
  7. Acht Bewezen Stappen om Uw Procescontrolsysteem te Diagnosticeren en Repareren
  8. Spanningsregeling in webaanvulling beheersen: essentiële componenten uitgelegd
  9. Differentieren van Exponentiële Functies met Basis e
  10. Stamfuncties van Exponentiële Machtsfuncties Vinden
  11. SaaS Beheersen: Strategieën om Controle te Behouden Terwijl u de Cloud Benut