Ciarovy senzor QRT-8A a multiplexer - manual
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:
- Nastavíme adresu kanála cez S0, S1, S2
- Počkáme kým sa multiplexer prepne (~10 µs)
- Prečítame hodnotu z výstupu Z
- 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.