Home > Technologie > Widerstandsreduzierungssystem

Widerstandsreduzierungssystem

0
Advertisement

Widerstandsreduzierungssystem

Diese instructable wurde in Erfüllung der Projektanforderung des Makecourse an der University of South Florida (www.makecourse.com) erstellt.

Die Idee für dieses Projekt wurde durch meine Beteiligung an der Formel Society of Automotive Engineers bei USF inspiriert.

Grundsätzlich ist ein Drag Reduction System (DRS) in der Regel auf Formel-Stil Autos bei hohen Geschwindigkeiten verwendet, wenn die Notwendigkeit für den Abtrieb von Geschwindigkeit überholt wird. Dies geschieht typischerweise durch Einstellen der Ausrichtung des Hauptelements in der Aerodynamik-Packung, um Luft durchzulassen.

Für dieses Projekt habe ich versucht, ein Basis-DRS-System mit 3D-bedruckten Teilen und einem Arduino zu modellieren.

Schritt 1: Design

Widerstandsreduzierungssystem

Widerstandsreduzierungssystem

Widerstandsreduzierungssystem

Widerstandsreduzierungssystem

Widerstandsreduzierungssystem

Solidworks wurde verwendet, um die Teile für dieses Projekt zu entwerfen. Mehrere Neugestaltungen des Chassis und der Räder wurden benötigt, um die 3-D-Drucker besser aufzunehmen. Das Chassis endete bis zu groß, um in den Drucker passen, so musste ich auszudrucken Teile davon und kleben sie zusammen.

Ich wollte einen einfachen Weg, um die Motoren in der Rückseite des Autos montieren, so habe ich sehr sorgfältig die Motoren gemessen und sorgte dafür, das Chassis mit den richtigen Spielräume für die Motoren zu entwerfen.

Ich wollte auch einen Weg, um die Motoren leicht zu Wartungszwecken zugreifen. Dies wurde erreicht, indem eine Abdeckung mit vier Haubenstiften entworfen wurde. Es dauerte einige Schleifen, um die Haube zu schieben und aus leicht, aber es ist viel schneller und weniger frustrierend, wenn es um genaue Designs und einen 3-D-Drucker als Messen und Bohren ... und Messen und Bohren wieder.

Die Zeit, die im Entwurfsprozeß verbracht wird, kann viel Frustration beim Zusammenbauen des Endproduktes sparen.

Schritt 2: 3-D-Druckteile

Widerstandsreduzierungssystem

Widerstandsreduzierungssystem

Widerstandsreduzierungssystem

Dieses Projekt wurde fast vollständig aus 3D-bedruckten Teilen hergestellt. Jedes Teil spielt eine wichtige Rolle in der Funktionalität des Systems.

Der Kotflügel wird mit einem 1/8 "Stahl- oder Aluminiumstab an der Motorhaube montiert. Die Motorhaube wird über die vier 1/4" -Löcher an den Ecken montiert, wo die Haubenstifte herausragen.

Schritt 3: Erstellen Sie Ihr Steuerelement

Widerstandsreduzierungssystem

Hier ist ein Fritzing-Diagramm, wie man alles mit dem Arduino verbinden kann. Der Arduino ist über verschiedene Ein- und Ausgänge mit jeder Komponente verbunden. Das LCD-Display, das Servo und die Motoren werden über den Relaiskontakt des Relais betrieben. Wenn das Arduino den korrekten IR-Befehl empfängt, schaltet sich das Relais ein und versorgt diese Komponenten mit Strom.

Die Drehzahl des Motors wird vom Potentiometer über einen analogen Eingang am Arduino geregelt. Wenn der Motor eine bestimmte Drehzahl erreicht, bewegt das Servo den Flügel und das grüne Licht leuchtet auf.

Schritt 4: Erstellen Sie eine Arduino-Skizze

Unten ist der Code, den ich verwendete, um mein System zu steuern.

Ich benutze mehrere Bibliotheken, um die Verwendung der IR-Empfänger, LCD-Display über I2C und das Servo zu ermöglichen.

Die meisten meiner Variablen werden innerhalb der Funktionen definiert, die sie verwenden, aber wir müssen den Empfangspin für den IR-Empfänger definieren, damit wir das IR-Empfängerobjekt instanziieren können. Wir müssen auch die Ergebnisse des IR-Empfängers und der Servo- und LCD-Anzeige instanziieren.

Die Setup-Funktion beginnt mit dem Starten des seriellen Monitors und initialisiert die LCD-Anzeige und schaltet die Hintergrundbeleuchtung ein. Während des Setups müssen wir auch den IR-Receiver starten, um das Servo an Pin 9 anzuschließen und die Pins 6 und 7 als Ausgänge für Motor und Relais zu definieren.

Die Hauptschleife ruft lediglich drei Funktionen auf, die nachfolgend beschrieben werden

  / ************************** Steuerungsprogramm für ein einfaches Arduino-basiertes Drag Reduction System korey Prince Dieses Programm schaltet ein Relais ein und aus einem IR-Fernbedienung und erfaßt die Drehzahl eines Motors zu bestimmen, wenn ein Flügel zu betätigen, auf der Grundlage der Eingabe eines Potentiometers *************** ***************** ******************************************************************************************************* ********************** / // umfassen alle Bibliotheken in diesem Programm verwendeten #include <irremote.h> #include <liquidcrystal_i2c.h> #include <Draht .h> #include <servo.h> int RECV_PIN = 11; // IR als Stift 11 IRrecv irrecv (RECV_PIN) definieren empfangen; // ein IR-Empfänger Objekt decode_results Ergebnisse instanziiert; // ein decode_results Objekt instanziiert.  // Dieses Objekt ist vom IR-Empfänger getrennt.  Servo myservo // Instanziieren eines Servoobjekts zur Steuerung des Flügels LiquidCrystal_I2C lcd (0x27,16,2); // Instanziieren eines 16x2 I2C-LCD-Displays mit Adresse 0x27
  Void setup () {Serial.begin (9600); // Starten des seriellen Monitors lcd.init (); // Initialisierung des lcd irrecv.enableIRIn ();  Starten // den Empfänger myservo.attach (9, 544, 1200); // legt den Servo auf Pin 9 mit dem Servo Objekt pinMode (6, OUTPUT); // definieren Pin 6 als Ausgang für den Motor pinMode (7, OUTPUT); // Stift definieren 7 als Ausgang für das Relais pinMode (8, OUTPUT); // definieren Pin 8 als Ausgang für die grüne LED pinMode (12, OUTPUT); // definieren Stift 12 als Ausgang für die Rote LED}
  Void loop () {// erhalten Befehle aus der recvIR-Funktion zum Einschalten der Fernbedienung recvIR ();  // die Drehzahl der Motoren überprüfen und das Servo aktivieren, wenn oberhalb der Schwelle activateDRS ();  // erhalten Sie die Umdrehungen pro Millisekunde von revPerMilli-Funktion revPerMilli ();  aufrechtzuerhalten.

Die Idee der activateDRS-Funktion ist, ein Servo an eine bestimmte Position zu drehen, wenn eine Bedingung erfüllt ist. Der Zustand ist in diesem Fall der MotorSpeed. Wenn die Motordrehzahl größer als gleich 200 ist, bewegt sich der Servo in die 60-Grad-Stellung. Wenn der Servo kleiner als 200 ist, kehrt das Servo in die Ausgangsposition zurück.

  int activateDRS () {<br> int pos = 0; // die pos Variable für die Position definieren // des Servo int Motordreh; // eine andere Variable definieren und es gleich der Funktion // Motorcontroller () = Motordrehmotorcontroller ();  // Die Servo in seine aktive Position zu verschieben, wenn die Drehzahl der Motoren 200 erreicht, wenn (Motordreh> = 200) {for (pos = 60; pos> = 0; Mög- = 1) // geht von 0 Grad bis 60 Grad {// in Schritten von 1 Grad myservo.write (pos); // tell servo zur Position in Variable 'pos' digitalWrite (8, HIGH);  DigitalWrite (12, LOW);  Verzögerung (15); // wartet 15ms, bis der Servo die Position erreicht hat. Lcd.setCursor (0,1);  Lcd.print ( "DRS: ON");  // Lassen Sie das Programm verlassen, nachdem die Servoposition erreicht ist} // dem Benutzer mitteilen, dass das DRS-System auf Serial.println steht ( "DRS: ON");  } If (Motordreh <200) {for (pos = 0; pos <= 60; pos + = 1) // von 900 Grad auf 0 Grad geht {myservo.write (pos); // Servo Position zu gehen sagen in Variable 'pos' digitalWrite (8, LOW);  DigitalWrite (12, HOCH);  Verzögerung (15); // wartet 15ms, bis der Servo die Position erreicht hat. Lcd.setCursor (0,1);  Lcd.print ( "DRS: AUS");  Brechen; // das Programm verlassen, nachdem die Servoposition erreicht ist}} return motorSpeed;  aufrechtzuerhalten.

Die Motorreglerfunktion definiert einfach ein Potentiometer als Analogeingang und ordnet den Motorwert dem in der activateDRS-Funktion verwendeten Digitalbereich zu

  Int motorController () {<br> // Variablen definieren int potPin = A0;  Int motorPin = 6;  Int potValue = 0;  Int motorValue = 0;  // Definiere den PotPin als analogen Eingang potValue = analogRead (potPin);  // Den Analogwert des Pot-Pins dem Motor zuordnen motorValue = map (potValue, 0, 1023, 0, 255);  // Schreiben Sie den Analogwert des Motors an den PWM-Motorstift 6 analogWrite (motorPin, motorValue);  Serial.println (motorValue);  Return motorValue;  aufrechtzuerhalten.

Hier sehen wir, ob ein bestimmter Befehl empfangen wurde. Wenn es das ist, drehen wir das Relais an. Wenn ein anderer Befehl gesendet wird, schaltet das Relais ab, das Macht zu Motor und Servo schneidet.

  Void recvIR () {<br> // ist eine Übertragung empfangen worden?  If (irrecv.decode (& Ergebnisse)) {//Serial.println(results.value);//If ja: interpretiert die empfangenen Befehle ... if (results.value == 12419199) {// Power buttom auf AOC remote Lcd.clear ();  Lcd.noBacklight (); // die Hintergrundbeleuchtungsverzögerung (100) einschalten;  } If (result.value == 12398799) {// Vol up buttom auf AOC Remote Delay (100);  Lcd.clear ();  Lcd.backlight (); // die Hintergrundbeleuchtung lcd.print einschalten ( "System Ready");  DigitalWrite (7, HIGH);  // Relais einschalten (HIGH ist die Spannung) Verzögerung (100);  } If (result.value == 12392679) {// Kanal UP buttom auf AOC remote lcd.clear ();  Lcd.print ( "System OFF");  Verzögerung (500);  Lcd.noBacklight (); // die Hintergrundbeleuchtung digitalWrite (7, LOW) ausschalten;  // Das Relais ausschalten, indem die Spannung LOW digitalWrite (12, LOW) eingestellt wird;  Verzögerung (100);  } Irrecv.resume ();  // Den nächsten Wert erhalten}}

Die Funktion revsPerMilli berechnet die Umdrehungen des Rades pro Millisekunde, indem man zunächst darauf wartet, dass der Interrupt-Wert auf über 100 erhöht wird. Sobald die Umdrehungen 100 erreichen, werden Umfang und Geschwindigkeit des Rades berechnet. Verwendet diese Funktion eine eingebaute Arduino-Funktion namens millis, um die Zeit in Millisekunden zu erhalten.

Anmerkung: Ich habe nicht in der Lage gewesen , um die Encoder richtig funktioniert so diese Funktion für den Code nicht notwendig ist , zu arbeiten. Ich habe es hauptsächlich als eine Verbesserung für später hinzugefügt.

  Float revPerMilli () {<br> // Variablen definieren unsigned int rpmilli;  Schwimmergeschwindigkeit;  Unsigned long timeold;  // Berechnung der Umdrehungen pro Milli (Sekunde) rpmilli = Umdrehungen / (millis () - timeold);  If (Umdrehungen> = 100) {// RPM-Aktualisierung alle 100 Zählungen, Erhöhung dieser für eine bessere RPM-Auflösung, // Abnahme für schnellere Aktualisierungsverzögerung (100);  // die vorherige Zeit in einer Variablen timeold = millis () speichern;  Umdrehungen = 0;  // Berechnen des Umfangs des Radschwimmers WHEELCIRC = 2 * PI * 0,065;  // die Geschwindigkeit der Raddrehzahl bestimmen = rpmilli * WHEELCIRC * 3600;  Serial.print ( "RPM:");  Serial.print (rpmilli);  Verzögerung (100);  } Rückkehr rpmilli;  aufrechtzuerhalten.

Schritt 5: Zusammenbauen

Widerstandsreduzierungssystem

Widerstandsreduzierungssystem

Widerstandsreduzierungssystem

Widerstandsreduzierungssystem

Widerstandsreduzierungssystem

Jetzt alles, was Sie tun müssen, ist alles zusammen. Stellen Sie sicher, dass alles ordnungsgemäß funktioniert, bevor Sie es dauerhaft installieren. Es ist immer eine gute Idee, "Breadboard" Ihre elektrische Design, um sicherzustellen, dass alles funktioniert mit jedem anderen und zu sehen, ob es etwas, das geändert werden muss.

Related Reading