Il mondo di Arduino, come ben sapete, è un mondo estremamente eterogeneo in quanto offre basi di concetti elettronici e allo stesso tempo informatici e per questo motivo è possibile realizzare progetti di tutti i tipi.
In questo articolo sarà riportato il modo tramite il quale sarà possibile realizzare un allarme basato su Arduino per monitorare se il computer funziona. Se il PC si dovesse bloccare la board arduino provvederà tramite uno speaker ad emettere un segnale acustico.
Il progetto in questione si suddivide principalmente in due parti, una riguardante il codice eseguito sul PC e l’altra riguardante il collegamento della board Arduino ad una porta USB.
Il programma su PC invia un carattere predefinito ad Arduino, a intervalli di 1 secondo. Arduino legge dai dati inviati dal computer. Se non riceve alcun carattere per 10 secondi, emette un suono da un cicalino collegato al pin 10.
Il programma per computer è scritto in Visual Basic. Si tratta di una semplice applicazione Windows Form, contenente un modulo (Form1), un’etichetta (Label1) e un timer (Timer1).
L’intervallo Timer1 è impostato su 1000 ms.
Ecco qui il codice sorgente per il computer:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
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) 'Set your board COM 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") 'character to send to COM port, wich the Arduino will expect. Label1.Text = Now() & " - Sent ""1"" on COM4 baud 9600 - Success!" Exit Sub error1: Label1.Text = Now() & " - " & ErrorToString() End Sub End Class |
Ecco qui il codice sorgente per la board Arduino:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
char incomingChar = 0; // for incoming serial data int NoSignalCounter = -60; // delay to allow for computer startup time void setup() { Serial.begin(9600); // opens serial port, sets data rate to 9600 bps } void loop() { while (Serial.available() > 0) { NoSignalCounter = 0; incomingChar = Serial.read(); if (incomingChar == '1') { // '1' is the character expected from the computer noTone(10); } else { tone(10, 2400); // alarm: the character sent from the computer is different from the expected character } } NoSignalCounter++; if (NoSignalCounter >= 10) { // alarm: no character was received from the computer in the last 10 seconds NoSignalCounter = 0; tone(10, 2400); //(pin,frequency) } delay(1000); } |
Ecco lo schema elettrico:
Link utili