Fråga:
Hur kan jag upptäcka en bortkopplad stift?
Karim Stekelenburg
2015-08-29 12:51:06 UTC
view on stackexchange narkive permalink

Jag försöker bygga ett system där om en kabel lossnar från en stift (valfri stift), utförs en åtgärd.

Jag undrar hur man ställer in det här. Kan jag helt enkelt koppla 5V till en stift och läsa dess status eller kommer det att röra upp Arduino? Ska jag använda några motstånd? Hur ska jag ansluta detta till GND?

Kom ihåg att jag är ganska ny på allt detta.

Vänligen ange om dessa stift kommer att användas för in- eller utmatning. Om körning, vad kör de? t.ex. Lysdioder. Om ingång, vad är enheten du läser från?
Jag är inte riktigt säker på om jag ska använda dem som ingång eller utgång. Tanken är att den utlöser en programvaruhändelse och inte en fysisk händelse (hårdvara). Allt jag verkligen behöver är en signal till datorn (dock USB för tillfället) som säger att kabeln är bortkopplad.
Tre svar:
Majenko
2015-08-29 14:59:34 UTC
view on stackexchange narkive permalink

Sättet att göra detta, eftersom det inte finns något digitalt värde mellan HIGH och LOW, är att aktivt skapa en signal på stiftet som du kan känna igen. Observera att om signalen som kommer in till stiftet är en dataström (en sekvens av HÖG och LÅG) som går hela tiden kanske det inte fungerar tillförlitligt, men det är bra för saker som knappar och andra enkla sensorer.

Varje signal på en kabel har en drivstyrka . Det här är i princip hur kraftfull signalen är och hur bra den är för att åsidosätta andra saker som händer på samma tråd. Det är nära relaterat till källans utgångsimpedans (vad som skickar signalen). För saker som knappar och omkopplare är det i princip värdet på det använda mottagningsmotståndet.

För att aktivt känna av om en stift är frånkopplad eller inte måste du tillfälligt ansluta den till en känd signalnivå samma tid när den är ansluten till kabeln (eller inte ansluten om den råkar vara ansluten). Denna kända signalnivå måste ha en svagare enhet än källsignalen i flera storleksordningar. Detta säkerställer att om du försöker överlappa din testsignal över den inkommande signalen, dyker den inkommande signalen ut testsignalen och du ser den inte alls. Till exempel, om din källa har 10KΩ impedans (säg en knapp med 10KΩ pullup-motstånd) skulle en testsignal med källimpedans på 1MΩ vara lämplig.

Varje stift som ska testas kan anslutas till sin egen 1MΩ. (i det här exemplet) motstånd, och dessa motstånd är alla anslutna till samma extra IO-stift:

enter image description here

I detta exempel är stift D2 teststiftet och stift D4-D7 är dina ingångar.

Så under normala omständigheter är stift D2 inställt som en ingång och ignoreras helt. Men när du kommer att testa stiften ställer du in den som en utgång.

Du ställer sedan in D2 till HÖG och läser var och en av D4 till D7. Alla som läses som HÖG är kandidater för att inte vara anslutna.

Du ställer sedan in D2 på LÅG och läser stiften som läste HÖGT tidigare. Alla som nu läses som LÅG kopplas bort.

Du ställer sedan tillbaka D2 till att vara en ingång igen så att den inte stör normal funktion.


Om du bara vill för att veta om ström flyter i en tråd kan du använda det som kallas ett shuntmotstånd . Detta är ett litet motstånd (kanske 1Ω) som placeras i linje med ledningen och du mäter spänningen (med Arduino analoga ingångar) på båda sidor om motståndet. Spänningen som tappas över motståndet är direkt proportionell mot strömmen som strömmar genom den tack vare Ohms lag:

I=V/R

Till exempel:

enter image description here

Om spänningen som läses av A1 ska vara 5V (spänningen som kabeln är ansluten till) och spänningen som läses av A0 ska vara 4,93 V, spänningen tappade av motståndet skulle vara 5-4,93 = 0,07v. Med 1Ω-motståndet skulle strömmen vara 0,07 / 1 = 0,07A eller 70 mA.

Med ledningen vid OUT frånkopplad kommer det att strömma noll eftersom det inte finns någon krets. Så omorganisera formeln ovan kan vi bevisa att vi kan säga att den är frånkopplad.

Om jag är = V / R så är V = RI. Därför V = 1Ω × 0A = 0V. Så spänningen som sjönk över motståndet skulle vara 0V, så A0 och A1 skulle vara lika (diskonterar eventuellt brus). A0 och A1 skulle båda läsa 5V. På samma sätt, om ledningen IN kopplades bort istället, skulle A0 och A1 båda läsa 0V.

För att känna av högre strömmar använder du ett mindre motstånd och för att känna av mindre strömmar använder du ett större motstånd - detta möjliggör spänningsfall som ska genereras som ligger inom ett lämpligt område för känsligheten hos ADC som gör avläsningen. För Arduino är det en 10-bitars ADC, så det kan känna (med en 5V V REF ) 5/1024 = 4,882813mV per LSB.

Observera att om du arbetar med spänningar över den där Arduino arbetar måste du separera eller på annat sätt skala dessa spänningar. Det finns speciella enheter som är speciellt utformade för denna uppgift som kallas shuntförstärkare med hög sida . De låter dig också använda ett mindre motstånd än vad du annars skulle behöva vilket är mindre påträngande för din krets (mindre spänningsfall).

Avamander
2015-08-29 13:51:28 UTC
view on stackexchange narkive permalink

Du kan ansluta alla stift genom ett 1M motstånd till en skena. Ibland ställer du in alla dina utgångar på ingångar och växlar skenan HÖG och LÅG, om ingångarna är HÖG och LÅG i den ordning du bytte skenan finns det ingen ledning. Samma fråga ställdes på Arduino Forums, så läs den här tråden.

Svaret på denna fråga tillhandahölls av johnwasser@forum.arduino.cc.

Tack, men det här ser mycket mer komplicerat ut än det borde vara för mitt syfte. Jag använder inga externa enheter och / eller sensorer. Det jag letar efter är ett sätt att upptäcka om strömmen flödar från 5V till GND (kabelansluten) eller inte (kabel frånkopplad). Du kan tänka dig det som ett konstigt elektroniskt halsband som kommer att göra ljud när det kopplas bort. Hur bestämmer jag nu när jag ska göra ljudet?
Gazihan Alankus
2017-10-19 00:58:14 UTC
view on stackexchange narkive permalink

Alternativt, om det här är en digital ingång, kan du bara använda ett pull-up eller pull-down motstånd för att ge ingångsstiftet ett standardvärde. Låt oss säga att du använder ett uppdragsmotstånd för att göra standard hög. Sedan ansluter du en låg kabel till den här ingången så att ingången läser lågt. Nu, om kabeln går högt eller om den kopplas bort, får du ett högt värde i ingångsstiftet.

Jag vet att det här inte var riktigt vad du frågade, men kanske en sådan lösning kan hjälpa till med ditt ursprungliga problem. I mitt fall har jag en flamdetekteringsmodul som ger låg effekt som standard och blir hög när det finns en flamma. Jag vill inte missa lågan på grund av att min kabel kopplas bort, så jag använder ett uppdragningsmotstånd som gör ingången hög, inte bara när det finns en flamma utan också när det är en frånkoppling. På det här sättet ser jag till att jag inte saknar eld på grund av att sensorkabeln kopplas ur.



Denna fråga och svar översattes automatiskt från det engelska språket.Det ursprungliga innehållet finns tillgängligt på stackexchange, vilket vi tackar för cc by-sa 3.0-licensen som det distribueras under.
Loading...