Ciarovy senzor QRT-8A a multiplexer - manual

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

Späť do zoznamu | HW príprava QRT-8A a multiplexera

Line senzor + multiplexer

Tieto dve súčiastky skombinujeme do jedného modulu. Bude 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


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.

/*
  RP2350                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