Nếu là một người quản trị mạng, bất cứ lúc nào cũng cần đến bộ kiểm tra cáp mạng. Dĩ nhiên, ngoài thị trường có bán sẵn, nhưng hôm nay, tôi giới thiệu các bạn cách làm một bộ kiểm tra cáp mạng Ethernet với Arduino.



Với bộ kiểm này, bạn có thể kiểm tra cáp thẳng lẫn cáp chéo. Kết quả có thể hiển thị bằng LED, LCD hoặc ghi vào thẻ nhớ.

Phần cứng gồm có:

  • 01 bộ Arduino UNO hoặc bất kỳ
  • 08 đèn LED
  • 08 điện trở 33 ohm
  • 2 đầu cắm mạng loại cái
  • Một công tắc chuyển để kiểm cáp thẳng hoặc cáp chéo.
  • Và một số thành phần liên quan khác

Chúng ta sẽ làm thành 2 mạch như sau:
Mạch chủ có Arduino sẽ cắm cáp mạng cần kiểm.
Mạch phụ để hiển thị các chân của cáp có thông với nhau hay không.
Sơ đồ mạch như sau


Viết phần mềm
Quy trình thực thi của phần mềm rất đơn giản:
Arduino thiết lập các chân có nối với dây cáp ở mức cao (HIGH) trong 1 giây sau đó sẽ xuống mức thấp (LOW) rồi chuyển sang dây khác trong sợi cáp mạng
Nếu các sợi dây thông mạch với nhau, bạn sẽ thấy các đèn LED bên mạch phụ sẽ sáng tuần tự từng giây một. Nếu có dây nào đó bị đứt thì bóng LED tương ứng của dây đó sẽ không sáng.
Nếu có dây nào bị đảo ngược thì đèn LED sẽ sáng không theo thứ tự.
Công tắc để chuyển qua lại giữa cáp thẳng vào cáp chéo
Chương trình như sau:

//#define VERBOSE


char straight[8] = {2, 3, 4, 5, 6, 7, 8, 9};
char cross[8] = {4, 7, 2, 5, 6, 3, 8, 9};


void setup() {
  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(12, INPUT); // Straight (normal) cable or cross cable
  pinMode(13, OUTPUT); // Control LED
#ifdef VERBOSE
  Serial.begin(9600);
#endif
}


void loop() {
  if (digitalRead(12) == LOW) { // Cross cable
#ifdef VERBOSE
    Serial.println("Cross cable");
#endif
    for (char n = 0; n & lt; 8; n++) {
#ifdef VERBOSE
      Serial.print(n + 1, DEC);
      Serial.print(": line ");
      Serial.print(cross[n] - 1, DEC);
      Serial.print(" (pin ");
      Serial.print(cross[n], DEC);
      Serial.println(")");
#endif
      PulseOut(cross[n], 1000);
      PulseOut(13, 50);
    }
  } else { // Straight (normal) cable
#ifdef VERBOSE
    Serial.println("Straight cable");
#endif
    for (char n = 0; n & lt; 8; n++) {
#ifdef VERBOSE
      Serial.print(n + 1, DEC);
      Serial.print(": line ");
      Serial.print(straight[n] - 1, DEC);
      Serial.print(" (pin ");
      Serial.print(straight[n], DEC);
      Serial.println(")");
#endif
      PulseOut(straight[n], 1000);
      PulseOut(13, 50);
    }
  }
}


void PulseOut(char pin, int ms)
{
  digitalWrite(pin, HIGH);
  delay(ms);
  digitalWrite(pin, LOW);
}

Nguồn: https://variecose.wordpress.com

Dịch Abel Nguyen