Looking to take a NTSC signal from OpenMV Lepton Modual and transmit VIA 5.8ghz

So I have these racing drones that Id, like to try out thermal vision on I, think it could be a cool aspect to have a switching video feed from a CMOS camera to the lepton modual.

I currently fly these drones and have the ability to make custom mounts so Im not too worried about getting the board on it however Im not sure how to get an NTSC signal from the OpenMV board. I saw the camera wireless TV modual so I’m assuming there’s a way if anyone could help I would appreciate it.

Also here’s a short clip of my drone it can do some crazy maneuvers.
https://www.reddit.com/r/drones/comments/mf5pdk/i_just_upgrade_some_of_my_gear_one_my_drone_these/Drone Video Link on Reddit

1 Like

Attach this: Wireless TV Shield | OpenMV

Then run the example script.

1 Like

It’s like less than 10 lines of code on your end for all of this.

1 Like

Perfect! I had a feeling it might be plug and play that’s awesome! Im gonna give it a go sometime this week will report back!

I cannot pickup the signal when using this shield what GPIO does the NTSC video output to Ill just wire into a long-range transmitter

Also I was able to pickup the signal now but the size is off and very scaled in

What board are you using? You should get the full 352x240 resolution on the H7 or H7+. Double buffering only works on the H7+. But, single buffering should be fine with the lepton.

h7+ I fixed it using QQVGA to scale to the same size as the mini output screen I have

But with the GPIO I would like to use my own video transmitter what pin is the NTSC signal sent on I cant seem to find where the code that’s imported on (import TV) is located. I’ve been looking through the git and there’s nothing in the libraries labeled TV

Also reading further is all the communication to the shield SPI is there a pin on the wireless video shield that I can tap for the video signal.

And or is it possible to disable its transmission in software to keep it from interfering with my other video transmitter? I can always do something with channels but id rather not have two right next to each other blasting out

I’m using these VTX Link There top of the line 5.8 transmitters that should give me a couple of miles of transmission range if I can get the video signal into it

This transmitter can send up to 800mw and take a 6s battery which is ideal for the application

Update I did it!

1 Like

Can you post your code? I’ll checkout if there are any issues.

1 Like

Sure thing! I didnt change much which says something about how awesome OpenMV is but I slopped the TV into one of the examples!

import sensor, image, tv, time , math

# Color Tracking Thresholds (Grayscale Min, Grayscale Max)
threshold_list = [(200, 255)]

# Set the target temp range here
min_temp_in_celsius = 20.0
max_temp_in_celsius = 35.0

print("Resetting Lepton...")
# These settings are applied on reset
sensor.reset()
sensor.ioctl(sensor.IOCTL_LEPTON_SET_MEASUREMENT_MODE, True)
sensor.ioctl(sensor.IOCTL_LEPTON_SET_MEASUREMENT_RANGE, min_temp_in_celsius, max_temp_in_celsius)
print("Lepton Res (%dx%d)" % (sensor.ioctl(sensor.IOCTL_LEPTON_GET_WIDTH),
                              sensor.ioctl(sensor.IOCTL_LEPTON_GET_HEIGHT)))
print("Radiometry Available: " + ("Yes" if sensor.ioctl(sensor.IOCTL_LEPTON_GET_RADIOMETRY) else "No"))

sensor.set_pixformat(sensor.GRAYSCALE)
sensor.set_framesize(sensor.QQVGA)
sensor.skip_frames(time=5000)
clock = time.clock()

tv.init(triple_buffer=False) # Initialize the tv.
tv.channel(8) # For wireless video transmitter shield

# Only blobs that with more pixels than "pixel_threshold" and more area than "area_threshold" are
# returned by "find_blobs" below. Change "pixels_threshold" and "area_threshold" if you change the
# camera resolution. "merge=True" merges all overlapping blobs in the image.

def map_g_to_temp(g):
    return ((g * (max_temp_in_celsius - min_temp_in_celsius)) / 255.0) + min_temp_in_celsius

while(True):
    clock.tick()
    img = sensor.snapshot()
    blob_stats = []
    blobs = img.find_blobs(threshold_list, pixels_threshold=200, area_threshold=200, merge=True)
    # Collect stats into a list of tuples
    for blob in blobs:
        blob_stats.append((blob.x(), blob.y(), map_g_to_temp(img.get_statistics(thresholds=threshold_list,
                                                                                roi=blob.rect()).mean())))
    img.to_rainbow(color_palette=sensor.PALETTE_IRONBOW) # color it
    # Draw stuff on the colored image
    for blob in blobs:
        img.draw_rectangle(blob.rect())
        img.draw_cross(blob.cx(), blob.cy())
    for blob_stat in blob_stats:
        img.draw_string(blob_stat[0], blob_stat[1] - 10, "%.2f C" % blob_stat[2], mono_space=False)
    print("FPS %f - Lepton Temp: %f C" % (clock.fps(), sensor.ioctl(sensor.IOCTL_LEPTON_GET_FPA_TEMPERATURE)))
    tv.display(img)

That code looks right!

1 Like