ultimo aggiornamento 3 ottobre 2015


 

Programmi di gestione.

Per la gestione del robot tramite la rete Wi-FI Ŕ previsto l’utilizzo di un’interfaccia che potrÓ essere caricata su un PC o su un Tablet.
L’interfaccia Ŕ al momento in via di completamento: Ŕ composta da una normale pagina web che viene caricata all’interno della memoria della scheda Arduino Yun.
Questa pagina potrÓ essere richiamata direttamente tramite l’indirizzo della scheda se questa Ŕ collegata senza collegato senza access point ip di default

http://192.168.240.1/sd/robot/ index.html

oppure se collegato con access point con il comando

http://arduino.local/sd/robot/ index.html

Il video stream potrÓ essere visto all’indirizzo:

http://arduino.local:8080/stream.html

La pagina principale Ŕ formata da due frame in cui il primo mostrerÓ le immagini riprese dalla webcam, mentre nel secondo Ŕ presente l’interfaccia di comando.
Per la gestione dei comandi Ŕ utilizzata una libreria javascript Open Source chiamata Zepto , questa Ŕ rilasciata con licenza MIT ed Ŕ largamente compatibile con jQuery e destinata ai browser moderni e in particolare a quelli dei dispositivi mobili e proprio per questo motivo Ŕ piccolissima (5-10 kb) anche rispetto a jQuery.
Zepto utilizza le stesse API di jQuery in modo che gli sviluppatori possano utilizzarla senza dover imparare nuove istruzioni, per questo motivo insieme alle pagine HTML sarÓ necessario inserire anche il file: “zepto.min.js”.
Il listato del programma di gestione sarÓ inserito in un futuro aggiornamento, in questa fase si procederÓ solamente a testare le varie parti.

homotix

PCBONLINE

Per quanto riguarda la programmazione di Arduino Yun utilizzeremo il relativo IDE, che in questo momento Ŕ disponibile nella versione 1.6.5.

Una volta installato, basterÓ selezionare Arduino Y˙n dal menu Strumenti> Board
Per i dettagli, vedere reference e tutorials.
L'ATmega32U4 su Arduino Y˙n Ŕ fornito con un bootloader che permette di caricare un nuovo codice senza l'uso di un programmatore hardware esterno.
╚ anche possibile programmarlo senza filo utilizzando il collegamento Wi-Fi.
Per verificare il funzionamento del programma potremmo caricare RoboYun_test.ino, che permette di testare tutte le varie parti.

 

/*####################################################################
FILE: RoboYun_test.ino VERSION: 1.0 Descrizione: Programma per testare
le varie parti del robot RoboYun
Ultima modifica il 18/7/2015
Applicazione realizzata da Adriano Gandolfo
Sito https://www.adrirobot.it
Blog http://it.emcelettronica.com/author/adrirobot
This example code is in the public domain.
####################################################################

Porte utilizzate:
D2 - RelŔ 1
D3 - IN_1 (Infineon)
D4 - RelŔ 2
D5 - Servo TILT
D6 - Servo PAN
D7 - Sensore DHT11
D8 - Faro
D9 - Led blu
D11 - IN_2 (Infineon)
D12 - INH_1 (Infineon)
D13 - INH_2 (Infineon)
A0 - IS_1 (Infineon)
A1 - IS_2 (Infineon
*/

#include <Servo.h>   //Libreria gestione servomotori
#include "DHT.h"     //Libreria gestione sensore
#include <Console.h> //Libreria 

#define DHTTYPE DHT11    // Definisce il tipo di senore DHT 11
#define DHTPIN 7         // Definisce il pin a cui Ŕ collegato
DHT dht(DHTPIN, DHTTYPE);// Inizializza il sensore DHT11

Servo panservo;
Servo tiltservo;
const int rele_1 = 2;
const int rele_2 = 4;
const int fari = 8;
const int led_1 = 9;
const int vel = 120;


// Assegnazione dei pin per il primo half-bridge
const int IS_1 = A0; // current sense and diagnostics
const int IN_1 = 3; // input (PWM)
const int INH_1 = 12; // inhibit (low = sleep)

// Assegnazione dei pin per il secondo half-bridge
const int IS_2 = A1; // current sense and diagnostics
const int IN_2 = 11; // input (PWM)
const int INH_2 = 13; // inhibit (low = sleep)

void setup() {
  
  // initializa la comunicazione seriael
  Bridge.begin();
  Console.begin();
  // Gestione servo
  tiltservo.attach (5); // Collega il servo Tilt alla porta D5
  panservo.attach (6); //Collega il servo Pan alla porta D6
  tiltservo.write(90); //tilt servo al centro
  panservo.write(90); // panservo al centro

  // Gestione relŔ
  pinMode(rele_1, OUTPUT);
  digitalWrite(rele_1, LOW);
  pinMode(rele_2, OUTPUT);
  digitalWrite(rele_2, LOW);

  // Impostazione stato input/output dei pin
  pinMode(IS_1, INPUT);
  pinMode(IN_1, OUTPUT);
  pinMode(INH_1, OUTPUT);
  pinMode(IS_2, INPUT);
  pinMode(IN_2, OUTPUT);
  pinMode(INH_2, OUTPUT);
  pinMode(fari, OUTPUT);
  pinMode(led_1, OUTPUT);

  // Impostazione pin gestione motori
  analogWrite(IN_1, 0); // set motor speed to 0
  digitalWrite(INH_1, HIGH); // enable OUT1
  analogWrite(IN_2, 0); // set motor speed to 0
  digitalWrite(INH_2, HIGH); // enable OUT2
  digitalWrite(led_1, HIGH); // robot operativo

  while (!Console) {
    ; // Attesa per la connessione con la Console.
  }
  Console.println("Connessione stabilita!!!!");
  digitalWrite(led_1, HIGH);
}

void loop() {
  //Messaggio iniziale
  Console.println("");
  Console.println("TEST FUNZIONAMENTO RobotYun");
  Console.println("By Adriano Gandolfo");
  Console.println("");

  //Test funzionamento fari
  Console.println("TEST FUNZIONAMENTO FARI");
  Console.println("Fari accesi");
  digitalWrite(fari, HIGH);
  delay (1000);
  Console.println("Fari spenti");
  digitalWrite(fari, LOW);
  delay (1000);
  Console.println("");

  //Test funzionamento led blu
  Console.println("TEST FUNZIONAMENTO LED BLU");
  Console.println("Led BLU acceso");
  digitalWrite(led_1, HIGH);
  delay (1000);
  Console.println("Led BLU spento");
  digitalWrite(led_1, LOW);
  delay (1000);

  // Test del servo Pan
  Console.println("");
  Console.println("TEST FUNZIONAMENTO SERVO MOVIMENTO PAN");
  panservo.write(45);
  delay(1000);
  panservo.write(0);
  delay(1000);
  panservo.write(90);
  delay(1000);
  panservo.write(135);
  delay(1000);
  panservo.write(160);
  delay(1000);
  panservo.write(90);
  delay(1000);

  // Test del servo TILT
  Console.println("");
  Console.println("TEST FUNZIONAMENTO SERVO MOVIMENTO TILT");
  tiltservo.write(45);
  delay(1000);
  tiltservo.write(0);
  delay(1000);
  tiltservo.write(90);
  delay(1000);
  tiltservo.write(135);
  delay(1000);
  tiltservo.write(160);
  delay(1000);
  tiltservo.write(90);
  delay(1000);

  // Test sensore
  float t = dht.readTemperature();
  float h = dht.readHumidity();
  Console.println("");
  Console.println ("TEST SENSORE TEMPERATURA/UMIDITA'");
  Console.print ("Temperatura :");
  Console.print (t);
  Console.println (" C");
  Console.print ("Umidita'    :");
  Console.print (h);
  Console.println (" %");

  // Test funzionamento motori
  // Robot AVANTI
  Console.println("");
  Console.println ("TEST FUNZIONAMENTO MOTORI");
  Console.println("Robot Avanti");
  avanti(vel);
  delay(2000);

  // Robot INDIETRO
  Console.println("Robot Indietro");
  indietro(vel);
  delay(2000);

  // Robot a DESTRA
  Console.println("Robot rotazione oraria");
  destra(vel);
  delay(2000);

  // Robot a Sinistra
  Console.println("Robot rotazione antioraria");
  sinistra(vel);
  delay(2000);

  //Robot fermo
  Console.println("Robot fermo");
  fermo();
  delay(5000);
}

//Routine

void avanti(int motorSpeed) {
  digitalWrite(rele_1, HIGH);
  digitalWrite(rele_2, HIGH);
  delay (100);
  analogWrite(IN_1, motorSpeed);
  analogWrite(IN_2, motorSpeed);
}

void indietro(int motorSpeed) {
  digitalWrite(rele_1, LOW);
  digitalWrite(rele_2, LOW);
  delay (100);
  analogWrite(IN_1, motorSpeed);
  analogWrite(IN_2, motorSpeed);
}

void destra(int motorSpeed) {
  digitalWrite(rele_1, HIGH);
  digitalWrite(rele_2, LOW);
  delay (100);
  analogWrite(IN_1, motorSpeed);
  analogWrite(IN_2, motorSpeed);
}

void sinistra (int motorSpeed) {
  digitalWrite(rele_1, LOW);
  digitalWrite(rele_2, HIGH);
  delay (100);
  analogWrite(IN_1, motorSpeed);
  analogWrite(IN_2, motorSpeed);
}

void fermo() {
  digitalWrite(rele_1, LOW);
  digitalWrite(rele_2, LOW);
  analogWrite(IN_1, 0);
  analogWrite(IN_2, 0);
}

Elenco revisioni

3/10/2015

Emissione preliminare