I decided to modify the OpenROV 2.4 Arduino source code to create an automatic test program that stimulates each of the cape outputs periodically to see if the Arduino ATmega328 chip and connecting circuitry are operating correctly. Software has been tested with the cape operating stand alone. Hopefully it will run in a OpenROV cape with a Beaglebone attached provided the cape.(TBD)
Hardware Requirements:
OpenROV cape
Servo
LED lights
Battery Pack (12v)
ATmega328 programmer (Arduino Uno will do)
Proceedure:
1) Remove the ATmeta328 chip from the Cape and use an Arduino board to load the Openrov_cape_test.ino with includes.
2)Place the ATmega328 chip back into the Cape and hook up the externals (motors, servo and lights) .
3) Connect the battery power to the Cape. (Typically 12v)
4) Watch motors , servo and light cycle periodically in sequence. Each command level lasts for 2 seconds.
Software Files: Download OpenROV_cape_test folder from my dropbox. In it you will find the following OpenRov_cape_test.ino file. Just use it instead of OpenRov.ino file.
/* OpenROV_cape_test Written by Chris Siegert, 11.30.13 , vamfun@yahoo.com, https://vamfun.wordpress.com This program is designed to test the OpenROV Cape. Program generates commands that cycles motors, tilt servo and lights sequentially. No Beaglebone is required for the test. Power the cape using the battery input terminals and connect the output devices. All motors are cycled simultaneously with 2 second steps at magnitudes {135,90,45,90}. Motors are left in reset mode. Next the servo is commanded to {170,10,90}Basically full tilt up to full tilt down and back to neutral. The light goes to full brihtness then to half brightness and then off. The device sequencing is then repeated continuously. If running without the Beaglebone, load the sketch and its includes into the ATmega chip using an Arduino project board or programmer. Then reinsert the chip back into the cape. If running with the Beaglebone, one might be able to just upload the program using the OPENROV cockpit utility. */
#include <Servo.h>
#include <Arduino.h>
#include “Motors.h”
#include “Command.h”
#include “Device.h”
#include “Timer.h”
Motors motors(9, 10, 11);
Command cmd;
Device vout(“vout”, 0, vout.analog, vout.in);
Device light(“light”, 5, light.analog, light.out);
Timer time;
Servo tilt; int array[MAX_ARGS];
int case_no=1; void setup(){
Serial.begin(9600);
pinMode(13, OUTPUT);
tilt.attach(3);
motors.reset();
light.write(0);
time.reset();
delay(3000);//wait for ESC to calibrate }
void loop(){
switch ( case_no) {
case 1:
Serial.print(“motor”);
Serial.print(” mag = “);
Serial.println(135);
motors.go(135,135,135);
delay(2000); //cds set step delay
Serial.print(“motor”);
Serial.print(” mag = “);
Serial.println(“90”);
motors.go(90,90,90);
delay(2000);
Serial.print(“motor”);
Serial.print(” mag = “);
Serial.println(“45”);
motors.go(45,45,45);
delay(2000);
Serial.print(“motor”);
Serial.print(” mag = “);
Serial.println(“90”);
Serial.println(); //motors.reset();
motors.go(90,90,90);
case_no++;
break;
case 2:
Serial.print(“servo” );
Serial.print(” mag = “);
Serial.println(“170”);
tilt.write(170);
delay(2000);
tilt.write(90);
Serial.print(“servo” );
Serial.print(” mag = “);
Serial.println(“90”);
delay(2000);
Serial.print(“servo” );
Serial.print(” mag = “);
Serial.println(“10”);
tilt.write(10);
delay(2000);
Serial.print(“servo” );
Serial.print(” mag = “);
Serial.println(“90”);
Serial.println();
tilt.write(90);
case_no++;
break;
case 3:
Serial.print(“light” );
Serial.print(” mag = “);
Serial.println(255);
light.write(255);
delay(2000);
Serial.print(“light” );
Serial.print(” mag = “);
Serial.println(128);
light.write(128);
delay(2000);
Serial.print(“light” );
Serial.print(” mag = “);
Serial.println(0);
Serial.println();
light.write(0);
case_no++;
break;
default:
case_no = 1; //repeat sequence
} //end switch
}