Lab4 Lambda : Reading Phototransistors on ADC Inputs: Logic for Rotation toward Light Source
A-path Lab!

Background:  Here you will use the two DAC channels on the 6024E card to send analog signals to a microprocessor: either the MSP430 or Aruduino. The analog signals will simulate the output of two phototransistors. It will be imagined that PNZ150 phototransistors are responding to a distant light source, as they did in Lab 2. Based on the sum and difference of the two analog signals, the code will orient the (simulated) rover to point toward the light. In essence, the phototransistor signals will act as FEEDBACK for navigating the rover to knock over a block under the lamp.

(You are required here to upgrade your Lab4pre VI to handle 2 analog INs. Demo on the LabVIEW "exercise" VI that your new code logic works to respond properly to phototransistor signals difference and sum.)

(1) "Upgrade" your Lab4pre to add two analog-out sliders: See suggestion:

the sliders will have a range of 0-3 or 5 volts: your Arduino code can handle up to 4.8v.

The LEDs L0 to L3 represent what they did in Lab4pre:

L0 ON left wheel going forward; L0 OFF left wheel in reverse
L1 ON right wheel going forward
L2 ON left motor turned ON; L2 OFF left motor inhibited
L3 ON right motor turned ON

The switches D4-D6 act the same as they did in Lab4pre:
D4 ON implies rover is in contact with left wall
D5 ON implies rover is in contact with right wall
D6 ON means the timed loop is activated inside the infinite loop of the code.
(Flick D6 so the rover goes through only one cycle of 25-40 sec)

First, declare
int photoL, photoR, thet_diff_LO, thet_diff_HI, thet_summ_LO, thet_summ_HI;
signed int diff, summ;

These lines declare variables for the A-D conversion.
We suggest you compute:

diff = photoL - photoR; // difference of photoxsistors
summ = photoL + photoR; // sum of photoxsistors

Figure out reasonable threshold values for further logic considerations:
thet_diff_LO
thet_diff_HI
thet_summ_LO
thet_summ_HI
You may want to run the slider at 1v, 2v, 3v, 4v to see how those voltages are represented inside Arduino.

Make sure you see the following connections of LabVIEW connector card to socket/Arduino demo board:
DAC-OUT-0 screw 22 to blue socket pin 25 to Arduino ANALOG pin 0 Left phototransistor/slider
DAC-OUT-1 screw 21 to blue socket pin 27 to Arduino ANALOG pin 1 Right phototransistor/slider

Green GND wire of blue socket to pin 53 (GND) of the LabVIEW connector card.

----------------- ------------------ -----------------

Arduino: Running the 4pre default code with the serial terminal turned on you can see the 4pre code already finds the two "phototransistor" sliders and displays them. Follow through on the advice below to set thresholds. As before, immediately rename the default code and take off the "read only" option. Modifiy the renamed code to meet the specs of 4 Λ

Note that analog_out pins 21 and 22 (controlled by the sliders) on the green NI connector board go to ANALOG pins 0 and 1 on the Arduino board. On the white breadboard are 1.5K resistors to ground for when the board is plugged into an actual rover.

(3) Modify code inside your pp < pp_max timing loop such that (in psuedocode):
(i) If summ < thet_summ_LO then
the simulator behaves just as it did for Lab4pre:
goes forward by default or turns when it hits a wall...
(this is the state of being too far away from the light source to care...)

(ii) If summ >
thet_summ_LO && summ <thet_summ_HI then
  (iii) if diff <
thet_diff_LO (a negative number) then
  (iv) turn CW (by turning OFF a motor) until
diff > thet_diff_LO && diff < thet_diff_HI
ELSE

  (v) If diff >thet_diff_HI then
  (vi) turn CCW (by turning OFF a motor) until
diff > thet_diff_LO && diff < thet_diff_HI
ELSE

  (vii)
then go forward toward the light
(viii) if summ >
thet_summ_HI have simulator behave just as it did for Lab4pre
going forward unless it hits a wall...
(state of being too close to the light to make proper judgement...)

As you make make the improvements above, frequently "Rebuild All" or "Compile". When finished download the code into the MSP430F1232 using the DEBUG command, or Arduino with the Upload command. Either single step through to debug (MSP430) or use the serial terminal (Arduino) for debugging.

Have the difference threshold small enough that--when bringing down a slider value from both sliders being max, we wait more than the diff thet to see a motor stop...

Possible FTQ: Explain how the microcomputer converts analog values for continued testing in the logic for the sum and difference testing.

Free Advice: Consider describing your coding problem as a series of STATE changes.

Go to Arduino.cc for more Arduino advice