Se afișează postările cu eticheta telecomanda. Afișați toate postările
Se afișează postările cu eticheta telecomanda. Afișați toate postările

sâmbătă, 16 februarie 2019

Sistem de comanda radio pentru directie si turatie motor de curent continuu

    In articolele precedente (Sistem simplu de comanda la distanta rotire 2 motoare in ambele sensuri si Scurta prezentare si testare a unui modul de comanda motoare cu L298) m-am "jucat" fara a folosi o placa de dezvoltare Arduino, dar modul de comanda e limitat la stanga/drepata la viteza maxima. Pentru a controla viteza trebuie sa folosim modul PWM (factor de umplere variabil) si, cel mai usor, cel putin pentru mine, este sa folosesc o placa Arduino.
    Schema initiala de comanda era
Eu am testat doar un motoras de curent continuu, asa ca tot pentru asta voi face testele...
   In prima faza am conectat la o placa Arduino Nano (asta era la indemana, dar se pot folosi majoritatea placilor de dezvoltare) la receptor, conectand cele 4 iesiri ale receptorului la placa Arduino (D2, D3, D4, D5) si testand modul de functionare, iesirile A sa aprinda un led la intensitatea reglata, respectiv B pentru a aprinde alt led la intensitatea reglata, iesirea C comanda scaderea intensitatii, iar D cresterea acesteaia, dupa cum se vede in filmuletele;
Sistem de comanda radio pentru directie si turatie motor de curent continuu
DC motor remote control for direction and speeed\
   Am conectat si alimentatorul stabilizat reglabil la 5V, driver-ul cu L298 si motorasul cu reductor si am mai facut 2 filmulete:
Sistem de comanda radio pentru directie si turatie motor de curent continuu (2)
DC motor remote control for direction and speeed (2)
    Programul folosit se numeste slider_0.ino si poate fi testat fara probleme... din el reies si conexiunile dintre placa Arduino si receptor; curand voi posta si schema de conexiuni...

vineri, 10 ianuarie 2014

Telecomanda infrarosu HX1838

   Am achizitionat un sistem de telecomanda prin infrarosu (ca orice telecomanda clasica) de pe ebay, care arata cam asa:
   Am cautat pe net si am dat exista articolul numit Infrared (IR) Remote, unde gasim destule date sa facem un prim test, mai ales ca ne prezinta receptorul de infrarosu.
   In interiorul articolului este era un capitolas chiar despre acest model de telecomanda "car mp3", incluzand si un sketch:
/* YourDuino.com Example Software Sketch
 IR Remote Kit Test
 Uses YourDuino.com IR Infrared Remote Control Kit 2
 http://arduino-direct.com/sunshop/index.php?l=product_detail&p=153
 based on code by Ken Shirriff - http://arcfn.com
 Get Library at: https://github.com/shirriff/Arduino-IRremote
 Unzip folder into Libraries. RENAME folder IRremote
 terry@yourduino.com */

/*-----( Import needed libraries )-----*/

#include "IRremote.h"

/*-----( Declare Constants )-----*/
int receiver = 11; // pin 1 of IR receiver to Arduino digital pin 11

/*-----( Declare objects )-----*/
IRrecv irrecv(receiver);           // create instance of 'irrecv'
decode_results results;            // create instance of 'decode_results'
/*-----( Declare Variables )-----*/


void setup()   /*----( SETUP: RUNS ONCE )----*/
{
  Serial.begin(9600);
  Serial.println("IR Receiver Raw Data + Button Decode Test");
  irrecv.enableIRIn(); // Start the receiver

}/*--(end setup )---*/


void loop()   /*----( LOOP: RUNS CONSTANTLY )----*/
{
  if (irrecv.decode(&results)) // have we received an IR signal?

  {
//    Serial.println(results.value, HEX);  UN Comment to see raw values
    translateIR(); 
    irrecv.resume(); // receive the next value
  }  
}/* --(end main loop )-- */

/*-----( Declare User-written Functions )-----*/
void translateIR() // takes action based on IR code received

// describing Car MP3 IR codes 

{

  switch(results.value)

  {

  case 0xFFA25D:  
    Serial.println(" CH-            "); 
    break;

  case 0xFF629D:  
    Serial.println(" CH             "); 
    break;

  case 0xFFE21D:  
    Serial.println(" CH+            "); 
    break;

  case 0xFF22DD:  
    Serial.println(" PREV           "); 
    break;

  case 0xFF02FD:  
    Serial.println(" NEXT           "); 
    break;

  case 0xFFC23D:  
    Serial.println(" PLAY/PAUSE     "); 
    break;

  case 0xFFE01F:  
    Serial.println(" VOL-           "); 
    break;

  case 0xFFA857:  
    Serial.println(" VOL+           "); 
    break;

  case 0xFF906F:  
    Serial.println(" EQ             "); 
    break;

  case 0xFF6897:  
    Serial.println(" 0              "); 
    break;

  case 0xFF9867:  
    Serial.println(" 100+           "); 
    break;

  case 0xFFB04F:  
    Serial.println(" 200+           "); 
    break;

  case 0xFF30CF:  
    Serial.println(" 1              "); 
    break;

  case 0xFF18E7:  
    Serial.println(" 2              "); 
    break;

  case 0xFF7A85:  
    Serial.println(" 3              "); 
    break;

  case 0xFF10EF:  
    Serial.println(" 4              "); 
    break;

  case 0xFF38C7:  
    Serial.println(" 5              "); 
    break;

  case 0xFF5AA5:  
    Serial.println(" 6              "); 
    break;

  case 0xFF42BD:  
    Serial.println(" 7              "); 
    break;

  case 0xFF4AB5:  
    Serial.println(" 8              "); 
    break;

  case 0xFF52AD:  
    Serial.println(" 9              "); 
    break;

  default: 
    Serial.println(" other button   ");

  }

  delay(500);

} //END translateIR

/* ( THE END ) */
   Pe ecran am obtinut:
    Am apelat si la alt articol, numit IRremote Library de pe http://www.pjrc.com/, unde ma gasit un alt sketch simplu, care identifica tipul de codare.
   Acest sketch este:
#include <IRremote.h>

const int RECV_PIN = 6;

IRrecv irrecv(RECV_PIN);

decode_results results;

void setup()
{
  Serial.begin(9600);
  irrecv.enableIRIn(); // Start the receiver
  irrecv.blink13(true);
}

void loop() {
  if (irrecv.decode(&results)) {
    if (results.decode_type == NEC) {
      Serial.print("NEC: ");
    } else if (results.decode_type == SONY) {
      Serial.print("SONY: ");
    } else if (results.decode_type == RC5) {
      Serial.print("RC5: ");
    } else if (results.decode_type == RC6) {
      Serial.print("RC6: ");
    } else if (results.decode_type == UNKNOWN) {
      Serial.print("UNKNOWN: ");
    }
    Serial.println(results.value, HEX);
    irrecv.resume(); // Receive the next value
  }
}

   Pe ecran am obtinut:
   Se observa ca apare tipul ca fiind NEC si, pe langa codurile receptionate corect, apar si erori "FFFFFFFF", mai ales daca tin apasat un buton mai mult, deci sunt sanse mari sa fie de vina bateria, pe care am achizitionat-o separat:
 
 
 
 
    Montajul arata asa:
   Am modificat sketch-ul, cu senzorul de infrarosu la pinul 11, iar la pinii 6, 9 si 5 sunt conectate LED-urile rosu, verde si albastru dintr-un LED multicolor (RGB) cu catod comun prin rezistente de 180, 100, respectiv 100 ohmi.
  Schema este:


  Starile LED-ului vor fi asa:
- apas 0, se sting toate LED-urile indiferent de starea anterioara;
- apas 1, se aprinde LER-ul albastru la maxim;
- apas 2, se aprinde LED-ul verde la maxim;
- apas 3, se aprinde LED-ul rosu la maxim;
- apas 4, se aprinde LED-ul albastru la jumatate;
- apas 5, se aprinde LED-ul verde la jumatate;
- apas 6, se aprinde LED-ul rosu la jumatate;
- apas 7, se stinge LED-ul albastru;
- apas 8, se stinge LED-ul verde;
- apas 9, se stinge LED-ul rosu.
  Sketch-ul este:
/* adapted sketch by niq_ro from http://www.tehnic.go.ro
and http://nicuflorica.blogspot.com/

/* YourDuino.com Example Software Sketch
 IR Remote Kit Test
 Uses YourDuino.com IR Infrared Remote Control Kit 2
 http://arduino-direct.com/sunshop/index.php?l=product_detail&p=153
 based on code by Ken Shirriff - http://arcfn.com
 Get Library at: https://github.com/shirriff/Arduino-IRremote
 Unzip folder into Libraries. RENAME folder IRremote
 terry@yourduino.com */

/*-----( Import needed libraries )-----*/

#include "IRremote.h"

/*-----( Declare Constants )-----*/
int receiver = 11; // pin 1 of IR receiver to Arduino digital pin 11

/*-----( Declare objects )-----*/
IRrecv irrecv(receiver);           // create instance of 'irrecv'
decode_results results;            // create instance of 'decode_results'
/*-----( Declare Variables )-----*/

// other  
int ledr = 6; //pin for red LED
int leda = 5; //pin for blue LED
int ledv = 9; //pin for green LED


void setup()   /*----( SETUP: RUNS ONCE )----*/
{
  Serial.begin(9600);
  Serial.println("IR Receiver Raw Data + Button Decode Test");
  Serial.println("0 = all off");
  Serial.println("1 = blue LED is 100%");
  Serial.println("2 = green LED is 100%");
  Serial.println("3 = red LED is 100%");
  Serial.println("4 = blue LED is 50%");
  Serial.println("5 = green LED is 50%");
  Serial.println("6 = red LED is 50%");
  Serial.println("7 = blue LED is off");
  Serial.println("8 = green LED is off");
  Serial.println("9 = red LED is off");
  Serial.println("---------------------------------------------");
 
  
  irrecv.enableIRIn(); // Start the receiver

// initial state for LEds
analogWrite(ledr, 0); 
analogWrite(leda, 0); 
analogWrite(ledv, 0); 

}/*--(end setup )---*/


void loop()   /*----( LOOP: RUNS CONSTANTLY )----*/
{
  if (irrecv.decode(&results)) // have we received an IR signal?

  {
//    Serial.println(results.value, HEX);  UN Comment to see raw values
    translateIR(); 
    irrecv.resume(); // receive the next value
  }  
}/* --(end main loop )-- */

/*-----( Declare User-written Functions )-----*/
void translateIR() // takes action based on IR code received

// describing Car MP3 IR codes 

{

  switch(results.value)

  {

  case 0xFFA25D:  
    Serial.println(" CH-            "); 
    break;

  case 0xFF629D:  
    Serial.println(" CH             "); 
    break;

  case 0xFFE21D:  
    Serial.println(" CH+            "); 
    break;

  case 0xFF22DD:  
    Serial.println(" PREV           "); 
    break;

  case 0xFF02FD:  
    Serial.println(" NEXT           "); 
    break;

  case 0xFFC23D:  
    Serial.println(" PLAY/PAUSE     "); 
    break;

  case 0xFFE01F:  
    Serial.println(" VOL-           "); 
    break;

  case 0xFFA857:  
    Serial.println(" VOL+           "); 
    break;

  case 0xFF906F:  
    Serial.println(" EQ             "); 
    break;

  case 0xFF6897:  
    {
    Serial.println(" 0              "); 
    analogWrite(ledr, 0); 
    analogWrite(leda, 0); 
    analogWrite(ledv, 0); 
    }
    break;

  case 0xFF9867:  
    Serial.println(" 100+           "); 
    break;

  case 0xFFB04F:  
    Serial.println(" 200+           "); 
    break;

  case 0xFF30CF:  
    {
    Serial.println(" 1              "); 
    analogWrite(leda, 255);
    }
    break;

  case 0xFF18E7:  
    {  
    Serial.println(" 2              "); 
    analogWrite(ledv, 255);
    }
    break;

  case 0xFF7A85:  
    {
    Serial.println(" 3              "); 
    analogWrite(ledr, 255);
    }
    break;

  case 0xFF10EF:  
    {
    Serial.println(" 4              "); 
    analogWrite(leda, 122);
    }
    break;

  case 0xFF38C7:  
    {
    Serial.println(" 5              "); 
    analogWrite(ledv, 122);
    }
    break;

  case 0xFF5AA5:  
    {
    Serial.println(" 6              "); 
    analogWrite(ledr, 122);
    }
    break;

  case 0xFF42BD:  
    {
    Serial.println(" 7              "); 
    analogWrite(leda, 0);
    }
    break;

  case 0xFF4AB5:  
    {
    Serial.println(" 8              "); 
    analogWrite(ledv, 0);
    }
    break;

  case 0xFF52AD:  
    {
    Serial.println(" 9              "); 
    analogWrite(ledr, 0);
    }
    break;

  default: 
    Serial.println(" other button   ");

  }

  delay(500);

} //END translateIR

/* ( THE END ) */

   Din pacate, bateria achizionata a fost consumata/veche, asa ca si-a dat duhul:
.. asa ca o sa revin cu testele si un filmulet cand o sa iau alta baterie !

PS: Dupa o pauza, si-a mai revenit bateria si am putut sa fac 2 filmulete:
aprinderea unui led multicolor cu o telecomanda de mp3 player
control RBG LED with MP3 player IR remote