QRT-8A a multiplexer - setup

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

naspäť do zoznamu | viac podrobností o čiarovom senzore a multiplexore

8-kanálový analógový senzor obsahuje 8 IR LED a snímačov rozmiestnených vedľa seba merajúcich intenzitu odrazeného svetla. Keďže riadiaca jednotka RP2350 má iba 4 analógové vstupy (a niektoré sa nám môžu hodiť na niečo iné - napr. pripojenie joysticku, či mikrofónu), použijeme 8-kanálový multiplexer - čo je súčiastka, ktorá dokáže jeden signál na jednej strane podľa požiadavky prepojiť s jedným z 8 signálov na druhej strane, konkrétne použijeme CD4051 (74HC4051), ktorý mimochodom prenáša aj digitálne aj analógové signály, dokonca analógové signály môžu kolísať medzi napätím VEE až VCC - pričom VEE môže byť aj záporné napätie - takže napr. zvukový alebo iný signál sa môže pohybovať od -5 do +5 V, to ale nie je náš prípad a preto potrebujeme nastaviť VEE na 0 V, čiže prepojiť ho s pinom GND. Ale práve na to sú na tejto fialovej súčiastke pripravené dve plôšky, ktoré stačí pomocou spájkovačky prepojiť kvapkou cínu. Jednotlivých 8 kanálov na vonkajšej strane multiplexera priamo lícuje 8 analógových výstupov senzora - takže ich môžeme prepojiť pomocou hrebeňovej kolíkovej lišty, ostatné dva kontakty VCC a GND musíme prepojiť káblikovými prepojkami. Obe súčiastky dokážu pracovať v 3.3 V aj 5 V logike, ale na RP2350 používame iba 3.3 V logiku. Senzor však bežne počíta s 5 V logikou a pre nastavenie 3.3 V logiky je treba prepojiť podobné dve vyvedené plôškové kontakty ďalšou kvapkou cínu. Aby sme zabezpečili spoľahlivú dlhodobú prevádzku, tieto dve súčiastky bude lepšie napevno spojiť a zospájkovať, lebo pri opakovanom prepájaní káblikmi by sa mohla zhoršovať spoľahlivosť. Celý postup poskladania senzora s multiplexerom - najskôr si ho dôkladne preštudujte a rozmyslite:

1. príprava súčiastok

príprava súčiastok

2. kvapkou cínu spojíme predpripravené pocínované pliešky na oboch súčiastkach.

zapájkované prepojky na oboch súčiastkach

3. rozdelíme 11-pinovú lištu na 5 a 6 pinové časti

rozdelíme 11-pinovú lištu na 5 a 6 pinové časti

4. pripájkujeme lištu do multiplexera (VEE a E necháme voľné)

pripájkujeme lištu do multiplexera (1)

pripájkujeme lištu do multiplexera (2)

5. do senzora do pinu IR napájkujeme káblik, z ktorého sme odcvakli z jednej strany koncovku a kúsoček káblika, na opačnej strane ostáva koncovka - bude sa pripájať na ľubovoľný červený pin s 3.3 V

do senzora do pinu IR napájkujeme káblik

6. pripravíme si prepojky medzi multiplexerom a senzorom: kratšia bude prepájať GND-GND a dlhšia VCC-VCC, dbajme, aby okraje senzora ostali voľné, aby sa dal upevniť do plastového držiaka

pripravíme si prepojky medzi multiplexerom a senzorom

7. prepojky najskôr zapájkujeme do multiplexera

prepojky najskôr zapájkujeme do multiplexera

8. 8-pinovú lištu pripájkujeme do multiplexera na piny Y0 - Y7

8-pinovú lištu pripájkujeme do multiplexera

9. visiacu prepojku z GND zapajkujeme aj do senzora

visiacu prepojku z GND zapajkujeme aj do senzora

10. zospájkujeme obe súčiastky pripájkovaním lišty na strane senzora

zospájkujeme obe súčiastky pripájkovaním lišty na strane senzora

11. vyčnievajúce kolíky z lišty odcvakneme

vyčnievajúce kolíky z lišty odcvakneme

12. všetky kontakty zalejeme lepidlom z tavnej pištole (je to dôležité)

všetky kontakty zalejeme lepidlom z tavnej pištole (je to dôležité)

13. všetky kontakty zalejeme lepidlom z tavnej pištole (je to dôležité)

aj z druhej strany tak, aby ale lepidlo neblokovalo senzor z boku, aby sa dal umiestniť do držiaka

14. senzor opatrne zatlačíme do jeho držiaka

senzor opatrne zatlačíme do jeho držiaka


Zapojenie

Pin modulu Pin na RP2350-Zero
VCC 3.3V
GND GND
IR (QTR-8A) 3.3V
Z (analógový výstup) GP26 (ADC0)
S0 GP13
S1 GP14
S2 GP15

Jednoduchý program na otestovanie:

void setup() {
  pinMode(13, OUTPUT);   // S0
  pinMode(14, OUTPUT);   // S1
  pinMode(15, OUTPUT);   // S2
  
  Serial.begin(115200);
  delay(3000);
  Serial.println("are you there?");

  mux_select(0);
}

// vyber vstupný kanál 0-7
void mux_select(int i)
{
  digitalWrite(13, i & 1);
  digitalWrite(14, (i & 2) >> 1);
  digitalWrite(15, (i & 4) >> 2);
}

int x = 0;

void loop() {

   Serial.print(x / 100);
   Serial.print((x % 100) / 10);
   Serial.print(x % 10);
   Serial.print(":");

   for (int i = 0; i < 8; i++)
   {
      mux_select(i);             // vyber kanál
      int y = analogRead(27);    // prečítaj hodnotu
      Serial.print(" ");         // zobraz ju
      Serial.print(y /100);
      Serial.print((y % 100) / 10);
      Serial.print(y % 10);
      delay(10);
   }
   Serial.println();
   x++;
   if (x == 999) x = 0;
   delay(1000);
}