Cámara OpenMV que envía los conteos de tapones a un Intel Edison antiguo por UART: no llega nada
Traducido del English por IA ·
Soy el jefe de planta, y nuestro único técnico de control está de baja, así que me encargo yo de esto. En la línea de embotellado, una cámara OpenMV H7 revisa los tapones, cuenta los buenos y rechaza los demás. Junto a ella hay un Intel Edison antiguo sobre su placa de conexiones Arduino, que ya lee los contadores de la llenadora y envía los datos de la línea a Hermetry. Quiero que la OpenMV pase sus dos conteos al Edison por puerto serie para que suban junto con el resto.Lado de la OpenMV:
from pyb import UART
uart = UART(3, 115200, timeout_char=1000)
...
uart.write("caps_ok=%d;caps_rej=%dn" % (ok, rej))
Lado del Edison, Python leyendo /dev/ttyMFD1 a 115200: el puerto se abre sin errores, pero read() no devuelve nada. Conecté el P4 (TX) de la OpenMV al pin 0 de la placa de conexiones y el P5 (RX) al pin 1.Las dos placas están a unos 40 cm dentro de la misma carcasa, unidas con cables de puente, y ambas se alimentan de la misma fuente de 5 V. Comprobé la OpenMV con un adaptador USB serie en mi portátil y las líneas salen bien a 115200.
Plant manager, and our only controls tech is on leave, so I’m doing this one myself. On the bottling line an OpenMV H7 camera checks caps and counts good ones and rejects. Next to it is an old Intel Edison on its Arduino breakout board, which already reads the filler’s counters and sends line data to Hermetry. I want the OpenMV to pass its two counts to the Edison over serial so they go up with the rest.
OpenMV side:
from pyb import UART
uart = UART(3, 115200, timeout_char=1000)
...
uart.write("caps_ok=%d;caps_rej=%dn" % (ok, rej))
Edison side, Python reading /dev/ttyMFD1 at 115200: the port opens without errors, but read() returns nothing at all. I connected OpenMV P4 (TX) to the breakout’s pin 0 and P5 (RX) to pin 1.
The two boards sit about 40 cm apart in the same enclosure, joined by jumper wires, both powered from the same 5 V supply. I checked the OpenMV with a USB serial adapter on my laptop and the lines come out fine at 115200.
Traducido del English por IA ·
¿A qué voltaje está configurado el level shifter de la placa breakout? La OpenMV funciona a 3,3 V, y la placa breakout del Edison se puede configurar con un jumper para 5 V.
What voltage is the breakout’s level shifter set to? The OpenMV is 3.3 V, the Edison breakout can be jumpered for 5 V.
Traducido del English por IA ·
¿Están conectadas las tierras (GND) entre las dos placas? A mí ya me ha pasado eso.
Are the grounds connected between the two boards? I’ve been caught by that one.
Traducido del English por IA ·
Las masas están conectadas. El jumper (J9) estaba en 5 V, lo pasé a 3.3 V. Sigue sin llegar nada.
Grounds are connected. The jumper (J9) was on 5 V, I moved it to 3.3 V. Still nothing.
Traducido del English por IA ·
Peleé con la placa de expansión del Edison para un laboratorio el año pasado. Abrir /dev/ttyMFD1 no basta en esa placa: los pines 0 y 1 pasan por un multiplexor de pines y los convertidores de nivel, y hasta que se configuran la UART no está conectada al conector, los pines son GPIO normales. Por eso se abre sin problemas pero no lee nada.La forma sencilla es la biblioteca mraa, que configura el multiplexor por usted al abrir la UART por su número de placa:
import mraa
u = mraa.Uart(0) # pins 0/1 on the Arduino breakout, sets the mux
u.setBaudRate(115200)
u.setMode(8, mraa.UART_PARITY_NONE, 1)
while True:
if u.dataAvailable(1000):
line = u.readStr(64).strip() # "caps_ok=1823;caps_rej=12"
vals = dict(kv.split("=") for kv in line.split(";"))
# add to the payload the Edison already sends:
payload["caps_ok"] = int(vals["caps_ok"])
payload["caps_rej"] = int(vals["caps_rej"])
Compruebe también que el cableado está cruzado: TX de la OpenMV al RX del Edison (pin 0), RX de la OpenMV al TX del Edison (pin 1). El pin 0 es RX en la placa de expansión, así que si lo que escribió es exactamente como está cableado, intercámbielos.
I fought the Edison breakout for a lab last year. Opening /dev/ttyMFD1 isn’t enough on that board: pins 0 and 1 go through a pin multiplexer and the level shifters, and until those are set up the UART isn’t connected to the header at all, the pins are plain GPIO. That’s why it opens fine and reads nothing.
The easy way is the mraa library, which sets the mux for you when you open the UART by its board number:
import mraa
u = mraa.Uart(0) # pins 0/1 on the Arduino breakout, sets the mux
u.setBaudRate(115200)
u.setMode(8, mraa.UART_PARITY_NONE, 1)
while True:
if u.dataAvailable(1000):
line = u.readStr(64).strip() # "caps_ok=1823;caps_rej=12"
vals = dict(kv.split("=") for kv in line.split(";"))
# add to the payload the Edison already sends:
payload["caps_ok"] = int(vals["caps_ok"])
payload["caps_rej"] = int(vals["caps_rej"])
Also check the wiring is crossed: OpenMV TX to the Edison’s RX (pin 0), OpenMV RX to the Edison’s TX (pin 1). Pin 0 is RX on the breakout, so if what you wrote is exactly how it’s wired, swap them.
Traducido del English por IA ·
Las dos cosas, como resulta. mraa.Uart(0) configuró los pines, y yo tenía TX y RX cambiados. Los recuentos llegan ahora cada segundo y suben con los datos de relleno. caps_rej está en la placa de línea, y el jefe de turno ya preguntó por qué subió a las 14:00.
Both, as it turns out. mraa.Uart(0) set up the pins, and I had TX and RX the wrong way round. Counts now arrive every second and go up with the filler data. caps_rej is on the line board and the shift lead already asked why it jumped at 2 pm.
Traducido del English por IA ·
Bien. Aun así, conviene planificar un reemplazo para ese Edison; lleva años fuera de producción y los repuestos son cada vez más difíciles de conseguir.
Good. Plan a replacement for that Edison though, it’s been out of production for years and spares get harder to find.
- Debes estar registrado para responder a este debate.
Únete a la conversación
Inicia sesión para preguntar y responder, dar me gusta a las publicaciones útiles y marcar la respuesta que resolvió tu problema. Cada aportación suma puntos y niveles.

