HELP - arduino + 433Mhz FS100A + motor

chashitsu
Příspěvky: 6
Registrován: 12 kvě 2018, 21:30
Bydliště: Praha
Kontaktovat uživatele:

HELP - arduino + 433Mhz FS100A + motor

Příspěvek od chashitsu »

Zdravím,
prosím o pomoc, snažím se pro syna vyrobit vánoční dárek. Je to autíčko z merkuru, které má fungovat na dálkové ovládání.
Jako ovládání slouží kopie čínské arduino nano s FS1000A transmiterem a přijímač je Arduino + receiver + driver "1.5A Dual Channel DC Motor Driver Module PWM Speed Control MX1508".

Bezdrátová komunikace funguje, ale když se roztočí motor tak přijímač přestane přijímat. Zkoušel jsem už všechno možné, pokud odpojím driver a dám tam jen výpis do konzole tak je to ok, ale jinak zafunguje vždy jen první příkaz. Dokonce jsem si udělal i asynchroni blikani ledky na přijímači abych měl jistotu že cyklus pořád funguje. Zkoušel jsem taky místo napájení z usb použít 1.5A nabíječku od telefonu a chová se pořád stejně. :(

zdrojove kody:
master

Kód: Vybrat vše

/*
TRANSMITER
*/
// Include RadioHead Amplitude Shift Keying Library
#include <RH_ASK.h>

// Include dependant SPI Library 
#include <SPI.h> 

int Button1 = 2; 
int Button2 = 3; 

boolean A_1;
boolean A_2;
boolean B_1;
boolean B_2;

bool change = 0;
bool temp = 0;
uint8_t msg[1];

// Create Amplitude Shift Keying Object
RH_ASK rf_driver;

void setup() {
    Serial.begin(9600);
    pinMode(13,OUTPUT);    
    pinMode (Button1, INPUT);
    pinMode (Button2, INPUT);   
    rf_driver.init();
}
 
void loop()
{
  msg[0]=0; // reset message
  change = 0; // reset button flag

  // read buttons
  A_1 = !digitalRead(Button1);
  B_1 = !digitalRead(Button2);
      
    if (A_1){
      msg[0]+=1;      
      change=1;
      }
    if (B_1){
      msg[0]+=2;
      change=1;
      }
     
    if (!A_1 & !B_1)
    {
       msg[0]=255;
    }  
      
    if(change || temp){    
      digitalWrite(13,1); 
      
       rf_driver.send(msg, 1);
       rf_driver.waitPacketSent();      
       digitalWrite(13,0); 
      
      if(!change & temp)
      {
        temp=0;
      }else
      {
        temp=1;
      }
      delay(200);
    }
}
SLAVE

Kód: Vybrat vše


// Include RadioHead Amplitude Shift Keying Library
#include <RH_ASK.h>
// Include dependant SPI Library 
#include <SPI.h> 


// Create Amplitude Shift Keying Object
RH_ASK rf_driver;

int motorA_1 = 7;
int motorA_2 = 6;
int motorB_1 = 5;
int motorB_2 = 9;

char out = 0;

 int foo = 1000;
 bool ledState = 0;
// You can add more tones but i added 14. Just fill in what tone you would like to use, @ void loop you see " tone(Buzzer, tones[12]); " below,  digitalWrite(Buzzer, HIGH);
// here you can change the tones by filling in a number between 1 and 14

void setup()
{
    Serial.begin(9600); //we wanna be able to read what we got
    
    // Initialize ASK Object
    rf_driver.init();
    
    pinMode(13, OUTPUT);
    pinMode (motorA_1, OUTPUT);
    pinMode (motorA_2, OUTPUT);
    pinMode (motorB_1, OUTPUT);
    pinMode (motorB_2, OUTPUT); 

    digitalWrite (motorA_1, LOW);
    digitalWrite (motorA_2, LOW);
    digitalWrite (motorB_1, LOW);
    digitalWrite (motorB_2, LOW); 

    //digitalWrite (motorA_1, HIGH);
    //delay(599);
    //digitalWrite (motorA_1, LOW);     
}
    
    void loop()
{
    if(millis()>foo)
    {
       foo = millis()+1000;
       ledState=!ledState;
       digitalWrite(13,ledState);
    }
  
    uint8_t buf[1];
    uint8_t buflen =1;
    buf[0]=0;
 
    if (rf_driver.recv(buf, &buflen)) // if we get a message that we recognize on this buffer...
    {
      out = 0;       
     // digitalWrite(13, HIGH);
      //out =(char)buf[0]; // fill the string with the data received        
      digitalWrite(13,0);  //transmission ended
      Serial.println("received:");
      Serial.print(buf[0]);
   }
   
   if(buf[0] == 255){
      stopAll();
      out = 0;
      }
      
   if(buf[0] == 1){
      digitalWrite(motorA_1, 1);      
      Serial.println("write 1");
      out = 0;
      }
  if(buf[0] == 2){      
      digitalWrite (motorB_2, HIGH);
      Serial.println("write 2");
      out = 0;
      }
  if(buf[0] == 3){
      digitalWrite (motorA_1, 1);
      digitalWrite (motorB_1, 1);
      Serial.println("write 3");
      out = 0;
      }

      
}

void stopAll(){
    analogWrite(motorA_1, 0);
    analogWrite(motorA_2, 0);
    analogWrite(motorB_1, 0);
    analogWrite(motorB_2, 0); 
  }
Obrázek
Naposledy upravil(a) chashitsu dne 14 pro 2020, 22:28, celkem upraveno 1 x.
kolbaba71
Příspěvky: 466
Registrován: 12 říj 2013, 17:35
Bydliště: Praha
Kontaktovat uživatele:

Re: HELP - arduino + FS100A + MX1508

Příspěvek od kolbaba71 »

Z popisu mě přijde, že motor zaruší komunikaci.
Uživatelský avatar
jrt
Příspěvky: 1921
Registrován: 17 úno 2013, 17:13

Re: HELP - arduino + FS100A + MX1508

Příspěvek od jrt »

chashitsu píše: 13 pro 2020, 23:29 Zkoušel jsem už všechno možné
1. tohle by chtělo trochu rozvést
2. jaký máš motorek, jak je odrušen?
3. jak máš vyvedenu anténu?
4. co používáš za výkonové součástky (driver atd.)
jrt
chashitsu
Příspěvky: 6
Registrován: 12 kvě 2018, 21:30
Bydliště: Praha
Kontaktovat uživatele:

Re: HELP - arduino + FS100A + MX1508

Příspěvek od chashitsu »

2. O elektronice toho moc nevím, jak bych měl poznat jestli je motorek odrušený, případně jak ho odrušit? Motory mám 2 https://www.ebay.com/itm/Smart-Auto-Car ... 3743690988

3. Anténu nemám žádnou vyvedenou, používám tento modul https://www.ebay.com/itm/433-Mhz-Sender ... 2713874815

4. driver modul: https://www.ebay.com/itm/1-5A-Dual-Chan ... 620136524

Receiver je od motorku docela daleko, ještě jsem to neposkládal celé dohromady: https://photos.app.goo.gl/ijoxgM378j9P5Sao8
chashitsu
Příspěvky: 6
Registrován: 12 kvě 2018, 21:30
Bydliště: Praha
Kontaktovat uživatele:

Re: HELP - arduino + FS100A + MX1508

Příspěvek od chashitsu »

Ok, něco jsem k odrušování motorů našel, http://robodoupe.cz/2014/odrusovani-ste ... -motoru-i/ Můj motor má plastové čelo, ani jeden z kontaktů není spojen s kostrou motorku - pomůže když ho celý obalím alobalem a ten ukostřím?
Uživatelský avatar
Dex
Administrátor
Příspěvky: 1519
Registrován: 16 úno 2013, 14:26

Re: HELP - arduino + FS100A + MX1508

Příspěvek od Dex »

Dvě rychlé rady:

1) motůrek by měl dostat mezi ty dvě "pacičky" kam jsou k němu přiletované dráty keramický kondenzátor 100 nF
2) ten bezdrátový modul potřebuje anténu - stačí kus drátu dlouhý tuším 17 cm

PS: ten bezdrátový modul je pro dálkové ovládání autíčka nevhodný. Fungovat to nějak bude, ale legální to není a nebude.
"all your robots are belong to us"
robodoupe.cz
aladin
Příspěvky: 337
Registrován: 12 kvě 2013, 06:43

Re: HELP - arduino + FS100A + MX1508

Příspěvek od aladin »

můj klasický postup - odpojím motory a místo nich zapojím led s odporem a pokud to jde zapnu výstup na terminál a posílám data pro ovládání motorů. možné je použít emulaci seriáku
fischertip.cz, Stavebnice.com, MerkurRobot.cz, KlubTechniku.cz
Uživatelský avatar
jrt
Příspěvky: 1921
Registrován: 17 úno 2013, 17:13

Re: HELP - arduino + FS100A + MX1508

Příspěvek od jrt »

1. anténa: https://wolles-elektronikkiste.de/en/43 ... th-arduino
V rohu desky přijímače je na spoji očko, do kterého zapájej drát nebo lanko dlouhé 173 mm a zkus, zda se to nezlepší. Pokud ne, stejnou anténu připájej i k vysílači.
2. motory
Mezi vývody elektromotoru připájej keramický kondenzátor o přibližné hodnotě 100 nF (68 až 150 n taky vyhoví). Kontakty s kostrou motoru nespojuj, ale můžeš zkusit použít jako přívody k motoru stíněný kablík, stínění připájet na plechový obal motorku a druhý konec spojit se záporným pólem baterie (nebo jednodušeji na GND H-můstku).
3. napájení
Doufám, že H-můstky a motory napájíš přímo z baterie a pin GND Arduina máš spojen se záporným pólem.
jrt
aladin
Příspěvky: 337
Registrován: 12 kvě 2013, 06:43

Re: HELP - arduino + FS100A + MX1508

Příspěvek od aladin »

zatím jste mu neřekli, jestli je program ok.
pokud bude spolehlivě spínat a zhasínat Led, pak jsou na místě odrušení motorů a další opatření.
@chashitsu: co přesně znamená "asynchroni blikani ledky na přijímači " ? nemělo by se spíš vyzkoušet synchronní, ovládané z masteru?
srovnání driverů:
https://arduinodiy.wordpress.com/2019/1 ... ver-board/
fischertip.cz, Stavebnice.com, MerkurRobot.cz, KlubTechniku.cz
chashitsu
Příspěvky: 6
Registrován: 12 kvě 2018, 21:30
Bydliště: Praha
Kontaktovat uživatele:

Re: HELP - arduino + FS100A + MX1508

Příspěvek od chashitsu »

Děkuji všem za rady.
- Asynschroní blikání po sekundě jsem si udělal abych viděl že arduino žije.
- H můstek napájím zvlášť na vyznačené piny a arduino ze stejného zdroje na VIN a GND
- Keramické kondenzátory momentálně nemám u sebe abych mohl vyzkoušet.
- Antény jsem vyrobil z toho co jsem našel, položil jsem antény vedle sebe a - úspěch podařilo se přes ovladač spustit i zastavit motor. :idea:
- Nicméně signál je dost mizerny a i když mám antény těsně u sebe, tak se občas ztratí. Když jsem viděl že má tento modul přenášet signál až na několik stovek metrů, předpokládal jsem že 20 - 50m nebude problém. Dám vědět o kolik se to zlepší až si pořídím ty kondenzátory, zkusím i nějaké 22n mezi kontakty a plášť.

Jsem si vědom že 433MHz je povoleno používat jen na datové přenosy, předpokládám že autíčko bude provozováno pouze na chatě daleko od měst. Původně jsem chtěl použít bluetooth modul, ale podařilo se mě ho odpálit připojením na 5v :oops:
Odpovědět