Kameravogn med panorering


kameravogn med panorering

I denne guide beskriver jeg hvordan jeg har designet, bygget og programmeret en kameravogn med panorering. Kameraet kan panorere og er kontrolleret af en ESP8266. Til at betjene kameraet har jeg oprettet en Blynk app. Her er en hurtig oversigt over, hvad denne guide indeholder:

Konstruktion af vognen

Bundplade

Jeg har anvendt en aluminium plade – 31 x 200 x 3 mm – som er købt i Bauhaus og skåret ud. Vægten stabiliserer vognen når den kører. Pladen er designet, så den passer i en vogn fra den Rullende Landevej / Rollende Landstraße fra Märklin.

bundplade

Tandhjul

Jeg har brugt 3 tandhjul i alt, som jeg har købt hos Conrad. 2 stk på 31,5 mm og 1 stk på 21,5 mm. Derudover har jeg købt 4 mm aksler i Bauhaus. Faktisk er det pop-nitter der er skåret til. Lim en metalskive på det ene store tandhjul. Kameraet Cube+ har en magnet i bunden, der kan fastgøres her. Til andre typer af kameraer kan man anvende dobbeltklæbende tape.

tandhjul

Servomotor

Servoen skal kunne dreje 0 til 180 grader +/- 90 grader. Jeg har købt en mikro servomotor hos Elextra. Den monteres på en 31 x 44 x 2 mm plast plade eller en aluminiumplade. Skruerne er 3 mm skruer fra Bauhaus. Bøsningerne er plastikrør.

mikro servomotor

ESP8266

Jeg har købt et Node MCU ESP8266 WiFi-baseret microcontroller board hos Conrad til at forbinde Arduino’en til internettet.

Strømforsyning

Jeg har brugt et 9V batteri til strømforsyning. Her kan man overveje en anden løsning f.eks. en forsyning fra skinnen. Dog skal der transformeres ned til max 9v og tilføjes en tænd/sluk kontakt til batteriet.

strømforsyning

Kamera

Jeg har anvendt et Polaroid Cube+ med WiFi. Desværre ser det ud til at produktet er udgået. Som alternativ til dette kamera kan man anvende et RunCam 5. Jeg har ikke selv prøvet kameraet, men det fremgår at kameraet kan optage i 4K og er specielt designet til optagelse fra FPV modeller. Dimensionerne til RunCam 5 er 38 x 38 x 36mm.

action kamera

Forbind ESP8266 med servo og batteri

Servoen med dens 3 ledninger forbindes således:

  • Gul – signal – D4
  • Rød – 3v
  • Sort – Ground (GND)
  • Batteriet er forbundet til GND og VIN

fritzing sketch

Blynk app

Blynk appen til iOS og Android er den nemmeste måde at bygge din egen mobilapp, der fungerer med dit valg af hardware. Ingen iOS- eller Android kode erfaring er påkrævet. Der findes mange videoer på youtube der viser hvordan man arbejder med Blynk.

blynk app

Importer en kopi af min Blynk app

Følg trin 1 til 5 for at importere en fuld funktionel kopi af min app. Når du har importeret min Blynk app kan du vælge at ændre i layout mm.

Trin 1

Installer Blynk appen på din mobil. Den er gratis.

Trin 2

Opret en konto

opret konto

Trin 3

Importer et projekt. Tryk på QR knappen og scan koden.

importer projekt

QR kode

Trin 4

Projektet ‘Kamerawaggon – basic’ burde nu være importeret til din Blynk app. Dette er basisprojektet med funktionalitet til at betjene servoen. Du kan ændre tekster og måske tilføje ekstra knapper, billeder mm. For at gøre dette skal du formentlig købe mere ”Energy” i appen. Jeg har købt for 59 DKK. Derefter kan du starte app projektet ved at klikke på ‘play’ ikonet og se hvordan den fungerer.

kamerawaggon app

Trin 5

For at modtage et Blynk Token skal du gå til indstillinger. På denne side kan du se din Blynk-Token (den er er IKKE den samme som min). Tryk på E-mail knappen og du kan nu sende denne token til dig selv.

blynk token

Her er den færdige app. Der er 5 knapper med pile og 2 horisontale sliders. De andre elementer er tekster og billeder, som evt. kan undværes.

app home

Hver slider og knap har en virtual pin.

  • V0 – vælg vinkel slider
  • V1 – vælg hastighed slider
  • V2 – 0 grader
  • V3 – 45 grader
  • V4 – 90 grader
  • V5 – 135 grader
  • V6 – 180 grader

design view

Detaljer for vælg vinkel slider: Værdierne er mellem 0 og 180 (grader).

angle slider

Detalje for vælg hastighed slider: Værdierne går fra 20 til 1. Hastigheden er implementeret som en forsinkelse i millisekunder mellem hver ændring fra én grad til en anden. Eksempelvis gå fra 45 til 90 grader. I koden loopes fra 45 til 90 (45 steps). I hvert step er der indbygget en forsinkelse fra 1 til 20 millisekunder. Så jo højere forsinkelse, jo langsommere kører den.

speed slider

Kodning af ESP8266

Kodning af Node MCU bliver gjort i Arduino miljøet. Først skal man downloade og konfigurere Arduino IDE og derefter kompilere koden og sende dette til ESP8266. Start evt. med at se denne video tutorial. Følg anvisningen herunder i 14 trin for at kode Node MCU.

Trin 1

Download og installér Arduino IDE til pc eller mac.

arduino IDE

Trin 2

Start programmet Arduino IDE.

Trin 3

Forbind ESP8266 til din PC/mac med USB-kabel.

forbind esp8266 usb

Trin 4

Tjek hvilken port (COM og LPT) som ESP8266 anvender. Dette gøres ved at åbne enhedshåndtering. I dette eksempel er porten COM3.

port konfiguration

Vælg nu porten I Arduino programmet. Gå til ‘Værktøjer’ -> ‘Port’ -> vælg porten COM3. Kan hedde noget andet i dit setup.

vælg port arduino

Trin 5

Opret en ny sketch fra Arduino IDE.

arduino sketch

Trin 6

Installér ESP8266 package til Arduino. Gå til ‘Fil’ -> Vælg ‘Egenskaber’ -> Under ‘Settings’ ved feltet ‘Additional boards Manager URL’ indsættes følgende url: http://arduino.esp8266.com/stable/package_esp8266com_index.json.

additional board manager

Trin 7

Gå nu til ‘Værktøjer’ -> ‘Board’ -> Vælg ‘Board manager’ -> Søg efter ‘esp8266’ by ESP8266 Community. Tryk derefter på ‘Install’ knappen.

boards manager

Trin 8

Vælg NodeMCU 1.0 board som vist herunder.

ESP 12E module

Trin 9

På samme måde som i trin 7 – søges nu efter følgende 3 libraries, som også installeres.

  • Blynk
  • WiFiManager
  • DoubleResetDetector

Trin 10

Når du opretter en ny sketch i Arduino IDE er der noget default kode eks. void setup() og void loop(). Fjern disse linjer kode. Kopier og indsæt derefter koden herunder og gem projektet. Alternativt kan du finde koden på Github.

/*  Cube Camera Pan - v4
    Servo controle - speed and movement 0 to 180 degree
    31-5-2020 - Jens Krogsgaard
    rev A - 9-6-2020: Hardcoded wifi credentials and blynk token is replaces 
                      with logon-box.
    rev B - 21-11-2020: Blynk auth token replaced with xxxxxxxxx
*/

#define BLYNK_PRINT Serial
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <Servo.h>
#include <DNSServer.h>
#include <WiFiManager.h>         //https://github.com/tzapu/WiFiManager
#include <EEPROM.h>
#include <DoubleResetDetector.h>

#define DRD_TIMEOUT 10
#define DRD_ADDRESS 0

DoubleResetDetector drd(DRD_TIMEOUT, DRD_ADDRESS);

// auth kode fra BLYNK app - Drejekamera V3 - defualt kan bee replaced
char auth[] = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";

int oldPos; // servo - old position
int newPos; // servo - new position
int stepPos; // step position for servo - used when you step from old to new position
int servoSpeed; // speed of servo - delay - big value - slow, small value fast

Servo servo;

void setup()
{
    // initial values
  EEPROM.begin(512);
  Serial.begin(115200);

  // WIFI - connect
  WiFiManager wifiManager;
  // wifiManager.resetSettings();    //Uncomment this to wipe WiFi settings from EEPROM on boot.  Comment out and recompile/upload after 1 boot cycle.
  // Input blynk token
  WiFiManagerParameter BlynkToken("auth", "Blynk Token", auth, 34);
  wifiManager.addParameter(&BlynkToken);

  if (drd.detectDoubleReset()) {
    // when reset button is activated by a double click a reconnect to wifi i initiated.
    Serial.println("Double Reset Detected");
    digitalWrite(LED_BUILTIN, LOW);
    wifiManager.startConfigPortal("ConnectCameraTrain");

  } else {
    Serial.println("No Double Reset Detected");
    digitalWrite(LED_BUILTIN, HIGH);
    // temporary hotspot ConnectCameraTrain is credted
    wifiManager.autoConnect("ConnectCameraTrain");
  }

  strcpy(auth, BlynkToken.getValue());

  //if you get here you have connected to the WiFi
  Serial.println("connected...yeey :)");
  pinMode(BUILTIN_LED, OUTPUT);     // Initialize the BUILTIN_LED pin as an output, I like blinkies.
  Blynk.begin(auth, WiFi.SSID().c_str(), WiFi.psk().c_str());

  servoSpeed = 10;
  servo.attach(2); // 2 means D4 pin of ESP8266
}

// Slider angle - 0 to 180 degree
BLYNK_WRITE(V0) {
  turnServo(param.asInt());
}

// Slider speed - from 20 to 0
BLYNK_WRITE(V1) {
  servoSpeed = param.asInt();
}


// Button - 0 degree
BLYNK_WRITE(V2) {
  turnServo(0);
}
// Button - 45 degree
BLYNK_WRITE(V3) {
  turnServo(45);
}
// Button - 90 degree
BLYNK_WRITE(V4) {
  turnServo(90);
}
// Button - 135 degree
BLYNK_WRITE(V5) {
  turnServo(135);
}
// Button - 180 degree
BLYNK_WRITE(V6) {
  turnServo(180);
}



// Turn servo an angle
// Speed is implemented as delay between each angle
//   long delay - slow speed
//   short delay - fast speed

void turnServo(int turnTo)
{
  oldPos = servo.read();
  newPos = turnTo;

  if (oldPos <= newPos)
  {
    for (stepPos = oldPos ; stepPos <= newPos; stepPos += 1)
    {
      servo.write(stepPos);
      delay(servoSpeed);
    }
  }
  else
  {
    for (stepPos = oldPos ; stepPos >= newPos; stepPos -= 1)
    {
      servo.write(stepPos);
      delay(servoSpeed);
    }
  }
}


void loop()
{
  Blynk.run();
}

Trin 11

Kopier dit unikke Blynk Token (fra trin 5) og indsæt i koden på linje 24 i stedet for ‘xxx’. Når dette er gjort gemmer du koden.

Trin 12

Tryk på Check/compile knappen. Hvis alt er OK vil du se beskeden “Færdig med at kompilere” i bunden af skærmen. Hvis der forekommer fejl vil de blive listet og skal håndteres.

kompiler kode

Trin 13

Send koden til ESP8266 ved at trykke på upload knappen (ikon med pil til højre). Hvis alt er OK vil du se beskeden “Done uploading” i bunden af skærmen. Hvis der forekommer fejl vil de blive listet og skal håndteres.

Trin 14

Nu kan du teste hele dit setup. Hvis der er problemer med at forbinde Blynk app til ESP8266, så læs videre og se hvordan du forbinder Blynk til dit WiFi netværk.

hardware setup

Forbind kameravogn til WiFi netværk

Følg denne procedure for at forbinde kameravognen til dit WiFi netværk – hvis den ikke forbindes automatisk gør du følgende:

  • Find din Blynk token fra E-mail eller i Blynk appen. Kopier denne token.
  • Tænd for batteriet på kamera toget.
  • På din mobil, iPad eller PC skal du finde og vælge hotspottet ‘ConnectCameraTrain’.

hotspot blynk

Nu burde et nyt vindue åbne, hvor du så skal vælge den første knap ‘Configure WiFi’.

wifi manager blynk

Vælg dit WiFI netværk og indtast dit password til netværket. Det næste felt er til Blynk Token (se trin 5). Klik derefter på ‘Save’ knappen.

wifi login blynk

Hvis alt er OK burde du nu kunne se meddelelsen “Credentials Saved” og den blå LED på din ESP8266 burde nu være tændt.

ESP8266 kameravogn

NU er du klar til at teste din kameravogn med panorering på din modelbane. God fornøjelse.

Jeg håber at du har fundet denne guide brugbar og glæder mig til at se dit bud på en kameravogn med panorering til din modeltogbane. Del gerne dine erfaringer i kommentarfeltet nedenfor. Og kom endelig med forslag til forbedringer.

Relaterede guides

Om Jens Krogsgaard

Hej, jeg hedder Jens og jeg har i de sidste 9 år arbejdet med planlægning og opbygning af en Märklin digitalstyret modelbane. De erfaringer jeg har gjort i den forbindelse har jeg forsøgt at fastholde i små guides, således at andre forhåbentlig kan blive inspireret og få lyst til at kaste sig over denne dejlige hobby. Læs mere »

Skriv et svar

Husk, at alle kommentarer modereres i henhold til vores kommentarpolitik, og at din E-mail adresse IKKE vil blive delt eller offentliggjort. Lad os føre en personlig og meningsfuld samtale. Påkrævede felter er markeret med *