Innholdsfortegnelse:

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

Video: UChip - Serial Over IR !: 4 trinn

Video: UChip - Serial Over IR !: 4 trinn
Video: (COLA-POTATO CHIPS)Who'stheBest?1,2,3 or 4?#shorts #tiktok #viral 2024, Juli
Anonim
UChip - Serial Over IR!
UChip - Serial Over IR!
UChip - Serial Over IR!
UChip - Serial Over IR!

Trådløs kommunikasjon har blitt en nøkkelfunksjon i våre prosjekter i dag og når vi snakker om trådløs, det første jeg tenker på er Wi-Fi eller BT, men håndtering av Wi-Fi eller BT kommunikasjonsprotokoller er ikke en lett oppgave og bruker mye av MCU -ressurser, slik at det er lite plass til å kode applikasjonen min. Derfor velger jeg vanligvis en ekstern Wi-Fi/BT-modul som er serielt koblet til mikrokontrolleren for å dele rollene og få større frihet.

Noen ganger er imidlertid Wi-Fi og BT "overkill" for noen applikasjoner som krever lav bithastighet og kort kommunikasjonsavstand. Videre innebærer bruk av Wi-Fi eller BT nødvendigheten av å koble smarttelefonen eller enheten til riktig autentisering.

Tenk deg at du bare må slå på/av et eksternt lys, eller endre lampens intensitet, eller åpne en elektrisk port. Er det verdt å bruke Wi-Fi eller BT?

Avhengig av miljø og applikasjoner kan trådløs kommunikasjon over IR (infrarød) bølgelengde komme godt med. En serie over IR, implementert med få eksterne komponenter (3 diskrete komponenter!), Og uChip (et veldig lite Arduino -kompatibelt kort) kan være løsningen du lette etter!

Materialregning (for en Tx-Rx-enhet):

1 x uChip

1 x IR -LED: med en utslippstopp på 950 nm

1 x TSOP-38238 (tilsvarende)

1 x 1KOhm motstand

Maskinvare

1 x brødbrett/proto -brett

1 x svart plastrør: indre diameter i samme størrelse som IR-LED, røret er nødvendig for å forhindre kryssprat med TSOP-mottakeren.

1 x aluminiumsfolie (3 cm x 3 cm)

1 x tape

TIPS: Du kan lage en bare TX eller bare RX-enhet hvis du trenger enveiskommunikasjon ved å fjerne unødvendig RX/TX-maskinvare fra kretsen eller aktivere/deaktivere den relaterte koden i skissen.

Trinn 1: Kabling

Kabling
Kabling
Kabling
Kabling
Kabling
Kabling

Koble komponentene sammen i henhold til skjemaet.

Noen notater om den enkle skjematikken. Siden TSOP-38238 tillater en strømforsyning fra 2,5V til 5V og maksimalt absorberer 0,45mA (du finner databladet HER), vil jeg drive mottakeren med to pinner, som gir henholdsvis jord og strømforsyning. Dette gjør det mulig å slå på/av mottakeren på forespørsel og et veldig enkelt maskinvareoppsett. I tillegg, hvis du trenger en enveiskommunikasjon, kan du velge om du vil lage en (Tx/Rx) -enhet bare ved å deaktivere/aktivere TSOP-38238.

Hvordan fungerer kretsen?

Det er ganske enkelt. TSOP -utgangspinnen trekkes lavt når sensoren oppdager et tog på 6 pulser eller mer ved 38KHz, på den annen side trekkes det høyt når det ikke er et slikt signal. Derfor, for å overføre serielle data over IR, er det kretsen driver med LED -anoden med en 38KHz PWM modulert med TX serielt signal som trekker LED -katoden lavt.

Følgelig, på et høyt nivå av den serielle TX0, er LED -en ikke forspent eller forspent i revers (ingen pulser) og TSOP -utgangspinnen trekkes høyt. Ved å overføre et lavt nivå på serien, er LED -en drevet og genererer IR -pulser tilsvarende det påførte PWM -signalet; derfor trekkes TSOP -utgangen lavt.

Siden overføringen er direkte (0-> 0 og 1-> 1) er det ikke behov for omformere eller annen logikk på mottakersiden.

Jeg regulerer optisk LED -utgangseffekt ved å velge PWM -driftssyklusen i henhold til applikasjonen. Jo høyere driftssyklus, jo høyere optisk utgangseffekt, og derfor vil du overføre meldingen videre.

Husk at vi fremdeles trenger å generere pulser! Dermed bør du ikke gå over 90% driftssyklus, ellers oppdager TSOP ikke signalet som pulser.

Trenger du mer strøm?

For å øke strømmen, kan vi ganske enkelt redusere verdien av 1kOhm -motstanden?

Kanskje, bare ikke vær for krevende! Den maksimale strømmen du får fra en pin på MCU er begrenset til 7mA når du kjører portpinnen sterkere enn normalt (PINCFG. DRVSTR = 1 og VDD> 3V) som angitt i databladet SAMD21.

Standardkonfigurasjonen (som er den som er vedtatt av Arduino IDE -bibliotekene som standard) begrenser imidlertid strømmen til 2mA. Derfor gir bruk av 1kOhm allerede gjeldende grense med standardinnstillingene!

Å øke strømmen er ikke bare et spørsmål om elektriske komponenter. Kort:

  • Bytt motstand (hvis minimumsverdi er begrenset til omtrent 470Ohm -> VDD/470 ~ 7mA);
  • Sett den tilsvarende PORT-> PINCFG-> DRVSTR til 1;

Jeg vil gi koden inkludert denne funksjonen i en fremtidig oppdatering.

Men husk, synke og tømme strøm fra MCU -pinner nær grensene er ikke en så god tilnærming. Det reduserer faktisk MCU -levetiden og påliteligheten. Derfor foreslår jeg å beholde den normale drivstyrken for langvarig bruk.

Trinn 2: Programmering

Last skissen “IRSerial.ino” i uChip (eller det Arduino -kompatible kortet du bruker).

Hvis du trenger å endre pinnen som genererer PWM, må du kontrollere at du bruker en pinne som er koblet til en TCC -timer, siden denne versjonen av koden bare fungerer med TCC -tidtakere (sjekk "variant.c" på brettet ditt for denne informasjonen). Jeg vil legge til koden for å bruke også TC -tidtakere i fremtidige oppdateringer.

Koden er ganske enkel. Etter at du har angitt PIN_5 lav (gir TSOP GND) og PIN_6 høy (driver TSOP), starter MCU PWM på PIN_1, stiller inn tidsperioden og registrerer tilsvarende den nødvendige frekvensmodulasjonen (i mitt tilfelle er den 38KHz) og plikt syklus (12,5% som standard). Dette gjøres ved å utnytte standard analogWrite () -funksjonen på PWM-pinner og bare endre PER_REG (perioderegisteret) og CC (registrere sammenligning) -registeret (den skrevne koden er ganske enkelt en klipp-og-lim-fil fra wiring_analog-biblioteket). Du kan stille inn den nødvendige frekvensen i henhold til at TSOP -sensoren endrer PER_REG (som er den øvre grensen for å tilbakestille timertelleren), mens CC settes proporsjonalt med periodeverdien til ønsket prosent av driftssyklusen.

Deretter angir koden den serielle porten med riktig baudhastighet som er 2400bps. Hvorfor så lav overføringshastighet ?! Svaret er i TSOP -databladet som du finner HER. Siden TSOP har avvisningsfiltre med høy støy for å forhindre uønsket bytte, er det nødvendig å sende et tog med flere pulser for å trekke TSOP -utgangspinnen ned (antall pulser avhenger av TSOP -versjonen, 6 er den typiske verdien). På samme måte trekkes TSOP -utgangen høyt etter et minimum av tid tilsvarende 10 pulser eller mer. Følgelig, for å sette TSOP -utgangen som det modulerende TX0 -signalet, er det nødvendig å stille overføringshastigheten med tanke på følgende ligning:

Seriell baud <PWM_frequency/10

Ved bruk av 38KHz resulterer dette i en baudrate lavere enn 3800bps, noe som betyr at den høyere "standard" tillatte overføringshastigheten er 2400pbs, som tidligere forventet.

Vil du øke overføringshastigheten? Det er to alternativer.

Det enkleste alternativet er å endre TSOP til en høyere frekvensversjon (som TSOP38256), noe som gjør at du kan doble baudhastigheten (4800bps)

Ikke nok?! Deretter må du lage din egen optiske lenke ved hjelp av en enkel IR LED+fotodiode og forsterkningskretser. Denne løsningen krever imidlertid mye koding og elektronikkekspertise for å forhindre støy fra å påvirke de overførte dataene, og derfor er implementeringen ikke lett i det hele tatt! Men hvis du føler deg trygg nok, er du mer enn velkommen til å prøve å lage ditt eget TSOP -system!:)

Til slutt satte jeg SerialUSB -porten (2400bps) som jeg bruker til å sende og motta data på den serielle skjermen.

Loop () -funksjonen inkluderer koden som er nødvendig for å passere data over de to seriene og kopieres direkte fra eksempelskissen SerialPassthrough som bare endrer serienavn.

Trinn 3: Skjerming av IR -LED

Skjermende IR LED
Skjermende IR LED
Skjermende IR LED
Skjermende IR LED

Hvis du slår på kretsen ovenfor etter at du har lastet inn "IRSerial.ino" -koden, må du sjekke seriell skjerm på Arduino IDE og prøve å sende en streng. Du vil sannsynligvis se at uChip mottar akkurat det den sender! Det er en kryssprat i kretsen på grunn av optisk kommunikasjon mellom IR-LED og TSOP på samme enhet!

Her kommer den harde delen av dette prosjektet, og forhindrer cross-talk! Sløyfen må brytes for å gjøre toveis seriell kommunikasjon over IR.

Hvordan bryter vi løkken?

Det første alternativet, du senker PWM -driftssyklusen, og senker dermed den optiske effekten fra LED -en. Imidlertid reduserer denne tilnærmingen også avstanden du får en pålitelig seriell IR -kanal over. Det andre alternativet er å skjerme IR -LED, og dermed lage en retningsbestemt IR "stråle". Det er et spørsmål om prøve og feil; til slutt, ved hjelp av et stykke svart pneumatisk luftslange innpakket i aluminiumsfolie og tape (som gir elektrisk isolasjon) klarte jeg å bryte krysspraten. Å sette den sendende IR -lysdioden inne i røret forhindrer kommunikasjon mellom TX og RX på samme enhet.

Se på bildet for å se løsningen min, men prøv gjerne andre metoder og/eller foreslå din! Det er ingen absolutt løsning på dette problemet (med mindre du trenger en enkel enveiskanal) og du må sannsynligvis justere kretsoppsettet, PWM-driftssyklusen og IR-skjermen i henhold til dine behov.

Når du bryter krysspraten, kan du bekrefte at enheten din fortsatt fungerer ved å lage en sløyfe på enheten Tx-Rx som utnytter refleksjonen av IR-bølgelengden på IR-reflekterende overflater.

Trinn 4: Kommuniser

Kommunisere!
Kommunisere!
Kommunisere!
Kommunisere!

Det er alt

Seriell over IR -enheten er klar til å kommunisere, bruk dem til å sende data over IR, slå på/av alt du liker eller sjekk statusen til en sensor som du skjuler i hemmelighet!

Avstanden som kommunikasjonen er pålitelig på er ikke så mye som for en WiFi- eller BT -enhet. Det er imidlertid retningsbestemt (avhengig av LED -blenderåpningen og det implementerte IR -skjermingssystemet), noe som kan være veldig nyttig i noen applikasjoner!

Snart vil jeg laste opp en video der du kan se noen eksempler på applikasjonene jeg laget. Nyt!

Anbefalt: