Problema alimentazione moduli 433Mhz Car RC

Ciao a tutti ragazzi, ho un problema e spero vivamente di un vostro aiuto.
Il mio progetto si basa sulla creazione di un trasmettitore con i comandi di sterzo e di marcia, ed un ricevitore collocato su una macchinina che comandi un servo per lo sterzo ed un motore elettrico per la marcia.
Sono riuscito a far funzionare tutto, anche se cado molto sullo schema elettrico.
ho bisogno di usare tre alimentazioni per far funzionare tutto :astonished:

L'integrato in questione l293d
Il vero problema è dato dal modulo RF (http://www.enovaz.it/prodotto-147056/Kit-di-trasmissione-RF-a-433-MHz.aspx)

che se lo alimento in parallelo con una alimentazione usata o per il servo o per il motore dal momento che partono il modulo RF non manda più informazioni al micro.
Credo che si debba stabilizzare l'alimentazione del modulo inserendo dei condensatori, oppure nn so.
La mia domanda è appunto qual'è la soluzione per alimentare tutto con una sola batteria, se devo utilizzare dei condensatori, di che tipo, di che capacità?
Grazie in anticipo per la vostra disponibilità

Partendo dalla batteria a 12V puoi alimentare anche l'Arduino e, con uno Step-Down ... ricavarti anche i 5V senza dover avere necessariamente 3 batterie diverse ... quindi ... la risposta è che te ne basta una.

Guglielmo

Riporto di qua la tua domanda, visto che qui ho cominciato a risponderti ... e qui si continua ...

SteZ:
gpb01 se ho capito bene tu mi consiglieresti di inserire un step-down per ricavare i 5V, ma nn funzionerebbe perchè anche in questo caso dovrei collegare in parallelo alla batteria arduino, il modulo RF e il motore dc , appena il motore parte il modulo nn invia più niente , e poi i 5v mi servirebbero esclusivamente per alimentare il servo che misurato consuma intorno ai 25mA penso che il pin 5V di arduino sia abbastanza potente per alimentarlo

Non ho capito ... perché appena il motore parte il modulo no invia più nulla ??? :astonished: :astonished: :astonished:

L'assorbimento del servo lo devi misurare sotto sforzo e non a vuoto ... sicuro che assorba solo 25 mA .. mi sembra veramente poco ... :roll_eyes:

Guglielmo

si ma qui non ho finito di scrivere il topic e quindi non penso si capisca pene il mio problema

arriverà fino a 30ma, è un servo molto piccolo (5G)

Se devi aggiungere delle cose, basta che usi il bottone "Modify" in alto a destra di un post e puoi correggere/aggiungere ...
... quindi, se vuoi integrare il primo post .. puoi farlo !

Ok, se sono solo 30 mA ... allora lo puoi alimentare con i 5v di Arduino ... :slight_smile:

Quindi, con una sola batteria da 12v alimenti il motore e Arduino ... ovviamente deve essere una batteria di capacità adeguata all'assorbimento del motore :wink:

Guglielmo

fatto grazie :wink:

si si
be ora per far le prove, prima di comprare una batteria apposta per il funzionamento della macchinina sto usando una batteria al piombo da 12v 2,2ah

Ma il modulo radio ... non puoi alimentarlo anche lui con i 5v stabilizzati di Arduino ??? Vedo che può funzionare a 5V ... :roll_eyes:

Ed in ogni caso ... se ci sono sbalzi grossi di tensione tali da creare malfunzionamenti ... hai sottodimensionato la batteria ...

Guglielmo

Ho provato anche ad alimentare tramite arduino (5v) il modulo RF, ma anche in questo caso appena arduino riceveva il comando dal modulo RF di sterzare a destra, appena il servo partiva arduino non riceve più alcun dato dal modulo, dopo qualche secondo che il servo si era stabilizzato nella posizione indicata il modulo ricominciava a funziona regolarmente .
La soluzione a parer mio è quella di rendere stabile il più possibile la tensione d'ingresso del modulo RF.

Guarda che il problema potrebbe essere molto più subdolo ... a livello di gestione degli interrupt e di compatibilità di librerie tra la Servo e quella che usi per i moduli RF ...

Quali librerie usi ? Posta il codice ...

Guglielmo

si lo so che sia la libreria VirtualWire che quella Servo usano entrambe il timer 1 ma in questo sketch, per gestire il servo ho usato la libreria ServoTimer2

Posta il codice al buon Guglielmo, magari c'è qualche inprecisione. :wink:

Mmm ... pensandoci bene ... tu dici che :

... appena arduino riceveva il comando dal modulo RF di sterzare a destra, appena il servo partiva arduino non riceve più alcun dato dal modulo, dopo qualche secondo che il servo si era stabilizzato nella posizione indicata il modulo ricominciava a funziona regolarmente .

... ma dici anche che il servo assorbe solo 30 mA ... corrente che non può minimamente infastidire Arduino ... quindi ... se la cosa si verifica con quel piccolo servo ... è al 95% un problema di conflitti software ... :roll_eyes:

Guglielmo

No c'è problema :wink:

#include <VirtualWire.h>
#include <ServoTimer2.h>
ServoTimer2 myservo;  //dichiaro servo motore myservo
const int receive_pin = 11; // DATA del ricevitore sul PIN 2 di Arduino
int sterzoPos;
int Data[1];
const int dataBytes = sizeof(int);
byte msgLenght;
boolean pushVel1;
boolean pushVel2;
boolean pushRetro;

const int in1 = 4;
const int in2 = 5;
const int en1 = 6;

int vel1 = 100;
int vel2 = 160;
int nowPos = 35;

int valPot;
int sMotor;
int velMotor;
int index = 0;
int led;

void setup()
{
  pinMode(in1, OUTPUT);
  pinMode(in2, OUTPUT);
  pinMode(en1, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(11, INPUT);
  myservo.attach(3);   
  
  msgLenght = dataBytes;
  Serial.begin(9600);   
  Serial.print("ready");
  vw_set_rx_pin(receive_pin);
  vw_set_ptt_inverted(true);
  vw_setup(2000);
  vw_rx_start();
  

}  
  
void loop()
{
  
  if (vw_get_message((byte*)Data, &msgLenght)) // Non-blocking
  {  
    if(msgLenght == dataBytes)
    {
      led = ~led;
      digitalWrite(13, led);
      pushVel1 = bitRead(Data[0], 12);    //velocità normale              APPLICAZIONE MASCHERE
      pushVel2 = bitRead(Data[0], 13);    //velocità aumentata
      pushRetro = bitRead(Data[0], 14);    //retro
      sterzoPos = Data[0] & 2047;
      Serial.print(pushVel1);
      Serial.print(" ");
      Serial.print(pushVel2);
      Serial.print(" ");
      Serial.print(pushRetro);
      Serial.print(" ");
      Serial.println(sterzoPos);
      myservo.write(sterzoPos);
      delay(10);
    }else{
      Serial.println("nn va bene la lunghezza");
    }
  }
  
  if((pushVel1 == 0) && (pushVel2 == 0)){
    analogWrite(en1, vel2);
    digitalWrite(in1, HIGH);
    digitalWrite(in2, LOW);
  }else if(pushVel1 == 0){
    analogWrite(en1, vel1);
    digitalWrite(in1, HIGH);
    digitalWrite(in2, LOW);
  }else if(pushRetro == 0){
    analogWrite(en1, vel1);
    digitalWrite(in1, LOW);
    digitalWrite(in2, HIGH);
  }else{
    analogWrite(en1, LOW);
    digitalWrite(in1, LOW);
    digitalWrite(in2, LOW);
  }
}

Alcune cose ...

  1. edita il tuo post e modifica il TAG .. il codice si racchiode nel tag CODE e non nel tag QUOTE (... lo so, è un buco del IDE, lo correggeranno prima o poi). Il tag giusto te lo mette il bottone # che vedi come terzultimo della seconda riga in edit :wink:

  2. vedo che per il debug usi la Serial.xxxx ... fai una cosa allora, stacca fisicamente il servo e verifica, aggiungendo delle Serial.print(), se il problema permane o meno ... così siamo sicuri che è un problema SW e non di correnti o quant'altro :wink:

  3. ovviamente fai la controprova .. lasciando dentro le Serial.print() aggiunte e riattaccando il servo .. vedi se cambia il comportamento :slight_smile:

Guglielmo

che figura... :roll_eyes: nel programma mi sono dimenticato di dichiarare i pin.
Farò sicuramente questa prova, nn so se può centrare ma io precedentemente avevo pure io eseguito varie prove tra cui staccare il cavo che collega il pin 3 con il servo, in quel caso il modulo funzionava regolarmente

Guglielmo ho eseguito la prova che mi chiedevi e il modulo funziona correttamente,
in oltre ho provato a collegare l'alimentazione del modulo RF alla batteria d 12v in parallelo con arduino, incredibilmente il problema si verifica ugualmente :fearful: anche se il blocco del trasferimento dei dati dura molto meno

Quindi ... senza servo fisicamente attaccato, tutto funziona, con il servo fisicamente collegato ... hai disturbi sulla trasmissione radio ... brutta cosa ... :roll_eyes:

Giusto per prova ... hai modo di alimentare Arduino e il modulo RF con un alimentatore (es. la connessione USB del computer), ed il servo con la batteria ... collegando solo il negativo della batteria con il GND di Arduino così da avere le masse in comune ... così proviamo anche la separazione delle alimentazioni ... :roll_eyes:

Guglielmo