Anteprima
Vedrai una selezione di 4 pagine su 12
Macchinina comandata tramite bluetooth Pag. 1 Macchinina comandata tramite bluetooth Pag. 2
Anteprima di 4 pagg. su 12.
Scarica il documento per vederlo tutto.
Macchinina comandata tramite bluetooth Pag. 6
Anteprima di 4 pagg. su 12.
Scarica il documento per vederlo tutto.
Macchinina comandata tramite bluetooth Pag. 11
1 su 12
Disdici quando vuoi 162x117
Disdici quando
vuoi
Acquista con carta
o PayPal
Scarica i documenti
tutte le volte che vuoi
Estratto del documento

Progetto: Macchinina comandata tramite bluetooth

Componenti utilizzati

Una macchinina radiocomandata Gig Nikko con 2 motori in corrente continua

Una scheda Arduino 2009

Interfaccia motor shield (controllo motori per Arduino)

Modulo LLC

Una scheda bluetooth

2 Sensori di distanza Sharp

4 LED

Pacco batterie contenente 6 pile AA

Un notebook fornito di bluetooth

Visual Basic 6 Schema a blocchi dei collegamenti

Arduino Logic

Level

Converter

Bluetooth PC

Motor Shield

Motore Motore

Trazione Sterzo

Hardware

Cenni su Arduino

Il progetto Arduino ha preso il via ad Ivrea

all'Interaction Design Institute di Olivetti e

Telecom nel 2005 ed è completamente Open

Source, ovvero chiunque può replicarsi la

piastrina in casa oppure modificarla a

piacimento senza violare alcuna licenza.

Arduino Duemilanove (anno di uscita di

questa versione) è una scheda basata su un

microcontroller ATmega 328, è provvista di La scheda Arduino Duemilanove

Mattia Lancieri VB Informatica Pag. 3

Progetto: Macchinina comandata tramite bluetooth

14 entrate/uscite digitali, 6 di queste possono essere usate come uscite PWM. La

scheda può essere connessa a un computer tramite un cavo USB (Universal Serial Bus)

emulando una porta seriale, da dove prende anche l’alimentazione a 5V necessaria al

suo funzionamento, in caso si debbano alimentare anche motori si può provvedere a

una alimentazione esterna. Arduino si programma attraverso il computer, con un

ambiente di sviluppo apposito in C++, più avanti verrà trattato il codice in modo più

approfondito. La piastrina può essere accoppiata a vari shield, ovvero schede

specifiche che permettono di estendere le sue capacità come l’ethernet shield che

permette di connettere Arduino ad una rete per essere controllato a distanza o il motor

shield. Al momento Arduino si è diffuso in tutto il mondo, è usato in ogni campo, anche

quello ospedaliero, in quanto semplicemente programmandolo correttamente gli si

può fare eseguire qualsiasi funzione, dalla semplice accensione di una lampadina per

un certo tempo fino al controllo di apparecchiature complesse. La scheda esiste in

varie versioni, la duemilanove usata nel progetto è la versione base, adatta alla

maggior parte degli utenti, esiste poi una versione Mega con più entrate\uscite, la

versione mini per piccoli progetti e una versione LilyPad da usare per T-Shirt con

display incorporato (ad esempio con barre che si muovono a ritmo di musica).

Versione Lilypad Versione Mega

Motor shield

La piastrina motor shield è una delle tante estensioni applicabili ad Arduino, essa

permette di controllare più motori elettrici, nel nostro caso i 2 motori della macchinina:

quello dello sterzo e il motore di trazione. Si applica al di sopra di Arduino e viene

collegata a una alimentazione supplementare per permettere di azionare i motori,

dato che l’alimentazione usb non fornisce abbastanza potenza, sopra di essa è

presente un LED che ne indica lo stato. Tramite apposite librerie è possibile il controllo

via software. Piastrina motor shield collegata su Arduino

Mattia Lancieri VB Informatica Pag. 4

Progetto: Macchinina comandata tramite bluetooth

LLC (Logic Level Converter)

Il ricevitore bluetooth è alimentato a 3,3V, mentre Arduino è alimentato a 5V, questo

comporta una disparità nei livelli logici, per ovviare a questo inconveniente si usa un

convertitore di livelli logici (llc) che si preoccupa di adattare i livelli logici tra le 2

architetture. LLC usato per il progetto

Bluetooth

Il modulo installato

permette di trasferire i

dati ricevuti dall’interfaccia direttamente alla porta seriale di Logo

Arduino, come se si stesse comandando via cavo. È un sistema di

comunicazione wireless a corto raggio nella banda a 2,4GHz con velocità massima di

2Mbps, la trasmissione dei dati è seriale, ovvero 1 bit dopo l’altro in successione. Sono

permessi collegamenti point to point o tramite un access point centrale, l’unità

centrale è chiamata master mentre le periferiche sono gli slave, il master comunica

agli slave quali indirizzi usare, quando trasmettere, per quanto e le frequenze da

utilizzare. La piconet è l’unità base di Bluetooth, è composta da un master e massimo

7 nodi slave, più piconet connesse formano una scatternet. Oltre ai 7 nodi attivi ci

possono essere 256 nodi sospesi, un nodo è sospeso quando ad esempio è in stato di

risparmio energetico. Tra 2 slave non avviene mai la comunicazione. Il bluetooth

fornisce vari profili ovvero:

Accesso generico: è quello principale, permette di stabilire e mantenere canali

protetti tra master e slave.

Scoperta del servizio: molto importante perché permette ad un dispositivo

bluetooth di scoprire i servizi che possono offrire gli altri parecchi che si trovano

nel raggio di scansione del dispositivo.

Porta seriale: permette di emulare una porta

seriale via bluetooth, viene offerto dal ricevitore

della macchinina, permettendo così il

collegamento all’interfaccia visual basic tramite il

componente mscomm.

Accesso dial-up: permette di collegarsi senza filo

ad un modem esterno (un comune cellulare

dotato di bluetooth ha un modem), il progetto

bluetooth è nato per questo scopo.

Telefonia Cordless: permette la comunicazione

Modulo Bluetooth tra un cordless e la sua base.

Auricolare wireless: permette di collegarsi ad un

auricolare senza fili.

Invio di file: permette l’invio di file tra un dispositivo e l’altro come immagini,

mp3, video, ha sostituito in breve la porta irda dei telefoni.

Il bluetooth può essere utilizzato per realizzare una rete locale con il profilo accesso

LAN, effettuando la ricerca e connettendosi ad un access point dotato di tale

Mattia Lancieri VB Informatica Pag. 5

Progetto: Macchinina comandata tramite bluetooth

tecnologia ci si può collegare tramite password alla rete. Dato che la banda di 2,4 GHz

è usata anche dal wi-fi una trasmissione bluetooth potrebbe disturbarla.

Sensori di distanza Sharp Sensore Sharp 2Y0A02

Sulla macchina vi sono 2 sensori di distanza, uno sul paraurti

davanti e l’altro sul retro, quando questi sensori rilevano un

ostacolo a circa 30cm di distanza arrestano il motore di trazione.

Questi 2 sensori hanno un’uscita analogica, collegata alle relative

entrate di Arduino, l’uscita varia da 0,4V a 2,8V. Arduino trasforma

questi valori in un numero decimale, secondo questi criteri:

LED LED di vari colori

L.E.D. sta per Light Emitting Diode, è composto da vari

materiali, che attraversati da una corrente (anche molto

bassa) emettono luce. I led emettono luce fredda, per

questo sono molto affidabili e possono lampeggiare

molto velocemente. Per il loro basso consumo energetico

stanno velocemente sostituendo le classiche lampadine

ad incandescenza, ne esistono di diversi colori. Vista

anche la loro alta luminosità si stanno anche imponendo

nelle automobili come luci diurne o come stop. Devono

avere in serie una resistenza, più avanti si tratterà il modo per calcolarla.

Software

Arduino

Per la programmazione di Arduino si

utilizza come già detto un software

derivato dal C++ con un compilatore

open source, esso, dopo aver

selezionato la porta seriale (in questo

caso una seriale virtuale bluetooth),

permette di trasferire il codice nella

memoria di Arduino, dove sarà in

esecuzione continua fino allo

spegnimento del piastrino.

Screenshot del software (Versione 0018)

Mattia Lancieri VB Informatica Pag. 6

Progetto: Macchinina comandata tramite bluetooth

Codice attualmente in uso

#include <AFMotor.h> //Libreria del Motor Shield

AF_DCMotor motor3(3, MOTOR12_64KHZ); // Definisce I 2 motori

AF_DCMotor motor1(1, MOTOR12_64KHZ);

// Dichiarazione delle variabili

byte inSerByte = 0;

int ledPin = 16; // LED freccia connesso al pin digitale 16

int ledPin2 = 17; // LED freccia connesso al pin digitale 17

int ledPinDietro = 18; //LED sensore dietro collegato al pin analogico 4 (digitale 18)

int ledPinDavanti = 19; //LED sensore davanti collegato al pin analogico 5 (digitale 19)

const int analogInPin0 = 0; // Sensore distanza dietro

const int analogInPin1 = 1; // Sensore distanza davanti

int sensorValue = 0; // Valore letto dal sensore

int outputValue = 0; // Valore restituito in forma numerica

int sensorValue2 = 0; // Valore letto dal sensore

int outputValue2 = 0; // Valore restituito in forma numerica

int L1 = 0; //Variabili usate nell’interfaccia

int L2 = 0;

void setup(void)

{ // Inizializzazione dei pin in output

pinMode(ledPin, OUTPUT);

pinMode(ledPin2, OUTPUT);

pinMode(ledPinDietro, OUTPUT);

pinMode(ledPinDavanti, OUTPUT);

// Configurazione della porta seriale

Serial.begin(115200); //Definizione del baud rate

}

void loop(void) //Parte di codice sempre in esecuzione

{ byte dato;

sensorValue = analogRead(analogInPin0); //Configurazione dei sensori

outputValue = map(sensorValue, 0, 1023, 0, 255);

if (sensorValue > 330 && sensorValue < 390) //Se il valore letto è compreso tra 330 e 390

{ motor3.setSpeed(180); //Ferma il motore

motor3.run(RELEASE);

digitalWrite(ledPinDietro, HIGH); //Accende il led VERDE che corrisponde al sensore

L1=1;

}

else

{

digitalWrite(ledPinDietro, LOW); //Il led VERDE rimane spento se la distanza non è

quella esatta

L1=0;

} ///////////////////////////////////////////////////////////////////////

sensorValue2 = analogRead(analogInPin1);

outputValue2 = map(sensorValue2, 0, 1023, 0, 255);

Mattia Lancieri VB Informatica Pag. 7

Progetto: Macchinina comandata tramite bluetooth

if (sensorValue2 > 330 && sensorValue2 < 390) //Se il valore letto è compreso tra 330 e 390

{ motor3.setSpeed(180); //Ferma il motore

motor3.run(RELEASE);

digitalWrite(ledPinDavanti, HIGH); //Accende il led VERDE che corrisponde al sensore

L2=1;

}

else

{

digitalWrite(ledPinDavanti, LOW); //Il led VERDE rimane spento se la distanza non è quella

esatta

L2=0;

}

/////////////////////////////////////////////////////////////////////////// Controllo led per l’

interfaccia

if (L1==1) //Se il led è acceso

{ Serial.print("a"); //Visualizzo “a” tramite porta seriale

}

if (L2==1) //Se il led è acceso

{ Serial.print("b"); //Visualizzo “b” tramite porta seriale

}

/////////////////////////////////////////////////////////////////////////

if (Serial.available() > 0) { //In questa parte si Definisce un menù, ovvero per ogni

carattere inviato dall’interfaccia Arduino esegue un’azione

int result = 0;

inSerByte = Serial.read();

switch (inSerByte) {

case 'l': //test LED

Serial.println("Test dei LED");

digitalWrite(ledPin, HIGH);

delay(1000);

digitalWrite(ledPin, LOW);

delay(1000);

digitalWrite(ledPin2, HIGH);

delay(1000);

digitalWrite(ledPin2, LOW);

delay(1000);

digitalWrite(ledPinDietro, HIGH);

delay(1000);

digitalWrite(ledPinDietro, LOW);

delay(1000);

digitalWrite(ledPinDavanti, HIGH);

delay(1000);

digitalWrite(ledPinDavanti, LOW);

Serial.println("Test Concluso");

result = 0;

break;

case 'w': //Quando ricevo w faccio

Serial.println("Avanti");

motor3.setSpeed(180);

motor3.run(FORWARD); // Motore avanti

result = 0;

break;

case 's':

Serial.println("Indietro");

motor3.setSpeed(180);

motor3.run(BACKWARD); // Motore indietro

result = 0;

break;

case 'd':

Serial.println("Destra");

motor1.setSpeed(255);

motor1.run(BACKWARD); // Gira a destra

result = 0;

digitalWrite(ledPin2, HIGH); //Freccia destra

delay(100); // Ritardo di 0,1 secondi

digitalWrite(ledPin2, LOW);

delay(100);

Mattia Lancieri VB Informatica Pag. 8

Progetto: Macchinina comandata tramite bluetooth

digitalWrite(ledPin2, HIGH);

delay(100);

digitalWrite(ledPin2, LOW);

delay(100);

digitalWrite(ledPin2, HIGH);

delay(100);

digitalWrite(ledPin2, LOW);

break;

case 'a':

Serial.println("Sinistra");

motor1.setSpeed(255);

motor1.run(FORWARD); // Gira a sinistra

result = 0;

digitalWrite(ledPin, HIGH); // Freccia sinistra

delay(100);

digitalWrite(ledPin, LOW);

delay(100);

digitalWrite(ledPin, HIGH);

delay(100);

digitalWrite(ledPin, LOW);

delay(100);

digitalWrite(ledPin, HIGH);

delay(100);

digitalWrite(ledPin, LOW);

break;

case 'q':

Serial.println("Raddrizza le ruote");

motor1.setSpeed(255);

motor1.run(RELEASE); // Raddrizza sterzo

result = 0;

digitalWrite(ledPin, HIGH);

digitalWrite(ledPin2, HIGH); // Lampeggio veloce di entrambe le frecce

delay(100);

digitalWrite(ledPin, LOW);

digitalWrite(ledPin2, LOW);

break;

case ' ':

Serial.println("Ferma");

motor3.setSpeed(180);

Dettagli
Publisher
12 pagine
115 download