Ciarovy senzor QRT-8A a multiplexer - manual

Zo stránky 3D liga wiki
Prejsť na navigáciu Prejsť na vyhľadávanie

Line senzor + multiplexer

Dostali ste modul zložený z QTR-8A line senzora a 74HC4051 multiplexera.

QTR-8A obsahuje 8 infračervených snímačov odrazivosti – každý meria koľko infračerveného svetla sa odrazí od povrchu. Tmavá čiara odráža menej ako svetlý podklad.

Senzor nemá indikačnú LED, takže navonok nevidno či dostáva napájanie. Pre najlepší účinok IR senzorov ich treba zapojiť do 5V (IR pin).

Prečo potrebujeme multiplexer?

RP2350-Zero má iba 4 analógové vstupy (GP26–GP29), ale senzor má 8 analógových výstupov. Na to nám pomôže multiplexer 74HC4051 – prepína 8 analógových kanálov na jeden výstup. Každý kanál má svoju adresu od 000 po 111 (binárne), ktorú nastavujeme cez 3 select piny (S0, S1, S2).

Postup čítania všetkých 8 kanálov:

  1. Nastavíme adresu kanála cez S0, S1, S2
  2. Počkáme kým sa multiplexer prepne (~10 µs)
  3. Prečítame hodnotu z výstupu Z
  4. Opakujeme pre všetky kanály 0–7

Zapojenie

Pin modulu Pin na RP2350-Zero
VCC 3.3V
GND GND
IR (QTR-8A) 5V
Z (analógový výstup) GP26 (ADC)
S0 GP6
S1 GP7
S2 GP8

Kód

Vyskúšaj toto: Skopíruj a spusti nasledujúci program. Otvor sériový monitor (115200 baud) a pomaly pohybuj senzorom 3mm nad čiernou čiarou na bielom podklade.

/*
  RP2040                74HC4051             QTR-8A 
┌──────────┐ ┌──────────────────────────┐  ┌────────┐
|      5V  ├─┘        ┌──────────┐      └──┤ IR     |
|      3.3V├──────────┤VCC    VCC├─────────┤ VCC    |
│      GP26├──────────┤Z      GND├─────────┤ GND    | 
│      GP13├──────────┤S2      Y0├─────────┤ D1     |
│      GP14├──────────┤S1      Y1├─────────┤ D2     |
│      GP15├──────────┤S0      Y2├─────────┤ D3     |
│       GND├──────────┤GND     Y3├─────────┤ D4     |
└──────────┘          |        Y4├─────────┤ D5     |
                      |        Y5├─────────┤ D6     |
                      |        Y6├─────────┤ D7     |
                      |        Y7├─────────┤ D8     |
                      └──────────┘         └────────┘
*/
const int MUX_Z  = 26;  // analógový výstup multiplexera
const int MUX_S0 = 6;   // select bit 0
const int MUX_S1 = 7;   // select bit 1
const int MUX_S2 = 8;   // select bit 2

const uint8_t SENSOR_COUNT = 8;
const int THRESHOLD = 400;

void setup() {
  Serial.begin(115200);
  analogReadResolution(12);  // 12-bitové ADC (0–4095)

  pinMode(MUX_S0, OUTPUT);
  pinMode(MUX_S1, OUTPUT);
  pinMode(MUX_S2, OUTPUT);

  Serial.println("QTR-8A + 74HC4051 OK");
}

// Prepne multiplexer na daný kanál (0–7)
void selectChannel(uint8_t channel) {
  digitalWrite(MUX_S0, (channel >> 0) & 1);
  digitalWrite(MUX_S1, (channel >> 1) & 1);
  digitalWrite(MUX_S2, (channel >> 2) & 1);
}

void loop() {
  for (uint8_t i = 0; i < SENSOR_COUNT; i++) {
    selectChannel(i);
    delayMicroseconds(10);  // počkáme kým sa multiplexer prepne
    int val = analogRead(MUX_Z);
    Serial.print(val > THRESHOLD ? "1" : "0");
    Serial.print("\t");
  }
  Serial.println();
  delay(100);
}
Novinka Vysvetlenie
analogReadResolution(12) Nastaví ADC na 12-bitové čítanie (0–4095) – bez toho by Arduino používalo 10-bitové (0–1023)
selectChannel(i) Nastaví adresu kanála cez select piny S0, S1, S2
(channel >> n) & 1 Bitový posun – vyextrahuje n-tý bit adresy kanála. Napr. kanál 5 = 101 → S0=1, S1=0, S2=1
delayMicroseconds(10) Krátke čakanie kým sa multiplexer fyzicky prepne na nový kanál

Čo sme sa naučili?

  • QTR-8A meria odrazivosť povrchu pomocou IR svetla – tmavá čiara odráža menej ako svetlý podklad.
  • Multiplexer 74HC4051 nám umožnil čítať 8 analógových kanálov cez jeden ADC pin.
  • Adresu kanála nastavujeme cez 3 select piny pomocou binárneho kódovania.
  • analogReadResolution(12) nastaví 12-bitové čítanie pre väčšiu presnosť merania.