Innehållsförteckning:

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

Video: UChip - Serial Over IR !: 4 Steg

Video: UChip - Serial Over IR !: 4 Steg
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 kommunikation har blivit en nyckelfunktion i våra projekt nuförtiden och pratar om trådlöst, det första jag tänker på är Wi-Fi eller BT, men hantering av Wi-Fi- eller BT-kommunikationsprotokoll är inte en lätt uppgift och kostar mycket av MCU -resurser, vilket ger lite utrymme för kodning av min ansökan. Därför väljer jag vanligtvis en extern Wi-Fi/BT-modul som är seriellt ansluten till mikrokontrollern för att dela rollerna och få högre frihet.

Ibland är dock Wi-Fi och BT "överkill" för vissa applikationer som kräver låg bithastighet och kort kommunikationsavstånd. Dessutom innebär användning av Wi-Fi eller BT nödvändigheten av att ansluta din smartphone eller enhet med korrekt autentisering.

Tänk dig att du helt enkelt behöver tända/stänga av ett externt ljus, eller ändra lampans intensitet eller öppna en elektrisk grind. Skulle det vara värt att använda Wi-Fi eller BT?

Beroende på miljö och applikationer kan trådlös kommunikation över IR (infraröd) våglängd komma till nytta. En Serial over IR, implementerad med få externa komponenter (3 diskreta komponenter!) Och uChip (ett mycket litet Arduino -kompatibelt kort) kan vara lösningen du letade efter!

Materialförteckning (för en Tx-Rx-enhet):

1 x uChip

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

1 x TSOP-38238 (motsvarande)

1 x 1KOhm motstånd

Hårdvara

1 x brödbräda/proto bräda

1 x svart plaströr: innerdiameter samma storlek som IR-lysdioden, röret är nödvändigt för att förhindra cross-talk med TSOP-mottagaren.

1 x aluminiumfolie (3 cm x 3 cm)

1 x tejp

TIPS: Du kan skapa en endast TX- eller only-RX-enhet om du behöver enriktad kommunikation genom att ta bort onödig RX/TX-hårdvara från kretsen eller aktivera/inaktivera den relaterade koden i skissen.

Steg 1: Kabeldragning

Kabeldragning
Kabeldragning
Kabeldragning
Kabeldragning
Kabeldragning
Kabeldragning

Koppla ihop komponenterna i enlighet med schemat.

Några anteckningar om det enkla schemat. Eftersom TSOP-38238 tillåter en strömförsörjning från 2,5V till 5V och absorberar högst 0,45mA (du hittar databladet HÄR) kommer jag att driva mottagaren med två stift, som kommer att ge jord respektive strömförsörjning. Detta gör det möjligt att slå på/av mottagaren på begäran och en mycket enkel installation av hårdvarukablar. Dessutom, om du behöver en enkelriktad kommunikation kan du välja om du vill göra en (Tx/Rx) -enhet genom att helt enkelt inaktivera/aktivera TSOP-38238.

Hur fungerar kretsen?

Det är ganska enkelt. TSOP -utgångsstiften dras lågt när sensorn detekterar ett tåg på 6 pulser eller mer vid 38KHz, å andra sidan dras det högt när det inte finns en sådan signal. Därför, för att överföra seriella data över IR, är det kretsen som driver LED -anoden med en 38KHz PWM modulerad med TX -seriell signal som drar lågt LED -katoden.

Följaktligen, på en hög nivå i den seriella TX0, är lysdioden inte förspänd eller förspänd i omvänd riktning (inga pulser) och TSOP -utgångsstiften dras högt. Genom att sända en låg nivå på serien, lyser LED: n och genererar IR -pulser i enlighet med den applicerade PWM -signalen; därför dras TSOP -utgången lågt.

Eftersom överföringen är direkt (0-> 0 och 1-> 1) finns det inget behov av växelriktare eller annan logik på mottagarsidan.

Jag reglerar LED -optisk uteffekt genom att välja PWM -driftscykeln i enlighet med applikationen. Ju högre driftscykel, desto högre optisk uteffekt och därför kommer du att överföra ditt meddelande längre.

Tänk på att vi fortfarande behöver generera pulser! Därför bör du inte gå över 90% driftscykel, annars upptäcker TSOP inte signalen som pulser.

Behöver du mer kraft?

För att öka strömmen, kan vi helt enkelt minska värdet på 1kOhm -motståndet?

Kanske, var inte för krävande! Den maximala strömmen du får från en stift på MCU är begränsad till 7mA när du kör portstiftet starkare än normalt (PINCFG. DRVSTR = 1 och VDD> 3V) som anges i SAMD21 -databladet.

Standardkonfigurationen (som är den som antas av Arduino IDE -biblioteken som standard) begränsar dock strömmen till 2mA. Därför ger användning av 1kOhm redan den nuvarande gränsen med standardinställningarna!

Att öka strömmen är inte bara en fråga om elektriska komponenter. I korthet:

  • Byt motstånd (vars minimivärde är begränsat till cirka 470Ohm -> VDD/470 ~ 7mA);
  • Ställ motsvarande PORT-> PINCFG-> DRVSTR till 1;

Jag kommer att tillhandahålla koden inklusive den här funktionen i en framtida uppdatering.

Men kom ihåg att sjunka och tömma ström från MCU -stift nära dess gränser är inte ett så bra tillvägagångssätt. Det sänker verkligen MCU -livslängden och tillförlitligheten. Därför föreslår jag att behålla den normala drivstyrkan för långvarig användning.

Steg 2: Programmering

Ladda skissen "IRSerial.ino" i uChip (eller det Arduino -kompatibla kortet du använder).

Om du behöver byta stift som genererar PWM, se till att du använder en stift som är ansluten till en TCC -timer, eftersom denna version av koden endast fungerar med TCC -timers (kolla "variant.c" på ditt kort för denna information). Jag lägger till koden för att även använda TC -timers i framtida uppdateringar.

Koden är ganska enkel. Efter att ha ställt in PIN_5 låg (ger TSOP GND) och PIN_6 hög (driver TSOP), startar MCU PWM på PIN_1, ställer in tidsperioden och fångar jämför med den nödvändiga frekvensmodulationen (i mitt fall är det 38KHz) och plikt cykel (12,5% som standard). Detta görs genom att utnyttja standard analogWrite () -funktionen på PWM-stift och endast ändra PER_REG (periodregistret) och CC (fånga jämför) -registret (den skrivna koden är helt enkelt en klipp-och-klistra-in från wiring_analog-biblioteket). Du kan ställa in den nödvändiga frekvensen i enlighet med att TSOP -sensorn ändrar PER_REG (vilket är den övre gränsen för att återställa timräknaren), medan CC ställs proportionellt mot periodvärdet till önskad procentandel av arbetscykeln.

Därefter ställer koden in den seriella porten med rätt baudhastighet som är 2400bps. Varför så låg överföringshastighet ?! Svaret finns i TSOP -databladet som du hittar HÄR. Eftersom TSOP har högbrusavvisande filter för att förhindra oönskad omkoppling, är det nödvändigt att skicka ett tåg med flera pulser för att dra ner TSOP -utgångsstiften (antalet pulser beror på TSOP -versionen, 6 är det typiska värdet). På samma sätt dras TSOP -utmatningen högt efter en minimal tid motsvarande 10 pulser eller mer. För att ställa in TSOP -utgången som den modulerande TX0 -signalen är det därför nödvändigt att ställa in baudhastigheten med tanke på följande ekvation:

Seriell Baud <PWM_frequency/10

Om du använder 38KHz resulterar detta i en baudrate lägre än 3800bps, vilket innebär att den högre "standard" tillåtna baudhastigheten är 2400pbs, som tidigare förväntat.

Vill du öka överföringshastigheten? Det finns två alternativ.

Det enklaste alternativet är att ändra TSOP till en högre frekvensversion (som TSOP38256), vilket gör att du kan fördubbla överföringshastigheten (4800bps)

Inte tillräckligt?! Då måste du skapa din egen optiska länk med en enkel IR LED+fotodiod och förstärkningskretsar. Denna lösning kräver dock mycket kodning och elektronikkompetens för att förhindra att buller påverkar den överförda datan och därför är implementeringen inte lätt alls! Men om du känner dig tillräckligt säker är du mer än välkommen att prova att göra ditt eget TSOP -system!:)

Slutligen ställde jag in SerialUSB -porten (2400bps) som jag använder för att skicka och ta emot data på den seriella bildskärmen.

Loop () -funktionen inkluderar koden som är nödvändig för att genomföra data över de två serierna och kopieras direkt från exempelskissen SerialPassthrough som endast ändrar serienamnen.

Steg 3: Skärmande IR -LED

Skärmande IR -LED
Skärmande IR -LED
Skärmande IR -LED
Skärmande IR -LED

Om du slår på kretsen ovan efter att du har laddat "IRSerial.ino" -koden, kontrollera Serial Monitor på Arduino IDE och försök skicka en sträng. Du kommer förmodligen att se att uChip får exakt vad det sänder! Det finns en cross-talk i kretsen på grund av optisk kommunikation mellan IR-LED och TSOP för samma enhet!

Här kommer den svåra delen av detta projekt, att förhindra cross-talk! Slingan måste brytas för att göra dubbelriktad seriell kommunikation över IR.

Hur bryter vi öglan?

Första alternativet, du sänker PWM -driftscykeln och sänker därmed LED: s optiska effekt. Detta tillvägagångssätt minskar dock också avståndet över vilket du får en pålitlig seriell IR -kanal. Det andra alternativet är att skydda IR -lysdioden och därmed göra en riktad IR -stråle. Det är en fråga om försök och fel; äntligen, med en bit svart pneumatisk luftslang inlindad i aluminiumfolie och tejp (som ger elektrisk isolering) lyckades jag bryta tvärsnacket. Att sätta den sändande IR -lysdioden inuti röret förhindrar kommunikation mellan TX och RX på samma enhet.

Titta på bilden för att se min lösning, men prova gärna andra metoder och/eller föreslå din! Det finns ingen absolut lösning på detta problem (om du inte behöver en enkel enkelriktad kanal) och du måste förmodligen justera kretslayouten, PWM-driftscykeln och IR-skärmen efter dina behov.

När du bryter cross-talk kan du verifiera att din enhet fortfarande fungerar genom att skapa en loop på enheten Tx-Rx som utnyttjar reflektionen av IR-våglängden på IR-reflekterande ytor.

Steg 4: Kommunicera

Kommunicera!
Kommunicera!
Kommunicera!
Kommunicera!

Det är allt

Din serie över IR -enhet är redo att kommunicera, använd dem för att skicka data över IR, slå på/av allt du gillar eller kontrollera statusen för en sensor som du gömmer i hemlighet!

Avståndet på vilket kommunikationen är tillförlitlig är inte lika mycket som för en WiFi- eller BT -enhet. Den är dock riktad (beroende på LED -bländaren och det implementerade IR -skärmningssystemet), vilket kan vara mycket användbart i vissa applikationer!

Snart kommer jag att ladda upp en video där du kan se några exempel på de applikationer jag gjort. Njut av!

Rekommenderad: