You can use an LM317 as a constant current source. This diagram shows the basic configuration; you would change the LED shown to your injector coil:
Set R1 to 6.8-ohm (a Stackpole RNMF12FAC6R80 or equivalent will do) which will give a test current of 183mA.
To power the LM317 you'll need a supply greater than 3V + 1.25V + Iref x Rinjmax; for a 20-ohm injector and an Iref of 183mA the minimum supply voltage for the LM317 would be >8V. I would use a low-power relay to switch power to the LM317.
Connect the ADJ pin of the LM317 to your A0 Arduino pin through a ~330-ohm resistor with a Schottky diode to 5V to protect the analog pin. You need that there in case there's no injector (or the injector is open circuit).
By measuring the voltage at the ADJ pin you are measuring the voltage across the injector and from that you can determine its resistance.
Steps would be something like:
- turn on relay to power the CC source
- allow a few mS for the LM317 current to stabilize
- take a few ADC readings and average them
- turn off the relay
- compute the resistance.
Injector resistance would be:
const float fRpgm = 6.8; //6.8-ohm programming resistor
const float fVref = 5.0; //ADC reference voltage
const float fIref = (1.25 / Rpgm); //LM317 current programming
const float fCountsFS = 1024.0; //ADC maximum # counts
float Rinj = (fVref * (float)Counts) / (fIref * fCountsFS); //resistance in ohms
Serial.print( "Injector resistance is " ); Serial.println( Rinj, 2 );
If you see a voltage higher than fIref x Rinjmax (so for 20-ohms, 3.68V or ~753 ADC counts) plus some margin you can say the injector is either absent or its resistance is otherwise too high.
If you see a voltage less than fIref x Rinjmin (so for 3-ohms, 551mV or ~113 ADC counts) minus some margin you can say the injector is shorted or its resistance is otherwise too low.