• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Mój robot...
#1
Lightbulb 
Witajcie! Jako że ten dział jest jeszcze pusty postanowiłem wstawić tu swojego prostego robota. Robot powstał z przede wszystkim z nudów.. I kilku dość tanich części. Sterownik robota polutowałem sobie sam, z atmegą328 bo szkoda mi było arduina do tej zabawki. Tym niemniej jesli ktoś chce to wystarczy arduino nano, mostek h, odbiornik podczerwieni, najtańsze napędy (kosztowały po kilkanaście zł za sztukę). Uwaga jeśli ktoś zechce zrobić takiego samego robota potrzeba trochę wiedzy z elektroniki i troszkę z programowania w Arduino bo schemat niestety gdzieś mi się zgubił a i z pilotem będzie troszkę zabawy bo można zastosować dowolny. Napiszę więcej jeśli będzie zainteresowanie moim robotem.

Kod:
#include <IRLib.h>
#include <avr/wdt.h>
int RECV_PIN = 10;


IRrecv My_Receiver(RECV_PIN);
IRdecode My_Decoder;
IRdecodeHash My_Hash_Decoder;


#define L_PWM 6
#define R_PWM 5
#define L_MOTOR1 7
#define L_MOTOR2 8
#define R_MOTOR1 3
#define R_MOTOR2 2
#define stdby 4
uint8_t PWM_MAX =100;
int a=0;
long unsigned asygnal=0;
long unsigned stary_asygnal=0;
boolean jadzie = false;
long timer;
const long timeout = 8000;
uint8_t korekcja_w_prawo=12;
uint8_t korekcja_w_lewo=0;

volatile uint8_t speeed=5;
/*uwaga!!! sprawdĹĽ czy korekcja + PWM_MAX nie przekroczy
* wartosci 255
* bo licznik siÄ przekrÄci i bÄdzie dziwnie jechać!!!
*/

void setup() {

TCCR0B = TCCR0B & 0b11111000 | 0x01;  // to zwiÄksza czÄstotliwość pwm
//zeby nie piszczał
 
//  Serial.begin(9600);
 //Konfiguracja pinow od mostka H
 pinMode(L_PWM, OUTPUT);
 pinMode(R_PWM, OUTPUT);
 pinMode(R_MOTOR1, OUTPUT);
 pinMode(R_MOTOR2, OUTPUT);
 pinMode(L_MOTOR1, OUTPUT);
 pinMode(L_MOTOR2, OUTPUT);
//  pinMode(stdby, OUTPUT);
 digitalWrite(stdby, HIGH);

//  pinMode(ledPin, OUTPUT);
 
 My_Receiver.enableIRIn(); // Start the receiver

wdt_enable(WDTO_250MS);
}

//MOJE FUNKCJE DO KIERUNKU BO NIE PWM-DIR

void prawyPrzod(){
 digitalWrite(R_MOTOR1, LOW);
 digitalWrite(R_MOTOR2, HIGH);
}

void prawyTyl(){
 digitalWrite(R_MOTOR1, HIGH);
 digitalWrite(R_MOTOR2, LOW);
}

void prawyStop(){
 digitalWrite(R_MOTOR1, LOW);
 digitalWrite(R_MOTOR2, LOW);
}

void lewyPrzod(){
 digitalWrite(L_MOTOR1, LOW);
 digitalWrite(L_MOTOR2, HIGH);
}

void lewyTyl(){
 digitalWrite(L_MOTOR1, HIGH);
 digitalWrite(L_MOTOR2, LOW);
}

void lewyStop(){
 digitalWrite(L_MOTOR1, LOW);
 digitalWrite(L_MOTOR2, LOW);
}

void loop() {
wdt_reset();

 if(jadzie &&(millis() - timer>=timeout))
{
 prawyStop();
 lewyStop();
analogWrite(L_PWM,0);
analogWrite(R_PWM,0);
if(PWM_MAX>90)
{
 speeed=160;
}
else speeed=50;
 jadzie=false;
}
 if (My_Receiver.GetResults(&My_Decoder)) {//Puts results in My_Decoder
   My_Hash_Decoder.copyBuf(&My_Decoder);//copy the results to the hash decoder
   My_Hash_Decoder.decode();
       
   asygnal=(My_Hash_Decoder.hash); // Do something interesting with this value
   //delay(1000);
 
 switch( asygnal )
{
case 3303967769:
   prawyPrzod();
       lewyPrzod();
       analogWrite(R_PWM,speeed+korekcja_w_lewo);
       analogWrite(L_PWM,speeed+korekcja_w_prawo);
       
        if(speeed>=(PWM_MAX-20))
        {
         speeed=PWM_MAX;
        }
        else speeed+=20;
//        delay(3);
       timer=millis();
       jadzie=true;
   break;
 
case 1382971643:
   prawyTyl();
       lewyTyl();
       analogWrite(R_PWM,speeed+korekcja_w_lewo);
       analogWrite(L_PWM,speeed+korekcja_w_prawo);
       timer=millis();
       if(speeed>=(PWM_MAX-20))
        {
         speeed=PWM_MAX;
        }
        else speeed+=20;
//        delay(3);
       jadzie=true;
   break;
 
   //...
case 3124476853:  //zakrÄt w lewo
   prawyPrzod();
       lewyTyl();
      analogWrite(R_PWM,60+korekcja_w_lewo);
       analogWrite(L_PWM,60+korekcja_w_prawo);
       timer=millis();
       jadzie=true;
   break;

   case 2024647355: //zakrÄt w prawo
   prawyTyl();
       lewyPrzod();
      analogWrite(R_PWM,60+korekcja_w_lewo);
       analogWrite(L_PWM,60+korekcja_w_prawo);
       timer=millis();
       jadzie=true;
   break;


    case 1147213747:
     prawyStop();
       lewyStop();
      analogWrite(R_PWM,0);
       analogWrite(L_PWM,0);
       timer=millis();
//        jadzie=true;


case 1962229077:  //wolny zakrÄt w lewo
   prawyPrzod();
       lewyTyl();
      analogWrite(R_PWM,140+korekcja_w_lewo);
       analogWrite(L_PWM,140+korekcja_w_prawo);
       timer=millis();
    jadzie=true;
   break;

   
   case 634478837: //wolny zakrÄt w prawo
   prawyTyl();
       lewyPrzod();
      analogWrite(R_PWM,140+korekcja_w_lewo);
       analogWrite(L_PWM,140+korekcja_w_prawo);
       timer=millis();
       jadzie=true;
   break;

   case 3932544983: //wolny zakrÄt w prawo dwoma koĹ‚ami
//    prawyTyl();
       lewyPrzod();
//       analogWrite(R_PWM,160+korekcja_w_lewo);
       analogWrite(R_PWM,PWM_MAX);
       timer=millis();
       jadzie=true;
   break;

   case 4013764499: //wolny zakrÄt w lewo dwoma koĹ‚ami
       prawyPrzod();
//        lewyPrzod();
      analogWrite(L_PWM,PWM_MAX);
//        analogWrite(L_PWM,160+korekcja_w_prawo);
       timer=millis();
       jadzie=true;
   break;

    case 1214490363: //  pilot 1
     PWM_MAX=30;
   break;

    case 3156748341:   //pilot 2
    PWM_MAX=35;
   break;

    case 1615146455:   //pilot3
     PWM_MAX=45;
   break;

    case 2878395089: //pilot 4
    PWM_MAX=70;
   break;
   
    case  2684931703: //pilot 5
    PWM_MAX=90;
   break;
   
    case 1447363761: //pilot 6
    PWM_MAX=120;
   break;
   
    case 1303779347: //pilot 7
    PWM_MAX=150;
   break;
   
    case 2031809173: //pilot 8
    PWM_MAX=200;
   break;
   
    case 3662083799: //pilot 9
    PWM_MAX=200;
   break;

}
   

My_Receiver.resume();
}
}

   
   
   
 
Odpowiedź
#2
Po pierwsze nie robil by na ir, a na blutacza, po drugi nie pisz post pod postem.
[Obrazek: banerelektronika.jpg]



Jeśli pomogłem podziękuj punktem reputacji Wink
 
Odpowiedź
#3
A sorry nie zauważyłem że tu na forum można własne posty edytować, mój błąd. A o kim piszesz że by nie robił na ir? Ja zrobiłem na ir. Nie wiem tylko co to "blutacza", słyszałem jedynie o Bluetooth. Pozdrawiam.
 
Odpowiedź
#4
Nie kto tylko ja napisałem ze ja bym nie robił , dobrze słyszałeś napisałem zdrobniale tak na Bluetooth unas mówią sorki,
na pisałem z rozpędu.
[Obrazek: banerelektronika.jpg]



Jeśli pomogłem podziękuj punktem reputacji Wink
 
Odpowiedź
#5
Spoko, nie ma problemu. A robota wstawiłem w celach edukacyjnych ale jak widzę nikogo nie interesuje więc szkoda mojego czasu na opisywanie co i jak. A jest naprawdę banalnie prosty.
 
Odpowiedź
#6
Bardzo fajny robocik. Ja się dopiero uczę ale może też kiedyś takiego zbuduję.
 
Odpowiedź
#7
Robot jest ok .
[Obrazek: banerelektronika.jpg]



Jeśli pomogłem podziękuj punktem reputacji Wink
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości