Show Posts
Pages: [1] 2
1  International / Software / Re: libreria servo.h con servo hitec hs-785hb on: February 06, 2013, 12:31:29 pm
da quanto la devo mettere la batteria ... conta che se riesco a farlo funzionare dovrei collegare da 1 a 4 servi (adesso ne ho due) ...

insieme al kit mi sembra che c'era uno snap battery per una batteria da 9v (quelle quadrate per capirci) ... scusa ma sono proprio a zero!
2  International / Software / Re: libreria servo.h con servo hitec hs-785hb on: February 06, 2013, 11:55:55 am
il collegamento del servo l'ho fatto sulla millefori col classico collegamento positivo su 5v di arduino , negativo gnd ...

comunque sia non vedo soluzione riguardo al servo ... non ci sto più capendo nulla :-(
3  International / Software / Re: libreria servo.h con servo hitec hs-785hb on: February 06, 2013, 11:39:54 am
ho abassato il delay a 15 adesso non sgrana più però fa circa 2 giri ...
4  International / Software / Re: libreria servo.h con servo hitec hs-785hb on: February 06, 2013, 11:30:25 am
continua a girare in un verso ... a scatti (sembra quasi che sgrani) ...

Code:
// library:
#include <LiquidCrystal.h>
#include <Servo.h>

// Define object:
LiquidCrystal objLcd( 12 , 11 , 5 , 4 , 3 , 2);

Servo objOschi_1;

// set pin numbers:

const int OSCI_1 = 9;

char buffer[11];

boolean Sommo = true;

void setup() {    
  
  objOschi_1.attach(OSCI_1);
  
  objLcd.begin(16, 2);
  
  objLcd.print("Connecting ...");
  
  delay(1500);
  
  objLcd.clear();
  objLcd.setCursor(0, 0);
  objLcd.print("ciao");
  
  Serial.begin(9600);
}

void loop() {
  
  for (int i=1100; i<1900;i++){
   objOschi_1.writeMicroseconds(i);
   delay(1000);
}
  
};
5  International / Software / Re: libreria servo.h con servo hitec hs-785hb on: February 06, 2013, 11:28:13 am
niente ... si muove pochissimo e sembra quasi che sgrani e l'lcd sfarfalla!
6  International / Software / Re: libreria servo.h con servo hitec hs-785hb on: February 06, 2013, 11:07:21 am
Ciao,
prima di tutto ti ringrazio dell'aiuto ...

non riesco a capire come possa trasformare la write in writemicroseconds ... ti allego il codice forse riesco a farmi capire :

// library:
#include <LiquidCrystal.h>
#include <Servo.h>

// Define object:
LiquidCrystal objLcd( 12 , 11 , 5 , 4 , 3 , 2);

Servo objOschi_1;

// set pin numbers:

const int OSCI_1 = 46;
const int SET = 32;
const int PIU = 33;
const int MENO = 34;
const int CONF = 35;

// variables will change:
int StatoBottone=0;
int val;
int posizione = 10;
int Numero_Pompa = 1;
int Angolazione_min = 1;
int Angolazione_max = 360;

char buffer[11];

boolean Sommo = true;

void setup() { 
 
 
  objOschi_1.attach(OSCI_1);
 
  pinMode(SET, INPUT );
  pinMode(PIU, INPUT);
  pinMode(CONF, INPUT);
//  attachInterrupt(0, SettingMode, RISING );
  InitLcd();
  Serial.begin(9600);
}

void loop() {
 
  if (digitalRead(SET) == HIGH) { SettingMode(); } ;
 
  objOschi_1.write(posizione);
 
  if (Sommo){
   
    posizione++;
   
    if (posizione >=Angolazione_max) { Sommo=false; } ;   
  }
  else {
   
   posizione--;     
   if (posizione <=Angolazione_min) { Sommo=true; } ;
  }
 
  delay(15);
 
};
   
void InitLcd() {
 
  objLcd.begin(16, 2);
 
  objLcd.print("Connecting ...");
 
  delay(1500);
 
  objLcd.clear();
  objLcd.setCursor(0, 0);
  objLcd.print("OsciMotion Italy");
 
}

void SettingMode()
{
 
  boolean setMode = true;
  boolean setNotConfirmPompa = true;
  boolean setNotConfirmAngoloMin = true;
  boolean setNotConfirmAngoloMax = true;
  int setModeLevel = 0;
  int AngoloMin = Angolazione_min;
  int AngoloMax = Angolazione_max;
 
  Numero_Pompa=1;
   
  while ( setMode )
  {

    if ( setModeLevel == 0 )
    {       
     
      sprintf(buffer, "Pompa N. %d", Numero_Pompa);

      objLcd.clear();
      objLcd.setCursor(0, 0);     
      objLcd.print("Scegliere Pompa");
      objLcd.setCursor(0, 1);     
      objLcd.print(buffer);
     
      delay(15);
     
      while ( setNotConfirmPompa )
        {
          if (digitalRead(PIU) == HIGH)
          {
            Numero_Pompa++ ;
           
            if (Numero_Pompa > 5) {Numero_Pompa=1;};
           
            sprintf(buffer, "Pompa N. %d", Numero_Pompa);
           
            objLcd.setCursor(0, 1);
            objLcd.print(buffer);
           
            delay(400);
          } 
         
          if (digitalRead(MENO) == HIGH)
          {
            Numero_Pompa-- ;
           
            if (Numero_Pompa < 1) {Numero_Pompa=5;};
           
            sprintf(buffer, "Pompa N. %d", Numero_Pompa);
           
            objLcd.setCursor(0, 1);
            objLcd.print(buffer);
           
            delay(400);
           } 
           
          if (digitalRead(CONF) == HIGH)
          {
            setModeLevel++;
           
            setNotConfirmPompa=false;
           
            delay(200);
           }   
        }
    }   
   
    if ( setModeLevel == 1 )
    {       
     
      sprintf(buffer, "Angolo %d", AngoloMin);

      objLcd.clear();
      objLcd.setCursor(0, 0);     
      objLcd.print("Angolo Minimo");
      objLcd.setCursor(0, 1);     
      objLcd.print(buffer);
     
      objOschi_1.write(AngoloMin);
 
      delay(15);
     
      while (setNotConfirmAngoloMin)
        {
          if (digitalRead(PIU) == HIGH)
          {
            AngoloMin++ ;
           
            if (AngoloMin > 170) {AngoloMin=1;};
           
            sprintf(buffer, "Angolo %d", AngoloMin);
           
            objLcd.clear();
            objLcd.setCursor(0, 0);     
            objLcd.print("Angolo Minimo");
            objLcd.setCursor(0, 1);     
            objLcd.print(buffer);
           
            objOschi_1.write(AngoloMin);
           
            delay(250);
           } 
         
          if (digitalRead(MENO) == HIGH)
          {
            AngoloMin--;
           
            if (AngoloMin < 1) {AngoloMin=170;};
           
            sprintf(buffer, "Angolo %d", AngoloMin);
           
            objLcd.clear();
            objLcd.setCursor(0, 0);     
            objLcd.print("Angolo Minimo");
            objLcd.setCursor(0, 1);     
            objLcd.print(buffer);
     
            objOschi_1.write(AngoloMin);
           
            delay(250);
           }
           
          if (digitalRead(CONF) == HIGH)
          {
            setModeLevel++;
           
            setNotConfirmAngoloMin=false;
           
            Angolazione_min=AngoloMin;
            posizione=AngoloMin;
           
            Sommo = true;
           
            delay(200);
           }   
        }
    }
   
    if ( setModeLevel == 2 )
    {       
     
      sprintf(buffer, "Angolo %d", AngoloMax);

      objLcd.clear();
      objLcd.setCursor(0, 0);     
      objLcd.print("Angolo Massimo");
      objLcd.setCursor(0, 1);     
      objLcd.print(buffer);
     
      objOschi_1.write(AngoloMax);
 
      delay(15);
     
      while (setNotConfirmAngoloMax)
        {
          if (digitalRead(PIU) == HIGH)
          {
            AngoloMax++ ;
           
            if (AngoloMax > 360) {AngoloMax=1;};
           
            sprintf(buffer, "Angolo %d", AngoloMax);
           
            objLcd.clear();
            objLcd.setCursor(0, 0);     
            objLcd.print("Angolo Massimo");
            objLcd.setCursor(0, 1);     
            objLcd.print(buffer);
           
            objOschi_1.write(AngoloMax);
           
            delay(250);
           } 
         
          if (digitalRead(MENO) == HIGH)
          {
            AngoloMax--;
           
            if (AngoloMax < 1) {AngoloMax=1;};
           
            sprintf(buffer, "Angolo %d", AngoloMax);
           
            objLcd.clear();
            objLcd.setCursor(0, 0);     
            objLcd.print("Angolo Massimo");
            objLcd.setCursor(0, 1);     
            objLcd.print(buffer);
     
            objOschi_1.write(AngoloMax);
           
            delay(250);
           }
           
          if (digitalRead(CONF) == HIGH)
          {
            setModeLevel++;
           
            setNotConfirmAngoloMax=false;
           
            Angolazione_max=AngoloMax;
            posizione=AngoloMax;
           
            Sommo = false;
           
            delay(200);
           }   
        }
    }
   
    if ( setModeLevel == 3 ) {
     
      objLcd.clear();
      objLcd.setCursor(0, 0);
      objLcd.print("Saving ...");
     
      delay(600);   
     
      objLcd.clear();
      objLcd.setCursor(0, 0);
      objLcd.print("OsciMotion Italy");   
     
      setMode = false;
     
    }
   
  }
 
  delay(600);
 
}

Come vedi ho dei valori iniziali ed il servo fa da valore minimo a valore massimo poi successivamente da valore massimo a minimo ...

Se premo il tasto Setting posso impostare il valore minimo attraverso i bottoni più e meno (man mano che premo vedo il servo che si muove) ... stessa cosa per valore massimo ...

come posso trasformare il valore posizione 1 in microseconds ?

il mio servo dovrebbe fare al max 360° mentre il servo gira 3,5 volte ...

please help
7  International / Software / Re: libreria servo.h con servo hitec hs-785hb on: February 06, 2013, 08:49:04 am
Non riesco a capire come possa utilizzare la map ... Io in input ho gradi min e gradi Max ed il servo deve costantemente ruotare prima a destra e poi a sinistra di un grado alla volta ...

Con writeMicroseconds peggio di prima .....
8  International / Software / Re: libreria servo.h con servo hitec hs-785hb on: February 06, 2013, 06:09:52 am
Il problema che ho già sviluppato tutta la parte di programmazione per gestire angolo min e angolo Max ... Come faccio sommo 500 al valore ?
9  International / Software / libreria servo.h con servo hitec hs-785hb on: February 05, 2013, 07:03:11 pm
Ciao a tutti,
oggi mi sono arrivati due servo della hitec hs-785hb possono ruotare fino a 3,5 giri ...

il mio problema è che con la libreria servo.h non riesco a farli funzionare ... sbarellano proprio ... potete darmi una mano? qualcuno ha già risolto questo problema?

ciao
10  International / Software / Re: rs422 full duplex on: February 05, 2013, 08:16:16 am
ok mi hai convinto ... can ... :-) ... questa sera vedo di capire il funzionamento delle librerie ... se ho problemi mi puoi dare una mano?

grazie e ciao
11  International / Software / Re: rs422 full duplex on: February 05, 2013, 08:00:26 am
Ci sono tre differenti tipi di dispositivo ZigBee:

Gli Xbee consentono di utilizzare reti con più coordinatori, estendono le possibilità del protocollo Zigbee e non sono dei moduli Zigbee generici.




quindi alla fine che cosa mi consiglieresti tu tra il can e zigbee (con l'utilizzo degli xbee) ... forse il can è più economico ...
12  International / Software / Re: rs422 full duplex on: February 05, 2013, 07:44:23 am

Per il CAN ti conviene iniziare dal topic messo in evidenza sul blog di Arduino che ti avevo linkato http://arduino.cc/forum/index.php/topic,8730.0.html, li trovi anche le librerie, se opti per l'utilizzo della coppia MCP2515 (controller) e MCP2551(transceiver) praticamente hai il 95% del carico di lavoro svolto dal 2515, che in realtà è un micro preprogrammato per gestire il protocollo CAN.
Come puoi vedere nella foto del topic che ti ho linkato i due IC esistono anche in formato pdip il che ti semplifica molto la loro integrazione su una tua shield se non vuoi "combattere" con gli SMD.


provo a dargli un'occhiata anche se l'inglese lo mastico mooolto poco :-(
13  International / Software / Re: rs422 full duplex on: February 05, 2013, 07:43:08 am

Il coordinatore è uno, ma anche più di uno, dei moduli Xbee in rete, serve per gestire le comunicazioni tra i moduli.
In pratica un mesh network Xbee è composto da almeno due moduli Xbee serie 2, uno è il coordinatore e l'altro un router, puoi inserire molti altri router e altri coordinatori nella rete, tutti i moduli Xbee possono parlare tra di loro e ricevere comunicazioni broadcast, cioè quello che viene trasmesso da uno arriva a tutti gli altri.


Cercando su wiki:

Ci sono tre differenti tipi di dispositivo ZigBee:

-ZigBee Coordinator (ZC): è il dispositivo più "intelligente" tra quelli disponibili, costituisce la radice di una rete ZigBee e può operare da ponte tra più reti. Ci può essere un solo Coordinator in ogni rete. Esso è inoltre in grado di memorizzare informazioni riguardo alla sua rete e può agire come deposito per le chiavi di sicurezza.

-ZigBee Router (ZR): questi dispositivi agiscono come router intermedi passando i dati da e verso altri dispositivi.

-ZigBee End Device (ZED): includono solo le funzionalità minime per dialogare con il suo nodo parente (Coordinator o Router), non possono trasmettere dati provenienti da altri dispositivi; sono i nodi che richiedono il minor quantitativo di memoria e quindi risultano spesso più economici rispetto ai ZR o ai ZC.
14  International / Software / Re: rs422 full duplex on: February 05, 2013, 07:32:06 am
no intendo piano di casa :-)

conta che la vasca tecnica oltre a contenere l'attrezzatura deve anche contenere l'eventuale acqua che scende in caso di black out ... conosco persone che hanno acquari di 1000/1500 litri :-)

vi sto facendo un corso accellerato sull'acquario di barriera :-)
15  International / Software / Re: rs422 full duplex on: February 05, 2013, 06:56:10 am
allora ragazzi ...

i2c non è possibile in quanto l'attrezzatura tante volte si trova anche a molti metri di distanza ... vi spiego meglio ... l'acquario marino ha bisogno (solitamente) di tre vasche:
1) Acquario
2) Vasca tecnica (dove vengono allogiate le attrezzature)
3) Vasca di Ripristino acqua evaporata

Molti malati (nel buon senso della parola) hanno l'Acquario al piano di sopra e la vasca tecnica al piano di sotto ...

Riguardo agli Xbee cercando in rete mi è sembrato che anche qui serve per forza un coordinatore ma in questo sistema potrebbe non esserci (dipende se uno compra tutto il sistema subito) ...

:-)
Pages: [1] 2