<div dir="ltr">Murray,<div>     Moth / Anti-Moth (i.e., Cockroach) behavior robots are really fun for children and are very simple to make. All you need for sensors are 2 CdS light sensors and 2 A/D pins. The Build More Robot tutorial series had a session devoted to them. They were also demonstrated using the Tiny Wander DPRG club robot (see Make Magazine vol 29) which used a Attiny13 8 pin processor.</div><div>Regards,</div><div>Doug P.  </div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Thu, Feb 11, 2021 at 5:50 PM Murray Altheim via DPRGlist <<a href="mailto:dprglist@lists.dprg.org">dprglist@lists.dprg.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Hi,<br>
<br>
Among my other side projects is a moth/anti-moth behaviour. Rather than a<br>
passive sensor I thought to use one that provides a better very-low to<br>
bright ambient light range. From Pimoroni I ordered a pair of Adafruit<br>
GA1A12S202 Log-scale Analog Light Sensors, which are cheap and tiny 3-pin<br>
boards that produce an analog output. They arrived yesterday and I built<br>
a small holder for them on the front of the robot, wired them up to a pair<br>
of analog inputs, then began writing a Python support class.<br>
<br>
But when I thought to look into more details about the sensor I found out<br>
that Adafruit have discontinued these sensors because they don't actually<br>
work so well as described. They intended to replace them with a Vishay<br>
VEML7700 lux sensor wired up as an I2C device, but sadly the designer never<br>
thought to provide a way to alter the fixed I2C address, so one can only<br>
mount a single sensor on a robot without resorting to multiplexing, which<br>
I'd rather avoid. A real oversight. Nice little board otherwise.<br>
<br>
Investigating the VEML7700 it turns out that its support library has some<br>
serious bugs at higher light levels, such as what one would encounter<br>
outdoors (!), and that part of the problem may be the sensor itself.<br>
<br>
Vishay make an improved sensor called the VEML6070, and Adafruit even make<br>
a breakout board for it (since the sensor is SMT), but, but, but, they<br>
again didn't provide for altering the I2C address.<br>
<br>
So for now I'll be sticking with the GA1A12S202 since I have two of them<br>
installed and my robot (for now) is indoors. But since the board has been<br>
discontinued and apparently isn't good for outdoor use I'm looking for<br>
alternatives.<br>
<br>
Adafruit list 26 different sensor boards (!), but it's unclear which have<br>
good performance and suitable output across a wide light range, and of the<br>
26 many have been discontinued. I'm not sure if a UV sensor would work as<br>
well for a moth/anti-moth sensor; I'm guessing not so well in a dark room.<br>
There's a TSL2561 that permits altering the I2C address but has also been<br>
discontinued. From what I can see, almost all of the I2C light sensor<br>
boards (e.g., TSL2561) that haven't been discontinued have fixed addresses.<br>
<br>
The one exception to this is the BH1750,<br>
<br>
   <a href="https://www.adafruit.com/product/4681" rel="noreferrer" target="_blank">https://www.adafruit.com/product/4681</a><br>
<br>
which has a solder bridge to change the address. I may order a pair of these,<br>
as their lux range looks suitable. It's a bit larger than I'd like (at 25x18mm<br>
it's about 3x bigger than the pair of sensors I'm using now) but seems to be<br>
the only one Adafruit sell that fits the bill. Is it any better than the<br>
little GA1A12S202 boards I have?<br>
<br>
Anyone have any experience with this or could recommend a good light sensor?<br>
And preferably small and relatively cheap? Most of these boards are well<br>
under US$10, e.g., $2.50, $4.50.<br>
<br>
----<br>
<br>
This is all in mind of developing that moth/anti-moth behaviour, where the<br>
sensor is supported by a Python class that has various possible outputs: an<br>
Orientation enum indicating where the brightest light is coming from (an<br>
output of PORT, STBD, or NONE, with a hysteresis setting to permit a center<br>
point); a bias value from -MAX_V to +MAX_V; a pair of raw floating point<br>
values from 0.0 to 3.3 (volts); and a pair of ints from 0 to MAX (which is<br>
calculated as round(v) * 100, in this case 330).<br>
<br>
I've got this up and running, supported off two analog input pins on a<br>
Pimoroni IO Expander board (the little Nuvoton MS51 on the front of my<br>
robot), so far so good:<br>
<br>
    <a href="https://github.com/ifurusato/ros/blob/master/moth_test.py" rel="noreferrer" target="_blank">https://github.com/ifurusato/ros/blob/master/moth_test.py</a><br>
    <a href="https://github.com/ifurusato/ros/blob/master/lib/moth.py" rel="noreferrer" target="_blank">https://github.com/ifurusato/ros/blob/master/lib/moth.py</a><br>
<br>
----<br>
<br>
With our ongoing discussion of PID loops and the use of a PID controller<br>
for steering a robot, using velocity+rotation rather than left and right<br>
velocity as the steering model. The idea I had was that if one were using<br>
a simple proportional PID for steering, to implement a moth or anti-moth<br>
behaviour it'd be a matter of adding the output from get_bias() to the<br>
rotation value, multiplied by some kind of fixed constant to control how<br>
forcefully the robot reacts to changes in light level. I thought about<br>
having its reaction slow as it got closer and closer to bright light,<br>
until at a certain threshold it would stop (in moth mode). A bit like my<br>
cat. This could be used to charge the batteries from a solar panel.<br>
<br>
Is this something that anyone in the group has done before? If so I'd be<br>
interested in hearing of your experience and any advice.<br>
<br>
Cheers,<br>
<br>
Murray<br>
<br>
...........................................................................<br>
Murray Altheim <murray18 at altheim dot com>                       = =  ===<br>
<a href="http://www.altheim.com/murray/" rel="noreferrer" target="_blank">http://www.altheim.com/murray/</a>                                     ===  ===<br>
                                                                    = =  ===<br>
     In the evening<br>
     The rice leaves in the garden<br>
     Rustle in the autumn wind<br>
     That blows through my reed hut.<br>
            -- Minamoto no Tsunenobu<br>
<br>
_______________________________________________<br>
DPRGlist mailing list<br>
<a href="mailto:DPRGlist@lists.dprg.org" target="_blank">DPRGlist@lists.dprg.org</a><br>
<a href="http://lists.dprg.org/listinfo.cgi/dprglist-dprg.org" rel="noreferrer" target="_blank">http://lists.dprg.org/listinfo.cgi/dprglist-dprg.org</a><br>
</blockquote></div>