Arduino: transforma el modo de inicio de la computadora para lograr el inicio con contraseña

Como empleado de oficina, ¿le molestan otras personas que a menudo perturban su computadora?
Como programador, ¿le preocupa que el código se guarde en la oficina por miedo a ser copiado?
¿O tal vez hay algunos secretos en su computadora que la estación de TV no permite transmitir?
¿Sistema sin contraseña? La mayoría de la gente no hace esto.
¿Sistema más contraseña de inicio de sesión? Inicie su computadora con la unidad flash USB.
¿Proteger el puerto USB? Es difícil de usar por sí mismo.
¿Cómo hacerlo de forma segura y sin preocupaciones?
Resuélvelo fundamentalmente.
La siguiente solución que queremos implementar es: controlar directamente el jumper de arranque de la placa base y establecer la contraseña. Si no conoce la contraseña, la placa base no se iniciará.
Por supuesto, necesitamos un candado para bloquear la carcasa.
Escriba la descripción de la imagen aquí
Sí, no tiene nada de gracioso, aunque está muy sucio, necesita un candado.
Eso sí, no descarta el caso de ser desbloqueado a la fuerza o llevado por el anfitrión. Ese personaje, solo puedo darte dos palabras, ja, ja.

materiales necesitados:

1. Un microcontrolador AVR (ATTiny2313A, usando oscilador interno) + una base hembra 2. Un
capacitor (regulador de voltaje)
3. 8 botones (6 teclas de entrada de contraseña, una tecla de confirmación, una tecla de configuración)
4. Una luz LED (Indicador de operación) + 1K resistor
5, optoacoplador pc816 (control de señal de encendido) + 300R o menos resistencias
6, varios cables

Método de cableado:

1. El 5V está conectado a la línea 5VSB de la fuente de alimentación ATX para asegurar que el microcontrolador esté siempre encendido. GND se conecta a la línea GND de la fuente de alimentación ATX. Conecte los condensadores en ambos extremos para estabilizar el voltaje.
2. El pin 0 se utiliza como salida, conectado a la luz led (resistencia de 1K en serie), como indicador de funcionamiento, se iluminará al pulsar la tecla.
3. Los pines 1 a 6 se utilizan como claves de entrada para 6 contraseñas. Habilite la resistencia pull-up.
Los pines 4 y 7 se utilizan para la entrada como el botón "Aceptar". Habilite la resistencia pull-up.
Los pines No. 5 y No. 8 se utilizan para la salida, conecte el optoacoplador pc817 (conectado con una resistencia de aproximadamente 300R), como interfaz de control de arranque, conéctelo al puente de arranque de la placa base y retire el puente de arranque original de la placa base.

  • Nota: Cuando conecte los puentes de la placa base, no conecte los polos positivo y negativo a la inversa, de lo contrario, la línea se bloqueará y el arranque no se podrá controlar.
  • El puente de encendido lleva dos conectores al mismo tiempo (o se conecta a un botón de interruptor) y los coloca en el estuche como respaldo, en caso de que el botón no se pueda encender, puede abrir el estuche y encenderlo manualmente.

6. El pin nº 16 se utiliza para la entrada como botón de "Configuración". Habilite la resistencia pull-up.

  • Coloque el botón de configuración en el estuche y tome medidas de seguridad para evitar que la contraseña se restablezca a voluntad.

Proceso de trabajo:

1. Establecer contraseña:

1. Presione las teclas de contraseña para configurarlas en secuencia, se admiten hasta 10 dígitos, si hay más, solo se conservarán los últimos 10 dígitos.
2. Presione el botón de configuración sin soltarlo, presione el botón OK al mismo tiempo y luego suelte los dos botones (no hay orden cuando se suelta). El sistema guardará la contraseña ingresada en EEPROM para asegurarse de que no se pierda después de un corte de energía.

2. Ingrese la contraseña para iniciar:

1. Presione las teclas de contraseña que desea configurar en secuencia, se admiten hasta 10 dígitos, si hay más, solo se conservarán los últimos 10 dígitos.
2. Haga clic en el botón Aceptar. Si la contraseña es correcta, encienda la computadora y borre la contraseña ingresada al mismo tiempo. Si es incorrecta, solo se borrará la contraseña ingresada para la siguiente entrada.

Código Arduino:

#include <EEPROM.h>
byte password[10]; //最多支持10位密码
byte inputpass[10];

void setup() {
    //定义针脚
    pinMode(0,OUTPUT);//指示灯
    pinMode(1,INPUT_PULLUP);
    pinMode(2,INPUT_PULLUP);
    pinMode(3,INPUT_PULLUP);
    pinMode(4,INPUT_PULLUP);
    pinMode(5,INPUT_PULLUP);
    pinMode(6,INPUT_PULLUP);
    pinMode(7,INPUT_PULLUP);//确定
    pinMode(8,OUTPUT);//开机
    pinMode(16,INPUT_PULLUP);//设置
    //读取现有密码
    for (int i=0;i<10;i++){
        password[i] = EEPROM.read(i);
    }
}

void loop() {
      //如果有密码输入,1-6号针
      for (int i=1;i<7;i++){
          if(digitalRead(i)==LOW){
              digitalWrite(0,HIGH);//亮灯
              for (int n=0;n<9;n++){inputpass[n]=inputpass[n+1];}//10个密码位顺序左移,每次左移总是挤掉第一位,并留出最后一位给当前按下的密码。
              inputpass[9]=i; //将当前按下的密码赋值给最后一位    
              while (digitalRead(i)==LOW){delay(1);} //等待按钮松开
              digitalWrite(0,LOW);//灭灯
          }
       }
       //如果按了确定
      if(digitalRead(7)==LOW){
            digitalWrite(0,HIGH);//亮灯
            // 如果设置按钮被按下,写密码
            if (digitalRead(16)==LOW){
                 for (int i=0;i<10;i++){
                      password[i] = inputpass[i];
                      EEPROM.write(i,inputpass[i]);
                      inputpass[i] = 0;
                  }
            }
            // 如果设置按钮未被按下,对比密码
            else{
                  bool b=true;
                  //对比密码
                  for (int i=0;i<10;i++){
                      if ( password[i] != inputpass[i] ){ b=false; }
                      inputpass[i]=0;//清空已输入密码
                  }
                  //如果密码正确则开机
                  if (b) {
                      digitalWrite(8,HIGH);
                      delay(300);  
                      digitalWrite(8,LOW);
                  }
            }
            while ( digitalRead(7) == LOW ){ delay(1); } //等待按钮松开
            digitalWrite( 0 , LOW );//灭灯
      }
    delay(1);
}

Supongo que te gusta

Origin blog.csdn.net/sdlgq/article/details/77602774
Recomendado
Clasificación