49 Schritt:Schritt 1: Eigenschaften Schritt 2: Werkstoffe Schritt 3: Setzen Sie die Laufräder Schritt 4: Laufradanordnungen Schritt 5: Bringen Sie eine Verbindung Bracket Schritt 6: Drehgeber Schritt 7: Verbinden Sie den Motor Schritt 8: Bringen Berg Schritt 9: Kupplung Schritt 10: Montieren Sie das Antriebsrad Schritt 11: Schließen Sie Schritt 12: Bringen Sie ein Verbindungsstück Schritt 13: Erstellen Sie eine Antriebsanordnung Schritt 14: Rad-Kanäle Schritt 15: Struktur Channels Schritt 16: Montieren Sie die Basis Schritt 17: 3.75 "Channel Schritt 18: Befestigen Schritt 19: Acryl-Grundträger Schritt 20: Top Panel Schritt 21: Installieren Schritt 22: Draht it Up Schritt 23: Acryl-Basis Schritt 24: Bereiten Sie den Akku Schritt 25: Schließen Sie die Batterie Schritt 26: Solder Schritt 27: Befestigen Sie Wires Schritt 28: Programmieren Sie die Arduinos Schritt 29: Stack Es Schritt 30: Befestigen Sie den Basis Schritt 31: Reset-Schalter Schritt 32: Plug Schritt 33: Verbinden Sie den DC-Motor Schritt 34: Befestigen Sie die Acryl Schritt 35: Setzen Sie auf die Abdeckung Schritt 36: Plug Schritt 37: Erste Servo Montage Schritt 38: Stellen Sie eine L-Montage Schritt 39: Ein weiteres Servo Schritt 40: Kleben Schritt 41: Fertig Wiring Schritt 42: Kameramontagebasis Schritt 43: Haltewinkel Schritt 44: Einzel-Arm Schritt 45: Befestigen Sie die Kameraplatte Schritt 46: Montieren Sie die Kamera Schritt 47: Steckereinsatz Schritt 48: Erstellen Sie die Track- Schritt 49: Mit dem Touch Screen

    Vor kurzem erhielt ich die Gelegenheit, auszuprobieren, Servo City Actobotics Build-System. Während ich es benutzt haben, um sehr viele Dinge zu bauen, ich schließlich beschlossen, eine programmierbare Kamerawagen-System zu machen. Dieses Gerät ermöglicht es mir, Zeitrafferfilmen mit komplexen Bewegungen sowie Programm reproduzierbare automatisierte Echtzeit-Kamerabewegungen zu schaffen. Mit anderen Worten ermöglicht diese rig Sie problemlos filmen komplexen Kamerabewegungen im Zeitraffer und in Echtzeit. Dieses Projekt wurde von Servo-Stadt gesponsert. Schritt 1: Eigenschaften Die Robotic-Kamera Dolly-System verfügt über die folgenden Hauptfunktionen: Die Fähigkeit zur Echtzeit-Film-und Stop-Motion-Fotografie. Es ist ontrollable über eine einfach zu bedienende Touch-Screen. Das System lässt sich schwenken, neigen und fahren zur gleichen Zeit. Alle Handlungen sind wiederholbar durch Servomotoren und einer Gleichstrom-Antriebsmotor mit einem Drehgeber. Dank der dynamischen Actobotics Build-System und Open-Source-basierte Hardware Arduino, ist es völlig customizeable eigene needs.Step 2 erfüllen: Materialien Du wirst brauchen: (x1) Motor mit Drehgeber (x1) HS-785HB Winde Servobaugruppe (x1) HS-5485HB Winde Servobaugruppe (x3) Dolly Free Wheel Idler Plates (Paar) (x12) 90 ° Quad Hub Montage D (x10) 90 ° Quad Hub Anschluss C (x5) 90 ° Quad Hub Berg B (x8) 2,975 "Low Friction Skate Wheels (x16) 8mm Non-Kugellager mit Flansch (x4) Mittelloch Adapter (4 Stück) (X7) 8 mm Flansch Standoff (x1) Dolly Antriebsrad Plates (Paar) (x1) Motorhalterung D (3 mm Schrauben im Lieferumfang enthalten) (x1) 6mm bis 1/4 "Set Schraubenkupplung (x1) 2.5 "Stainless Steel D-Shaft (x1) Antriebsrad Adapter Kit B (x1) 1/4 "ID (1/2" OD) mit Flansch Kugellager (x5) 12 "Alu-Kanal (x1) 3,75 "Aluminium-Kanal (x1) 4.5 "Aluminiumkanal (x1) 6 "Aluminium-Kanal (x8) Befestigungsblöcke (1 pack) (x1) Doppel-Flachkanalhalterung (x1) 0,25 "Hub Spacer (x1) 90-Grad-Hub zu Hub-Halterung (x1) 3 "Stromservo einzigen Getriebe Arm (x1) 3 "x 3" x 1/8 "Santoprene-Kautschuk (x2) 24 "x 36" x 1/4 "Sperrholz (x2) 3/4 "x 8 'Stangen (x1) Heavy Duty / AUS-Schalter (x1) M-Typ-Buchse (x1) M-Typ-Netzstecker (x1) 12V Ni-MH-Akku (x2) 1.5K Widerstände (x1) 1K Widerstand (x1) SPST-Relais (x1) SPST momentane Druckschalter (x1) Mono-Audiokabel (x1) TIP120 Transistor (x1) 1N4004 Diode (x1) 3/32 "Mono-Klinkenstecker (oder entsprechende Kamera-Trigger-Stecker) (x2) Arduino Uno (x1) Arduino 2,8 "Touch-Schild (x2) Arduino Proto Schild (x1) 36 "x 24" x 1/8 "acrylicStep 3: Montieren Sie die Führungsräder Legen Sie die Nichtreibungskugellager in eine der niedrigen Reibungs Skate-Rollen. Übergeben Sie die 8mm angeflanscht Pattsituation durch das Lager. Nehmen Sie einen 90-Grad-Quad Nabenanbringung D und fügen Mittelloch-Adapter auf jeder Seite. Übergeben Sie eine Schraube durch die beiden Mittelloch-Adapter und befestigen Sie es fest an seinem Platz. Wiederholen Sie diesen Vorgang 6 weitere Male. Schritt 4: Laufradanordnungen Nehmen Sie zwei der Laufradanordnungen und bringen sie an eine der Dolly Rad Spannplatten. Außerdem fügen Sie eine 90-Grad-Quad-Hub montieren B auf den gleichen Transportwagen Rad Mitlaufplatte. Sobald alle diese gebunden sind, verbinden Sie das andere Rad Dolly Zwischenplatte auf die andere Seite. Baue 3 dieser Baugruppen insgesamt. Schritt 5: Bringen Sie eine Verbindung Bracket Bringen Sie einen 90-Grad-Quad-Hub montieren C zentriert auf der Außenseite eines der Dolly Antriebsrad Platten auf allen 3 des assemblies.Step 6: Drehgeber Alle 8 Artikel anzeigen Der Drehgeber muss die Gleichstromantriebsmotor angebracht sein. Starten Sie durch Abziehen der Klebstoffabdeckung aus dem Kunststoffrahmen und Encoder Mitte dieses auf der Rückseite des Motors. Als nächstes drücken Sie den Drehplatte auf die dünnen Schaft ragte aus der Rückseite des Motors. Schließlich lassen Sie die Kunststoffabdeckung mit dem Encoder auf die Kunststoff base.Step 7 angebracht: Verdrahten Sie den Motor Befestigen Sie eine rote Kabel an den Gleichstrommotor der positiven Anschluss und einem schwarzen Kabel an den Minuspol terminal.Step 8: Bringen Berg Befestigen Sie die Motorhalterung D sicher mit dem Motor. Schritt 9: Kupplung Bringen Sie die 6 mm bis 1/4 "Set Schraubenkupplung an der Motorwelle. Schritt 10: Montieren Sie das Antriebsrad Installieren Sie das Antriebsrad-Adapter-Kit B in eine der niedrigen Reibungs Skate-Rollen zusammen mit dem 2,5 "Edelstahl-D-Welle. Auf der Seite des Rades gegenüber der Befestigungsschraube für das Adapter-Kit, Rutsche auf einem Mittelloch-Adapter, gefolgt von einem Quad-Nabenanbringung D bracket.Step 11: Schließen Verbinden Sie das 2,5 "D Welle mit der Motorwelle mit der Kupplung eingestellt screw.Step 12: Bringen Sie ein Verbindungsstück Bringen Sie ein Quad-Hub montieren C zentriert auf einem der Dolly Antriebsrad Platten .Schritt 13: Erstellen einer Antriebsanordnung Bringen Sie den Motor und Antriebsrades mit dem Antriebsrad Platte zusammen mit einem Losrad und einem Quad-Hub montieren B. Installieren Sie das andere Antriebsrad Platte auf der anderen Seite, sobald completed.Step 14: Rad-Kanäle Befestigen beiden Laufradanordnungen auf der Außenseite eines 12 "Aluminium-Kanal. Befestigen Sie einen Laufradanordnung und die Motorantriebsanordnung an der Außenseite einen anderen 12 "Aluminium channel.Step 15: Struktur Channels Nehmen Sie drei 12 "Alu-Kanälen und installieren Sie eine 90-Grad-Quad-Halterung C-Anschluss an jedem Ende. Schritt 16: Montieren Sie die Basis Verbinden Sie die beiden Aluminium-Rad-Kanäle zusammen mit den drei Struktur Kanäle. Stellen Sie sicher, dass es 3 "zwischen den einzelnen Strukturkanal Schritt 17:. 3.75" Channel Bringen Sie einen 90-Grad-Quad Nabenhalterung B an das Ende eines 3,75 "Aluminium-Kanal .Schritt 18: Befestigen Zentrieren Sie das 3,75 "Aluminium-Kanal senkrecht zum Boden und befestigen Sie ihn mit Befestigungsschrauben. Mit anderen Worten, zu zentrieren es auf Ende von der Mittelstütze chanel. Schritt 19: Acryl-Grundträger Schließen Befestigungsblöcke an der Innenseite der jeweiligen Support-Kanal, so dass sie alle ausgerichtet und 7,82 "auseinander legnthwise.Step 20: Top Panel Verwenden Sie die angehängte Datei als Leitfaden für die obere Abdeckung von 1/8 "acrylic.Step 21 geschnitten: Installieren Installieren Sie den SPST / Aus-Schalter und M-Typ-Stromanschluss in die entsprechenden Löcher in der Acrylober panel.Step 22: Draht it Up Verbinden Sie den Stromanschluss an den DPDT-Schalter wie in der schematischen angegeben. Schritt 23: Acryl-Basis Schneiden Sie die Grundstücke von 1/8 "Acryl mit dem beiliegenden Vorlage. Schritt 24: Bereiten Sie den Akku Kabelbinder die Batterie mit dem Acryl-Basis mit dem Satz von vier 0,2 "Löcher in der Mitte. Schneiden Sie die Kunststoffstecker von der Batterie, so dass so viel Draht an die Batterie als possible.Step 25 angeschlossen: Schließen Sie die Batterie Schließen Sie die Batteriekabel an die entsprechenden Anschlüsse an die Strombuchse, wie in der schematischen angegeben. Schritt 26: Solder Klappen Sie den proto Schild über und die Buchsenleiste Stifte einfügen nach oben in die entsprechenden Schlitze auf dem Schild. Als nächstes stecken Sie den Touch-Screen-Schild in die Buchsenleiste Buchsen, um sicherzustellen, die Stifte alle werden gerade gehalten. Schließlich schnell löten alle Stifte an Ort und Stelle. Vermeiden Aufheizen einer der Pins zu lange, um Schäden an den Touch shield.Step 27 zu verhindern: Schließen Sie Drähte Bauen die Schaltung, wie in der schematischen spezifiziert. Verlängern Drähte für die Servos, den Gleichstrommotor und Drehgeber von den proto Schilde, aber noch nicht verbinden sie. Zusätzlich verbinden ein abgeschirmtes Mono-Kabel an den Proto-Schild für den Trigger-Stecker, sondern auch, noch nicht überweisen Sie den Stecker einrasten. Schritt 28: Programmieren Sie die Arduinos Laden Sie diesen Code auf die Arduino Steuerung des Touch-Schild: // Kamera-Anlage Touchscreen-Controller #include <Wire.h> #include <Adafruit_GFX.h> // Core-Grafik-Bibliothek #include <Adafruit_TFTLCD.h> // Hardware-spezifischen Bibliothek #include <TouchScreen.h> #if defined (__ SAM3X8E__) #undef __FlashStringHelper :: F (string_literal) #define F (string_literal) string_literal #endif #ifndef USE_ADAFRUIT_SHIELD_PINOUT Error "Diese Skizze ist für die Verwendung mit dem TFT-LCD-Schirm bestimmt sind. Stellen Sie sicher, dass USE_ADAFRUIT_SHIELD_PINOUT wird im Adafruit_TFTLCD.h Bibliotheksdatei #define." #endif // Das sind die Pins für die Abschirmung! #define YP A1 // muss ein analoger Stift, verwenden Sie "An" Schreibweise! #define XM A2 // muss ein analoger Stift, verwenden Sie "An" Notation zu sein! #define YM 7 // kann ein digitaler Stift sein #define XP 6 // kann ein digitaler Stift sein #ifdef __SAM3X8E__ #define TS_MINX 125 #define TS_MINY 170 #define TS_MAXX 880 #define TS_MAXY 940 #else #define TS_MINX 150 #define TS_MINY 120 #define TS_MAXX 920 #define TS_MAXY 940 #endif // Für bessere Druckgenauigkeit, müssen wir den Widerstand kennen // Zwischen X + und X- Verwenden Sie eine Multimeter, es zu lesen // Für die, die wir gerade verwenden, ihre 300 Ohm über die X-Platte TouchScreen ts = TouchScreen (XP, YP, XM, YM, 300); #define LCD_CS A3 #define LCD_CD A2 #define LCD_WR A1 #define LCD_RD A0 // Weisen Menschen lesbaren Namen auf einige häufig 16-Bit-Farbwerte: #define BLACK 0x0000 #define BLUE 0x001F #define RED 0xF800 #define GREEN 0x07E0 #define CYAN 0x07FF #define MAGENTA 0xF81F #define YELLOW 0xFFE0 #define WHITE 0xFFFF #define lblue 0x65FF Adafruit_TFTLCD TFT; int oldcolor, current; bool pan = 1; int panPosition1 = 20; int panPosition2 = 20; bool tilt = 0; int tiltPosition1 = 20; int tiltPosition2 = 20; bool Antrieb = 0; int drivePosition1 = 20; int drivePosition2 = 20; bool Zeit = 0; int timePosition1 = 20; int timePosition2 = 20; int startsend = 0; int x; Leere Setup (void) { Wire.begin (); // Beitreten I2C-Bus (Adresse optional für Master) Serial.begin (9600); tft.reset (); uint16_t Kennung = tft.readID (); if (Kennung == 0x9325) { Serial.println (F ("Gefunden ILI9325 LCD-Treiber")); } Else if (Kennung == 0x9328) { Serial.println (F ("Gefunden ILI9328 LCD-Treiber")); } Else if (Kennung == 0x7575) { Serial.println (F ("Gefunden HX8347G LCD-Treiber")); } Else { Serial.print (F ("Unknown LCD-Treiber-Chip:")); Serial.println (Kennung, HEX); zurück; } tft.begin (Identifier); tft.setRotation (1); tft.fillScreen (SCHWARZ); drawMenu (); tft.drawRect (0, 0, 58, 40, weiß); // setze Anfangsschieberzustände tft.drawRect (19, 89, 272, 6, weiß); tft.fillRect (20, 90, 270, 4, gelb); tft.drawRect (panPosition1, 71, 17, 42, weiß); tft.fillRect ((panPosition1 + 1), 72, 15, 40, Magenta); tft.drawRect (19, 169, 272, 6, weiß); tft.fillRect (20, 170, 270, 4, gelb); tft.drawRect (panPosition2, 151, 17, 42, weiß); tft.fillRect ((panPosition2 + 1), 152, 15, 40, Magenta); current = rot; pinMode (13, Ausgang); } #define MINPRESSURE 10 #define MAXPRESSURE 1000 Leere Schleife () { digital (13, HOCH); Punkt p = ts.getPoint (); digital (13, LOW); // Wenn Sharing Stifte, müssen Sie die Richtungen der Touchscreen Stifte fixieren pinMode (XM, OUTPUT); pinMode (YP, OUTPUT); // Wir eine Mindestdruck betrachten wir haben "gültig" // Druck von 0 bedeutet, dass keine Press! if (pz> MINPRESSURE && pz <MAXPRESSURE) { // Skala von 0-> 1023 tft.width px = map (px, TS_MINX, TS_MAXX, tft.width (), 0); py = Karte (py, TS_MINY, TS_MAXY, tft.height (), 0); // **************************** // TOP MENU Auswahlcode !!!! // **************************** if (px> 300) { oldcolor = current; if (py <58) { current = rot; tft.drawRect (0, 0, 58, 40, weiß); pan = 1; tilt = 0; Antrieb = 0; Zeit = 0; drawSliders (); } Else if (py <140) { current = lblue; tft.drawRect (58, 0, 82, 40, weiß); pan = 0; tilt = 1; Antrieb = 0; Zeit = 0; drawSliders (); } Else if (py <180) { current = blau; tft.drawRect (140, 0, 96, 40, weiß); pan = 0; tilt = 0; Fahrt = 1; Zeit = 0; drawSliders (); } Else if (py <240) { current = grün; tft.drawRect (236, 0, 82, 40, weiß); pan = 0; tilt = 0; Antrieb = 0; Zeit = 1; drawSliders (); } } // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! // Brauche ich das AT ALL ???????????????? // Er ist ausschließlich LESEN Menü Zeichnen ?????????????? if (oldcolor! = current) { if (oldcolor == RED) drawMenu (); if (oldcolor == lblue) drawMenu (); if (oldcolor == GRÜN) drawMenu (); if (oldcolor == BLUE) drawMenu (); } // **************************** // START Auswahlcode !!!! // **************************** if (Pixel <40) { if (py> 180) { tft.drawRect (220, 200, 96, 40, weiß); startsend = 1; } } // **************** // SLIDER CODE !!!!! // **************** // TOP SLIDER if (px> 180 && px <260) { if (py <350) { if (py> = 20) {// oder so ... zum ersten schwarzen Quadrat ... // benötigen unteren remap und Top remap !!! py = Karte (py, 0, 240, 0, 300); tft.fillRect (10, 71, (py - 10), 50, schwarz); } tft.drawRect ((iV - 1), 71, 17, 42, weiß); tft.fillRect (py, 72, 15, 40, magenta); tft.fillRect ((py + 16), 71, (282 - py), 50, schwarz); tft.drawRect ((py + 15), 89, (272 - py), 6, weiß); tft.fillRect ((py + 16), 90 (270 - py), 4, gelb); tft.drawRect (19, 89, (py - 19), 6, weiß); tft.fillRect (20, 90, (py - 20), 4, gelb); if (pan == 1) { panPosition1 = py; // Serial.println (panPosition1); } Else if (Neigungs == 1) { tiltPosition1 = py; } Else if (Antriebs == 1) { drivePosition1 = py; } Else if (Zeit == 1) { timePosition1 = py; } } } // Unteren Regler if (px> 80 && px <160) { if (py <350) { if (py> = 20) {// oder so ... zum ersten schwarzen Quadrat ... // benötigen unteren remap und Top remap !!! py = Karte (py, 0, 240, 0, 300); tft.fillRect (10, 151, (py - 10), 50, schwarz); } tft.drawRect ((iV - 1), 151, 17, 42, weiß); tft.fillRect (py, 152, 15, 40, magenta); tft.fillRect ((py + 16), 151, (282 - py), 50, schwarz); tft.drawRect ((py + 15), 169, (272 - py), 6, weiß); tft.fillRect ((py + 16), 170, (270 - py), 4, gelb); tft.drawRect (19, 169, (py - 19), 6, weiß); tft.fillRect (20, 170, (py - 20), 4, gelb); if (pan == 1) { panPosition2 = py; Serial.println (panPosition2); } Else if (Neigungs == 1) { tiltPosition2 = py; } Else if (Antriebs == 1) { drivePosition2 = py; } Else if (Zeit == 1) { timePosition2 = py; } } } // ************************** // Übermittelt ANDERE ARDUINO // ************************** if (startsend == 1) { transmitValues ​​(); startsend = 0; Verzögerung (2000); drawMenu (); if (pan == 1) tft.drawRect (0, 0, 58, 40, weiß); if (Neigungs == 1) tft.drawRect (58, 0, 82, 40, weiß); if (Antriebs == 1) tft.drawRect (140, 0, 96, 40, weiß); if (Zeit == 1) tft.drawRect (236, 0, 82, 40, weiß); } } } Leere transmitValues ​​() { Wire.beginTransmission (2); // Zum Gerät # 2 übertragen, x = panPosition1; Wire.write ("a"); // Sendet fünf Bytes Wire.write (x); Wire.endTransmission (); // Anschlag Sende Verzögerung (100); Wire.beginTransmission (2); // Zum Gerät # 2 übertragen, x = panPosition2; Wire.write ("b"); // Sendet fünf Bytes Wire.write (x); Wire.endTransmission (); // Anschlag Sende Verzögerung (100); Wire.beginTransmission (2); // Zum Gerät # 2 übertragen, x = tiltPosition1; Wire.write ("c"); Wire.write (x); Wire.endTransmission (); // Anschlag Sende Verzögerung (100); Wire.beginTransmission (2); // Zum Gerät # 2 übertragen, x = tiltPosition2; Wire.write ("d"); Wire.write (x); Wire.endTransmission (); // Anschlag Sende Verzögerung (100); Wire.beginTransmission (2); // Zum Gerät # 2 übertragen, x = drivePosition1; Wire.write ("e"); // Sendet fünf Bytes Wire.write (x); Wire.endTransmission (); // Anschlag Sende Verzögerung (100); Wire.beginTransmission (2); // Zum Gerät # 2 übertragen, x = drivePosition2; Wire.write ("f"); // Sendet fünf Bytes Wire.write (x); Wire.endTransmission (); // Anschlag Sende Verzögerung (100); Wire.beginTransmission (2); // Zum Gerät # 2 übertragen, x = timePosition1; Wire.write ("g"); Wire.write (x); Wire.endTransmission (); // Anschlag Sende Verzögerung (100); Wire.beginTransmission (2); // Zum Gerät # 2 übertragen, x = timePosition2; Wire.write ("h"); Wire.write (x); Wire.endTransmission (); // Anschlag Sende Verzögerung (100); Wire.beginTransmission (2); // Zum Gerät # 2 übertragen, x = startsend; Wire.write ("i"); Wire.write (x); Wire.endTransmission (); // Anschlag Sende } Leere drawSliders () { if (oldcolor! = current) { tft.fillRect (10, 60, 300, 200, schwarz); } if (pan == 1) { tft.drawRect (19, 89, 272, 6, weiß); tft.fillRect (20, 90, 270, 4, gelb); tft.drawRect (panPosition1, 71, 17, 42, weiß); tft.fillRect ((panPosition1 + 1), 72, 15, 40, Magenta); tft.drawRect (19, 169, 272, 6, weiß); tft.fillRect (20, 170, 270, 4, gelb); tft.drawRect (panPosition2, 151, 17, 42, weiß); tft.fillRect ((panPosition2 + 1), 152, 15, 40, Magenta); } Else if (Neigungs == 1) { tft.drawRect (19, 89, 272, 6, weiß); tft.fillRect (20, 90, 270, 4, gelb); tft.drawRect (tiltPosition1, 71, 17, 42, weiß); tft.fillRect ((tiltPosition1 + 1), 72, 15, 40, Magenta); tft.drawRect (19, 169, 272, 6, weiß); tft.fillRect (20, 170, 270, 4, gelb); tft.drawRect (tiltPosition2, 151, 17, 42, weiß); tft.fillRect ((tiltPosition2 + 1), 152, 15, 40, Magenta); } Else if (Antriebs == 1) { tft.drawRect (19, 89, 272, 6, weiß); tft.fillRect (20, 90, 270, 4, gelb); tft.drawRect (drivePosition1, 71, 17, 42, weiß); tft.fillRect ((drivePosition1 + 1), 72, 15, 40, Magenta); tft.drawRect (19, 169, 272, 6, weiß); tft.fillRect (20, 170, 270, 4, gelb); tft.drawRect (drivePosition2, 151, 17, 42, weiß); tft.fillRect ((drivePosition2 + 1), 152, 15, 40, Magenta); } Else if (Zeit == 1) { tft.drawRect (19, 89, 272, 6, weiß); tft.fillRect (20, 90, 270, 4, gelb); tft.drawRect (timePosition1, 71, 17, 42, weiß); tft.fillRect ((timePosition1 + 1), 72, 15, 40, Magenta); tft.drawRect (19, 169, 272, 6, weiß); tft.fillRect (20, 170, 270, 4, gelb); tft.drawRect (timePosition2, 151, 17, 42, weiß); tft.fillRect ((timePosition2 + 1), 152, 15, 40, Magenta); } } Leere drawMenu () { tft.fillRect (236, 0, 82, 40, grün); tft.fillRect (140, 0, 96, 40, blau); tft.fillRect (58, 0, 82, 40, lblue); tft.fillRect (0, 0, 58, 40, RED); tft.drawChar (2, 10, 'P', weiß, rot, 3); tft.drawChar (20, 10, "A", weiß, rot, 3); tft.drawChar (38, 10, 'N', weiß, rot, 3); tft.drawChar (64, 10, 'T', WEISS, lblue, 3); tft.drawChar (82, 10, "I", WEISS, lblue, 3); tft.drawChar (100, 10, 'L', WEISS, lblue, 3); tft.drawChar (118, 10, 'T', WEISS, lblue, 3); tft.drawChar (144, 10, 'D', weiß, blau, 3); tft.drawChar (162, 10, 'R', weiß, blau, 3); tft.drawChar (180, 10, "I", weiß, blau, 3); tft.drawChar (198, 10, "V", weiß, blau, 3); tft.drawChar (216, 10, 'E', weiß, blau, 3); tft.drawChar (242, 10, 'T', weiß, grün, 3); tft.drawChar (260, 10, "I", weiß, grün, 3); tft.drawChar (278, 10, 'M', weiß, grün, 3); tft.drawChar (296, 10, 'E', weiß, grün, 3); tft.fillRect (220, 200, 96, 40, blau); tft.drawChar (224, 210, 'S', weiß, blau, 3); tft.drawChar (242, 210, 'T', weiß, blau, 3); tft.drawChar (260, 210, 'A', weiß, blau, 3); tft.drawChar (278, 210, 'R', weiß, blau, 3); tft.drawChar (296, 210, 'T', weiß, blau, 3); } szmtag Laden Sie diesen Code auf den Arduino, das werden die Steuerung den Motor: // Kamera Rig Motor Controller #include <Servo.h> #define ENC_A 14 #define ENC_B 15 #define ENC_PORT PINC Servo panServo; Servo tiltServo; int Abstand = 0; bool statechange = 0; int motorPin = 3; // Um ​​digitale Stift 9 LED verbunden schweben Drivex = 0; schweben tiltX = 0; schweben Panx = 0; schweben Timex = 0; schweben driveZ = 0; schweben tiltZ = 0; schweben PanZ = 0; schweben Picz = 0; int Restweg = 0; // für Programm int progStart = 0; //zur Prüfung // int progStart = 1; int Motorgeschwindigkeit; schweben totalTilt; schweben totalPan; schweben totalDrive; schweben panIncrement; schweben tiltIncrement; schweben driveIncrement; schweben picsPerPanIncrement = 1; schweben picsPerTiltIncrement = 1; schweben picsPerDriveIncrement = 1; int panSteps = 0; int tiltSteps = 0; int driveSteps = 0; char dataRx [20]; #include <Wire.h> Leere setup () { Wire.begin (2); // Beitreten I2C-Bus mit der Adresse # 2 Wire.onReceive (receiveEvent); // Ereignis registrieren Serial.begin (9600); // Beginnen Serien für die Ausgabe panServo.attach (4); tiltServo.attach (5); tiltServo.writeMicroseconds (1100); panServo.writeMicroseconds (1500); Verzögerung (10000); pinMode (8, Ausgang); pinMode (ENC_A, INPUT); digital (ENC_A, HIGH); pinMode (ENC_B, INPUT); digital (ENC_B, HIGH); } Leere Schleife () { if (progStart == 1) { tiltX = map (tiltX, 0, 255, 750, 1450); tiltZ = map (tiltZ, 0, 255, 750, 1450); Panx = map (Panx, 0, 255, 600, 2200); PanZ = Karte (PanZ, 0, 255, 600, 2200); Serial.println (Panx); Serial.println (PanZ); if (Timex <5) { Motorgeschwindigkeit = 150; DRIVEX = (DRIVEX, 0, 255, 0, 180); Timex = 0; } Else { Motorgeschwindigkeit = 75; DRIVEX = (DRIVEX, 0, 255, 0, 360); } totalPan = (Panx - PanZ); totalPan = abs (totalPan); totalTilt = tiltX - tiltZ; totalTilt = abs (totalTilt); totalDrive = Drivex; Serial.println (totalPan); // ************************************************ *** // herausfinden, wie weit vor der Einnahme von Fotos voran // abwechselnd, wie viele Bilder vor dem vorrückenden nehmen // ************************************************ *** //! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! // Diese müssen VERDAMMTES Schwimmer und Scheiße! //! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! panIncrement = totalPan / Picz; if (totalPan <Picz) { picsPerPanIncrement = 1 / panIncrement; panIncrement = 1; } tiltIncrement = totalTilt / Picz; if (totalTilt <Picz) { picsPerTiltIncrement = 1 / tiltIncrement; tiltIncrement = 1; } driveIncrement = totalDrive / Picz; if (totalDrive <Picz) { picsPerDriveIncrement = 1 / driveIncrement; driveIncrement = 1; } // ************************************** // Servos in die Ausgangsposition zu bewegen // ************************************** tiltServo.writeMicroseconds (tiltX); panServo.writeMicroseconds (Panx); Verzögerung (10000); // ************************************** // ein paar Fotos und ein paar Sachen zu bewegen // ************************************** for (int takingPictures = 0; takingPictures <Picz; takingPictures ++) { if (panSteps> = picsPerPanIncrement) { if (Panx> PanZ) { panServo.writeMicroseconds (Panx - panIncrement); Panx = Panx - panIncrement; } else if (Panx <PanZ) { panServo.writeMicroseconds (Panx + panIncrement); Panx = Panx + panIncrement; } else { panServo.writeMicroseconds (Panx); } panSteps = 0; } if (tiltSteps> = picsPerTiltIncrement) { if (tiltX> tiltZ) { tiltServo.writeMicroseconds (tiltX - tiltIncrement); tiltX = tiltX - tiltIncrement; } else if (tiltX <tiltZ) { tiltServo.writeMicroseconds (tiltX + tiltIncrement); tiltX = tiltX + tiltIncrement; } else { tiltServo.writeMicroseconds (tiltX); } tiltSteps = 0; } if (driveSteps> = picsPerDriveIncrement) { analogWrite (motorPin, Motorgeschwindigkeit); während (Abstand <Restweg) { callEncoder (); } analogWrite (motorPin, 0); driveSteps = 0; } Restweg = Restweg + driveIncrement; Verzögerung (Timex * 500); Serial.println ("SHOOT !!!"); //ein Foto machen digital (8, HOCH); // Die Kamera Trigger verbinden Verzögerung (500); // Warten, für eine zweite digital (8, LOW); // Die Kamera Trigger trennen Verzögerung (500); panSteps = panSteps + 1; tiltSteps = tiltSteps + 1; driveSteps = driveSteps + 1; progStart = 0; } } } // Funktion, wenn Daten durch den Master angefordert ausführt // Diese Funktion wird als Ereignis registriert, siehe Setup () Leere receiveEvent (int Halter) { int index = 0; while (1 <Wire.available ()) // Schleife durch alle außer der letzten { char c = Wire.read (); // Byte als ein Zeichen empfangen // Serial.print (c); // Das Zeichen zu drucken dataRx [index ++] = c; dataRx [index] = '\ 0'; } int x = Wire.read (); // Bytes als ganze Zahl zu erhalten // Serial.println (x); // Den ganzzahligen drucken if (* dataRx == 'a') { Panx = x; Serial.print ("OMG PARSING Panx:"); Serial.println (Panx); } Else if (* dataRx == 'b') { PanZ = x; Serial.print ("OMG PARSING PANZ:"); Serial.println (PanZ); } Else if (* dataRx == 'c') { tiltX = x; Serial.print ("OMG PARSING TILTX:"); Serial.println (tiltX); } Else if (* dataRx == 'd') { tiltZ = x; Serial.print ("OMG PARSING TILTZ:"); Serial.println (tiltZ); } Else if (* dataRx == 'e') { Drivex = x; Serial.print ("OMG PARSING DRIVEX:"); Serial.println (Drivex); } Else if (* dataRx == 'f') { driveZ = x; Serial.print ("OMG PARSING DRIVEZ:"); Serial.println (driveZ); } Else if (* dataRx == 'g') { Timex = x; Serial.print ("OMG PARSING TIMEX:"); Serial.println (Timex); } Else if (* dataRx == 'h') { Picz = x; Serial.print ("OMG PARSING PICZ:"); Serial.println (Picz); } Else if (* dataRx == 'i') { progStart = x; Serial.print ("OMG PARSING START:"); Serial.println (progStart); } } / * Renditen ändern in Codiererzustand (-1,0,1) * / int8_t read_encoder () { statische int8_t enc_states [] = {0, -1,1,0,1,0,0, -1, -1,0,0,1,0,1, -1,0}; statische uint8_t old_AB = 0; / ** / old_AB << = 2; // erinnern vorherigen Zustand old_AB | = (ENC_PORT & 0x03); // aktuellen Stand hinzufügen return (enc_states [(old_AB & 0x0f)]); } Leere callEncoder () { // AnalogWrite (motorPin, 0); // Verzögerung (1000); // // // 30Dst @ 150Sp // // 60Dst @ 75Sp // // 60Dst @ 50SP // // While (Entfernung <240) { // AnalogWrite (motorPin, 75); //} statische uint8_t counter = 0; // Diese Variable wird durch Encoder-Eingang geändert werden int8_t tmpdata; / ** / tmpdata = read_encoder (); if (tmpdata) { // Serial.print ("Counter-Wert:"); // Serial.println (Zähler, DEC); Gegen + = tmpdata; if (Zähler == 255) { statechange = 1; } if (Zähler == 0) { if (state == 1) { statechange = 0; Abstand + = 1; Serial.print ("Schritten:"); Serial.println (Abstand, DEC); } } } } szmtag Schritt 29: Stack Es Stapeln Sie die proto Schild oben auf dem Arduino, und dann den Touchscreen Spitze der proto Schild. Schritt 30: Befestigen Sie den Basis Schrauben Sie die Arduinos zu den Befestigungslöchern auf der Acryl-Basis. Dies kann erfordern, aus- und einstecken die shields.Step 31: Reset-Schalter Setzen Sie den Reset-Schalter durch eines der Löcher in der äußeren Tragkanal und befestigen Sie es an Ort und Stelle mit seinen Befestigungsteilen. Befestigen Sie zwei Kabel an den Schalter, der elektrischen Kontakt, wenn der Schalter 32 closed.Step machen: Plug Stecken Sie das 4-Kabelbaums in den Anschluss auf dem Dreh encoder.Step 33: Verbinden Sie den DC-Motor Schließen Sie die Energie von der Gleichstrommotor, um Drähte kommen aus der TIP120 Transistor. Schließen Sie den Drehgeber an die Motorsteuerung Arduino wie folgt: Red In den 5V Netz Schwarz Ground Gelb Pin A0 Grün Pin A1Step 34: Befestigen Sie die Acryl Befestigen Sie die zusammengebauten Acrylbasen auf die Aluminiumantriebsanordnung. Schritt 35: Setzen Sie auf die Abdeckung Übergeben Sie die abgeschirmte Monodraht und die Arduino Servo Drähte bis durch das Mittelloch des zentralen 90-Grad-Quad-Hub montieren B, wenn Sie nicht bereits getan haben. Sobald die Drähte durchlaufen werden, schieben Sie den Acryl-Deckplatte nach unten oben auf dem Antriebsaggregat und befestigen Sie es dort mit Schrauben und Muttern. Schritt 36: Plug Sobald das abgeschirmte Monodraht wird durch die Basiseinheit geführt, fügen Sie eine 3/32 "Mono-Stecker am Ende (oder eines Adapters entsprechend Ihrer DSLR-Trigger) Schritt. 37: Erste Servo Montage Das Zahnrad aus dem HS-5485HB Winde Servobaugruppe. Befestigen Sie den Servoanordnung an einem Ende eines 4,5 "Aluminium-Kanal. Installieren Sie ein 90-Grad-Quad-Hub B Halterung in das andere Ende des channel.Step 38: Machen Sie eine L-Montage Bringen Sie ein 6 "Aluminium-Kanal an die 90-Grad-Quad-Hub B-Mount an der Aluminiumkanal mit dem Servo befestigt befestigt, um eine L-shape.Step 39 bilden: Another Servo Befestigen Sie den HS-785HB Servo-Montage bis zum Ende des 6 "Aluminium-Strangpressgegenüber der Verbindung auf dem L-bracket.Step 40: Befestigen Bringen Sie einen 90-Grad-Quad Nabenanbringung D Halterung an der Mitte des Zahnrades auf der HS-785B Winde Servo Montage. Als nächstes bringt die 90-Grad-Quad Nabenanbringung D Halterung an der inneren Oberseite des Aluminium-Extrusion senkrecht protroduing vom base.Step 41: Fertig Wiring Verbinden Sie zusammen die Servodrähte mit den Verlängerungsservo Drähte von der Arduino. Nehmen Sie andere lose Verbindungen, wie in der schematischen angegeben. Bündeln und Kabelbinder alle Drähte ordentlich zusammen. Schritt 42: Kameramontagebasis Werfen Sie einen Dual-Flachkanal bracke t und schließen Sie einen 90-Grad-Quad Nabenanbringung D Halterung an einer Seite und ein 0,25 "Hub Spacer an das andere side.Step 43: Haltewinkel Auf der anderen Seite des Doppelflachkanalhalterung und auf der gleichen Seite wie das 0,25 "Hub Spacer, schließen Sie einen 90-Grad-Nabe an der Nabe montieren .Schritt 44: Einzel-Arm Befestigen Sie die 3 "Stromservo einzigen Getriebe Arm in die freie Seite der Nabe an der Nabe mount.Step 45: Befestigen Sie die Kameraplatte Place the gear back onto the shaft of the HS-5485HB winch servo assembly. Also place on the 0.77" hub adapter . Finally, attach the top of the power servo arm to the 0.77" hub. Step 46: Mount the Camera Use the attached file as a template for cutting a 1/8" rubber ring to place atop the hub spacer. Insert a 3/8" bolt up through the quad hub mount and hub spacer to lock the camera in place. Fasten the camera to the assembly.Step 47: Insert Plug Insert the trigger plug into the camera remote trigger jack.Step 48: Build the Track Alle 13 Artikel anzeigen The track system can be made of any legnth of 3/4" pipe that you would like. It can also be built in most any way so long as the track is 13.5" apart and nothing collides with the wheels. I used aluminum rods that I found at the hardware store, but you can also use PVC or wooden dowel rods. To create the frame for the rods, I used the attached 3D model to print connector brackets, and the 2D layout file to create wooden spacers. Once I had these parts fabricated, I then drilled 1/8" holes in the pipe every 11.5" and used these to build the frame.Step 49: Using the Touch Screen The touch screen interface has four menu options: Pan - Sliders for setting in and out points Tilt - Sliders for setting in and out points. Drive - The top slider sets only the stopping point Start - The top slider sets time interval and the bottom sets number of pictures to take.$(function() {$("a.lightbox").lightBox();});

      1 Schritt:

      Video 6ft Hoch, Fernbedienung, Tilt-Rotor, Fliegen Geist Scars Children for Life für dieses Halloween wurde ich inspiriert , um eine fliegende Gespenst um kleine Kinder zu terrorisieren erstellen. Die Motoren, Regler, Servos, Radio und Batterie sind alle normalen RC Teile. Das Gehirn ist ein KKmulticontroller , und der Rahmen und Kostüme werden von mir gemacht. Schauen Sie sich mein Blog für weitere Informationen. Vielen Dank!

      Seiten: