        <style>
            #donation_buttons td{
                border:medium none;
                background: inherit !important;
            }
            #donation_buttons table{               
                border:medium none;
                margin: auto;
                width: auto;
            }
        </style>
        {"id":7622,"date":"2024-02-28T22:28:02","date_gmt":"2024-02-28T22:28:02","guid":{"rendered":"https:\/\/rogerbit.com\/wprb\/?p=7622"},"modified":"2024-02-28T22:28:02","modified_gmt":"2024-02-28T22:28:02","slug":"luces-de-8-x-ps-2","status":"publish","type":"post","link":"https:\/\/rogerbit.com\/wprb\/2024\/02\/luces-de-8-x-ps-2\/","title":{"rendered":"Control de luces de 8 canales con teclado ps\/2 y arduino"},"content":{"rendered":"<p><iframe loading=\"lazy\" title=\"Control de 8 luces con teclado PS\/2 con Arduino -  PCBWay.es\" width=\"1160\" height=\"653\" src=\"https:\/\/www.youtube.com\/embed\/ODE9nOFCAws?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" allowfullscreen><\/iframe><\/p>\n<hr \/>\n<p>El sistema de control de luces de 8 canales con teclado PS\/2 y Arduino es un proyecto que combina la versatilidad de la plataforma Arduino con la comodidad de un teclado est\u00e1ndar PS\/2 para controlar la iluminaci\u00f3n de hasta ocho canales diferentes.<\/p>\n<p>Este sistema permite a los usuarios encender y apagar luces individuales o grupos de luces mediante la entrada de comandos desde el teclado PS\/2. Utilizando el Arduino como el cerebro del sistema, el teclado se conecta al microcontrolador a trav\u00e9s de un adaptador PS\/2 y se programa para interpretar los comandos del usuario.<\/p>\n<hr \/>\n<p style=\"text-align: left;\">Tal vez pueda interesarte proyectos en arduino, pic, rob\u00f3tica, telecomunicaciones, suscribete en\u00a0<a href=\"http:\/\/www.youtube.com\/user\/carlosvolt?sub_confirmation=1\">http:\/\/www.youtube.com\/user\/carlosvolt?sub_confirmation=1<\/a>\u00a0mucho videos con c\u00f3digo fuentes completos y diagramas<\/p>\n<p style=\"text-align: left;\"><div id=\"ubm-banners-rotation-n1\" data-interval=\"4000\" class=\"ubm_banners_rotation\" style=\"overflow: hidden; width: 200px; height: 150px;\"><div id=\"3_ubm_banner\" class=\"ubm_rotating_banner\"><a href=\"https:\/\/bit.ly\/3aXRDAu\" target=\"_blank\" rel=\"dofollow\"><img src=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/useful_banner_manager_banners\/3-2-logo youtube.png\" width=\"100%\" height=\"100%\" alt=\"SUSCRIBETE A NUESTRO CANAL DE YOUTUBE, TUTORIALES GRATIS\" \/><\/a><\/div><\/div><\/p>\n<hr \/>\n<p>Cada canal de luz est\u00e1 conectado a una salida del Arduino, lo que permite un control independiente sobre cada uno. Los usuarios pueden asignar teclas espec\u00edficas del teclado a cada canal, lo que facilita la personalizaci\u00f3n y la operaci\u00f3n intuitiva del sistema.<\/p>\n<p>Adem\u00e1s, este proyecto es altamente escalable, lo que significa que se pueden agregar m\u00e1s canales de luz f\u00e1cilmente simplemente agregando m\u00e1s salidas al Arduino y asignando nuevas teclas desde el teclado PS\/2.<\/p>\n<p>El sistema de control de luces de 8 canales con teclado PS\/2 y Arduino ofrece una soluci\u00f3n flexible y accesible para controlar la iluminaci\u00f3n en diversos entornos, desde sistemas de iluminaci\u00f3n dom\u00e9sticos hasta aplicaciones de escenarios y espect\u00e1culos.<\/p>\n<hr \/>\n<h3><strong>Componentes electr\u00f3nicos<\/strong><\/h3>\n<p><strong>Arduino Nano<\/strong><\/p>\n<p><a href=\"http:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2020\/11\/Arduino_nano_V3.0_atmega328_compatible-2.jpg\"><img loading=\"lazy\" class=\"alignnone wp-image-6034\" src=\"http:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2020\/11\/Arduino_nano_V3.0_atmega328_compatible-2.jpg\" sizes=\"(max-width: 321px) 100vw, 321px\" srcset=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2020\/11\/Arduino_nano_V3.0_atmega328_compatible-2.jpg 650w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2020\/11\/Arduino_nano_V3.0_atmega328_compatible-2-150x150.jpg 150w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2020\/11\/Arduino_nano_V3.0_atmega328_compatible-2-300x300.jpg 300w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2020\/11\/Arduino_nano_V3.0_atmega328_compatible-2-600x600.jpg 600w\" alt=\"\" width=\"321\" height=\"321\" \/><\/a><\/p>\n<p>El Arduino Nano es una placa peque\u00f1a, completa y compatible con la placa de pruebas basada en el ATmega328 (Arduino Nano 3.x).\u00a0Tiene m\u00e1s o menos la misma funcionalidad del Arduino Duemilanove, pero en un paquete diferente.\u00a0Solo carece de un conector de alimentaci\u00f3n de CC y funciona con un cable USB Mini-B en lugar de uno est\u00e1ndar.<\/p>\n<div class=\"googlepublisherpluginad\">\n<table>\n<tbody>\n<tr>\n<td>Microcontrolador<\/td>\n<td>ATmega328<\/td>\n<\/tr>\n<tr>\n<td>Arquitectura<\/td>\n<td>AVR<\/td>\n<\/tr>\n<tr>\n<td>Tensi\u00f3n de funcionamiento<\/td>\n<td>5 V<\/td>\n<\/tr>\n<tr>\n<td>Memoria flash<\/td>\n<td>32 KB de los cuales 2 KB utiliza el gestor de arranque<\/td>\n<\/tr>\n<tr>\n<td>SRAM<\/td>\n<td>2 KB<\/td>\n<\/tr>\n<tr>\n<td>Velocidad de reloj<\/td>\n<td>16 MHz<\/td>\n<\/tr>\n<tr>\n<td>Pines anal\u00f3gicos IN<\/td>\n<td>8<\/td>\n<\/tr>\n<tr>\n<td>EEPROM<\/td>\n<td>1 KB<\/td>\n<\/tr>\n<tr>\n<td>Corriente CC por pines de E \/ S<\/td>\n<td>40 mA (pines de E \/ S)<\/td>\n<\/tr>\n<tr>\n<td>Voltaje de entrada<\/td>\n<td>7-12 V<\/td>\n<\/tr>\n<tr>\n<td>Pines de E \/ S digitales<\/td>\n<td>22 (6 de los cuales son PWM)<\/td>\n<\/tr>\n<tr>\n<td>Salida PWM<\/td>\n<td>6<\/td>\n<\/tr>\n<tr>\n<td>El consumo de energ\u00eda<\/td>\n<td>19 mA<\/td>\n<\/tr>\n<tr>\n<td>Tama\u00f1o de PCB<\/td>\n<td>18 x 45 mm<\/td>\n<\/tr>\n<tr>\n<td>Peso<\/td>\n<td>7 g<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>Diagrama de pines<\/h3>\n<p><a href=\"http:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2020\/11\/Pinout-NANO.png\"><img loading=\"lazy\" class=\"alignnone size-large wp-image-6033\" src=\"http:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2020\/11\/Pinout-NANO-1024x1024.png\" sizes=\"(max-width: 1024px) 100vw, 1024px\" srcset=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2020\/11\/Pinout-NANO-1024x1024.png 1024w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2020\/11\/Pinout-NANO-150x150.png 150w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2020\/11\/Pinout-NANO-300x300.png 300w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2020\/11\/Pinout-NANO-768x768.png 768w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2020\/11\/Pinout-NANO-600x600.png 600w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2020\/11\/Pinout-NANO-820x820.png 820w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2020\/11\/Pinout-NANO-1320x1321.png 1320w\" alt=\"\" width=\"1024\" height=\"1024\" \/><\/a><\/p>\n<\/div>\n<hr \/>\n<h4>Pines hembra<\/h4>\n<p><img loading=\"lazy\" class=\"alignnone size-large wp-image-6689\" src=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2021\/12\/hembrapin.jpg\" sizes=\"(max-width: 225px) 100vw, 225px\" srcset=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2021\/12\/hembrapin.jpg 225w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2021\/12\/hembrapin-150x150.jpg 150w\" alt=\"\" width=\"225\" height=\"225\" \/><\/p>\n<hr \/>\n<p><strong>Pines macho<\/strong><\/p>\n<p><img loading=\"lazy\" class=\"alignnone wp-image-6894 size-medium\" src=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/06\/pinesmacho-300x300.jpg\" alt=\"\" width=\"300\" height=\"300\" srcset=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/06\/pinesmacho-300x300.jpg 300w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/06\/pinesmacho-1024x1024.jpg 1024w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/06\/pinesmacho-150x150.jpg 150w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/06\/pinesmacho-768x768.jpg 768w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/06\/pinesmacho-820x820.jpg 820w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/06\/pinesmacho.jpg 1200w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/p>\n<hr \/>\n<p><strong>Z\u00f3calo para arduino nano<\/strong><\/p>\n<p><img loading=\"lazy\" class=\"alignnone size-full wp-image-6895\" src=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/06\/zocalo.jpg\" sizes=\"(max-width: 320px) 100vw, 320px\" srcset=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/06\/zocalo.jpg 320w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/06\/zocalo-300x225.jpg 300w\" alt=\"\" width=\"320\" height=\"240\" \/><\/p>\n<hr \/>\n<div>\n<p><strong>Un diodo led de 5 mm<\/strong><\/p>\n<p><img loading=\"lazy\" class=\"alignnone size-full wp-image-7025\" src=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/08\/led5mm.jpg\" alt=\"\" width=\"300\" height=\"225\" \/><\/p>\n<\/div>\n<hr \/>\n<p><strong>Ocho resistores<\/strong><\/p>\n<p><img loading=\"lazy\" class=\"alignnone wp-image-7125 size-thumbnail\" src=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/11\/470-150x150.jpg\" alt=\"\" width=\"150\" height=\"150\" \/><\/p>\n<hr \/>\n<p><strong>Cables Dupont<\/strong><\/p>\n<p><img loading=\"lazy\" class=\"alignnone wp-image-7240 size-medium\" src=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2023\/04\/dupont-300x300.jpg\" alt=\"\" width=\"300\" height=\"300\" srcset=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2023\/04\/dupont-300x300.jpg 300w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2023\/04\/dupont-150x150.jpg 150w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2023\/04\/dupont.jpg 640w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/p>\n<hr \/>\n<p><strong>Circuito impreso (pcb)<\/strong><\/p>\n<p><a href=\"http:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2021\/02\/pcb-1.jpg\"><img loading=\"lazy\" class=\"alignnone size-large wp-image-6275\" src=\"http:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2021\/02\/pcb-1.jpg\" sizes=\"(max-width: 350px) 100vw, 350px\" srcset=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2021\/02\/pcb-1.jpg 350w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2021\/02\/pcb-1-292x300.jpg 292w\" alt=\"\" width=\"350\" height=\"359\" \/><\/a><\/p>\n<p>Archivo gerber \u2014&gt;\u00a0<a href=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2022\/08\/pcb.zip\">pcb<\/a><\/p>\n<hr \/>\n<p><strong>Conector PS\/2<\/strong><\/p>\n<p><img loading=\"lazy\" class=\"alignnone wp-image-7247 size-thumbnail\" src=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2023\/04\/ps2-150x150.jpg\" sizes=\"(max-width: 150px) 100vw, 150px\" srcset=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2023\/04\/ps2-150x150.jpg 150w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2023\/04\/ps2-300x300.jpg 300w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2023\/04\/ps2-768x768.jpg 768w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2023\/04\/ps2-820x820.jpg 820w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2023\/04\/ps2.jpg 1000w\" alt=\"\" width=\"150\" height=\"150\" \/><\/p>\n<p><img loading=\"lazy\" class=\"alignnone wp-image-7251 size-medium\" src=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2023\/04\/ps2pinout-300x300.jpg\" sizes=\"(max-width: 300px) 100vw, 300px\" srcset=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2023\/04\/ps2pinout-300x300.jpg 300w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2023\/04\/ps2pinout-150x150.jpg 150w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2023\/04\/ps2pinout-768x768.jpg 768w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2023\/04\/ps2pinout-820x820.jpg 820w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2023\/04\/ps2pinout.jpg 1000w\" alt=\"\" width=\"300\" height=\"300\" \/><\/p>\n<div>\n<div>\n<p><strong><span data-spm-anchor-id=\"a2g0o.detail.1000023.i0.5b46289awoSjlr\">Caracter\u00edsticas<\/span><\/strong><\/p>\n<p>Interfaz est\u00e1ndar PS\/2;<\/p>\n<p>La fuente de alimentaci\u00f3n debe ser de 5V CC;<\/p>\n<p>4 orificios de montaje de tornillos cuyo di\u00e1metro es de 2,2mm<\/p>\n<p>F\u00e1cil de usar<\/p>\n<\/div>\n<\/div>\n<p><strong>Interfaz<\/strong><\/p>\n<p><strong>Interfaz de control:<\/strong><span data-spm-anchor-id=\"a2g0o.detail.1000023.i1.5b46289awoSjlr\">Un total de cuatro pines (GND, VCC, DAT, CLK), GND a tierra, VCC es la fuente de alimentaci\u00f3n, DAT es el pin de entrada y salida de datos, CLK es el pin de se\u00f1al de reloj.<\/span><\/p>\n<hr \/>\n<p><strong>Un teclado PS\/2<\/strong><\/p>\n<p><img loading=\"lazy\" class=\"alignnone wp-image-7248 size-medium\" src=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2023\/04\/teclado-300x184.jpg\" sizes=\"(max-width: 300px) 100vw, 300px\" srcset=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2023\/04\/teclado-300x184.jpg 300w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2023\/04\/teclado-768x470.jpg 768w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2023\/04\/teclado-820x502.jpg 820w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2023\/04\/teclado.jpg 980w\" alt=\"\" width=\"300\" height=\"184\" \/><\/p>\n<hr \/>\n<p><strong>M\u00f3dulo relay de 8 canales (Opcional)<\/strong><\/p>\n<p><img loading=\"lazy\" class=\"alignnone size-full wp-image-6404\" src=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2021\/05\/8_canales_relay.jpg\" sizes=\"(max-width: 700px) 100vw, 700px\" srcset=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2021\/05\/8_canales_relay.jpg 700w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2021\/05\/8_canales_relay-300x178.jpg 300w\" alt=\"\" width=\"700\" height=\"416\" \/><\/p>\n<p><strong>Caracter\u00edsticas<\/strong><\/p>\n<p>Permite controlar el encendido\/apagado de equipos de alta potencia (electrodom\u00e9sticos). Funciona perfectamente con Arduino, Pic o cualquier otro sistema digital.<\/p>\n<p>Dentro de la gran variedad de proyectos que podemos realizar con Arduino, podemos llegar a desear controlar componentes de alto voltaje o alto amperaje, como bombillas o bombas de agua, los cuales no pueden ser manejados directamente con Arduino. En estos casos es necesario utilizar Relays o Reles, estos dispositivos permiten controlar cargas de alto voltaje con una se\u00f1al peque\u00f1a.<\/p>\n<p>El modulo posee 8 Relays de alta calidad, capaces de manejar cargas de hasta 250V\/10A. Cada canal posee aislamiento el\u00e9ctrico por medio de un optoacoplador y un led indicador de estado. Su dise\u00f1o facilita el trabajo con Arduino, al igual que con muchos otros sistemas como Raspberry Pi, ESP8266 (NodeMCU y Wemos), Teensy y Pic. Este modulo Relay activa la salida normalmente abierta (NO: Normally Open) al recibir un \u201c0\u201d l\u00f3gico (0 Voltios) y desactiva la salida con un \u201c1\u201d l\u00f3gico (5 voltios). Para la programaci\u00f3n de Arduino y Relays se recomienda el uso de timers con la funci\u00f3n \u201cmillis()\u201d y de esa forma no utilizar la funci\u00f3n \u201cdelay\u201d que impide que el sistema continue trabajando mientras se activa\/desactiva un relay.<\/p>\n<p>Entre las cargas que se pueden manejar tenemos: bombillas de luz, luminarias, motores AC (220V), motores DC, solenoides, electrov\u00e1lvulas, calentadores de agua y una gran variedad de actuadores m\u00e1s. Se recomienda realizar y verificar las conexiones antes de alimentar el circuito, tambi\u00e9n es una buena pr\u00e1ctica proteger el circuito dentro de un case.<\/p>\n<p><strong>Datos t\u00e9cnicos<\/strong><\/p>\n<p>8 canales independientes<\/p>\n<p>8 Relevadores (Relays) de 1 polo 2 tiros<\/p>\n<p>El voltaje de la bobina del rel\u00e9 es de 5 VDC<\/p>\n<p>Led indicador para cada canal (enciende cuando la bobina del rel\u00e9 esta activa)<\/p>\n<p>Activado mediante corriente: el circuito de control debe proveer una corriente de 15 a 20 mA<\/p>\n<p>Puede controlado directamente por circuito l\u00f3gicos<\/p>\n<p>Terminales de conexi\u00f3n de tornillo (clemas)<\/p>\n<p>Terminales de entrada de se\u00f1al l\u00f3gica con headers macho de 0.1\u2033.<\/p>\n<p>Puede controlado directamente por circuito l\u00f3gicos<\/p>\n<p>&nbsp;<\/p>\n<p><strong>Alimentaci\u00f3n y consumo<\/strong><\/p>\n<p>La forma mas sencilla de alimentar este m\u00f3dulo es desde Vcc y GND de la placa Arduino, manteniendo el Jumper en su lugar, con lo que JD-Vcc = Vcc. Esta conexi\u00f3n tiene dos limitaciones importantes:<\/p>\n<p>Se pierde la aislaci\u00f3n el\u00e9ctrica que brindan los optoacopladores, lo que aumenta la posibilidad de da\u00f1o al Arduino si hay alg\u00fan problema con las cargas de los rel\u00e9s.<\/p>\n<p>La corriente consumida por las bobinas de los rel\u00e9s debe ser provista por la placa Arduino. Cada bobina consume unos 90 mA y las cuatro juntas suman 360 mA. Si a esto le sumamos los consumos que pueden tener otras salidas, estamos muy cerca de los 500 mA que puede suministrar un puerto USB. En este caso se deber\u00eda alimentar al Arduino con una fuente externa, lo que aumenta el limite de corriente a 1 A (en el caso de la Arduino UNO).<\/p>\n<p>La forma mas segura es remover el jumper y alimentar la placa de rel\u00e9s con dos fuentes: la de la placa Arduino conectada a Vcc y una segunda fuente, con el positivo a JD-Vcc y el negativo a GND, sin estar \u00e9ste unido a la placa Arduino. Esta conexi\u00f3n tiene como ventajas:<\/p>\n<p>Hay completa aislaci\u00f3n entre la carga y el Arduino.<\/p>\n<p>Todo el consumo de los rel\u00e9s es tomado de la segunda fuente y no del Arduino o el puerto USB.<\/p>\n<p><strong>Entradas<\/strong><\/p>\n<p>Las entradas a la placa pueden conectarse directamente a las salidas digitales de la placa Arduino. La \u00fanica precauci\u00f3n a tener en cuenta es que cuando Arduino arranca al ser alimentado, los pines se configuran como entradas autom\u00e1ticamente y puede ocurrir que, por un brev\u00edsimo lapso de tiempo entre el arranque y la correcta configuraci\u00f3n de estos pines como salidas, las entradas de control al m\u00f3dulo de rel\u00e9 queden en un estado indeterminado. Esto se puede evitar conectando en cada entrada un pull-up con una resistencia de 10K a Vcc, lo que asegura un estado ALTO durante el arranque.<\/p>\n<hr \/>\n<p><strong>Circuito<\/strong><\/p>\n<p><img loading=\"lazy\" class=\"alignnone size-large wp-image-7627\" src=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2024\/02\/circuito-1-858x1024.jpg\" alt=\"\" width=\"858\" height=\"1024\" srcset=\"https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2024\/02\/circuito-1-858x1024.jpg 858w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2024\/02\/circuito-1-251x300.jpg 251w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2024\/02\/circuito-1-768x916.jpg 768w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2024\/02\/circuito-1-1288x1536.jpg 1288w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2024\/02\/circuito-1-1717x2048.jpg 1717w, https:\/\/rogerbit.com\/wprb\/wp-content\/uploads\/2024\/02\/circuito-1-820x978.jpg 820w\" sizes=\"(max-width: 858px) 100vw, 858px\" \/><\/p>\n<hr \/>\n<p><strong>C\u00f3digo Fuente<\/strong><\/p>\n<pre class=\"lang:default decode:true \" title=\"C\u00f3digo Fuente\">#include \"ps2_Keyboard.h\"\/\/Instalar librer\u00eda ps2KeyboardHost\r\n#include \"ps2_AnsiTranslator.h\"\r\n#include \"ps2_SimpleDiagnostics.h\"\r\nint pin4 = 4;\r\nint pin5 = 5;\r\nint pin6 = 6;\r\nint pin7 = 7;\r\nint pin8 = 8;\r\nint pin9 = 9;\r\nint pin10 = 10;\r\nint pin11 = 11;\r\nint estadoPin4 = 0;\r\nint estadoPin5 = 0;\r\nint estadoPin6 = 0;\r\nint estadoPin7 = 0;\r\nint estadoPin8 = 0;\r\nint estadoPin9 = 0;\r\nint estadoPin10 = 0;\r\nint estadoPin11 = 0;\r\ntypedef ps2::SimpleDiagnostics&lt;254&gt; Diagnostics_;\r\nstatic Diagnostics_ diagnostics;\r\nstatic ps2::AnsiTranslator&lt;Diagnostics_&gt; keyMapping(diagnostics);\r\nstatic ps2::Keyboard&lt;3,2,1, Diagnostics_&gt; ps2Keyboard(diagnostics);\r\nstatic ps2::KeyboardLeds lastLedSent = ps2::KeyboardLeds::none;\r\nvoid setup() {\r\n    Serial.begin(9600);\r\n    pinMode(pin4, OUTPUT);\r\n    pinMode(pin5, OUTPUT);\r\n    pinMode(pin6, OUTPUT);\r\n    pinMode(pin7, OUTPUT);\r\n    pinMode(pin8, OUTPUT);\r\n    pinMode(pin9, OUTPUT);\r\n    pinMode(pin10, OUTPUT);\r\n    pinMode(pin11, OUTPUT);\r\n    digitalWrite(pin4, LOW);\r\n    digitalWrite(pin5, LOW);\r\n    digitalWrite(pin6, LOW);\r\n    digitalWrite(pin7, LOW);\r\n    digitalWrite(pin8, LOW);\r\n    digitalWrite(pin9, LOW);\r\n    digitalWrite(pin10, LOW);\r\n    digitalWrite(pin11, LOW);\r\n    ps2Keyboard.begin();\r\n    keyMapping.setNumLock(true);\r\n    ps2Keyboard.awaitStartup();\r\n    diagnostics.reset();\r\n\/\/Encendemos el led del teclado(Bloq Num)\r\n    ps2Keyboard.sendLedStatus(ps2::KeyboardLeds::numLock);\r\n    lastLedSent = ps2::KeyboardLeds::numLock;\r\n}\r\nvoid loop() {\r\n    diagnostics.setLedIndicator&lt;LED_BUILTIN&gt;();\r\n    ps2::KeyboardOutput scanCode = ps2Keyboard.readScanCode();\r\n    if (scanCode == ps2::KeyboardOutput::garbled) {\r\n        keyMapping.reset();\r\n    }\r\n    else if (scanCode != ps2::KeyboardOutput::none)\r\n    {\r\n        char buf[2];\r\n        buf[1] = '\\0';\r\n        buf[0] = keyMapping.translatePs2Keycode(scanCode);\r\n        if (buf[0] == '\\r') {\/\/Se cumple si es la tecla enter\r\n            Serial.println();\r\n        }\r\nelse if (buf[0] &gt;= ' ') { \/\/ Se cumple si es un caracter\r\nSerial.write(buf);\r\n\/\/Tecla 1\r\nif (buf[0] == '1'){\r\nif(estadoPin4 ==0){\/\/Si la variable estado2 es igual a 0 se cumple esta condici\u00f3n\r\n digitalWrite(pin4, HIGH);\r\n Serial.println(\"Relay 1 activado\");\r\nestadoPin4 =1;\/\/Asignamos el valor 1 a la variable \"estadoPin4\"\r\n} else{\r\ndigitalWrite(pin4, LOW);\r\nSerial.println(\"Relay 1 desactivado\");\r\nestadoPin4 =0;\r\n  }\r\n}\r\n\/\/Tecla 2\r\nif (buf[0] == '2'){\r\nif(estadoPin5 ==0){\/\/Si la variable estado2 es igual a 0 se cumple esta condici\u00f3n\r\n digitalWrite(pin5, HIGH);\r\n Serial.println(\"Relay 2 activado\");\r\nestadoPin5 =1;\/\/Asignamos el valor 1 a la variable \"estadoPin5\"\r\n} else{\r\ndigitalWrite(pin5, LOW);\r\nSerial.println(\"Relay 2 desactivado\");\r\nestadoPin5 =0;\r\n  }\r\n}\r\n\/\/Tecla 3\r\nif (buf[0] == '3'){\r\nif(estadoPin6 ==0){\/\/Si la variable estado2 es igual a 0 se cumple esta condici\u00f3n\r\n digitalWrite(pin6, HIGH);\r\n Serial.println(\"Relay 3 activado\");\r\nestadoPin6 =1;\/\/Asignamos el valor 1 a la variable \"estadoPin6\"\r\n} else{\r\ndigitalWrite(pin6, LOW);\r\nSerial.println(\"Relay 3 desactivado\");\r\nestadoPin6 =0;\r\n  }\r\n}\r\n\/\/Tecla 4\r\nif (buf[0] == '4'){\r\nif(estadoPin7 ==0){\/\/Si la variable estado2 es igual a 0 se cumple esta condici\u00f3n\r\n digitalWrite(pin7, HIGH);\r\n Serial.println(\"Relay 4 activado\");\r\nestadoPin7 =1;\/\/Asignamos el valor 1 a la variable \"estadoPin7\"\r\n} else{\r\ndigitalWrite(pin7, LOW);\r\nSerial.println(\"Relay 4 desactivado\");\r\nestadoPin7 =0;\r\n  }\r\n}\r\n\/\/Tecla 5\r\nif (buf[0] == '5'){\r\nif(estadoPin8 ==0){\/\/Si la variable estado2 es igual a 0 se cumple esta condici\u00f3n\r\n digitalWrite(pin8, HIGH);\r\n Serial.println(\"Relay 5 activado\");\r\nestadoPin8 =1;\/\/Asignamos el valor 1 a la variable \"estadoPin8\"\r\n} else{\r\ndigitalWrite(pin8, LOW);\r\nSerial.println(\"Relay 5 desactivado\");\r\nestadoPin8 =0;\r\n  }\r\n}\r\n\/\/Tecla 6\r\nif (buf[0] == '6'){\r\nif(estadoPin9 ==0){\/\/Si la variable estado2 es igual a 0 se cumple esta condici\u00f3n\r\n digitalWrite(pin9, HIGH);\r\n Serial.println(\"Relay 6 activado\");\r\nestadoPin9 =1;\/\/Asignamos el valor 1 a la variable \"estadoPin9\"\r\n} else{\r\ndigitalWrite(pin9, LOW);;\r\nSerial.println(\"Relay 6 desactivado\");\r\nestadoPin9 =0;\r\n  }\r\n}\r\n\/\/Tecla 7\r\nif (buf[0] == '7'){\r\nif(estadoPin10 ==0){\/\/Si la variable estado2 es igual a 0 se cumple esta condici\u00f3n\r\n digitalWrite(pin10, HIGH);\r\n Serial.println(\"Relay 7 activado\");\r\nestadoPin10 =1;\/\/Asignamos el valor 1 a la variable \"estadoPin10\"\r\n} else{\r\ndigitalWrite(pin10, LOW);;\r\nSerial.println(\"Relay 7 desactivado\");\r\nestadoPin10 =0;\r\n  }\r\n}\r\n\/\/Tecla 8\r\nif (buf[0] == '8'){\r\nif(estadoPin11 ==0){\/\/Si la variable estado2 es igual a 0 se cumple esta condici\u00f3n\r\n digitalWrite(pin11, HIGH);\r\n Serial.println(\"Relay 8 activado\");\r\nestadoPin11 =1;\/\/Asignamos el valor 1 a la variable \"estadoPin11\"\r\n} else{\r\ndigitalWrite(pin11, LOW);\r\nSerial.println(\"Relay 8 desactivado\");\r\nestadoPin11 =0;\r\n  }\r\n}\r\n}\r\n\/\/Verifica el estado de los taclas Bloq Num y Bloq May\u00fas para activarlas o desactivarlas desde el mismo teclado\r\n        ps2::KeyboardLeds newLeds =\r\n              (keyMapping.getCapsLock() ? ps2::KeyboardLeds::capsLock : ps2::KeyboardLeds::none)\r\n            | (keyMapping.getNumLock() ? ps2::KeyboardLeds::numLock : ps2::KeyboardLeds::none);\r\n        if (newLeds != lastLedSent) {\r\n            ps2Keyboard.sendLedStatus(newLeds);\r\n            lastLedSent = newLeds;\r\n        }\r\n    }\r\n}<\/pre>\n<p><strong>C\u00f3digo fuente con l\u00f3gica invertida para m\u00f3dulo relay de 8 canales<\/strong><\/p>\n<pre class=\"lang:default decode:true\" title=\"C\u00f3digo Fuente con l\u00f3gica invertida\">#include \"ps2_Keyboard.h\"\/\/Instalar librer\u00eda ps2KeyboardHost\r\n#include \"ps2_AnsiTranslator.h\"\r\n#include \"ps2_SimpleDiagnostics.h\"\r\nint pin4 = 4;\r\nint pin5 = 5;\r\nint pin6 = 6;\r\nint pin7 = 7;\r\nint pin8 = 8;\r\nint pin9 = 9;\r\nint pin10 = 10;\r\nint pin11 = 11;\r\nint estadoPin4 = 0;\r\nint estadoPin5 = 0;\r\nint estadoPin6 = 0;\r\nint estadoPin7 = 0;\r\nint estadoPin8 = 0;\r\nint estadoPin9 = 0;\r\nint estadoPin10 = 0;\r\nint estadoPin11 = 0;\r\ntypedef ps2::SimpleDiagnostics&lt;254&gt; Diagnostics_;\r\nstatic Diagnostics_ diagnostics;\r\nstatic ps2::AnsiTranslator&lt;Diagnostics_&gt; keyMapping(diagnostics);\r\nstatic ps2::Keyboard&lt;3,2,1, Diagnostics_&gt; ps2Keyboard(diagnostics);\r\nstatic ps2::KeyboardLeds lastLedSent = ps2::KeyboardLeds::none;\r\nvoid setup() {\r\n    Serial.begin(9600);\r\n    pinMode(pin4, OUTPUT);\r\n    pinMode(pin5, OUTPUT);\r\n    pinMode(pin6, OUTPUT);\r\n    pinMode(pin7, OUTPUT);\r\n    pinMode(pin8, OUTPUT);\r\n    pinMode(pin9, OUTPUT);\r\n    pinMode(pin10, OUTPUT);\r\n    pinMode(pin11, OUTPUT);\r\n    digitalWrite(pin4, HIGH);\r\n    digitalWrite(pin5, HIGH);\r\n    digitalWrite(pin6, HIGH);\r\n    digitalWrite(pin7, HIGH);\r\n    digitalWrite(pin8, HIGH);\r\n    digitalWrite(pin9, HIGH);\r\n    digitalWrite(pin10, HIGH);\r\n    digitalWrite(pin11, HIGH);\r\n    ps2Keyboard.begin();\r\n    keyMapping.setNumLock(true);\r\n    ps2Keyboard.awaitStartup();\r\n    diagnostics.reset();\r\n\/\/Encendemos el led del teclado(Bloq Num)\r\n    ps2Keyboard.sendLedStatus(ps2::KeyboardLeds::numLock);\r\n    lastLedSent = ps2::KeyboardLeds::numLock;\r\n}\r\nvoid loop() {\r\n    diagnostics.setLedIndicator&lt;LED_BUILTIN&gt;();\r\n    ps2::KeyboardOutput scanCode = ps2Keyboard.readScanCode();\r\n    if (scanCode == ps2::KeyboardOutput::garbled) {\r\n        keyMapping.reset();\r\n    }\r\n    else if (scanCode != ps2::KeyboardOutput::none)\r\n    {\r\n        char buf[2];\r\n        buf[1] = '\\0';\r\n        buf[0] = keyMapping.translatePs2Keycode(scanCode);\r\n        if (buf[0] == '\\r') {\/\/Se cumple si es la tecla enter\r\n            Serial.println();\r\n        }\r\nelse if (buf[0] &gt;= ' ') { \/\/ Se cumple si es un caracter\r\nSerial.write(buf);\r\n\/\/Tecla 1\r\nif (buf[0] == '1'){\r\nif(estadoPin4 ==0){\/\/Si la variable estado2 es igual a 0 se cumple esta condici\u00f3n\r\n digitalWrite(pin4, LOW);\r\n Serial.println(\"Relay 1 activado\");\r\nestadoPin4 =1;\/\/Asignamos el valor 1 a la variable \"estadoPin4\"\r\n} else{\r\ndigitalWrite(pin4, HIGH);\r\nSerial.println(\"Relay 1 desactivado\");\r\nestadoPin4 =0;\r\n  }\r\n}\r\n\/\/Tecla 2\r\nif (buf[0] == '2'){\r\nif(estadoPin5 ==0){\/\/Si la variable estado2 es igual a 0 se cumple esta condici\u00f3n\r\n digitalWrite(pin5, LOW);\r\n Serial.println(\"Relay 2 activado\");\r\nestadoPin5 =1;\/\/Asignamos el valor 1 a la variable \"estadoPin5\"\r\n} else{\r\ndigitalWrite(pin5, HIGH);\r\nSerial.println(\"Relay 2 desactivado\");\r\nestadoPin5 =0;\r\n  }\r\n}\r\n\/\/Tecla 3\r\nif (buf[0] == '3'){\r\nif(estadoPin6 ==0){\/\/Si la variable estado2 es igual a 0 se cumple esta condici\u00f3n\r\n digitalWrite(pin6, LOW);\r\n Serial.println(\"Relay 3 activado\");\r\nestadoPin6 =1;\/\/Asignamos el valor 1 a la variable \"estadoPin6\"\r\n} else{\r\ndigitalWrite(pin6, HIGH);\r\nSerial.println(\"Relay 3 desactivado\");\r\nestadoPin6 =0;\r\n  }\r\n}\r\n\/\/Tecla 4\r\nif (buf[0] == '4'){\r\nif(estadoPin7 ==0){\/\/Si la variable estado2 es igual a 0 se cumple esta condici\u00f3n\r\n digitalWrite(pin7, LOW);\r\n Serial.println(\"Relay 4 activado\");\r\nestadoPin7 =1;\/\/Asignamos el valor 1 a la variable \"estadoPin7\"\r\n} else{\r\ndigitalWrite(pin7, HIGH);\r\nSerial.println(\"Relay 4 desactivado\");\r\nestadoPin7 =0;\r\n  }\r\n}\r\n\/\/Tecla 5\r\nif (buf[0] == '5'){\r\nif(estadoPin8 ==0){\/\/Si la variable estado2 es igual a 0 se cumple esta condici\u00f3n\r\n digitalWrite(pin8, LOW);\r\n Serial.println(\"Relay 5 activado\");\r\nestadoPin8 =1;\/\/Asignamos el valor 1 a la variable \"estadoPin8\"\r\n} else{\r\ndigitalWrite(pin8, HIGH);\r\nSerial.println(\"Relay 5 desactivado\");\r\nestadoPin8 =0;\r\n  }\r\n}\r\n\/\/Tecla 6\r\nif (buf[0] == '6'){\r\nif(estadoPin9 ==0){\/\/Si la variable estado2 es igual a 0 se cumple esta condici\u00f3n\r\n digitalWrite(pin9, LOW);\r\n Serial.println(\"Relay 6 activado\");\r\nestadoPin9 =1;\/\/Asignamos el valor 1 a la variable \"estadoPin9\"\r\n} else{\r\ndigitalWrite(pin9, HIGH);;\r\nSerial.println(\"Relay 6 desactivado\");\r\nestadoPin9 =0;\r\n  }\r\n}\r\n\/\/Tecla 7\r\nif (buf[0] == '7'){\r\nif(estadoPin10 ==0){\/\/Si la variable estado2 es igual a 0 se cumple esta condici\u00f3n\r\n digitalWrite(pin10, LOW);\r\n Serial.println(\"Relay 7 activado\");\r\nestadoPin10 =1;\/\/Asignamos el valor 1 a la variable \"estadoPin10\"\r\n} else{\r\ndigitalWrite(pin10, HIGH);;\r\nSerial.println(\"Relay 7 desactivado\");\r\nestadoPin10 =0;\r\n  }\r\n}\r\n\/\/Tecla 8\r\nif (buf[0] == '8'){\r\nif(estadoPin11 ==0){\/\/Si la variable estado2 es igual a 0 se cumple esta condici\u00f3n\r\n digitalWrite(pin11, LOW);\r\n Serial.println(\"Relay 8 activado\");\r\nestadoPin11 =1;\/\/Asignamos el valor 1 a la variable \"estadoPin11\"\r\n} else{\r\ndigitalWrite(pin11, HIGH);\r\nSerial.println(\"Relay 8 desactivado\");\r\nestadoPin11 =0;\r\n  }\r\n}\r\n}\r\n\/\/Verifica el estado de los taclas Bloq Num y Bloq May\u00fas para activarlas o desactivarlas desde el mismo teclado\r\n        ps2::KeyboardLeds newLeds =\r\n              (keyMapping.getCapsLock() ? ps2::KeyboardLeds::capsLock : ps2::KeyboardLeds::none)\r\n            | (keyMapping.getNumLock() ? ps2::KeyboardLeds::numLock : ps2::KeyboardLeds::none);\r\n        if (newLeds != lastLedSent) {\r\n            ps2Keyboard.sendLedStatus(newLeds);\r\n            lastLedSent = newLeds;\r\n        }\r\n    }\r\n}<\/pre>\n<hr \/>\n<div class=\"page-sidebar widget\" id=\"donation_buttons\"><form action=\"https:\/\/www.paypal.com\/cgi-bin\/webscr\" method=\"post\" target=\"_blank\" ><input type=\"hidden\" name=\"business\" value=\"donacion@rogerbit.com\"><input type=\"hidden\" name=\"bn\" value=\"mbjtechnolabs_SP\"><input type=\"hidden\" name=\"cmd\" value=\"_donations\"><input type=\"hidden\" name=\"item_name\" value=\"Ayuda a RogerBit.com\"><input type=\"hidden\" name=\"item_number\" value=\"www.rogerbit.com\"><input type=\"hidden\" class=\"set_donation_button_amount\" name=\"amount\" value=\"1\"><table ><tbody><tr><td><label for=\"rogerBit necesita de tu ayuda para seguir existiendo :-)\">rogerBit necesita de tu ayuda para seguir existiendo :-)<\/label><\/td><\/tr><\/tbody><\/table><table ><tbody><tr><td><input style=\"margin-top:10px;\" type=\"image\" name=\"submit\" border=\"0\" src=\"https:\/\/www.paypal.com\/en_US\/i\/btn\/btn_donateCC_LG.gif\" alt=\"PayPal - The safer, easier way to pay online\"><\/td><\/tr><\/tbody><\/table><input type=\"hidden\" name=\"currency_code\" value=\"USD\"><input type=\"hidden\" name=\"notify_url\" value=\"https:\/\/rogerbit.com\/wprb\/?Donation_Button&#038;action=ipn_handler\"><\/form><\/div>\n<hr \/>\n<p><strong>PROYECTO RECOMENDADO<\/strong><\/p>\n<p><iframe loading=\"lazy\" title=\"\u2705 Conectar teclado PS\/2 a arduino para el control de m\u00f3dulos  - PCBWay.es\" width=\"1160\" height=\"653\" src=\"https:\/\/www.youtube.com\/embed\/V--edDC-yn8?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" allowfullscreen><\/iframe><\/p>\n<!-- AddThis Advanced Settings generic via filter on the_content --><!-- AddThis Share Buttons generic via filter on the_content -->","protected":false},"excerpt":{"rendered":"<p>El sistema de control de luces de 8 canales con teclado PS\/2 y Arduino es un proyecto que combina la versatilidad de la plataforma Arduino con la comodidad de un teclado est\u00e1ndar PS\/2 para controlar la iluminaci\u00f3n de hasta ocho canales diferentes. Este sistema permite a los usuarios encender y apagar luces individuales o grupos [&hellip;]<!-- AddThis Advanced Settings generic via filter on get_the_excerpt --><!-- AddThis Share Buttons generic via filter on get_the_excerpt --><\/p>\n","protected":false},"author":1,"featured_media":7626,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[11],"tags":[45,1804,1593,331,1663,1597,1880,1882,1879,1881],"_links":{"self":[{"href":"https:\/\/rogerbit.com\/wprb\/wp-json\/wp\/v2\/posts\/7622"}],"collection":[{"href":"https:\/\/rogerbit.com\/wprb\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/rogerbit.com\/wprb\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/rogerbit.com\/wprb\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/rogerbit.com\/wprb\/wp-json\/wp\/v2\/comments?post=7622"}],"version-history":[{"count":5,"href":"https:\/\/rogerbit.com\/wprb\/wp-json\/wp\/v2\/posts\/7622\/revisions"}],"predecessor-version":[{"id":7629,"href":"https:\/\/rogerbit.com\/wprb\/wp-json\/wp\/v2\/posts\/7622\/revisions\/7629"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/rogerbit.com\/wprb\/wp-json\/wp\/v2\/media\/7626"}],"wp:attachment":[{"href":"https:\/\/rogerbit.com\/wprb\/wp-json\/wp\/v2\/media?parent=7622"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/rogerbit.com\/wprb\/wp-json\/wp\/v2\/categories?post=7622"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/rogerbit.com\/wprb\/wp-json\/wp\/v2\/tags?post=7622"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}