Indholdsfortegnelse:

UChip - Serial Over IR !: 4 trin
UChip - Serial Over IR !: 4 trin

Video: UChip - Serial Over IR !: 4 trin

Video: UChip - Serial Over IR !: 4 trin
Video: Spookiz театральная версия 2024, Juli
Anonim
UChip - Serial Over IR!
UChip - Serial Over IR!
UChip - Serial Over IR!
UChip - Serial Over IR!

Trådløs kommunikation er blevet en nøglefunktion i vores projekter i dag og når vi taler om trådløs, det første jeg tænker på er Wi-Fi eller BT, men håndtering af Wi-Fi eller BT kommunikationsprotokoller er ikke en let opgave og bruger meget af MCU -ressourcer, hvilket efterlader lille plads til kodning af min applikation. Derfor vælger jeg normalt et eksternt Wi-Fi/BT-modul, der er serielt forbundet med mikrokontrolleren for at dele rollerne og få større frihed.

Nogle gange er Wi-Fi og BT imidlertid "overkill" for nogle applikationer, der kræver lav bithastighed og kort kommunikationsafstand. Desuden indebærer brug af Wi-Fi eller BT nødvendigheden af at forbinde din smartphone eller enhed med korrekt godkendelse.

Forestil dig, at du simpelthen skal tænde/slukke et eksternt lys, eller ændre lampens intensitet eller åbne en elektrisk port. Er det værd at bruge Wi-Fi eller BT?

Afhængigt af miljøet og applikationer kan trådløs kommunikation over IR (infrarød) bølgelængde være praktisk. En Serial over IR, implementeret med få eksterne komponenter (3 diskrete komponenter!), Og uChip (et meget lille Arduino -kompatibelt kort) kan være den løsning, du ledte efter!

Materialekartotek (for en Tx-Rx-enhed):

1 x uChip

1 x IR LED: med en emissionstop på 950 nm

1 x TSOP-38238 (tilsvarende)

1 x 1KOhm modstand

Hardware

1 x breadboard/proto board

1 x sort plastrør: indvendig diameter i samme størrelse som IR-LED, røret er nødvendigt for at forhindre krydssnak med TSOP-modtageren.

1 x aluminiumsfolie (3 cm x 3 cm)

1 x tape

TIP: Du kan lave en kun-TX eller kun-RX-enhed, hvis du har brug for en envejskommunikation ved at fjerne den unødvendige RX/TX-hardware fra kredsløbet eller aktivere/deaktivere den relaterede kode i skitsen.

Trin 1: Ledningsføring

Ledninger
Ledninger
Ledninger
Ledninger
Ledninger
Ledninger

Kør komponenterne sammen i overensstemmelse med skematikken.

Et par noter om den enkle skematiske. Da TSOP-38238 tillader en strømforsyning fra 2,5V til 5V og højst absorberer 0,45mA (du finder databladet HER), vil jeg tænde for modtageren ved hjælp af to ben, som vil levere henholdsvis jord og strømforsyning. Dette gør det muligt at tænde/slukke for receiveren efter behov og en meget enkel hardware ledningsopsætning. Hvis du har brug for en envejskommunikation, kan du desuden vælge, om du vil lave en (Tx/Rx) -enhed ved simpelthen at deaktivere/aktivere TSOP-38238.

Hvordan fungerer kredsløbet?

Det er ganske enkelt. TSOP -udgangsstiften trækkes lavt, når sensoren registrerer et tog på 6 pulser eller mere ved 38KHz, på den anden side trækkes det højt, når der ikke er et sådant signal. For at overføre de serielle data via IR er det, som kredsløbet gør, at drive LED -anoden med en 38KHz PWM moduleret med TX serielt signal, der trækker LED -katoden lavt.

På et højt niveau i den serielle TX0 er LED'en derfor ikke forspændt eller forspændt i omvendt retning (ingen impulser), og TSOP -udgangsstiften trækkes højt. Ved at sende et lavt niveau på føljetonen, er LED'en drevet og genererer IR -impulser i overensstemmelse med det påførte PWM -signal; derfor trækkes TSOP -output lavt.

Da transmissionen er direkte (0-> 0 og 1-> 1) er der ikke behov for invertere eller anden logik på modtagersiden.

Jeg regulerer den optiske LED -udgangseffekt ved at vælge PWM -driftscyklussen i overensstemmelse med applikationen. Jo højere driftscyklus, jo højere er den optiske udgangseffekt, og derfor vil du videreformidle din besked.

Husk, at vi stadig skal generere pulser! Således bør du ikke gå over 90% driftscyklus, ellers opdager TSOP ikke signalet som pulser.

Har du brug for mere strøm?

For at øge strømmen, kan vi simpelthen reducere værdien af 1kOhm modstanden?

Måske bare ikke være for krævende! Den maksimale strøm, du får fra en pin på MCU, er begrænset til 7mA, når du kører portstiften stærkere end normalt (PINCFG. DRVSTR = 1 og VDD> 3V) som angivet i SAMD21 -databladet.

Standardkonfigurationen (som er den, der er vedtaget af Arduino IDE -bibliotekerne som standard) begrænser imidlertid strømmen til 2mA. Derfor giver brug af 1kOhm allerede den nuværende grænse med standardindstillingerne!

Forøgelse af strømmen er ikke kun et spørgsmål om elektriske komponenter. Kort:

  • Skift modstand (hvis minimumsværdi er begrænset til cirka 470Ohm -> VDD/470 ~ 7mA);
  • Indstil den tilsvarende PORT-> PINCFG-> DRVSTR til 1;

Jeg vil give koden inklusive denne funktion i en fremtidig opdatering.

Men husk, at synke og dræne strøm fra MCU -stifter tæt på grænserne er ikke sådan en god tilgang. Det sænker faktisk MCU -levetiden og pålideligheden. Derfor foreslår jeg at beholde den normale drivstyrke til langvarig brug.

Trin 2: Programmering

Indlæs skitsen "IRSerial.ino" i uChip (eller det Arduino -kompatible bord, du bruger).

Hvis du har brug for at ændre den pin, der genererer PWM, skal du sørge for at bruge en pin, der er sluttet til en TCC -timer, da denne version af koden kun fungerer med TCC -timere (se "variant.c" på dit kort for at få disse oplysninger). Jeg tilføjer koden til også at bruge TC -timere i fremtidige opdateringer.

Koden er ganske enkel. Efter at have indstillet PIN_5 lav (giver TSOP GND) og PIN_6 høj (tænder TSOP), starter MCU'en PWM på PIN_1, indstiller timerperioden og optagelse sammenlignet med den nødvendige frekvensmodulation (i mit tilfælde er det 38KHz) og pligt cyklus (12,5% som standard). Dette gøres ved at udnytte standard analogWrite () -funktionen på PWM-ben og kun ændre PER_REG (perioderegisteret) og CC (capture-sammenligning) -registret (den skrevne kode er simpelthen en cut-and-paste fra wiring_analog-biblioteket). Du kan indstille den nødvendige frekvens i overensstemmelse hermed til, at TSOP -sensoren ændrer PER_REG (som er den øvre grænse, der nulstiller timertælleren), mens CC indstilles proportionalt med periodeværdien til den ønskede procentdel af driftscyklus.

Derefter indstiller koden den serielle port ved hjælp af den korrekte baudhastighed, der er 2400bps. Hvorfor så lav baudrate ?! Svaret er i TSOP -databladet, som du kan finde HER. Da TSOP'en har afvisningsfiltre med høj støj for at forhindre uønsket omskiftning, er det nødvendigt at sende et tog med flere pulser for at trække TSOP -udgangsstiften ned (antallet af pulser afhænger af TSOP -versionen, 6 er den typiske værdi). Tilsvarende trækkes TSOP -output højt efter et minimum af tid svarende til 10 pulser eller mere. For at indstille TSOP -udgangen som det modulerende TX0 -signal er det derfor nødvendigt at indstille baudhastigheden i betragtning af følgende ligning:

Seriel Baud <PWM_frequency/10

Brug af 38KHz resulterer i en baudrate lavere end 3800bps, hvilket betyder, at den højere "standard" tilladte baudhastighed er 2400pbs, som tidligere forventet.

Vil du øge baudhastigheden? Der er to muligheder.

Den nemmeste mulighed er at ændre TSOP'en til en version med højere frekvens (som TSOP38256), hvilket giver dig mulighed for at fordoble baudhastigheden (4800bps)

Ikke nok?! Derefter skal du oprette dit eget optiske link ved hjælp af en simpel IR LED+fotodiode og forstærkningskredsløb. Denne løsning kræver dog en masse kodning og elektronikekspertise for at forhindre støj i at påvirke de overførte data, og derfor er implementeringen slet ikke let! Men hvis du føler dig sikker nok, er du mere end velkommen til at prøve at lave dit eget TSOP -system!:)

Endelig indstillede jeg SerialUSB -porten (2400bps), som jeg bruger til at sende og modtage data på den serielle skærm.

Loop () -funktionen inkluderer den kode, der er nødvendig for at videregive data over de to serier og kopieres direkte fra eksempelskitsen SerialPassthrough, der kun ændrer serienavne.

Trin 3: Afskærmning af IR -LED

Afskærmende IR LED
Afskærmende IR LED
Afskærmende IR LED
Afskærmende IR LED

Hvis du tænder for ovenstående kredsløb efter indlæsning af "IRSerial.ino" -koden, skal du kontrollere Serial Monitor på Arduino IDE og prøve at sende en streng. Du vil sandsynligvis se, at uChip modtager præcis, hvad det sender! Der er en krydstale i kredsløbet på grund af optisk kommunikation mellem IR-LED og TSOP for den samme enhed!

Her kommer den hårde del af dette projekt, der forhindrer cross-talk! Sløjfen skal brydes for at lave tovejs seriel kommunikation over IR.

Hvordan bryder vi løkken?

Første mulighed, du sænker PWM -driftscyklussen og reducerer dermed den optiske effekt fra LED'en. Denne fremgangsmåde reducerer imidlertid også afstanden, over hvilken du får en pålidelig seriel IR -kanal. Den anden mulighed er at afskærme IR -LED'en og dermed lave en retningsbestemt IR "stråle". Det er et spørgsmål om forsøg og fejl; endelig, ved hjælp af et stykke sort pneumatisk luftslange pakket ind i aluminiumsfolie og tape (der giver elektrisk isolering) lykkedes det mig at bryde krydssnakken. At sætte den transmitterende IR -LED inde i røret forhindrer kommunikation mellem TX og RX på den samme enhed.

Se på billedet for at se min løsning, men prøv gerne andre metoder og/eller foreslå din! Der er ingen absolut løsning på dette problem (medmindre du har brug for en enkel envejskanal), og du skal sandsynligvis justere kredsløbets layout, PWM-driftscyklus og IR-skærm i overensstemmelse med dine behov.

Når du bryder krydssnakken, kan du kontrollere, at din enhed stadig fungerer ved at oprette en sløjfe på enheden Tx-Rx, der udnytter refleksionen af IR-bølgelængden på IR-reflekterende overflader.

Trin 4: Kommuniker

Kommunikere!
Kommunikere!
Kommunikere!
Kommunikere!

Det er alt

Din serielle over IR -enhed er klar til at kommunikere, brug dem til at sende data via IR, tænde/slukke alt, hvad du kan lide eller kontrollere status for en sensor, som du skjuler i hemmelighed!

Afstanden, som kommunikationen er pålidelig på, er ikke så meget som for en WiFi- eller BT -enhed. Det er dog retningsbestemt (afhængigt af LED -blænden og det implementerede IR -afskærmningssystem), hvilket kan være meget nyttigt i nogle applikationer!

Snart vil jeg uploade en video, hvor du kan se få eksempler på de applikationer, jeg lavede. God fornøjelse!

Anbefalede: