Sabitler degişkenler

baba salih

Üye
Katılım
23 Mar 2008
Mesajlar
8
Puanları
1
Yaş
39
arkadaşlar merak ettigim ama çözemedigim sorunum şu dc bir motora hızlandıracagım ama bu hız 3 kademeli varacagı yere yaklaşınca hızının ½ 20 ye düşmesini istiyorum yolun bitimine yaklaşınca ½ 5 e düşecek nasıl bir yol takip etmemlazım.
 
Biraz detay vermelisin, hızı pwm ile mi ayarlayacaksın, yol bilgisi nasıl ölçülecek, ara ara sensör mü konulacak asansör gibi, yoksa motorun dönüş miktarı mı ölçülecek.
 
abicigim bu aslında cizgi isliyen robot videosunda gördüm ama kodlarını arkadaş yazmadıgından nasıl yapıldıgını merak ettim başlangıcta yumuşak kalkış yaptı sonra baya hızlı gitti viraşa yaklaştıgında hızını baya düşürdü döner dönmez son gazla devam etti cok hoşuma gitti bende bunu nasıl yaparım diye araştırıyorum fakat bu degişken hızları br formül olarak nasıl yapacagımı bulamadım sizin bir fikriniz varmı acaba
 
anladıgım kadarı ile pıd control uygulamalarını inceleyecegim her halde başka yardımcı olabilecek sayfa önerebilirmisin yönlendirdigin sayfadaki örnekte derleme hatası oluşuyor inceleyemedim ilgin için teşekkür ederim

// Kitaplığı kurduğunuzdan emin olun
#include <QTRSensors.h>
QTRSensors cyr ;
const uint8_t SensorCount = 8 ;
uint16_t sensorValues [ SensorCount ];

samandira Kp = 0 ; // sabitler değerini ayarlayın
samandira Ki = 0 ;
samandira Kd = 0 ;
int P ;
int I ;
int D ;

int lastError = 0 ;
boolean onoff = yanlis ;

// Maksimum hızı artırmak motorlara zarar verebilir - 255 değerinde 6V motorlar 7,4 V alır
const uint8_t maxspeeda = 150 ;
const uint8_t maxspeedb = 150 ;
const uint8_t basespeeda = 100 ;
const uint8_t basespeedb = 100 ;

// Sürücü motoru taşıyıcı pimlerini ayarlayın
int modu = 8 ;
int aphase = 9 ;
int aenbl = 6 ;
int bphase = 5 ;
int benbl = 3 ;

// Düğme pimlerini ayarlayın
int buttoncalibrate = 17 // pin A3
int buttonstart = 2;

void setup() {
Serial.begin(9600);
qtr.setTypeRC();
//Set up the sensor array pins
qtr.setSensorPins((const uint8_t[]){10, 11, 12, 14, 15, 16, 18, 19}, SensorCount);
qtr.setEmitterPin(7);//LEDON PIN

pinMode(mode, OUTPUT);
pinMode(aphase, OUTPUT);
pinMode(aenbl, OUTPUT);
pinMode(bphase, OUTPUT);
pinMode(benbl, OUTPUT);
digitalWrite(mode, HIGH);

delay(500);
pinMode(LED_BUILTIN, OUTPUT);

boolean Ok = false;
while (Ok == false) { //the loop won't start until the robot is calibrated
if(digitalRead(buttoncalibrate) == HIGH) {
calibration(); //calibrate the robot for 10 seconds
Ok = true;
}
}
forward_brake(0, 0);
}

void calibration() {
digitalWrite(LED_BUILTIN, HIGH);
for (uint16_t i = 0; i < 400; i++)
{
qtr.calibrate();
}
digitalWrite(LED_BUILTIN, LOW);
}

void loop() {
if(digitalRead(buttonstart) == HIGH) {
onoff =! onoff;
if(onoff = true) {
delay(1000);//a delay when the robot starts
}
else {
delay(50);
}
}
if (onoff == true) {
PID_control();
}
else {
forward_brake(0,0);
}
}
void forward_brake(int posa, int posb) {
//set the appropriate values for aphase and bphase so that the robot goes straight
digitalWrite(aphase, LOW);
digitalWrite(bphase, HIGH);
analogWrite(aenbl, posa);
analogWrite(benbl, posb);
}
void PID_control() {
uint16_t position = qtr.readLineBlack(sensorValues);
int error = 3500 - position;

P = error;
I = I + error;
D = error - lastError;
lastError = error;
int motorspeed = P*Kp + I*Ki + D*Kd;

int motorspeeda = basespeeda + motorspeed;
int motorspeedb = basespeedb - motorspeed;

if (motorspeeda > maxspeeda) {
motorspeeda = maxspeeda;
}
if (motorspeedb > maxspeedb) {
motorspeedb = maxspeedb;
}
eger ( motorspeeda < 0 ) {
motorspeeda = 0 ;
}
eger ( motorspeedb < 0 ) {
motorspeedb = 0 ;
}
//Serial.print (motorspeeda); Serial.print (""); Serial.println (motorspeedb);
forward_brake ( motorspeeda , motorspeedb );
}
 

Forum istatistikleri

Konular
127,959
Mesajlar
913,914
Kullanıcılar
449,606
Son üye
rasit.

Yeni konular

Geri
Üst