Jump to content

attleej

Members
  • Posts

    451
  • Joined

  • Last visited

  • Days Won

    11

Everything posted by attleej

  1. Dear All, I think that I have worked out where I am going wrong. Please don't waste any more time on this. For the curious: I have mapped the pot on the 'rotating' side and sent an IR signal between 0 and 1023 ms. I should have mapped the pot value to get a pulse length of between 0 and 2.25 ms.. I will get there! John
  2. Dear Noel7, It is so helpful to have a little help to bounce ideas and test my logic. There is an Arduino forum but they are not very tolerant of thickos like me, they all seem to act as if they are Phd students! I should explain that millis is an Arduino timer that increments by one, every millisecond. It overflows 49 days after being booted up! TEST 1 only runs once when the SigInState goes LOW. I thought I had got the 'flag' with OldSigInState. TEST 1 has two tests to be met. The first is that the SigInState is LOW, ie active. The second is that the OldSigInState is HIGH. The first time TEST 1 is TRUE, OldSigInState is changed to LOW. Thus TEST 1 can only be TRUE the first time that it runs. TEST 2 should only run once for similar reasons. When I changed the sketches so that a ten second pulse was needed to move the servo 180 degrees, it worked fine. I could move the needle to wherever I wanted to (more or less) just by pressing a switch and giving it a pulse of the right number of seconds. I hope that you can tell me what error I have made! If you cannot help me, I will have to go into the Lion's den that is the Arduino Forum. John
  3. Dear All, I am experiencing problems with writing a sketch (program) for an Arduino. I am desperate for some expert help. If anyone can help or pass my problem on to someone who can, it would be much appreciated. The description of the problem below gets more and more technical! SITUATION The Meteor M120 tank engine is nearing completion and we have at least one MkIVB engine that will be completed at some point and all will require testing on a run-up rig. The M120 because I need to map the fuelling and the MkIVB because it is a lot of work to fit one and only then to find that it does not run properly or has a problem. There will als be plenty of other IVBs tat would require testing, no doubt. The M120 is quicker to fit but the same arguments apply. RUN-UP RIG CONCEPT The run up rig will be designed to accept a Meteor engine on its coolant rails. Unfortunately a IVB is a bit different from an M120 but this can be accommodated. To apply a load I intend to use a "Telma" retarder which should absorb about 500 BHP. This should be able to absorb the load for some time. In order to test for full power I am minded to fit either another "Telma" or fit a truck disc brake unit. Conceivably, I might just use disc brake units but obviously they would quickly overheat. The cooling system will consist of two Antar radiators and fan units that are in stock. The problem with a Heenan and Froud water dynanometer is that the hot water still has to be cooled unless there is a large tank of water available. Since I would like the rig to be very mobile, this is not desirable. OUTPUT TORQUE MEASUREMENT I intend to measure the output torque by means of strain gauges on the propellor shaft between the engine and the "Telma" and brake units. It would be possible to mount the Telma on a truck hub and then measure the reaction to hold it still. Unfortunately this will not work if I wanted to add disc brake units for full power testing. The strain gauges and its amplifier will be mounted on the prop shaft and rotating. The challenge is to transmit a signal from the rotating prop shaft to the electronics and the display unit. Obviously, the mounting will have to be balanced. This will probably be achieved by duplicating everything so that it is largely symetrical. . The signal will be transmitted via an infrared system ELECTRONIC CONCEPT The output voltage of the Strain Gauge Amplifier (SGA) will vary in direct proportion to the torque being transmitted by the prop shaft. The analogue to digital converter on the 'rotating' Arduino Uno will convert the voltage from the SGA to a value between 0 and 1023. Since the maximum torque will never exceed 2000 ft lbs this should give enough definition. I have drafted a sketch (program) for the Arduino which is designed to send a series of pulses at 38 KHz. The length of the pulse, or rather the burst, will be in proportion to the output from the SGA and thus the torque being transmitted. The pulse length is currently designed to be between 0 and 1023 milliseconds but of course this can easily be altered, if required. The output of the 'rotating' Arduino Uno goes, via a resistor to the IR LED. The IR signal is received by the decoder, Vishay type TSSP 4038. It is only sensitive to IR signals at 38 KHz and gives a LOW output when receiving a signal. This output goes to the fixed Arduino Uno. and the pulse length is measured. The sketch on the Fixed Arduino includes the servo library and the mapping function has been used to drive the servo. The servo will be connected to a needle which will indicate on a scale the torque being transmitted. This is all quite straight forward. The torque figure can also be combined with the RPM to give a BHP output. This can be displayed by another servo meter. THE PROBLEM The problem is that I cannot reliable measure the length of the pulse from the IR decoder. I have tried two techniques. Firstly, "pulsein" and secondly using using "millis". The sketches are below.. If I cannot do this, I cannot transmit the torque signal from the rotating prop shaft to the fixed equipment either by IR or other means. This problem manifests itself in that the serial print value will not change as expected nor will the servo move as expected. WHAT DOES WORK The varying voltage from the SGA is being simulated by the a Pot supplied with 5V from the Arduino. The osciloscope, (Scope) shows that the voltage from the pot rises and falls smoothly and this is reflected in the P/O value of between 0 and 1023 from the serial printer. The 'fixed' Ardunio is receiving the signal from the IR decoder and can make an LED pin on A2 light when the decoder is active and sending a LOW signal. (The decoder pulls the relevant pin , A1, HIGH when inactive.) The IR link can be demonstrated with no difficulty in an ON / OFF mode. The scope shows the LOW output from the IR decoder rising and falling in line with the signal going to the 'rotating' IR LED. with the same start and end point. When the servo "sweep" example is loaded as a sketch, the servo moves as expected. When the output from the 'rotating' Arduino feeding the IR LED is 'hard wire' connected to the 'fixed' Arduino, the scope shows the pulse length varying as expected but the the problem of measuring the pulse length continues. CONCLUSION The above describes the problem as best I can. The sketches below show what I have tried. It would be so helpful if someone could tell me where I am going wrong! I would be very happy to discuss it further on the phone. Many thanks, John THE SKETCHES The 'rotating' Arduino // INTRODUCTION //The purpose of this Sketch is to generate a 38 KHz burst with a burst length in proportion to the PotValue. //IDC the PotValue will be replaced by a voltage from the strain gauge amplifier mounted on a rotating propellor shaft. //The 38 Khz signal will be discriminated by the IR receiver at the Rx end. const int PotVoltPin = A0; //Voltage from potentiometer used to determine pulse length. const int SigOutPin = A2; //Pin for Output pulse to pin 4 for the IR sender. const int SigInPin = A1; //Connected to "Sig In switch" microswitch. Used to test system. int SigInState = 0; //Pin for input from "Sig In Switch" which is a microswitch on Tx board. int PotValue = 0; //A value between 0 and 1023 in proportion to the voltage on the PotVoltPin unsigned long AdjVal = 1; //A value that can be used to adjust length of pulse to ensure that it is long enough to be accurate. unsigned long Duration = 0; //The desired duration of the pulse after being modulated by the AdjValue. void setup() { pinMode(PotVoltPin,INPUT); //Sets the PotVoltPin as an input pinMode(SigOutPin, OUTPUT); //Sets this OutPin as an output. pinMode(SigInPin,INPUT); //Sets this as input, is connected to microswitch. Serial.begin(9600); } void loop() { SigInState = digitalRead (SigInPin); //Test to see if "Sig In switch" microswitch is pressed in order to perform test PotValue = analogRead(PotVoltPin); //Read the PotVoltPin to give PotValue which will be between o and 1023 Duration = (PotValue * AdjVal); //Calculates desired duration of burst from PotValue and AdjV if (SigInState == HIGH) { tone(SigOutPin, 38000, Duration); SigInState = digitalRead (SigInPin); Serial.println(Duration); } else { noTone; } delay (100); } The 'fixed Arduino and using millis. /* INTRODUCTION The purpose of the strain gauge receiver (SGR) is to receive the pulse transmitted by the strain gauge transmitter (SGT)and re-package it as a value in proportion to the strain and hence torque being measured. It does this by measuring the length of the pulse coming from the transmitter. The signal from the transmitter is received by an IR decoder that recognises the 38 KHz bursts. NOTE WELL!!!! The IR decoder sends the input pin LOW when active.. In this sketch what is really a "burst" is called a "pulse" because the output from te IR decoder is a contiuous LOW wen active. The external LED illuninates whenever a burst is being received. It is fed wia a 390 ohm resistor to limit the current. It is fed wia a 390 ohm resistor to limit the current. POWER SUPPLY The receiever needs 12 volts that comes in via a 3 way military screwed connector. TESTING The sketch works when the input pulse is from one to ten seconds long. It does not work when the pulse length is miliseconds but it is not understod why. WIRING CODES Red = 12 volt supply. Black = Ground and 12 Volt neg. Yellow = Output pulse from Arduino generated in proportion to voltage from the potentiometer. Pink = 5 volts from Arduino to supply the potentiometer. Orange = output from potentiometer varying between 0 and 5 volts. Grey / green = injection pulse generated by Speeduino. White = SErvo and LCD ARDUINIO CONNECTIONS AND FUNCTIONS Red To Vin Black To GND Yellow To A2 Pink To 5V Grey / green To A1 (Set as OUTPUT) White To A0 (Servo) */ #include <Servo.h> Servo myservo; // create servo object to control a servo //#include <LiquidCrystal.h> // initialize the library by associating any needed LCD interface pin //const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2; // with the arduino pin number it is connected to //LiquidCrystal lcd(rs, en, d4, d5, d6, d7); const int SigInPin = A1; //Decoded signal from the IR receiever. const int LedPin = A2; //Tell tale LED int SigInState = 0; int OldSigInState =0; unsigned long val = 0; unsigned long Duration = 0; //The length of the burst recieved. unsigned long NewMillis =0; unsigned long OldMilis = 0; void setup() { pinMode(SigInPin,INPUT); //Sets the SigInPin as an input pinMode(LedPin,OUTPUT); //Set LedPin as output. myservo.attach(A0); // attaches the servo on pin 9 to the servo object //lcd.begin(16, 2); // set up the LCD's number of columns and rows: Serial.begin(9600); } void loop() { SigInState = digitalRead (SigInPin); //Reads SigInPin to check state. if (SigInState != HIGH) //If SigInState is not HIGH { digitalWrite ( LedPin,HIGH); //Tell tale LED is turned on. } else { digitalWrite ( LedPin,LOW); //If SigInPin is HIGH, (ie no pulse) LED is turned off. } if (SigInState ==LOW && OldSigInState ==HIGH) //Test if new pulse has come in { (NewMillis = millis() ); //NewMillis to equal current millis. (OldSigInState = SigInState ); //OldSigState is reset. } if (SigInState ==HIGH && OldSigInState == LOW) //Tests if pulse has ended { (Duration = millis() -NewMillis); //Calculates duration as diff bewteen millis and new mills OldSigInState = SigInState; //resets OldSigInState. } val = map(Duration, 0, 1023,180,0); // scale it to use it with the servo (value between 0 and 180) myservo.write(val); // sets the servo position according to the scaled value delay (15); Serial.println ( Duration ); //Prints to serial printer to see what is going on. } Finally, the 'fixed' Arduino using the pulsein function. /* INTRODUCTION The purpose of the strain gauge receiver (SGR) is to receive the pulse transmitted by the strain gauge transmitter (SGT)and re-package it as a value in proportio to the strain and hence torque being measured. It does this by measuring te length of the pulse coming from the transmitter. The signal from the transmitter is received by an IR decoder that recognises the 38 KHz bursts. The IR decoder sends the input pin LOW. In this sketch what is really a "burst" is called a "pulse" because the output from te IR decoder is a contiuous LOW wen active. The external LED illuninates whenever a burst is being received. It is fed wia a 390 ohm resistor to limit the current. It is fed wia a 390 ohm resistor to limit the current. POWER SUPPLY The receiever needs 12 volts that comes in via a 3 way military screwed connector. TESTING The sketch works when the input pulse is from one to ten seconds long. It does not work when the pulse length is miliseconds but it is not understod why. WIRING CODES Red = 12 volt supply. Black = Ground and 12 Volt neg. Yellow = Output pulse from Arduino generated in proportion to voltage from the potentiometer. Pink = 5 volts from Arduino to supply the potentiometer. Orange = output from potentiometer varying between 0 and 5 volts. Grey / green = injection pulse generated by Speeduino. White = SErvo and LCD ARDUINIO CONNECTIONS AND FUNCTIONS Red To Vin Black To GND Yellow To A2 Pink To 5V Grey / green To A1 (Set as OUTPUT) White To A0 (Servo) */ #include <Servo.h> //Inserts servo library. Servo myservo; // Create servo object to control a servo //#include <LiquidCrystal.h> // Initialize the library by associating any needed LCD interface pin //const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2; // with the arduino pin number it is connected to //LiquidCrystal lcd(rs, en, d4, d5, d6, d7); const int SigInPin = A1; //Decoded signal from the IR receiever. const int LedPin = A2; int SigInState = 0; unsigned long val = 0; unsigned long Duration = 0; //The length of the burst recieved. void setup() { pinMode(SigInPin,INPUT); //Sets the SigInPin as an input pinMode(LedPin,OUTPUT); //Sets LedPin as an output myservo.attach(A0); //Attaches the servo on pin A0 to the servo object //lcd.begin(16, 2); //Set up the LCD's number of columns and rows: Serial.begin(9600); } void loop() { noInterrupts(); Duration = pulseIn(SigInPin,HIGH); //Measures te pulselength in microseconds. should be between 0 and 1023 milliseconds interrupts(); Duration = (Duration /1000); //Converts microseconds into milliseconds. Expected pulse length is between 0 and 1023 milliseconds. val = map(Duration, 0, 1023,180,0); //Scale it to use it with the servo (value between 0 and 180) myservo.write(val); //Sets the servo position according to the scaled value delay (15); //Delay to allow the servo to move. Serial.println ( Duration ); }
  4. Dear All, I was tempted to sanctimoniously boast that I did not have an adjustable spanner in my main workshop. I might have one in the Landrover's tool box. I do have one on the shadow board at home in the garage. I have to confess to using it yesterday but, in my defence, it was to hold the fuel rail still on the Meteor M120 engine AND it was 20mm square section. I hope that I can be forgiven! John
  5. I agree that The worst you can do is cross thread especially this size. That is why I think that what is needed is a special die holder that is machined to 'pick up' on what I hope is the machined bore. Thus the die would be held perfectly square and would be much less ;likely to go cross threaded. There would also be no question of handles. It would have a square or hex drive. John
  6. Simon, Good news about the die. Is the bore machined? If it is, it might be possible to make a special die holder that picks up on the machined bore. In my experience, it is very difficult to start a die in such circumstances without it going off course and cutting a new thread.. John
  7. Simon, Welcome back! Is the ID nicely machined or 'as cast' and is the item made of aluminium alloy? Unfortunately it looks as if it will be some time before I will be able to do any machining. John
  8. Dear Kyle, Is the engine Rolls B60 or B80? If it is, it looks like a bog standard unit which should not be hard to acquire or repair. Clive will be able to tell you the correct resistance. There will already be threads on this forum about it. It should be an easy problem to fix! John
  9. I forgot to look yesterday. I will set my phone alarm to remind me. Blocking the hole is the easy bit if you want to do it. Andy is right and that is my concern. If there is a shaft seal between the pump and the motor, and it is leaking blocking the hole is merely a bodge and will bite you later. John
  10. Richard, I don't know what others think but I don't think that it should be leaking from there. I will check some other pumps tomorrow and refresh my memory. John
  11. I am not surprised Andy has not made one. I have just read it, but it reminded me why we call the Tels Techs "wobbly Heads"! John
  12. I agree that the clansman is not very loud but I think that it works. I had a problem trying to link a commercial VHF radio (a Kenwood TK 762) into the clansman network. As Andy suggested it is the PTT signal that is the problem. I never really understood how it worked so I was not able to emulate it. I would really like to be able to link a commercial radio into the Conq and Cent's Clansman system. If anyone knows how to do it that would be very interesting.
  13. Richard, Can you be clearer where the leak / hole is? Perhaps a Pic. John
  14. It look as if it has over-run bakes on the front. Since it weighs 1.3 tonnes, you would get 2.2 tones payload. at 3.5 tonnes gross with over-run brakes all round. I don't know if the over-run bakes automatically down plates it for civilian use at 3.5 tonnes. John
  15. Dave, You do not say what braking system the trailer has. However, the maximum gross weight for a trailer with over-run brakes is 3.5 tonnes so that means the trailer cannot have over-run brakes. The Eager Beaver does not have air brakes or any such connections. I don't recall it having servo brakes either. I think that a trailer of that age over 3.5 tons would require plating and testing. Perhaps the trailer only has a hand brake. If you fitted suitable brakes for the weight of the trailer there might be an issue with the rating of the tyres. On one hand it looks legally like a 'works truck or trailer' that does not go far on public roads. On the other hand, it does have road going lights. Interesting! John
  16. Not quite! The heads are only removed from the block if essential, say to change a liner. I don't know anything about the Packard Merlin engines. I think that there are two reasons why RR went this way. First, the EMER says that the block assembly should be pressure tested by immersion in a tank of hot water. This is done by applying air pressure to the cooling system. Obviously this is impractical if the block is already on the crank case! The second point is that the EMER says to assemble the rods onto the crankshaft before fitting it to the crank case. Presumably this is to allow checks to be made for no binding on the journals. In short, doing this way means that more inspection and checking can be done thus reducing risk. John
  17. Dear All, First Q is does anyone know how to edit the subject of this thread. It does not search on google as well as I would like. It might be better to call it "Meteor and Merlin"..... rather than "Meteor / Merlin". If a moderator can do it, just do it please. We have now started to fit the cylinder blocks onto the pistons and crankcase. I had to make four of the piston ring compressors in the photo. They are made from a scrap Merlin cylinder liner. In reality, it is a bracelet that can be threaded out from between the piston and the cylinder studs. The liner is cut into 6 segments and they are held together with a strip made from a paint tin. In order that it works properly the tapped holes in the liner and the tin strips were drilled precisely on the milling machine. The segments from the liner are, of course, precisely the right radius to suit the piston. The forks were used to lift the block into position over the engine turning rig and were left in position for convenience. The block is actually lowered by means of the M20 nut on top of the cross member. Under the nut is a cheap thrust washer to reduce the turning effort. It is not very convenient using a 30 mm ring spanner and I need to make some sort of hand wheel arrangement. The system works well except that the pistons are apt to tilt and jam in the bores, especially when the relevant crank is not at TDC or BDC. I am minded to make a packing piece that will spigot into the cylinder's bore in the crank case and the bottom of the piston. Thus the piston would not be able to tilt and would be dead in line with the cylinder bore. It might pay to tighten the piston ring compressors a bit more than hand tight. The device in the end of the crankshaft is a turning tool. Photos were by Andy A who helped me do it. John
  18. Dear All, The question is: does anyone want to acquire this interesting machine or will it go to feed the \Chinese steel industry? John
  19. That was TSB and getting ready for Brooklands. John
  20. Dear All, Please see pics of a main-layer trailer / plough that is lying near me in Petersfield, Hants. Does anyone know what it is and what would have towed it? I think that it is post war but no later than early seventies at the latest. It is available for sale and open to offers. I would expect the pricing would be realistic.
  21. Jimmy, I think that you will find that the difference is in the detail of its condition and not just whether it has a nice paint job. For instance does the engine run perfectly? When my Leyland Martian came back from Command workshops they said that it was missing because of a duff spark plug. It turned out to be a broken exhaust valve seat! Make certain that all the hub drives are intact. What is the state of the wiring and plumbing? Does it look as if it has come out of a base overhaul or has it been mucked about with? Remember that any serious faults could be difficult and / or expensive to fix properly. John
  22. There are two problems with heating up the crank case. The first is that the EMER says to use an oven which I do not have access to. To use localised heat is to risk distortion. The second is that even with heat the stud might not come out. I had a scrap crank case which I could afford to heat up very hot and local to the stud. Nevertheless, the stud still would not come out! I also made a special tool for undoing the studs. It consisted of a tube with a bi-hex socket at the top for engaging with the double nuts locked together at the top. At the bottom it was hex so that I could use a large FO combination ring spanner. This avoided the problem of the stud tending to bend all over the place under the load. A really good point about the risk of the stud not screwing all the way down. I will be careful. If necessary, I have a suitable tap and something that was not available in the 1930s when the engine was designed- Locktite! I think I will fill the corner stud voids with OC 600 worm gear oil. If it leaks past the seals it will only do so slowly. I will grind a pressure relief slot in the washer at the top which will also allow the void to stay 'topped up' with engine oil. John
  23. Dear All, Years ago there was a 'scandal' in a newspaper that the MOD was, apparently, paying something like £5 for an ordinary light bulb. They even showed the packaging with the price and the D of Q. Of course, the D of Q was something like 24! John
  24. Yes indeed. I am in close touch with Peter and have discussed this problem. That is why I know that it is common to both Meteor and Merlin engines. I am very keen to share the techniques that I have developed. That is the beauty of a forum like this. John
×
×
  • Create New...