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:
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:
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).