Servomotores son ampliamente usados en robótica, mecanismos industriales, aeromodelismo, dispensadores de alimentos, proyectos estudiantiles y universitario, etc. su principal ventaja es la precisión de la posición de su eje, de una forma controlada. en este capítulo, estudiaremos como controlar servomotores con la tarjeta MICROBIT.

Servomotores son motores electromagnéticos-mecánico, cuyo eje puede ser posicionado con gran precisión en un rango de 0 a 180 grados. Para lograr esto, los servomotores poseen un circuito electrónico que consigue saber en qué posición esta su eje. La gran mayoría de servomotores usan una resistencia variable (potenciómetro) para conocer la posición del eje. Para controlar la posición del eje, se usa un pulso digital como el mostrado en la siguiente figura:

 

 


 

 

 

Dependiendo del servomotor, normalmente, este pulso puede variar de unos 0.4 milisegundos (400 microsegundos) a unos 4 milisegundos (4000 microsegundos). En la siguiente figura podemos observar la relación entre la posición de eje y el pulso de control:

 

 

 


| Clique na imagem para ampliar |

 

 

Este pulso es manejado por una señal PWM o Modulación por ancho del pulso, la cual, para los servomotores, normalmente tiene un periodo de 20 milisegundos y una frecuencia de 50 ciclos por segundo, como muestra la siguiente figura:

 


| Clique na imagem para ampliar |

 

 

Las principales partes que forman un servomotor son:

• Potenciómetro

• Circuito Controlador

• Motor

• Caja de Engranajes

• Eje

 

La siguiente figura muestra las partes del servomotor en forma de diagrama:

 

 


| Clique na imagem para ampliar |

 

 

Para la conexión, los servomotores poseen 3 cables. Uno para conectar a la fuente de voltaje, otro para conectar a tierra y otro para la señal como muestra la siguiente figura:

 

 


 

 

 

Las tensiones típicas para conectar los servomotores pueden variar de unos 3 a 9 voltios. Los hay de varios tamaños, dependiendo de la cantidad de peso que necesitan mover. Refiérase a la hoja técnica del fabricante, para obtener los datos del servomotor que va a usar. Para el desarrollo de las prácticas de este capítulo, observe que la tensión de alimentación del servomotor soporte 3 volts. La siguiente figura muestra un modelo de servomotores:

 

 


| Clique na imagem para ampliar |

 

 

Para usar los servomotores en microbit, vaya al menú: “Avanzado” y en la ventana que se desplegó, seleccione el menú: “Extensiones”, como muestra la siguiente figura:

 

 


| Clique na imagem para ampliar |

 

 

Aparecerá una página con varios iconos. Seleccione el que tiene el nombre: “servo”, como mostrado en la siguiente figura:

 

 


 

 

 

Una vez seleccionado el icono: “servo”, aparecerá en el menú de las funciones, un ítem llamado: “Servos”, como mostrado en la siguiente imagen:

 

 


 

 

 

Seleccione el menú: “Servos”, para comenzar a usar sus bloques, como mostrado en la siguiente figura:

 

 


| Clique na imagem para ampliar |

 

 

 

 

Configuracion del servomotor.

 

 

Hay algunos bloques para configurar el servomotor, los cuales vamos a ver en esta sección:

 

Hay un bloque llamado: “set servo pulse to us”, el cual permite establecer el ancho del pulso del servo en microsegundos. La siguiente figura muestra este bloque:

 

 


| Clique na imagem para ampliar |

 

 

Hay un bloque llamado: “set servo range from to”, el cual coloca el posible rango de ángulos de rotación. Normalmente este rango va de: 0 a 180 grados como muestra la siguiente figura:

 

 


| Clique na imagem para ampliar |

 

 

Hay un bloque llamado: “set servo stop on neutral”, el cual permite colocar (set) un modo de parada. Así, cuando este bloque es activado, detiene (stop) el servomotor cuando el ángulo de rotación este en la posición neutral (90 grados). Este bloque es mostrado en la siguiente figura:

 

 


| Clique na imagem para ampliar |

 

 

Normalmente estos bloques son usados al inicio del programa. Para el desarrollo de este capítulo dejamos los que el compilador de “MakeCode”, usa por defecto.

 

 

 

Posicionando el servomotor de 0 a 180 grados.

 

El compilador de MakeCode, permite manejar 3 servomotores, por defecto, en los pines de salida: P1, P2 y P3 de la tarjeta microbit. Al usar los bloques que usan servomotores, tome cuidado de seleccionar el pin correcto sobre el que se encuentra el servomotor, pues el compilador de MakeCode, por defecto, selecciona el pin P0. Todos los bloques que usan servomotores, en su menú desplegable, permiten seleccionar el pin sobre el cual está el servomotor, como muestra la siguiente imagen:

 

 


 

 

 

Para establecer el ángulo del servo, usamos un bloque llamado: “set servo angle to”, como mostrado en la siguiente figura:

 

 


| Clique na imagem para ampliar |

 

 

Por ejemplo, si queremos que el servomotor se posicione a 0 grados, podemos usar el siguiente programa, como mostrado en la siguiente figura:

 

 


 

 

 

Cuando usamos algún servomotor, el compilador “MakeCode”, usa el simulador para observar cómo los servos se posicionarían. En la siguiente figura podemos observar al simulador, cuando ejecuta los bloques mostrados anteriormente:

 

 


 

 

 

Observe como se ve el programa “MakeCode”, cuando usamos algún bloque del menú: “Servos”:

 


| Clique na imagem para ampliar |

 

 

Si queremos posicionar el servomotor a 180 grados, podemos usar los siguientes bloques:

 

 


 

 

 

El simulador mostrara el servomotor en la siguiente posición:

 

 


 

 

 

 

Así, podemos hacer un programa donde el servomotor se posicione a 0 grados, después se posicione a 180 grados y después se vuelva a posicionar a 0 grados. Estas posiciones se repetirían continuamente. Los bloques para hacer esto, son mostrados en la siguiente figura:

 

 


 

 

 

Hay un tipo de servomotor que puede girar continuamente, como lo hacen los motores convencionales de corriente continua, el cual podemos controlar con el siguiente bloque de código:

 


| Clique na imagem para ampliar |

 

 

Para parar (stop) los servomotores continuos, podemos usar el bloque: “stop servo”, como mostrado en la siguiente figura:

 

 


| Clique na imagem para ampliar |

 

 

 

 

Posicionando 2 servomotores.

 

Cuando son usados 2 servomotores, el simulador de “MakeCode”, muestra un protoboard, como mostrado en la siguiente figura:

 

 


 

 

 

 

 

Así, podemos hacer que los 2 servos se muevan al mismo ángulo de posición. Este movimiento es similar al usado por los ojos humanos o por los parabrisas de un carro. La siguiente figura, muestra el programa para hacer esto:

 


 

 

 

 


| Clique na imagem para ampliar |

 

 

 

Por ejemplo, si queremos abrir puertas o ventanas con servomotores, podemos usar un programa como el mostrado en la siguiente figura:

 


 

 

 

 


| Clique na imagem para ampliar |

 

 

Observe que en un momento los brazos de los servomotores se encuentran y en otro se alejan. Con estos bloques es posible crear infinidad de ideas, donde se requieran movimientos precisos.

 

 

 

Posicionando 3 servomotores.

 

MakeCode nos permite controlar y simular 3 servomotores. En la siguiente figura podemos observar el simulador de microbit y los 3 servomotores:

 


 

 

 

El siguiente programa nos permite controlar los 3 servomotores al mismo tiempo:

 

 


 

 

 

 


| Clique na imagem para ampliar |

 

 

 

 

Note que, en el protoboard de la izquierda: en un momento el servomotor de la izquierda y del centro, se alejan y el servomotor de la derecha y del centro, se acercan. Después, en el protoboard de la derecha: se hace lo contrario, el servo de la izquierda y del centro, se acercan, mientras que el de la derecha y el centro, se alejan.

 

 

 

Secuencias de posicion con servomotores.

 

Es muy común en algunos proyectos usando servomotores, la necesidad de secuencias de posiciones del eje, para ejecutar alguna tarea especifica. Por ejemplo, supongamos que un mecanismo necesita la siguiente secuencia de posiciones:

 

 


| Clique na imagem para ampliar |

 

 

Cree un nuevo proyecto. Para hacer estas secuencias de posiciones, podemos usar un programa como el siguiente:

 

 


 

 

 

El siguiente programa hace lo mismo que el programa anterior, pero usamos un arreglo (array) para almacenar las posiciones:

 

 


 

 

 

Para crear un arreglo numérico, vaya al menú: “Arreglos”, como muestra la siguiente figura:

 

 


| Clique na imagem para ampliar |

 

 

En el menú desplegable del bloque, puede crear una nueva variable, como muestra la siguiente figura:

 

 


 

 

 

Al arreglo que creamos, le hemos dado el nombre: “PosicionesLista”, más puede usar cualquier otro nombre. Para recorrer los elementos de este arreglo y obtener las posiciones, podemos usar el bloque llamado: “para el elemento de”, el cual se encuentra en el menú: “bucles”, como mostrado en la siguiente figura:

 

 


| Clique na imagem para ampliar |

 

 

Observe si, en el bloque: “para el elemento de”, esta seleccionado el arreglo: “PosicionesLista”.

 

Así, podemos crear infinidad de proyectos usando servomotores. Algunos proyectos usan varios servomotores, para lo cual es necesario usar una tarjeta que soporte el control de estos. También, si los servomotores consumen mucha corriente, es necesario reforzar la batería o tomar el voltaje para los servomotores de una fuente externa. La creatividad, la práctica, nos ayudaran mucho a utilizar los servomotores. Como una última nota, siempre es recomendable, ver las características del servomotor en su hoja técnica.

 

 

 

 

18.894MBMemory Usage46.96msRequest Duration
Joomla! Version5.2.3
PHP Version8.3.20
Identityguest
Response200
Templatecassiopeia
Database
Server
mysql
Version
10.5.22-MariaDB
Collation
latin1_swedish_ci
Conn Collation
utf8mb4_general_ci
$_GET
[]
$_POST
[]
$_SESSION
array:1 [ "joomla" => "***redacted***" ]
$_COOKIE
[]
$_SERVER
array:51 [ "USER" => "apache" "HOME" => "/usr/share/httpd" "SCRIPT_NAME" => "/index.php" "RE...
session
array:3 [ "counter" => 1 "timer" => array:3 [ "start" => 1748845476 "last" => 1748845476...
registry
array:3 [ "data" => [] "initialized" => false "separator" => "." ]
user
array:21 [ "id" => 0 "name" => null "username" => null "email" => null "password" => "***r...
  • afterLoad (85.36KB) (411μs)
  • afterInitialise (1.14MB) (5.37ms)
  • afterRoute (123.32KB) (1.22ms)
  • beforeRenderComponent com_content (101.08KB) (556μs)
  • Before Access::preloadComponents (all components) (33.45KB) (332μs)
  • After Access::preloadComponents (all components) (107.06KB) (648μs)
  • Before Access::preloadPermissions (com_content) (1.57KB) (13μs)
  • After Access::preloadPermissions (com_content) (16.19MB) (24.45ms)
  • Before Access::getAssetRules (id:26951 name:com_content.article.30593) (514.65KB) (742μs)
  • After Access::getAssetRules (id:26951 name:com_content.article.30593) (7.38KB) (44μs)
  • afterRenderComponent com_content (438.06KB) (5.97ms)
  • afterDispatch (2.25KB) (43μs)
  • beforeRenderRawModule mod_articles_category (Banco de Circuitos) (358.53KB) (1.53ms)
  • afterRenderRawModule mod_articles_category (Banco de Circuitos) (79.43KB) (314μs)
  • beforeRenderRawModule mod_finder (Busca_inteligente) (5.9KB) (91μs)
  • afterRenderRawModule mod_finder (Busca_inteligente) (64.9KB) (1.08ms)
  • beforeRenderModule mod_articles_category (Banco de Circuitos) (9.27KB) (537μs)
  • afterRenderModule mod_articles_category (Banco de Circuitos) (5.47KB) (65μs)
  • beforeRenderModule mod_finder (Busca_inteligente) (6.64KB) (194μs)
  • afterRenderModule mod_finder (Busca_inteligente) (4.75KB) (48μs)
  • afterRender (281.75KB) (3.2ms)
  • 1 x After Access::preloadPermissions (com_content) (16.19MB) (52.08%)
    24.45ms
    1 x afterRenderComponent com_content (438.06KB) (12.71%)
    5.97ms
    1 x afterInitialise (1.14MB) (11.44%)
    5.37ms
    1 x afterRender (281.75KB) (6.82%)
    3.20ms
    1 x beforeRenderRawModule mod_articles_category (Banco de Circuitos) (358.53KB) (3.25%)
    1.53ms
    1 x afterRoute (123.32KB) (2.6%)
    1.22ms
    1 x afterRenderRawModule mod_finder (Busca_inteligente) (64.9KB) (2.29%)
    1.08ms
    1 x Before Access::getAssetRules (id:26951 name:com_content.article.30593) (514.65KB) (1.58%)
    742μs
    1 x After Access::preloadComponents (all components) (107.06KB) (1.38%)
    648μs
    1 x beforeRenderComponent com_content (101.08KB) (1.18%)
    556μs
    1 x beforeRenderModule mod_articles_category (Banco de Circuitos) (9.27KB) (1.14%)
    537μs
    1 x afterLoad (85.36KB) (0.88%)
    411μs
    1 x Before Access::preloadComponents (all components) (33.45KB) (0.71%)
    332μs
    1 x afterRenderRawModule mod_articles_category (Banco de Circuitos) (79.43KB) (0.67%)
    314μs
    1 x beforeRenderModule mod_finder (Busca_inteligente) (6.64KB) (0.41%)
    194μs
    1 x beforeRenderRawModule mod_finder (Busca_inteligente) (5.9KB) (0.19%)
    91μs
    1 x afterRenderModule mod_articles_category (Banco de Circuitos) (5.47KB) (0.14%)
    65μs
    1 x afterRenderModule mod_finder (Busca_inteligente) (4.75KB) (0.1%)
    48μs
    1 x After Access::getAssetRules (id:26951 name:com_content.article.30593) (7.38KB) (0.09%)
    44μs
    1 x afterDispatch (2.25KB) (0.09%)
    43μs
    1 x Before Access::preloadPermissions (com_content) (1.57KB) (0.03%)
    13μs
21 statements were executed, 5 of which were duplicates, 16 unique12.68ms1.63MB
  • SELECT @@SESSION.sql_mode;46μs968B/libraries/src/Session/MetadataManager.php:184Copy
  • SELECT `session_id` FROM `incbmx_session` WHERE `session_id` = :session_id LIMIT 194μs1.3KBParams/libraries/src/Session/MetadataManager.php:187Copy
  • INSERT INTO `incbmx_session` (`session_id`,`guest`,`time`,`userid`,`username`,`client_id`) VALUES (:session_id, :guest, :time, :user_id, :username, :client_id)298μs944BParams/libraries/src/Session/MetadataManager.php:260Copy
  • SELECT `id`,`rules` FROM `incbmx_viewlevels`59μs656B/libraries/src/Access/Access.php:955Copy
  • SELECT `b`.`id` FROM `incbmx_usergroups` AS `a` LEFT JOIN `incbmx_usergroups` AS `b` ON `b`.`lft` <= `a`.`lft` AND `b`.`rgt` >= `a`.`rgt` WHERE `a`.`id` = :guest83μs1.64KBParams/libraries/src/Access/Access.php:868Copy
  • SELECT `c`.`id`,`c`.`asset_id`,`c`.`access`,`c`.`alias`,`c`.`checked_out`,`c`.`checked_out_time`,`c`.`created_time`,`c`.`created_user_id`,`c`.`description`,`c`.`extension`,`c`.`hits`,`c`.`language`,`c`.`level`,`c`.`lft`,`c`.`metadata`,`c`.`metadesc`,`c`.`metakey`,`c`.`modified_time`,`c`.`note`,`c`.`params`,`c`.`parent_id`,`c`.`path`,`c`.`published`,`c`.`rgt`,`c`.`title`,`c`.`modified_user_id`,`c`.`version`, CASE WHEN CHAR_LENGTH(`c`.`alias`) != 0 THEN CONCAT_WS(':', `c`.`id`, `c`.`alias`) ELSE `c`.`id` END as `slug` FROM `incbmx_categories` AS `s` INNER JOIN `incbmx_categories` AS `c` ON (`s`.`lft` <= `c`.`lft` AND `c`.`lft` < `s`.`rgt`) OR (`c`.`lft` < `s`.`lft` AND `s`.`rgt` < `c`.`rgt`) WHERE (`c`.`extension` = :extension OR `c`.`extension` = 'system') AND `c`.`published` = 1 AND `s`.`id` = :id ORDER BY `c`.`lft`269μs3.98KBParams/libraries/src/Categories/Categories.php:375Copy
  • SELECT `id`,`name`,`rules`,`parent_id` FROM `incbmx_assets` WHERE `name` IN (:preparedArray1,:preparedArray2,:preparedArray3,:preparedArray4,:preparedArray5,:preparedArray6,:preparedArray7,:preparedArray8,:preparedArray9,:preparedArray10,:preparedArray11,:preparedArray12,:preparedArray13,:preparedArray14,:preparedArray15,:preparedArray16,:preparedArray17,:preparedArray18,:preparedArray19,:preparedArray20,:preparedArray21,:preparedArray22,:preparedArray23,:preparedArray24,:preparedArray25,:preparedArray26,:preparedArray27,:preparedArray28,:preparedArray29,:preparedArray30,:preparedArray31,:preparedArray32,:preparedArray33,:preparedArray34,:preparedArray35,:preparedArray36,:preparedArray37,:preparedArray38,:preparedArray39)462μs7.44KBParams/libraries/src/Access/Access.php:357Copy
  • SELECT `id`,`name`,`rules`,`parent_id` FROM `incbmx_assets` WHERE `name` LIKE :asset OR `name` = :extension OR `parent_id` = 09.05ms1.48MBParams/libraries/src/Access/Access.php:301Copy
  • SHOW FULL COLUMNS FROM `incbmx_content`301μs2.39KB/libraries/vendor/joomla/database/src/Mysqli/MysqliDriver.php:587Copy
  • UPDATE `incbmx_content` SET `hits` = (`hits` + 1) WHERE `id` = '30593'146μs48B/libraries/src/Table/Table.php:1348Copy
  • SELECT `a`.`id`,`a`.`asset_id`,`a`.`title`,`a`.`alias`,`a`.`introtext`,`a`.`fulltext`,`a`.`state`,`a`.`catid`,`a`.`created`,`a`.`created_by`,`a`.`created_by_alias`,`a`.`modified`,`a`.`modified_by`,`a`.`checked_out`,`a`.`checked_out_time`,`a`.`publish_up`,`a`.`publish_down`,`a`.`images`,`a`.`urls`,`a`.`attribs`,`a`.`version`,`a`.`ordering`,`a`.`metakey`,`a`.`metadesc`,`a`.`access`,`a`.`hits`,`a`.`metadata`,`a`.`featured`,`a`.`language`,`fp`.`featured_up`,`fp`.`featured_down`,`c`.`title` AS `category_title`,`c`.`alias` AS `category_alias`,`c`.`access` AS `category_access`,`c`.`language` AS `category_language`,`fp`.`ordering`,`u`.`name` AS `author`,`parent`.`title` AS `parent_title`,`parent`.`id` AS `parent_id`,`parent`.`path` AS `parent_route`,`parent`.`alias` AS `parent_alias`,`parent`.`language` AS `parent_language`,ROUND(`v`.`rating_sum` / `v`.`rating_count`, 1) AS `rating`,`v`.`rating_count` AS `rating_count` FROM `incbmx_content` AS `a` INNER JOIN `incbmx_categories` AS `c` ON `c`.`id` = `a`.`catid` LEFT JOIN `incbmx_content_frontpage` AS `fp` ON `fp`.`content_id` = `a`.`id` LEFT JOIN `incbmx_users` AS `u` ON `u`.`id` = `a`.`created_by` LEFT JOIN `incbmx_categories` AS `parent` ON `parent`.`id` = `c`.`parent_id` LEFT JOIN `incbmx_content_rating` AS `v` ON `a`.`id` = `v`.`content_id` WHERE ( (`a`.`id` = :pk AND `c`.`published` > 0) AND (`a`.`publish_up` IS NULL OR `a`.`publish_up` <= :publishUp)) AND (`a`.`publish_down` IS NULL OR `a`.`publish_down` >= :publishDown) AND `a`.`state` IN (:preparedArray1,:preparedArray2)165μs54.13KBParams/components/com_content/src/Model/ArticleModel.php:215Copy
  • SELECT `c`.`id`,`c`.`asset_id`,`c`.`access`,`c`.`alias`,`c`.`checked_out`,`c`.`checked_out_time`,`c`.`created_time`,`c`.`created_user_id`,`c`.`description`,`c`.`extension`,`c`.`hits`,`c`.`language`,`c`.`level`,`c`.`lft`,`c`.`metadata`,`c`.`metadesc`,`c`.`metakey`,`c`.`modified_time`,`c`.`note`,`c`.`params`,`c`.`parent_id`,`c`.`path`,`c`.`published`,`c`.`rgt`,`c`.`title`,`c`.`modified_user_id`,`c`.`version`, CASE WHEN CHAR_LENGTH(`c`.`alias`) != 0 THEN CONCAT_WS(':', `c`.`id`, `c`.`alias`) ELSE `c`.`id` END as `slug` FROM `incbmx_categories` AS `s` INNER JOIN `incbmx_categories` AS `c` ON (`s`.`lft` <= `c`.`lft` AND `c`.`lft` < `s`.`rgt`) OR (`c`.`lft` < `s`.`lft` AND `s`.`rgt` < `c`.`rgt`) WHERE (`c`.`extension` = :extension OR `c`.`extension` = 'system') AND `c`.`access` IN (:preparedArray1,:preparedArray2) AND `c`.`published` = 1 AND `s`.`id` = :id ORDER BY `c`.`lft`188μs3.92KBParams/libraries/src/Categories/Categories.php:375Copy
  • SELECT `m`.`tag_id`,`t`.* FROM `incbmx_contentitem_tag_map` AS `m` INNER JOIN `incbmx_tags` AS `t` ON `m`.`tag_id` = `t`.`id` WHERE `m`.`type_alias` = :contentType AND `m`.`content_item_id` = :id AND `t`.`published` = 1 AND `t`.`access` IN (:preparedArray1,:preparedArray2)240μs3.98KBParams/libraries/src/Helper/TagsHelper.php:388Copy
  • SELECT `c`.`id`,`c`.`asset_id`,`c`.`access`,`c`.`alias`,`c`.`checked_out`,`c`.`checked_out_time`,`c`.`created_time`,`c`.`created_user_id`,`c`.`description`,`c`.`extension`,`c`.`hits`,`c`.`language`,`c`.`level`,`c`.`lft`,`c`.`metadata`,`c`.`metadesc`,`c`.`metakey`,`c`.`modified_time`,`c`.`note`,`c`.`params`,`c`.`parent_id`,`c`.`path`,`c`.`published`,`c`.`rgt`,`c`.`title`,`c`.`modified_user_id`,`c`.`version`, CASE WHEN CHAR_LENGTH(`c`.`alias`) != 0 THEN CONCAT_WS(':', `c`.`id`, `c`.`alias`) ELSE `c`.`id` END as `slug` FROM `incbmx_categories` AS `s` INNER JOIN `incbmx_categories` AS `c` ON (`s`.`lft` <= `c`.`lft` AND `c`.`lft` < `s`.`rgt`) OR (`c`.`lft` < `s`.`lft` AND `s`.`rgt` < `c`.`rgt`) WHERE (`c`.`extension` = :extension OR `c`.`extension` = 'system') AND `c`.`access` IN (:preparedArray1,:preparedArray2) AND `c`.`published` = 1 AND `s`.`id` = :id ORDER BY `c`.`lft`186μs3.92KBParams/libraries/src/Categories/Categories.php:375Copy
  • SELECT DISTINCT a.id, a.title, a.name, a.checked_out, a.checked_out_time, a.note, a.state, a.access, a.created_time, a.created_user_id, a.ordering, a.language, a.fieldparams, a.params, a.type, a.default_value, a.context, a.group_id, a.label, a.description, a.required, a.only_use_in_subform,l.title AS language_title, l.image AS language_image,uc.name AS editor,ag.title AS access_level,ua.name AS author_name,g.title AS group_title, g.access as group_access, g.state AS group_state, g.note as group_note FROM incbmx_fields AS a LEFT JOIN `incbmx_languages` AS l ON l.lang_code = a.language LEFT JOIN incbmx_users AS uc ON uc.id=a.checked_out LEFT JOIN incbmx_viewlevels AS ag ON ag.id = a.access LEFT JOIN incbmx_users AS ua ON ua.id = a.created_user_id LEFT JOIN incbmx_fields_groups AS g ON g.id = a.group_id LEFT JOIN `incbmx_fields_categories` AS fc ON fc.field_id = a.id WHERE ( (`a`.`context` = :context AND (`fc`.`category_id` IS NULL OR `fc`.`category_id` IN (:preparedArray1,:preparedArray2,:preparedArray3)) AND `a`.`access` IN (:preparedArray4,:preparedArray5)) AND (`a`.`group_id` = 0 OR `g`.`access` IN (:preparedArray6,:preparedArray7)) AND `a`.`state` = :state) AND (`a`.`group_id` = 0 OR `g`.`state` = :gstate) AND `a`.`only_use_in_subform` = :only_use_in_subform ORDER BY a.ordering ASC398μs4.81KBParams/libraries/src/MVC/Model/BaseDatabaseModel.php:164Copy
  • SELECT `c`.`id`,`c`.`asset_id`,`c`.`access`,`c`.`alias`,`c`.`checked_out`,`c`.`checked_out_time`,`c`.`created_time`,`c`.`created_user_id`,`c`.`description`,`c`.`extension`,`c`.`hits`,`c`.`language`,`c`.`level`,`c`.`lft`,`c`.`metadata`,`c`.`metadesc`,`c`.`metakey`,`c`.`modified_time`,`c`.`note`,`c`.`params`,`c`.`parent_id`,`c`.`path`,`c`.`published`,`c`.`rgt`,`c`.`title`,`c`.`modified_user_id`,`c`.`version`, CASE WHEN CHAR_LENGTH(`c`.`alias`) != 0 THEN CONCAT_WS(':', `c`.`id`, `c`.`alias`) ELSE `c`.`id` END as `slug` FROM `incbmx_categories` AS `s` INNER JOIN `incbmx_categories` AS `c` ON (`s`.`lft` <= `c`.`lft` AND `c`.`lft` < `s`.`rgt`) OR (`c`.`lft` < `s`.`lft` AND `s`.`rgt` < `c`.`rgt`) WHERE (`c`.`extension` = :extension OR `c`.`extension` = 'system') AND `c`.`access` IN (:preparedArray1,:preparedArray2) AND `c`.`published` = 1 AND `s`.`id` = :id ORDER BY `c`.`lft`183μs3.92KBParams/libraries/src/Categories/Categories.php:375Copy
  • SELECT `name`,`element` FROM `incbmx_extensions` WHERE `type` = 'plugin' AND `folder` = 'finder' AND `enabled` = 1126μs1.89KB/administrator/components/com_finder/src/Helper/LanguageHelper.php:135Copy
  • SELECT `title` FROM `incbmx_finder_taxonomy` WHERE `parent_id` = 1 AND `state` = 1 AND `access` IN (1,5)86μs648B/administrator/components/com_finder/src/Indexer/Taxonomy.php:325Copy
  • SELECT * FROM `incbmx_schemaorg` WHERE `itemId` = :itemId AND `context` = :context68μs1.55KBParams/plugins/system/schemaorg/src/Extension/Schemaorg.php:403Copy
  • SELECT `a`.`id`,`a`.`asset_id`,`a`.`title`,`a`.`alias`,`a`.`introtext`,`a`.`fulltext`,`a`.`state`,`a`.`catid`,`a`.`created`,`a`.`created_by`,`a`.`created_by_alias`,`a`.`modified`,`a`.`modified_by`,`a`.`checked_out`,`a`.`checked_out_time`,`a`.`publish_up`,`a`.`publish_down`,`a`.`images`,`a`.`urls`,`a`.`attribs`,`a`.`version`,`a`.`ordering`,`a`.`metakey`,`a`.`metadesc`,`a`.`access`,`a`.`hits`,`a`.`metadata`,`a`.`featured`,`a`.`language`,`fp`.`featured_up`,`fp`.`featured_down`,`c`.`title` AS `category_title`,`c`.`alias` AS `category_alias`,`c`.`access` AS `category_access`,`c`.`language` AS `category_language`,`fp`.`ordering`,`u`.`name` AS `author`,`parent`.`title` AS `parent_title`,`parent`.`id` AS `parent_id`,`parent`.`path` AS `parent_route`,`parent`.`alias` AS `parent_alias`,`parent`.`language` AS `parent_language`,ROUND(`v`.`rating_sum` / `v`.`rating_count`, 1) AS `rating`,`v`.`rating_count` AS `rating_count` FROM `incbmx_content` AS `a` INNER JOIN `incbmx_categories` AS `c` ON `c`.`id` = `a`.`catid` LEFT JOIN `incbmx_content_frontpage` AS `fp` ON `fp`.`content_id` = `a`.`id` LEFT JOIN `incbmx_users` AS `u` ON `u`.`id` = `a`.`created_by` LEFT JOIN `incbmx_categories` AS `parent` ON `parent`.`id` = `c`.`parent_id` LEFT JOIN `incbmx_content_rating` AS `v` ON `a`.`id` = `v`.`content_id` WHERE ( (`a`.`id` = :pk AND `c`.`published` > 0) AND (`a`.`publish_up` IS NULL OR `a`.`publish_up` <= :publishUp)) AND (`a`.`publish_down` IS NULL OR `a`.`publish_down` >= :publishDown) AND `a`.`state` IN (:preparedArray1,:preparedArray2)161μs54.17KBParams/components/com_content/src/Model/ArticleModel.php:215Copy
  • SELECT SUM(CASE WHEN `a`.`next_execution` <= :now THEN 1 ELSE 0 END) AS due_count,SUM(CASE WHEN `a`.`locked` IS NULL THEN 0 ELSE 1 END) AS locked_count FROM `incbmx_scheduler_tasks` AS `a` WHERE `a`.`state` = 174μs1.37KBParams/administrator/components/com_scheduler/src/Model/TasksModel.php:465Copy