Этот проект представляет собой систему оповещения (сигнализации) на основе Arduino для мониторинга работы компьютера. В случае зависания компьютера она издаст звуковой сигнал предупреждения.

Проект состоит из двух частей: программы, которая запускается на компьютере, и аппаратно-программной части платформы Arduino, подключенной через USB-порт.
Компьютерная программа отправляет предопределенный символ в Arduino с интервалом в 1 секунду. Arduino читает этот символ из данных, отправленных с компьютера. Если он не получает никакого символа в течение 10 секунд, он издает звук из зуммера, подключенного к контакту 10. Принципиальная схема подключения очень проста и выглядит следующим образом.

Компьютерная программа написана на Visual Basic. Это простое приложение Windows Forms, содержащее форму (Form1), метку (Label1) и таймер (Timer1).
Интервал таймера Timer1 установлен на 1000 мс.
Исходный код компьютерной программы приведен далее.
Imports System.IO.Ports
Public Class Form1
Dim port As SerialPort
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
port = New SerialPort("COM4", 9600)
port.Open()
End Sub
Private Sub Form1_FormClosing(sender As Object, e As FormClosingEventArgs) Handles MyBase.FormClosing
port.Close()
End Sub
Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
On Error GoTo error1
port.Write("1")
Label1.Text = Now() & " - Sent ""1"" on COM4 baud 9600 - Success!"
Exit Sub
error1:
Label1.Text = Now() & " - " & ErrorToString()
End Sub
End Class
Код скетча Arduino:
char incomingChar = 0; // для входящих последовательных данных
int NoSignalCounter = -60; // время запуска компьютера
void setup() {
Serial.begin(9600); // открываем последовательный порт, устанавливаем скорость передачи данных 9600 бит/с
}
void loop() {
while (Serial.available() > 0) {
NoSignalCounter = 0;
incomingChar = Serial.read();
if (incomingChar == '1') { // '1' это символ, ожидаемый от компьютера
noTone(10);
}
else {
tone(10, 2400); // тревога: символ, отправленный с компьютера, отличается от ожидаемого
}
}
NoSignalCounter++;
if (NoSignalCounter >= 10) { // тревога: за последние 10 секунд с компьютера не было получено ни одного символа
NoSignalCounter = 0;
tone(10, 2400); //(контакт, частота)
}
delay(1000);
}
© digitrode.ru