Sabtu, 06 Februari 2016


Based on yellow boat plans different deck 390 Grams as shown 
Also Ply fiberglass epoxy catamaran build log

Yellow boat 3 http://kiwitricopter.blogspot.co.nz/2012/12/yellow-boat-3-power-test-scratch-built.html

Fit out http://kiwitricopter.blogspot.co.nz/2013/12/mad-man-yellow-boat-2-x-turnigy-heli.html

Sea run a Purau http://kiwitricopter.blogspot.co.nz/2014/01/yellow-boat-4-fpv-camera-view-purau-new.html

Another run at Motunau http://kiwitricopter.blogspot.co.nz/2014/01/yellow-boat-4-motunau.html

Evo 2 http://kiwitricopter.blogspot.co.nz/2014/01/yellow-boat-4-revised-powertrain.html

Glass and epoxy inside balsa ply, will epoxy the outside too. Its very strong with builders fiberglass tape and epoxy 




The motors will be mounted further forward on a cooled plate 



















Spray rails are bamboo barbecue skewers and wood filler  















Will be powered with 2 of the following



P2632 Brushless Outrunner 3800kv







The Arduino code will be the same as I ran in the Catamaran I may add differential thrust with steering angle as its a twin


#include  

int ch1 = 4;
int ch2 = 5;


unsigned long ch1v;
unsigned long ch2v;



unsigned long RightLeft = 0;
unsigned long UpDown = 0;
long Trim = 0;
long Throttle = 0;
long Cooling = 0;
long PumpSpeed = 0;



Servo Servo1;
Servo Servo2;
Servo Servo3;
Servo Servo4;

#define MAX_CHAN 8
int AnIn[MAX_CHAN] = {0, };

unsigned long PPMtout = 20000;

char buf[300] = {0, };

long mS = 0;


 void setup() {
   
  
  Serial.begin(115200);

  
  pinMode(ch1, INPUT);
  pinMode(ch2, INPUT);

  
  Servo1.attach(8);
  Servo2.attach(9);
  Servo3.attach(10);
  Servo4.attach(11);
  
}

void loop() {
  

  AnIn[0] = analogRead(A0);
  AnIn[1] = analogRead(A1);
  AnIn[2] = analogRead(A2);
  AnIn[3] = analogRead(A3);
  AnIn[4] = analogRead(A4);
  AnIn[5] = analogRead(A5);
  AnIn[6] = analogRead(A6);
  AnIn[7] = analogRead(A7);
  
  /* RAZU-2 Six turn
  This device has a gain of 55mV per amp giving a 36 Amp working range, 
  and a resolution of 11.3777 mA per bit with the maximum output at 5 volts 
  which is 1024 bits in the Arduino. By the way I should point out that 
  these devices on a 5 volt rail will sit around 2.5 volts with no current 
  flowing, so at a 2 Volt delta the out put should be around 4.5 V
   */
   
  mS = micros();
  
  //Get PPM from each RX channel  
  noInterrupts();
    
    
    
    
    
  ch1v = pulseIn(ch1, HIGH, PPMtout);//Throttle
  
  if(ch1v > 0)
  {
    ch2v = pulseIn(ch2, HIGH, PPMtout);//Imax

  } 
  else//Fail safe
  {
    ch1v = 1000;
    ch2v = 1000;    
  }
    
  interrupts();
  

  //ALLOW INTERRUPTS BEFORE UPDATE SERVOS
  delayMicroseconds(2000);

  
  
  //Calculate motor amps
  long Motor_mA = ((long)(AnIn[1] - 512) * 11.0f);
  
  
  
  int Tmax = (int)ch2v;
  
  //Set max throttle
  Throttle = (long)map((int)ch1v, 1000, 2000, 1400, Tmax); 
    
    
  //Calc amps
  long Amps = (long)map((int)Motor_mA, 0, 36000, 0, 36); 
    
    
    
  //Calculate cooling temp RTC on AnIn[0]
  int cerr = ((int)600 - (int)AnIn[0]); 
    
  //Integrate temparature
  Cooling += cerr;
   
  if(Cooling < 1000) Cooling = 1000;
  else if(Cooling > 2000) Cooling = 2000;
    
  //Use the temperature integrator plus the motor current 
  //36 Amps gives us 360 bits
  PumpSpeed = (long)Cooling + (Amps * 10);
  
  
  
  

  
  
  
  //Update the outputs
   
  Servo1.writeMicroseconds((int)Throttle);
     
  Servo2.writeMicroseconds((int)PumpSpeed);


  
  
  
  long Cyc_mS = (micros() - mS);
  

  //ALLOW SERVOS TO UPDATE BEFORE INTERRUPTS OFF
  delayMicroseconds(18000 - Cyc_mS); 
  
  Cyc_mS = (micros() - mS);
  
  sprintf(buf, "ch1v_Tmax:%d,ch2v_Imax:%d,Throttle:%d,AnIn[0]:%d,AnIn[1]:%d,CoolingError:%d,Cooling:%d,Imax:%d,MotorAmps:%d,Cyc_mS:%d", (int)ch1v, (int)ch2v, (int)Throttle, AnIn[0], AnIn[1], cerr, (int)Cooling, (int)Tmax, (int)Amps, (int)Cyc_mS );
    
  Serial.println(buf);
  
  
  /*
  char incomingByte = 0;
  
   // send data only when you receive data:
  while (Serial3.available() > 0) {
    // read the incoming byte:
    incomingByte = Serial3.read();
    
    Serial.print((char)incomingByte);
    
    delayMicroseconds(1000);
    
    if(incomingByte == 13) break;
  }
  
  Serial.println( );
  */
    
}

Related Posts by Categories

0 komentar:

Posting Komentar