20 Mart 2019, 23:10:22

Haberler:

Foruma Resim Yükleme ve Boyut Sınırlaması ( ! )  https://bit.ly/2GMFb8H


STM32F407 İLE QTR8 RC KULLANIRKEN PROBLEM YAŞIYORUM

Başlatan FMY, 12 Ocak 2019, 20:07:48

FMY



merhaba,
stm ile qtr sensörünü kullanmaya çalışıyorum ancak bu sensörler genelde hazır kütüphane ile kullanıldığı için kütüphaneyi stm e uyarlamakta zorlanıyorum. şimdi durum şöyle ki bu sensör analog ve dijital olarak ikiye ayrılıyor. analog olan qtr a dijital olan ise qtr rc. ben kırmızı 8li olan modelden kullanıyorum yani qtr 8 rc. bu model anladığım kadarı ile şöyle çalışıyor
3.3v veya 5v uyguladığınızda kondansatörü 10 mikro saniye şarj edip deşarj süresine göre foto transistörün önündeki malzemenin yansıtma oranına göre deşarj süresinden siyah mı beyaz mı olduğunu anlıyoruz.



 
sorum şu kodda aynı pinden önce output yapıp sarj ediyor sonra input yapıp sayıyor. ama aynı pini stm de hem input hem output yapmak datasheet de mümkün gibi görünüyor ama prtatikte beceremedim.


https://forum.pololu.com/t/qtr-8rc-without-libraries-chipkit/5669/6

Kod Seç
#define numSensors 3
#define maxValue 4000

unsigned char pins[] = {237};
unsigned int sensor_values[numSensors];

void readSensors()
{
unsigned char i;

for(
0numSensorsi++)
{
sensor_values[i] = maxValue;
digitalWrite(pins[i], HIGH); // make sensor line an output
pinMode(pins[i], OUTPUT); // drive sensor line high
}

delayMicroseconds(10); // charge lines for 10 us
for(0numSensorsi++)
{
pinMode(pins[i], INPUT); // make sensor line an input
}

unsigned long startTime micros();
while (
micros() - startTime maxValue)
{
unsigned int time micros() - startTime;
for (
0numSensorsi++)
{
if (
digitalRead(pins[i]) == LOW && time sensor_values[i])
sensor_values[i] = time;
}
}
}

void setup()
{
Serial.begin(9600);
}

void loop()
{
unsigned char i;

readSensors();
for (
0numSensorsi++)
{
Serial.print(sensor_values[i]);
Serial.print(" ");
}

delay(1000);
Serial.println();
}

Sakarya Üniversitesi Mekatronik Mühendisliği

z



Bu sema cok mantıklı gorunmuyor. 10n kondansatör değil de 10k dirençtir.

FMY

Alıntı yapılan: z - 12 Ocak 2019, 20:18:38

Bu sema cok mantıklı gorunmuyor. 10n kondansatör değil de 10k dirençtir.



Sakarya Üniversitesi Mekatronik Mühendisliği

z

Alıntı yapılan: z - 12 Ocak 2019, 20:18:38

Devrenin cikis pini ile baglantili I/O pinini H yap. Bu durumda 220 Ohm direnc optonun kollektor direnci olacaktir ve bu esnada kollektorden akan akim I ise 220*I gerilim dusumu kapasitede depolanir. Bu islem icin en azindan 10us zaman ayirmalisin.

Daha sonra bu I/O pinini Input moduna getir ve olcum yap. Bu kez olcecegin voltaj Vin-220*I olacaktir. H yada L.

Kodunda kullandigin fonksiyonlarin detayini bilmiyorum. Hangi pinin input output olacagini
tanimlamissin fakat hangi port icin tanimlandigini goremedim.