Cannone laser di Stefano Maiocchi App Android

Il progetto del Cannone laser di Stefano Maiocchi si conclude con la realizzazione di un App Android.

cannone laser di Stefano Maiocchi

In questo articolo Stefano ti racconta come ha realizzato al sua App Android con Processing e condivide il codice in modo che anche tu possa avere una base di codice da cui partire per realizzare il tuo progetto di Cannone laser giocattolo controllato da smartphone.

Lascio la descrizione a Stefano:

Codice Processing della APP per Android

Guardando le linee del codice vedi che per prima cosa consiste nel caricare le librerie necessarie e creare le variabili successivamente usate.

Poi abiliti il bluetooth all’avvio del’App.

Nel Setup inizializzi alcune variabili e avvii la connessione bluetooth, osserva i vari commenti nelle linee del codice per comprendere meglio come eseguire questi passaggi.

Nella funzione draw, equivalente alla funzione loop negli sketch di arduino e genuino, il codice è diviso in quattro fasi:

  • status=0: esegui la ricerca di tutti i dispositivi e se trovi il modulo bluetooth, nel mio caso un “HC-05”, utilizzato dal cannone laser giocattolo ti connetti passando alla fase status=2, altrimenti ti fermi alla fase status=1: non connesso.
  • status=1: non connesso ( vedi sopra );
  • status=2: verifichi se la connessione bluetooth ad arduino è riuscita e passi alla fase operativa: status=3;
  • status=3: disegni il joystick e verifichi se rilevi una tap al suo interno, segno che qualcuno ha toccato lo schermo interno all’area joystick. Calcoli le coordinate di sparo convertendole in gradi da 0 a 180, per i servomotori, e crei la stringa di tre byte da inviare tramite bluetooth. Quest’ultima è composta dalla lettera D seguita dalle due coordinate. Infine si disegna il cerchietto nel joystick nel punto in cui hai rilevato il tap ( tocco ) ingrandendolo quando Arduino comunica l’inizio dello sparo e riportandolo alle dimensioni normali quando arduino comunica la fine dello sparo.

Nella parte alta dello schermo vengono anche scritti i valori delle coordinate convertite.

L’App Android per il controllo del cannone laser giocattolo è volutamente semplice nell’aspetto grafico per non appesantirne la comprensione.

E’ stata scritta in modo da adattarsi alla risoluzione dello schermo di qualunque smartphone, e usandolo obbligatoriamente in modalità portrait (verticale).

Il codice dell’App Andriod in Processing

/* Controllo bluetooth via Android
   di un Cannone Laser collegato ad Arduino
   modulo bluetooth HC-05 configurato a 9600 Baud
*/   

import android.content.Intent;
import android.os.Bundle;
import ketai.net.bluetooth.*;  // libreria ketai per gestione
import ketai.ui.*;             // periferiche smartphone, qui 
import ketai.net.*;            // usata per il bluetooth

PFont fontMy;
KetaiBluetooth bt;
int status = 0;
byte received = 'L';
int dataX, dataY;

// definizione joystick
int joyCenterX, joyCenterY, joyX, joyY;

// Il codice seguente abilita il bluetooth all'avvio

void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  bt = new KetaiBluetooth(this);
}

void onActivityResult(int requestCode, int resultCode, Intent data) {
  bt.onActivityResult(requestCode, resultCode, data);
}


void setup() {
  frameRate(5);               // velocita' invio dati
  orientation(PORTRAIT);      // uso smartphone in verticale
  background(0);              // colore sfondo display nero
  joyCenterX = width/2;       // centro joystick asse X
  joyCenterY = 6*height/10;   // centro joystick asse Y
  joyX=0;
  joyY=0;
  dataX=90;
  dataY=90;
  fontMy = createFont("SansSerif",int(height/20)); // dimensione font adeguata a risoluzione schermo
  textFont(fontMy);         // scelta del font da usare
  bt.start();               // avvio connessione bluetooth
  bt.discoverDevices();     // avvio scoperta dispositivi (discover devices)
}


void draw() {
    
  fill(80,90,100);               // riempimento rettangolo
  stroke(255);                   // colore del bordo bianco
  rect(0, 0, width, height/10);  // disegna rettangolo
  fill(200);                     // colore del testo 

  if (status==0)        // ricerca del bluetooth di Arduino
  {
         text("Ricerca dispositivi...", 5, (height/10)*2/3);         
         ArrayList<String> names;
         names = bt.getDiscoveredDeviceNames();     // elenco dispositi trovati
         for (int i=0; i < names.size(); i++)
         {
            String device=names.get(i);
            println("["+i+"] " + device);    
            if (device.equals("HC-05"))      // in elenco c'e' modulo bluetooth di Arduino
            {
              bt.connectToDeviceByName("HC-05"); // si connette al dispositivo selezionato
              status=2;                          // smartphone connesso ad Arduino
            }        
         } 
     if (!bt.isDiscovering())      // ho cercato ma non ho trovato
     {
         status=1;                 // smartphone non collegato ad Arduino
     }          
  }
    
  if (status==1)
  {
     text("Arduino non trovato", 5, (height/10)*2/3);    
  }  
  
  if (status==2)
  { 
     text("Mi connetto a Arduino...", 5, (height/10)*2/3);  
     if (bt.connectToDeviceByName("HC-05"))
     {
        status=3;       // connessione riuscita        
     }    
  }
   
  if (status==3)       // se lo smartphone e' connesso ad Arduino ...
  {
    background(0);  //uso display nero
    text("Connesso ad Arduino", 5, (height/10)*2/3);    
    // Visualizza coordinate Cannone Laser
    text("Coordinate: "+dataX+"  "+dataY, 0, (height/10)*5/3);
    // disegna il joystick
    fill(50);         // colore sfondo grigio scuro
    stroke(128);      // colore bordo grigio chiaro
    strokeWeight(3);  // spessore bordo    
    rect(width/10, 3*height/10, 8*width/10, 6*height/10);
    if (mousePressed)
    {
       if (mouseX > width/10 && mouseX < 9*width/10 && mouseY > 3*height/10 && mouseY < 9*height/10)
       {
          // il dito e' dentro il joystick!          
          joyX=mouseX-joyCenterX;                // calcolo pixel asse X
          joyY=mouseY-joyCenterY;                // calcolo pixel asse Y
          // calcolo e trasmissione coordinate
          dataX = int(map(joyX, -4*width/10, 4*width/10, 0, 180));    // conversione da pixel
          dataY = int(map(joyY, -3*height/10, 3*height/10, 0, 180));  // a gradi 0-180 servomotore
          if (joyY < 0) dataX = 180 - dataX;                          // correzione quadrante
          byte[] data = {'D',byte(dataX),byte(dataY)};                // composizione dati, 3 byte
          bt.broadcast(data);                     // invio coordinate ad Arduino tramite bluetooth
       }
    } 
    noStroke();          // nessun bordo
    fill(250,50,50);     // colore cerchietto dito
    if (received == 'L')     // fine sparo Laser da Arduino
    {
       ellipse(joyCenterX+joyX, joyCenterY+joyY, width/10, width/10); // disegna cerchietto
    }
    if (received == 'H')     // inizio sparo Laser da Arduino
    {
       ellipse(joyCenterX+joyX, joyCenterY+joyY, width/5, width/5);   // disegna cerchio
    }
  }
}  

// funzione richiamata quando arrivano dati da Arduino tramite bluetooth
void onBluetoothDataEvent(String who, byte[] data) {
  if (status==3)         // se lo smartphone e' connesso ad Arduino ...
  {
    received = data[0];  // prendo il primo byte del array
  }    
}

Stefano fa notare che l’App sarà compilata in modo debug cioè con firma generica, pertanto non può essere posta su un app-store perché dovrebbe essere firmata in modo univoco per riconoscerne il proprietario.

Quando la installi lo smartphone ti chiederà il permesso dei diritti di accesso che dovrai accettare:

cannone laser Stefano Maiocchi installazione app

 la richiesta riguarda solo l’uso del bluetooth, puoi stare tranquillo in quanto la App non accederà ai vostri dati personali o altre informazioni.

Download

Puoi scaricare tutto il software, sorgenti e file apk, dal github di Stefano Maiocchi

Bibliografia

Se vuoi approfondire l’argomento dello sviluppo di App Android con Processing puoi leggere:
Rapid Android Development – Build Rich, Sensor-Based Applications with Processing by Daniel Sauter Editor: the Pragmatic Bookshelf ( link ) disponibile sia in versione cartacea tradizionale sia in formato eBook.

Se hai difficoltà con l’inglese puoi leggere il corso “Sviluppare APP Android con Processing” pubblicato sulla rivista Elettronica In nei numeri 199-204 e scritto dall’ing. Mirco Segatello a cui facciamo i complimenti.

Cortesemente, prima di inserire i commenti leggi il regolamento

Permanent link to this article: http://www.mauroalfieri.it/elettronica/cannone-laser-stefano-maiocchi-app-android.html

Lascia un commento

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.