interfacciare trasmettitore RF 433 con accelerometro 3 assi

salve a tutti :slight_smile: avrei bisogno del vostro aiuto e delle vostre conoscenze :smiley: in quanto io non sono così esperto di arduino :frowning:

il progetto era quello di mettere all’interno di una dado un accelerometro 3 assi in grado di far lampeggiare il led 13 in corrispondenza alla faccia che guarda verso l’alto il dado !!! cioè se per esempio la faccia superiore del dado è la numero 4, il led lampeggerà 4 volte e così via per le altre facce!!! fino a qui tutto bene… il mio adxl 345 l’ho collegato così : 5v = 5v
GND= GND
SCL=pin Analog5
SDA= Pin Analog4

tramite questa configurazione misuro l’acellerazione delle 3 assi, adesso volevo trasmettere i dati che TRASMETTONO i pin SDA e SLC tramite dei moduli RF 433 come questi :

quindi un trasmettitore per il pin sda ed sdl e il ricevitore sui pin analog4 e analog5!!! ho provato a collegarli ma non trasmettono niente e ne tanto meno ricevono!!!

a quanto pare non sono di quelli che si installano è funzionano, hanno bisogno di una libreria, il problema giunge qui!!!

io non ho capito come funziona la libreria =(

c’è qualche buon anima che mi potrebbe aiutare ? :slight_smile:

premetto che possiedo Arduino UNO!!!

per più precisione L’accelerometro va dentro al dado con i 2 trasmettitori e la batteria di alimentazione !!! i 2 ricevitori vanno collegati naturalmente ad arduino uno!!!

#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_ADXL345.h>

int tot1;
int tot2;
int tot3;
int tot4;
int tot5;
int tot6;
/* Assign a unique ID to this sensor at the same time */
Adafruit_ADXL345 accel = Adafruit_ADXL345(12345);

void displaySensorDetails(void)
{
  sensor_t sensor;
  accel.getSensor(&sensor);
  Serial.println("------------------------------------");
  Serial.print  ("Sensor:       "); Serial.println(sensor.name);
  Serial.print  ("Driver Ver:   "); Serial.println(sensor.version);
  Serial.print  ("Unique ID:    "); Serial.println(sensor.sensor_id);
  Serial.print  ("Max Value:    "); Serial.print(sensor.max_value); Serial.println(" m/s^2");
  Serial.print  ("Min Value:    "); Serial.print(sensor.min_value); Serial.println(" m/s^2");
  Serial.print  ("Resolution:   "); Serial.print(sensor.resolution); Serial.println(" m/s^2");  
  Serial.println("------------------------------------");
  Serial.println("");
  delay(500);
}

void displayDataRate(void)
{
  Serial.print  ("Data Rate:    "); 
  
  switch(accel.getDataRate())
  {
    case ADXL345_DATARATE_3200_HZ:
      Serial.print  ("3200 "); 
      break;
    case ADXL345_DATARATE_1600_HZ:
      Serial.print  ("1600 "); 
      break;
    case ADXL345_DATARATE_800_HZ:
      Serial.print  ("800 "); 
      break;
    case ADXL345_DATARATE_400_HZ:
      Serial.print  ("400 "); 
      break;
    case ADXL345_DATARATE_200_HZ:
      Serial.print  ("200 "); 
      break;
    case ADXL345_DATARATE_100_HZ:
      Serial.print  ("100 "); 
      break;
    case ADXL345_DATARATE_50_HZ:
      Serial.print  ("50 "); 
      break;
    case ADXL345_DATARATE_25_HZ:
      Serial.print  ("25 "); 
      break;
    case ADXL345_DATARATE_12_5_HZ:
      Serial.print  ("12.5 "); 
      break;
    case ADXL345_DATARATE_6_25HZ:
      Serial.print  ("6.25 "); 
      break;
    case ADXL345_DATARATE_3_13_HZ:
      Serial.print  ("3.13 "); 
      break;
    case ADXL345_DATARATE_1_56_HZ:
      Serial.print  ("1.56 "); 
      break;
    case ADXL345_DATARATE_0_78_HZ:
      Serial.print  ("0.78 "); 
      break;
    case ADXL345_DATARATE_0_39_HZ:
      Serial.print  ("0.39 "); 
      break;
    case ADXL345_DATARATE_0_20_HZ:
      Serial.print  ("0.20 "); 
      break;
    case ADXL345_DATARATE_0_10_HZ:
      Serial.print  ("0.10 "); 
      break;
    default:
      Serial.print  ("???? "); 
      break;
  }  
  Serial.println(" Hz");  
}

void displayRange(void)
{
  Serial.print  ("Range:         +/- "); 
  
  switch(accel.getRange())
  {
    case ADXL345_RANGE_16_G:
      Serial.print  ("16 "); 
      break;
    case ADXL345_RANGE_8_G:
      Serial.print  ("8 "); 
      break;
    case ADXL345_RANGE_4_G:
      Serial.print  ("4 "); 
      break;
    case ADXL345_RANGE_2_G:
      Serial.print  ("2 "); 
      break;
    default:
      Serial.print  ("?? "); 
      break;
  }  
  Serial.println(" g");  
}

void setup(void) 
{pinMode(13,OUTPUT);
  Serial.begin(9600);
  Serial.println("Accelerometer Test"); Serial.println("");
  
  /* Initialise the sensor */
  if(!accel.begin())
  {
    /* There was a problem detecting the ADXL345 ... check your connections */
    Serial.println("Ooops, no ADXL345 detected ... Check your wiring!");
    while(1);
  }
  
  /* Display some basic information on this sensor */
  displaySensorDetails();
  
  /* Display additional settings (outside the scope of sensor_t) */
  displayDataRate();
  displayRange();
  Serial.println("");
}

void loop(void) 
{
  /* Get a new sensor event */ 
  sensors_event_t event; 
  accel.getEvent(&event);
 
  /* Display the results (acceleration is measured in m/s^2) */
  Serial.print("X: "); Serial.print(event.acceleration.x); Serial.print("  ");
  Serial.print("Y: "); Serial.print(event.acceleration.y); Serial.print("  ");
  Serial.print("Z: "); Serial.print(event.acceleration.z); Serial.print("  ");Serial.println("m/s^2 ");
  delay(500);
  tot1= 10.60;
  tot2= -9.55;
  tot3= 9.85;
  tot4= -10;
  tot5=10;
  tot6= - 9.85;
  
      if(event.acceleration.x > tot5) {
          digitalWrite(13, HIGH); 
          delay(1000); 
          digitalWrite(13, LOW);
          delay(1000);
          digitalWrite(13, HIGH); 
          delay(1000); 
          digitalWrite(13, LOW);
          delay(1000);
          digitalWrite(13, HIGH); 
          delay(1000); 
          digitalWrite(13, LOW);
          delay(1000);
          digitalWrite(13, HIGH); 
          delay(1000); 
          digitalWrite(13, LOW);
          delay(1000);
          digitalWrite(13, HIGH); 
          delay(1000); 
          digitalWrite(13, LOW);
          delay(5000);}
       
     
   if(event.acceleration.z <tot4){
         digitalWrite(13,HIGH);
         delay(1000);
         digitalWrite(13,LOW);
         delay(1000);
         digitalWrite(13,HIGH);
         delay(1000);
         digitalWrite(13,LOW);
         delay(1000);
         digitalWrite(13,HIGH);
         delay(1000);
         digitalWrite(13,LOW);
         delay(1000);
         digitalWrite(13,HIGH);
         delay(1000);
         digitalWrite(13,LOW);
         delay(5000);}
         
          if(event.acceleration.z > tot3){
            digitalWrite(13,HIGH);
         delay(1000);
         digitalWrite(13,LOW);
         delay(1000);
         digitalWrite(13,HIGH);
         delay(1000);
         digitalWrite(13,LOW);
         delay(1000);
         digitalWrite(13,HIGH);
         delay(1000);
         digitalWrite(13,LOW);
         delay(5000);}
         
         if(event.acceleration.x < tot2){
           digitalWrite(13,HIGH);
         delay(1000);
         digitalWrite(13,LOW);
         delay(1000);
         digitalWrite(13,HIGH);
         delay(1000);
         digitalWrite(13,LOW);
         delay(5000);}
         
         if(event.acceleration.y > tot1){
           
            digitalWrite(13,HIGH);
         delay(1000);
         digitalWrite(13,LOW);
         delay(5000);}
         
         if(event.acceleration.y < tot6){
         digitalWrite(13, HIGH); 
          delay(1000); 
          digitalWrite(13, LOW);
          delay(1000);
          digitalWrite(13, HIGH); 
          delay(1000); 
          digitalWrite(13, LOW);
          delay(1000);
          digitalWrite(13, HIGH); 
          delay(1000); 
          digitalWrite(13, LOW);
          delay(1000);
          digitalWrite(13, HIGH); 
          delay(1000); 
          digitalWrite(13, LOW);
          delay(1000);
          digitalWrite(13, HIGH); 
          delay(1000); 
          digitalWrite(13, LOW);
          delay(1000);
          digitalWrite(13, HIGH); 
          delay(1000); 
          digitalWrite(13, LOW);
          delay(5000);
      }

}

Ho idea che così non funzionerà mai ...
... da quello che dici difatti stai cercando di remotizzare, con dei semplici moduletti RF, il protocollo SPI (o I2C).

Quei moduli purtroppo sono soggetti a disturbi, interferenze, ecc. ecc. e, lo scopo della libreria che si usa, è proprio quello di rendere affidabile una trasmissione SERIALE tramite quei moduli.

SPI (o I2C) ha tutti i segnali sincronizzati tra loro ... basta un non nulla perché i dati siano intrattabili.

L'unica soluzione che vedo è che colleghi il tuo accelerometro ad un ... arduino stand-alone che inserisci nel tuo "dado" e, tramite la seriale di questo stand-alone trasmetti i dati, usando la corretta libreria e la porta seriale, al tuo Arduino UNO che visualizzerà il risultato :wink:

Guglielmo

Quindi l'accelerometro deve essere collegato necessariamente ad arduino e i dati che arrivano all'accelerometro non possono essere trasmessi tramite moduli rf... ho capito allora penso che cambiero progetto!!! Grazie per le dritte :slight_smile: