Go Down

Topic: Cornering light (Read 411 times) previous topic - next topic

mac98

Buongiorno a tutti
Premetto che sono 3 anni che non uso Arduino
Dato il brutto periodo, quindi a casa,
Vorrei montare sulla Moto i faretti laterali ( fendinebbia)
Mi piacerebbe usarli con funzione cornering, ovvero si accendono ( dx o sx) in base all'angolo di piega
Ho un Arduino uno e un mega
Cosa potrei usare senza fare i calcoli della nasa
Potenziamento, giroscopio,....?
Grazie a tutti in anticipato
Saluti
Marco

fabpolli

Se parlassimo in linea teorica ti basterebbe il giroscopio, praticamente non puoi montarle sulla moto perché è vietato dal codice della strada qualsiasi modifica all'impianto elettrico/luminoso dei veicoli

mac98

#2
Mar 21, 2020, 01:29 am Last Edit: Mar 21, 2020, 02:37 am by mac98
Se parlassimo in linea teorica ti basterebbe il giroscopio, praticamente non puoi montarle sulla moto perché è vietato dal codice della strada qualsiasi modifica all'impianto elettrico/luminoso dei veicoli
Ok grazie
Si sono a conoscenza che sia vietato,
I giroscopi però sono in grado di fornire l'angolo di inclinazione oppure forniscono solo la velocità angolare?

Edit
Ad esempio questo potrebbe essere quello che mi necessita? Si riesce comunicare con Arduino?
WITMOTION HWT901B RS485

uwefed

Un dispositivo con RS485 puó essere collegato a Arduino ma altre soluzioni come SPI o I2C sono molto piú semplici.

Un giroscopio misura la velocitá  angolare di una rotazione normalmente in 3 assi.
Un accelerometro misura l'acelerazione terrestre normalmente in 3 assi.
Un magnetometro misura il campo magnetismo terrestre normalmente in 3 assi e puó indicare il polo N.

Ciao Uwe

mac98

#4
Apr 28, 2020, 04:20 pm Last Edit: Apr 28, 2020, 05:09 pm by mac98
Un dispositivo con RS485 puó essere collegato a Arduino ma altre soluzioni come SPI o I2C sono molto piú semplici.

Un giroscopio misura la velocitá  angolare di una rotazione normalmente in 3 assi.
Un accelerometro misura l'acelerazione terrestre normalmente in 3 assi.
Un magnetometro misura il campo magnetismo terrestre normalmente in 3 assi e puó indicare il polo N.

Ciao Uwe
grazie mille Uwe
ho preso il sensore di cui sopra, e il convertitore rs485 ttl.
ho fatto un po' di prove
se collego il convertitore in usb con programma del sensore lo leggo correttamente e funziona
il problema invece è quello della lettura della seriale...
imposto il convertitore sulla modalità ttl
compilo lo sckecht che mi ha fornito il produttore selezionando porte e baud ma non esce nulla sulla seriale
purtroppo sto cercando varie guide e libri di scuola ma di questo sckecht capisco davvero poco...

Code: [Select]

unsigned char Re_buf[11],counter=0;
unsigned char sign=0;
float a[3],w[3],angle[3],T;
void setup() {
 // initialize serial:
 Serial.begin(115200);
}

void loop() {
 if(sign)
 {  
    sign=0;
    if(Re_buf[0]==0x55)      
    {  
switch(Re_buf [1])
{
case 0x51:
a[0] = (short(Re_buf [3]<<8| Re_buf [2]))/32768.0*16;
a[1] = (short(Re_buf [5]<<8| Re_buf [4]))/32768.0*16;
a[2] = (short(Re_buf [7]<<8| Re_buf [6]))/32768.0*16;
T = (short(Re_buf [9]<<8| Re_buf [8]))/340.0+36.25;
break;
case 0x52:
w[0] = (short(Re_buf [3]<<8| Re_buf [2]))/32768.0*2000;
w[1] = (short(Re_buf [5]<<8| Re_buf [4]))/32768.0*2000;
w[2] = (short(Re_buf [7]<<8| Re_buf [6]))/32768.0*2000;
T = (short(Re_buf [9]<<8| Re_buf [8]))/340.0+36.25;
break;
case 0x53:
        angle[0] = (short(Re_buf [3]<<8| Re_buf [2]))/32768.0*180;
angle[1] = (short(Re_buf [5]<<8| Re_buf [4]))/32768.0*180;
angle[2] = (short(Re_buf [7]<<8| Re_buf [6]))/32768.0*180;
T = (short(Re_buf [9]<<8| Re_buf [8]))/340.0+36.25;
               Serial.print("a:");
               Serial.print(a[0]);Serial.print(" ");
               Serial.print(a[1]);Serial.print(" ");
               Serial.print(a[2]);Serial.print(" ");
               Serial.print("w:");
               Serial.print(w[0]);Serial.print(" ");
               Serial.print(w[1]);Serial.print(" ");
               Serial.print(a[2]);Serial.print(" ");
               Serial.print("angle:");
               Serial.print(angle[0]);Serial.print(" ");
               Serial.print(angle[1]);Serial.print(" ");
               Serial.print(angle[2]);Serial.print(" ");
               Serial.print("T:");
               Serial.println(T);
               break;
}
   }
 }
}

void serialEvent() {
 while (Serial.available()) {
   
   //char inChar = (char)Serial.read(); Serial.print(inChar); //Output Original Data, use this code
 
   Re_buf[counter]=(unsigned char)Serial.read();
   if(counter==0&&Re_buf[0]!=0x55) return;              
   counter++;      
   if(counter==11)            
   {    
      counter=0;              
      sign=1;
   }
     
 }
}

gpb01

#5
Apr 28, 2020, 04:46 pm Last Edit: Apr 28, 2020, 04:46 pm by gpb01
>mac98:   ti ricordo che in conformità al regolamento, punto 7, devi editare il tuo post qui sopra (quindi NON scrivendo un nuovo post, ma utilizzando il bottone More -> Modify che si trova in basso a destra del tuo post) e racchiudere il codice all'interno dei tag CODE (... sono quelli che in edit inserisce il bottone con icona fatta così: </>, tutto a sinistra).

In pratica, tutto il tuo codice dovrà trovarsi racchiuso tra due tag: [code] _il _tuo_ codice_ [/code] così da non venire interpretato e non dare adito alla formazione di caratteri indesiderati o cattiva formattazione del testo. Grazie.

Guglielmo

P.S.: Ti ricordo che, purtroppo, fino a quando non avrai sistemato il codice come richiesto, nessuno ti potrà rispondere, quindi ti consiglio di farlo al più presto. ;)
Search is Your friend ... or I am Your enemy !

mac98

#6
Apr 28, 2020, 05:10 pm Last Edit: Apr 28, 2020, 05:18 pm by gpb01
fatto mi scuso davvero
grazie mille

Go Up