Tabla de contenido:
- Paso 1: Materiales y suministros:
- Paso 2:
- Paso 3: Montaje de su "jardín"
- Paso 4: escribir el código
- Paso 5: copia el código
Video: Garden Helper Roomba Bot: 8 pasos
2024 Autor: John Day | [email protected]. Última modificación: 2024-01-30 08:43
Kiara Myers, Ahmad Alghadeer y Madison Tippet
Objetivo:
Este instructivo le enseñará cómo programar un Roomba Bot, usando MATLAB, para navegar a través de un jardín, detectando frutas / verduras de forma circular que están lo suficientemente maduras para ser recolectadas según su tamaño. Este robot también le envía un correo electrónico, advirtiéndole cuántas frutas están listas para ser recolectadas y la ruta en la que viajó.
Características:
- Utiliza sensores de luz para detectar paredes y girar ligeramente para evitar golpearlas.
- Utiliza sensores de golpes para romper el programa cuando golpea la roca al final del jardín.
- Utiliza procesamiento de imágenes para detectar un círculo en el jardín y luego determinar su radio
- Utiliza sensores de acantilado para detectar una cinta de color que indica la presencia de una fruta.
Paso 1: Materiales y suministros:
- Una computadora portátil
- MATLAB 2017
- Limpiador de vacío Roomba
- Frambuesa pi
- Bloques de madera
- Papel blanco
- Papel negro
- Cinta de color / tira fina de papel de color
- Roca grande
Paso 2:
Paso 3: Montaje de su "jardín"
- Toma tu papel negro y corta círculos de varios tamaños.
-
Pegue estos círculos negros en un papel blanco grande
Este contraste será necesario a la hora de detectar una fruta
-
Use sus bloques de madera para construir un camino de jardín en forma de laberinto para que su robot lo navegue
Elegimos un camino en forma de U como se muestra en la imagen de arriba
- Al final de su jardín, agregue una piedra o una puerta u otro objeto para que su robot sepa que está listo.
-
Pegue su papel blanco con el círculo en las paredes del jardín.
Usamos cubos para pegarlo porque nuestras paredes eran demasiado cortas para la cámara
- Coloque cinta de color / tira fina de papel de color en el suelo delante de la fruta.
Paso 4: escribir el código
Navegando por el jardín
Uso de sensores de impacto: para ejecutar el programa, colocamos la codificación en una instrucción while que recorre varias instrucciones if hasta que se rompe el código. Si se golpea alguno de los parachoques, su valor será igual a verdadero (que en booleano es un valor de 1). Una instrucción if se usa para descifrar el código cuando uno de sus valores es igual a 1.
Uso de sensores de acantilado: dentro de la declaración while, usamos una declaración if para indicarle al Roomba cuándo ha llegado a la ubicación de una planta. El Roomba detecta la cinta de color en el piso al examinar el umbral de rojo que detectan los sensores de desnivel. Si el sensor de desnivel izquierdo o derecho detecta un color con un umbral mayor que el del suelo, detendrá el robot durante 2 segundos (usando el comando de pausa). Durante estos 2 segundos, Roomba tomará y mostrará una imagen de la fruta. Con el comando imfindcircles integrado, establezca un rango para los radios de sus círculos y su Roomba encontrará la llamada fruta.
Uso de procesamiento de imágenes: dentro de la declaración if, incorporamos otra declaración if que dice: si el radio detectado, radii3, es mayor o igual que nuestro requisito mínimo de una fruta madura, r1 (usted decide esto), luego cuente y muestre en el Roomba cuantas frutas están listas y gira para continuar por el jardín. Si no, el turno para continuar por el jardín. Nota: es posible que deba ajustar el ángulo en el que gira porque cada Roomba es diferente
Uso de parachoques ligeros: en otra declaración if, los parachoques ligeros se analizan para asegurarse de que ninguno de ellos supere nuestro umbral determinado. Si el parachoques de luz izquierdo, derecho, centro izquierdo, centro derecho, delantero izquierdo o delantero derecho supera el umbral, el Roomba girará ligeramente en el ángulo apropiado para evitar chocar contra una pared. Por lo tanto, navegar por el laberinto.
El resto del código se usa para trazar la ruta tomada por Roomba y luego enviar los resultados a su correo electrónico.
Paso 5: copia el código
% Propósito: Según sus tamaños, el roomba pasará por un jardín y distinguirá las verduras / frutas que están listas para ser recogidas. % De entradas: sensores de luz, sensores de desnivel, sensores de golpes, imagen de la cámara% de salidas: siempre que los sensores de luz superen el umbral, el roomba girará y tomará una imagen, emite un pitido si el radio de% de verduras / frutas se encuentra entre un rango específico. El código se rompe cuando roomba choca con% un objeto, envía al astronauta un correo electrónico sobre cuántas frutas están listas para ser% recogidas y un mapa del movimiento de roomba. % De uso: declaraciones if y while, comandos de trazado, código de correo electrónico de MATLAB
k = 0
tic
timerVal = tic
si bien es cierto
v = 0,2; % velocidad r.setDriveVelocity (v, v);% roomba avanzar L = r.getLightBumpers; LC = L.leftCenter; Rr = L.derecha; Lf = L.izquierda; RC = L.rightCenter; LF = L.izquierdaFrente; RF = L.rightFront; Q = 75; % umbral. RTH = 30; % Umbral rojo alto RTL = 10; % Umbral rojo bajo B = r.getBumpers S = r.getCliffSensors; r1 = 24; r3 = 10; PL1 = 1800; si S.leftFront> PL1 || S.rightFront> PL1% detecta si el color en el suelo está por encima del umbral r.stop pause (2) elapsedTime = toc (timerVal-2) tic timerVal = tic% pausa durante 2 segundos img = r.getImage; % tomar imagen imshow (img)% mostrar imagen [centros3, radios3] = imfindcircles (img, [30 50], 'ObjectPolarity', 'dark', 'Sensitivity', 0.9); h = viscírculos (centros3, radios3); % busque círculos de radios dentro del rango especificado en la imagen si radii3> = r1 T = 1 k = k + 1 dist1 = 0.2. * tiempo transcurrido% Si el radio detectado es mayor o igual al% mínimo requerido de una fruta madura, entonces Roomba cuenta esta fruta elseif radii3 <= r3 T = 0 else T = 0 dist2 = 0.2. * elapsedTime% Si no es así, entonces no cuenta el final de la fruta
if T == 1 r.setLEDDigits (num2str (k)) r.beep r.beep r.beep r.turnAngle (78)% Si se detectó una fruta, muestre el número en Roomba,% haga un ruido y gire elseif T == 2 r.turnAngle (78)% Si se detectan 2 frutas, gire para continuar por% garden else r.turnAngle (78)% Si no se detectan frutas, gire para continuar por% garden end end if LC> Q r.stop r.turnAngle (-7) elseif RC> Q r.stop r.turnAngle (7) elseif LF> Q r.stop r.turnAngle (-7) elseif RF> Q r.stop r. turnAngle (7) elseif Lf> Q r.stop r.turnAngle (-7) elseif Rr> Q r.stop r.turnAngle (7) end% Si alguno de los valores de los parachoques de luz supera el umbral, entonces% el Roomba girará ligeramente en la dirección apropiada para evitar% golpear una pared
si B.right == 1 || B.izquierda == 1 || B.front == 1 dist3 = 0.2. * ElapsedTime r.stop r.beep ('F # * 2, F # * 2, c, F # * 2, F # * 2') r.turnAngle (360)% Si alguno de los se golpean los botones, luego el roomba reproduce un sonido, gira,% y rompe el código
romper el final
end scatter (0.533, 0, '^') mantener la dispersión (0.533, dist1, '<') mantener la dispersión (-dist2, dist1, 'v') mantener la dispersión (-dist2, 0, 'd') saveas (mcd, 'Movement.png')
kmsg = num2str (k) mail = '[email protected]' contraseña = 'Srsora123 #' host = 'smtp.gmail.com' port = '465'
setpref ('Internet', 'E_mail', correo); setpref ('Internet', 'SMTP_Server', host) props = java.lang. System.getProperties; props.setProperty ('mail.smtp.user', correo); props.setProperty ('mail.smtp.host', host); props.setProperty ('mail.smtp.port', puerto); props.setProperty ('mail.smtp.starttls.enable', 'verdadero'); props.setProperty ('mail.smtp.debug', 'verdadero'); props.setProperty ('mail.smtp.auth', 'verdadero'); props.setProperty ('mail.smtp.socketFactory.port', puerto); props.setProperty ('mail.smtp.socketFactory.class', 'javax.net.ssl. SSLSocketFactory'); props.setProperty ('mail.smtp.socketFactory.fallback', 'falso'); sendmail (mail, '¡Hola astronauta! Hay tantas frutas en el jardín', kmsg, {'movement.png'})
Recomendado:
KS-Garden: Descripción general: 9 pasos
KS-Garden: Descripción general: KS-Garden se puede utilizar para regar / ventilar. / Iluminar su jardín / plantas de invernadero en el patio trasero o sus plantas de caja de cultivo interior (diseño modular) El sistema KS-Garden consta principalmente de los siguientes módulos: caja del sistema - Caja de fuente de alimentación y relés
IoT Garden con Arduino: 3 pasos
IoT Garden con Arduino: ¡Hola fabricantes! ¡Este es un proyecto para crear tu jardín IoT! Podrás leer la temperatura de la habitación, controlar la bomba y monitorear tus plantas desde tu teléfono inteligente incluso cuando no estés en casa. configuración, la bomba toma el agua del
Smart IoT Garden: 10 pasos (con imágenes)
Smart IoT Garden: si eres como yo, te gustan las frutas y verduras frescas en tu plato, pero no tienes tiempo suficiente para mantener un jardín decente. Este instructivo le mostrará cómo construir un jardín inteligente de IoT (lo llamo: Green Guard) que riega su pl
Bot de dibujo lineal BT de Trash Built - My Bot: 13 pasos (con imágenes)
Trash Built BT Line Drawing Bot - My Bot: Hai amigos después de un largo intervalo de unos 6 meses aquí vengo con un nuevo proyecto. Hasta la finalización de Cute Drawing Buddy V1, SCARA Robot - Arduino i planifico otro bot de dibujo, el objetivo principal es cubrir un gran espacio para dibujar. Así que brazos robóticos fijos c
Roomba Bot the Bulider: 5 pasos (con imágenes)
Roomba Bot the Bulider: Bot the Builder es un roomba, que con " grabbers " adjunto al frente podrá mover objetos alrededor. El código con él está configurado para registrar el primer movimiento con un cuadro de GUI que puede controlar con solo hacer clic con el mouse. Después