Tiro a Segno Con Arduino

Tiro a Segno Laser con Arduino

Con questo progetto vedremo come realizzare un Tiro a Segno Laser con Arduino.

Premessa: non indirizzare il fascio del Diodo Laser in direzione di persone o animali, prestare attenzione agli occhi ed indossare gli opportuni DPI.

Lo schema utilizzato è il seguente:

La pistola è stata stampata in 3D in due metà (tutti i file STL sono scaricabili in fondo a questa pagina)

All’interno trova posto il Diodo Laser ed un pulsante a levetta con ritorno al centro.

Nel Bersaglio sono inseriti i due Diodi Led e la Fotoresistenza.

Per fermare il tutto è stata utilizzata un po’ di colla a caldo.

Il tutto è stato poi assemblato su una tavoletta di legno:

Il display LCD è interfacciato con Arduino tramite un adattatore PCF8574T, che ci permetterà di comunicare con il Display tramite il protocollo I2C, risparmiando un po’ di PIN di Arduino.

Sarà necessario aggiungere all’IDE di Arduino la relativa libreria scaricabile da qui.

Lo sketch da utilizzare per provarne il funzionamento è il seguente:

#define GRILLETTO 8 // Pin Grilletto
#define LASER 4 // Pin Diodo Laser
#define LEDVERDE 3 // Pin Diodo Led Verde
#define LEDROSSO 2 // Pin Diodo Led Rosso
#define BUZZER 11 // Pin Buzzer Passivo
#define TIRI 10 // Numero di tiri per ogni turno

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27, 16, 2);

int fotores;
int pulsante;
int tiri = 0;
int centri = 0;

void setup() {
  lcd.begin();
  Serial.begin(9600);

  pinMode(LEDROSSO, OUTPUT);
  pinMode(LEDVERDE, OUTPUT);
  pinMode(LASER, OUTPUT);
  pinMode(GRILLETTO, INPUT_PULLUP);
  pinMode(BUZZER, OUTPUT);

  lcd.backlight();
  lcd.print("  Tiro a Segno  ");
}

void loop() {
  if (digitalRead(GRILLETTO) == LOW) {
    tiri = tiri + 1;
    Serial.println("pulsante premuto");
    digitalWrite(LASER, HIGH);
    delay(50);

    fotores = analogRead(A0);
    Serial.print("LETTO AD ");
    Serial.println(fotores);

    if (fotores >= 950) {
      Serial.println("Bersaglio Centrato");
      digitalWrite(LEDVERDE, HIGH);
      tone(BUZZER, 900);
      centri = centri + 1;
      delay(500);
      digitalWrite(LEDVERDE, LOW);
      noTone(BUZZER);
    }

    if (fotores < 949) { // Soglia da determinare empiricamente
      Serial.println("Bersaglio Mancato");
      digitalWrite(LEDROSSO, HIGH);
      tone(BUZZER, 150);
      delay(500);
      digitalWrite(LEDROSSO, LOW);
      noTone(BUZZER);
    }

    digitalWrite(LASER, LOW);

  }
  Serial.println("Colpi Sparati ");
  Serial.println(tiri);
  Serial.println("Centri effettuati ");
  Serial.println(centri);

  lcd.setCursor (0, 1);
  lcd.print(" Centri ");
  lcd.print(centri);
  lcd.print(" su ");
  lcd.print(tiri);
  if (tiri >= TIRI) {
    delay(1000);
    for (int i = 0; i < 3; i++) {
      lcd.noBacklight();
      tone(BUZZER, 750);
      delay(500);
      lcd.backlight();
      noTone(BUZZER);
      delay(500);
    }
    centri = 0;
    tiri = 0;
attesa:
    if (digitalRead(GRILLETTO) == HIGH) {
      goto attesa;
    }

    if (digitalRead(GRILLETTO) == LOW) {
      lcd.setCursor (0, 1);
      lcd.print("                ");
    }
  }
  delay(200);
}

Cliccando qui potrete vedere il video di funzionamento sul nostro profilo Instagram.

Clicca sulle immagini per scaricare l’STL da stampare in 3D…

Colonnetta Spessore Display LCD

Bersaglio

Metà Pistola (lo stesso file dovrà essere stampato specchiato per avere le due metà da assemblare)


Buon divertimento.