Jak uruchomić alarm, gdy papier toaletowy jest niski?

47

Każdy z dziećmi wie, że nigdy nie pomaga z papierem toaletowym. Czy ktoś wie, jak śledzić, kiedy jest niski lub poza nim, i włączyć alarm dźwiękowy? Po prostu nie wiem, jakiego czujnika użyć, co może pomóc.

Niektóre, które przyszły mi do głowy, to: waga, odbicie (kolor papieru) lub laserowy drut - wszystko w porządku na szpuli. Nie mam nic przeciwko budowaniu go, po prostu nie wiem, który czujnik. Czy ktoś wie, którego użyć?

Jose Leon
źródło
5
Być może powinieneś również pomyśleć o zamocowaniu czujnika na desce sedesowej, aby włączył alarm, gdy ktoś usiądzie, gdy nie będzie papieru. :)
Peter Bloomfield
Być może można po prostu spróbować zmierzyć opór promieniowy rolki (mam nadzieję, że nie jest on zbyt wysoki), a następnie zmniejszy się, gdy nie pozostanie wystarczająca ilość papieru.
jfpoilpret
Zapomnij o oporze: po prostu próbowałem go zmierzyć, ale przekracza maksymalny kaliber mojego multimetru (20M Ohm)
jfpoilpret
1
Cóż, następująca może być dyskusja lepiej zlokalizowana na stronie meta.arduino, ale myślę, że to pytanie zazwyczaj zwodzi sens posiadania arduino SE. Nie jest bezpośrednio związany z arduinos, ponieważ w każdym projekcie nie należy projektować swojego rozwiązania w oparciu o narzędzie, ale należy wybrać narzędzia, które są najlepsze dla tego rozwiązania (co jeśli lepsze jest użycie RPi lub CC2540?). To rzeczywiście mechaniczne + elektroniczne + inżynieria oprogramowania. I nie ma najlepszego miejsca, w którym wiem, aby zadawać tego rodzaju pytania.
zmo
@zmo Sugerowałbym wtedy OP, aby zredagował swoje pytanie, aby dodać potrzebę uruchomienia alarmu przez Arduino; poprawiłoby to Arduino.SE
jfpoilpret

Odpowiedzi:

47

Zbierz kilka rolek na raz i powieś jedną do użycia. Umieść pozostałe dwa na krótkim pionowym słupie w zasięgu opiekunki. W razie potrzeby opiekunka może wykonać kolejny rzut.

Mechanicznie wyczuj brak ciężaru na półce u dołu słupa. Alarm uruchamia się po usunięciu ostatniego rzutu. Nikt nie musi się przyłapać.

Aby wyczuć ciężar, użyj rezystora wrażliwego na siłę, takiego jak FSR 400 (patrz arkusz danych ). Alternatywnie można użyć lekkiej sprężyny zwojowej do oparcia papieru toaletowego za pomocą mikroprzełącznika zwalnianego po usunięciu obu rolek. Inną opcją byłby detektor przerwania wiązki IR, w którym obwód jest zakończony po usunięciu ostatniej rolki.

JRobert
źródło
@AnnonomusPerson Mówi o pomiarze wagi kilku pełnych rolek papieru toaletowego, a nie pojedynczych arkuszy lub pustych rolek.
AJMansfield
1
To świetny pomysł: zamiast mierzyć ilość papieru pozostałego na rolce, zmierz liczbę pozostałych rolek, aby poinformować Cię, kiedy potrzebujesz więcej rolek.
AJMansfield
Jakiego czujnika użyłbyś do wykrycia braku masy?
jfpoilpret
3
Czujnik ciśnienia tkaniny jest jedną z opcji lub czujnik światła na podstawie, który jest zakryty, jeśli rolka jest obecna.
Rob Hoare
Czy możesz podać przykład konkretnego czujnika, który mógłby wykonać zadanie?
asheeshr
22

Uważam, że koncepcja czujników kontaktronowych przedstawiona przez jfpoilpret i jmathew jest najłatwiejsza do osiągnięcia. Narysowałem schemat tego, jak według mnie wyglądałoby.

Możesz dostosować czułość, dostosowując wysokość dolnego kontaktu.

To naprawdę doprowadza cię tylko do „niskiego” stanu i niekoniecznie jest niemożliwe. Chyba że chcesz zmienić rolki, gdy pozostało jeszcze kilka arkuszy, nie wydaje mi się to zadowalającym rozwiązaniem. Wolałbym mieć wskaźnik „out” i mieć słyszalny brzęczyk, który zachęci / zawstydzi użytkownika do zastąpienia rolki.

Ten projekt można zrealizować przy użyciu samodzielnej elektroniki (nie jest potrzebne arduino). Jednak jeśli chcesz zaryzykować zmianę rzutu, możesz użyć do tego arduino.

Zwróć też uwagę na czujniki optyczne oparte na kolorach, podczas gdy zdecydowana większość tekturowych lamp używanych do tego celu jest brązowa, widziałem też używane białe.

Schemat czujnika kontaktronowego

Arluin
źródło
6
Ładne diagramy. Czego użyłeś do ich wykonania?
Mateusz
1
Tylko ważny komentarz: w tej sytuacji nie potrzebujesz nawet kontaktronu , ale tylko dwa kawałki metalu używane jako prosty przełącznik. Kontaktron jest oparty na siłach magnetycznych otwierających lub zamykających przełącznik; było to potrzebne w mojej odpowiedzi, gdzie nie było prawdziwego kontaktu między obiema częściami. Ale myślę, że użycie trzciny wydaje się po prostu bezużyteczne.
jfpoilpret
@jfpoilpret Nie wiedziałem, że termin ten jest specyficznym rodzajem zmiany. Myślałem o bardziej ogólnej koncepcji sztywnego giętego materiału. Dziękuję za wyjaśnienie!
Mateusz
@ jmathew nie ma problemu, w końcu wszyscy jesteśmy tutaj, aby dzielić się wiedzą!
jfpoilpret
2
Użyłem MS Visio 2007.
Arluin
14

Myślę, że widziałem to w pierwszym odcinku 2 odcinka Manlaba Jamesa Maya.

Podobnie do jfpoilpret, użyj szerokiego kawałka materiału na sprężynie, która przez cały czas styka się z rolką. Mówię „szeroki”, aby kiedy rolka była pusta, trzcina dotyka styku z jednym z uchwytów rolki z boku. Po dotknięciu zamyka obwód do twojego alarmu.

Oto przybliżony obraz opisujący, co mam na myśli.

W odpowiedzi Arluina wspomniano, że ta metoda nie wykazałaby, że rzut był pusty. To prawie prawda. Jeśli górny kontakt jest tak gruby jak rolka tektury TP, a dolny kontakt jest umieszczony wewnątrz wewnętrznej części rolki tektury, powinien być wystarczająco blisko do celów praktycznych. Jedna stopa rolki TP nie wystarcza po nocy taco.

Oto obraz mojej wyobraźni

jmathew
źródło
9

Za pomocą detektora promieniowania wykryj ilość papieru pozostałego na rolce. Umieść pewną ilość materiału radioaktywnego na środku pręta szpuli i umieść detektor promieniowania w innym miejscu (możesz go zamontować po drugiej stronie powierzchni, na której zamocowany jest uchwyt rolki, jeśli chcesz; czujniki promieniowania są niezwykle elastyczne) i zmierzyć ilość promieniowania, aby określić, ile papieru pozostało na rolce.

Alternatywnie możesz mieć elektronicznie sterowany dozownik papieru toaletowego (przycisk do dozowania zaprogramowanej długości papieru toaletowego) i arduino po prostu śledzi, ile zostało wydane.

Lub podłącz enkoder obrotowy z boku pręta szpuli (upewnij się, że pasuje, nie wsuwając się do rolki) i policz obroty rolki, aby określić, ile zużyto.

Oczywiście, przy każdej z tych metod będziesz musiał przeprowadzić testy i zebrać dane w zależności od dokładnego rodzaju / marki / materiału / itp. Papieru toaletowego.

Szczególnie w przypadku drugiego i trzeciego pomysłu zalecałbym regularne pobieranie danych z systemu, aby śledzić typową długość rolki, aby można było dostosować program do każdej znaczącej zmiany. Nawet w przypadku jednego rodzaju papieru toaletowego wyobrażam sobie, że będą pewne różnice w długości rolki.

Aby uzyskać jeszcze więcej zabawy, możesz oprzyrządować wykrywacz do zbierania danych szeregów czasowych, aby później móc przesłać je do komputera i wykonać wykres „zużycia papieru toaletowego w czasie” lub coś w tym rodzaju.

AJMansfield
źródło
2
Jestem wielkim fanem korzystania z enkodera obrotowego. Można by nawet zaprojektować, że uchwyt TP miał enkoder przymocowany do pręta przez rolkę, nie powodując w ten sposób ruchu na enkoderze. Można również użyć przycisku do zresetowania liczenia.
Steven10172
1
Ale powszechnym problemem byłoby określenie maksymalnej liczby obrotów, ponieważ zależy to od liczby arkuszy i ich grubości.
jfpoilpret
Zmieniłbym to z „Przymocuj urządzenie promieniujące do rolki papieru toaletowego” na mocowanie go do środkowego wałka, na którym on siedzi. Ten sam efekt, ale mniej konieczności ponownego podłączania czujnika do każdej rolki
Robotnik
1
Możesz określić liczbę obrotów, przenosząc cały TP z nowej rolki na szpulę w mierzonej roli i zliczając obroty za pomocą enkodera (za pomocą prostej funkcji DYI, takiej jak kilka pionowych kołków i po prostu owijając jedną drugą) . Następnie, gdy będzie pusty, powtórz. Sprawia, że ​​cała sprawa jest również łatwa w użyciu, ponieważ możesz po prostu ponownie używać tej samej szpuli, do której już podłączono enkoder, i owijać na nią nowy TP.
Jason C
1
@AJMansfield Zastanawiam się, czy niektóre koła wycięte z kartonu po bokach rolki odbiorczej (i trochę opieki) przyniosłyby zadowalające wyniki; jeśli rolki są na prętach do przenoszenia, możesz po prostu wbić otwór w środku tarcz i włożyć je. Na plus, jeśli zawsze kupujesz tę samą markę TP, będziesz musiał zrobić to tylko raz (i możesz mieć pod ręką listę obrotów dla różnych marek / typów, które odkryjesz - możesz być dumny prowadzący pierwszą na świecie bazę danych liczby spinów TP typu open source).
Jason C
7

Myślę, że „Arluin” i „jmathew” mają dobry pomysł. Użyj dźwigni spoczywającej na górnej części rolki.

Zrobiłbym to jednak nieco inaczej. Zamiast polegać na zamykaniu styków, możesz użyć potencjometru. Dzięki temu systemowi możesz zmierzyć pozostałą kwotę zamiast po prostu otrzymywać powiadomienia, gdy jej poziom się obniży.

W przypadku kontaktu takiego jak te już sugerowane, może się zaciąć papier w kontakcie, gdy się zamyka, a wtedy niski poziom papieru nie zostanie wykryty.

(Możesz potrzebować ciężarka, pokazanego na niebiesko na schemacie, aby popchnąć dźwignię w dół podczas korzystania z rolki)

Musisz spróbować zbliżyć pulę tak blisko rzutu, jak to możliwe, aby uzyskać maksymalne przesunięcie puli, a tym samym maksymalną rozdzielczość pozostałej kwoty.

Inną rzeczą, której możesz chcieć, jest rolka na końcu dźwigni, aby rolka papieru mogła się łatwo przesuwać z niewielkim przeciągnięciem w miejscu, gdzie dźwignia styka się z papierem.

Proponowana konfiguracja

DanJAB
źródło
4

Możesz po prostu otworzyć jedną z tych kart urodzinowych i dostosować przełącznik do ramienia uchwytu. Kiedy słyszysz z toalety „Happy Birthday”, wiesz, że masz kłopoty! (A ponieważ są bardzo słabej mocy, te rzeczy trwają wiecznie ;-)) Pokazałem tutaj konfigurację LED, ale masz pomysł ...

Wszystkiego najlepszego z okazji urodzin

Piasek
źródło
Czy możesz edytować swoje pytanie, aby powiedzieć, jak podłączyć ten przedmiot do tablicy Arduino? Dzięki!
Anonimowy pingwin
3

Zbudowałem tachometr odbijający dla Arduino, który prawdopodobnie rozwiązałby twój problem. Podstawowy obwód jest dość prosty:

obwód obrotomierza

Miałem fotorezystor, który dobrze reagował na czerwone światło, a drugi z Radio Shackktóry był dość wrażliwy na moc wyjściową IR starych diod LED telewizora. Do twoich celów, zielony przewód byłby podłączony do Analog Pin 0 Arduino, a ty po prostu musisz okresowo próbkować, nie ustawiając szkicu sterowanego przerwaniem. Sposób na uzyskanie różnicy sygnału odbitego między białym papierem a szarą rolką polega na tym, że wrażliwość światła na tranzystor zwiększa się, zwiększając odporność na GND, ale napięcie ciemne również rośnie. Przyszedłem empirycznie przez wartości 5 i 3 megohm, sprawdzając wartości AtoD ciemnych i jasnych obiektów w odległości kilku cali od detektora. Ta sama procedura powinna działać w przypadku wykrywania szarości w porównaniu z bielą. Chociaż niektóre rzeczy, które wyglądają zupełnie inaczej, mają ten sam współczynnik odbicia w podczerwieni. Oto zdjęcie gotowego obrotomierza z czerwonym światłem: wprowadź opis zdjęcia tutaj

Powinno być proste, aby płytka czujnika była wystarczająco mała, aby pasowała do tylnej części podajnika papieru. Wersja na podczerwień jest jeszcze mniejsza, ale zakopana zbyt głęboko w domowej wirówce, aby zrobić jej dziś zdjęcie.

Wayfaring Stranger
źródło
3

Myślę, że inną przyzwoitą i tanią opcją jest czujnik zbliżeniowy, taki jak w telefonie lub czujnik podczerwieni o stałym polu. Te czujniki są dość dokładne i można je łatwo wykorzystać do „spojrzenia” z tyłu rolki papieru toaletowego poprzez zamontowanie czujnika na uchwycie lub ścianie, na której umieszczona jest rolka papieru toaletowego. Wszystkie inne pomysły, które widziałem na słupku, były albo niedokładne, albo były nachalne w stosunku do papieru toaletowego, co na dłuższą metę może powodować zanieczyszczenie. Czujnik zbliżeniowy jest nie tylko dość tani i łatwy w użyciu, ale jeśli zostanie odpowiednio skalibrowany, może zapewnić bardzo dobrą dokładność i niezawodność. Ten model jest już szeroko stosowany w pisuarach męskich do automatycznego spłukiwania. Na przykład w telefonie: Twój telefon dokładnie zapewni odległość 2,0 cala lub nieskończoność, gdy dłoń lub twarz znajdują się w pobliżu ekranu.

Aditya Somani
źródło
Za 10 USD można uzyskać ten adafruit.com/products/466 1 cm-15 cm (idealny do rolki TP) i zaprojektowany tak, aby można go było łatwo zintegrować z mikrokontrolerem.
Jason C
@Jason C: Pierwsza próba polegała na użyciu VCNL4000, ale podobnie jak inne raporty, zatrzyma się / zatrzyma / zawiesi podczas odczytu. Nie widziałem, żeby ktoś to rozwiązał, nawet przy obniżeniu mA.
Jose Leon
@Aditya Korzystanie z czujnika zbliżeniowego HC-SR04 nie pomogło. Nie było różnicy między pełnym rzutem TP a pustym. Mogę zgadywać, że „echo” przechodziło prosto przez tkankę i zatrzymywało się przy metalowym pręcie trzymającym TP. Tak więc przynajmniej dla tego czujnika nie działał.
Jose Leon
@JoseLeon Rozumiem. To naprawdę dziwne. Zgadzam się z twoim rozumowaniem. Być może istnieje inny czujnik, który może działać, ale myślę, że twoje rozumowanie, że fale podczerwone powinny przechodzić przez papier toaletowy, wydaje się aktualne.
Aditya Somani
2

Ultradźwiękowy czujnik odległości bliskiego zasięgu może być skuteczną (i dość tanią) opcją. Możesz zamontować kombinację emiter + czujnik na chipie. Różne czujniki mogą działać na różne sposoby (zawsze sprawdź arkusz danych). Wspólne wyjście wykorzystuje jednak długość impulsu do wskazania wykrytej odległości. Możesz to przetworzyć w Arduino za pomocą pulseIn()funkcji.

Pod względem instalacji prawdopodobnie zmieścisz go bezpośrednio za papierem toaletowym, wskazując na środek szpuli. Odczyty są często dość nieregularne, więc chcesz wykonać kilka pomiarów i uśrednić je (lub użyć prostej średniej ruchomej). Po odrobinie kalibracji możesz ustalić, która odległość reprezentuje pustą szpulę.

Gdy kilkakrotnie wykrywasz tę odległość przez znaczny okres (np. Minutę lub dłużej), włączysz alarm.

Innym rozwiązaniem może być czujnik oparty na współczynniku odbicia, choć zastanawiam się, czy nie możesz znaleźć takiego, który będzie działał poprawnie na papierze toaletowym (w zależności od tego, jak miękka jest twoja ulubiona marka!).

Peter Bloomfield
źródło
Nie jestem pewien, czy uzyskasz wystarczającą dokładność za pomocą czujnika ultradźwiękowego; IIRC, większość z nich ma dokładność około 3-4 mm; ogólnie jest to dość dobre, ale biorąc pod uwagę średnicę rolki papieru toaletowego, może to być zbyt niedokładne.
jfpoilpret
Tak, często dotyczy to indywidualnego czytania. Wahania są jednak dość jednorodne, więc można uśrednić kilka kolejnych odczytów, aby temu przeciwdziałać. To może potencjalnie dać ci precyzję ~ 1 mm.
Peter Bloomfield
Co dzieje się, gdy papier toaletowy porusza się o 1 mm podczas odwirowywania od czujnika z pozostawieniem odrobiny papieru?
Anonimowy pingwin
1
@AnnonomusPerson Zawsze otrzymasz fałszywe odczyty, gdy pojawi się ruch. Dlatego zaczekaj, aż odczyt będzie stabilny przez znaczny okres, zanim zaczniesz działać.
Peter Bloomfield
@Peter R: Używanie czujnika zbliżeniowego HC-SR04 nie pomogło. Nie było różnicy między pełnym rzutem TP a pustym. Mogę zgadywać, że „echo” przechodziło prosto przez tkankę i zatrzymywało się przy metalowym pręcie trzymającym TP. Tak więc przynajmniej dla tego czujnika nie działał.
Jose Leon
2

Jednym z pomysłów, który przychodzi na myśl, byłoby coś takiego:

  • wsuń mały magnes do rolki papieru, tj. do części kartonowej (należy to robić za każdym razem, gdy ją zmieniasz; chociaż)
  • użyj kontaktronu (wyłącznik elektromagnetyczny) na końcu drążka zamontowanego ze sprężyną, aby zawsze mieć kontakt z rolką papieru
  • jeden styk kontaktronu może być bezpośrednio podłączony do logicznego styku wejściowego (ustaw go jako wejście rezystora podciągającego)
  • drugi styk kontaktronu należy podłączyć do ziemi

Zatem, gdy tylko odległość między magnesem a kontaktronem znajdzie się poniżej pewnego limitu, przełącznik zamknie obwód. Odległość ta zmniejszy się, gdy rolka papieru zostanie wyciągnięta.

Pamiętaj, że zamiast kontaktronu możesz także użyć czujnika Halla, zasady pozostają takie same, zmieniają się tylko technologia i cechy.

Trudność polega na znalezieniu właściwej czułości kontaktronu (lub siły magnesu), aby kontaktron został zamknięty, gdy odległość między nim a magnesem jest wystarczająco mała, aby uniknąć alarmu, który zostałby uruchomiony zbyt wcześnie ).

jfpoilpret
źródło
To nie zadziała z tego samego powodu, co czujnik ultradźwiękowy. Nadal będzie działać, mając co najmniej 10 stóp na nim. Czujnik koloru to lepszy pomysł.
Anonimowy pingwin
Nie widzę związku z czujnikiem ultradźwiękowym. Czy możesz dalej się rozwijać DLACZEGO to nie zadziała? Istnieje duża ilość kontaktronów i czujników efektu Halla, nie mówiąc już o różnych rodzajach magnesów.
jfpoilpret
Warstwa TP jest tak cienka, że ​​może się aktywować z odrobiną w lewo. Teoretycznie można go ulepszyć, ale naprawdę nieefektywne jest wyciągnięcie mikroskopu lub cokolwiek innego, aby zmienić rolkę papieru toaletowego.
Anonimowy pingwin
Aktywacja przy odrobinie lewej nie jest taka zła, ponieważ pytanie PO brzmi „... papier toaletowy jest niski ”; Niski niekoniecznie oznacza pusty.
jfpoilpret
2

Najprostszym, ale najlepszym rozwiązaniem, byłoby zastosowanie transoptora wykonanego z jednej diody LED IR i opto-tranzystora. Sprawiasz, że dioda LED rozjaśnia się w kierunku rolki, a dioda LED w rolce jest przywiązana do „uchwytu”. Po wyjęciu kartonowej rolki opto-tranzystor pobiera światło podczerwone z diody LED i wyzwala przerwanie zmiany pinów w Arduino, co może następnie ostrzegać na wiele sposobów (światło, SMS, Twitter, alarm…).

Ten projekt jest naprawdę tani, łatwy i szybki w budowie. Chociaż jest jeszcze jedna rzecz, którą musisz zrobić: kiedy nie ma już papieru toaletowego, musisz usunąć rolkę z tektury ;-)

W przeciwnym razie to samo rozwiązanie dla zapasowych rolek jest jeszcze lepszym pomysłem :-)

zmo
źródło
Czy transoptory nie mają pojedynczych układów, które zawierają zarówno emiter, jak i odbiornik? Zobacz tutaj: en.wikipedia.org/wiki/Opto-isolator
jfpoilpret
[…] Jest komponentem, który przesyła sygnały elektryczne między dwoma izolowanymi obwodami za pomocą światła […], więc w zasadzie to właśnie robimy, między diodą LED IR (jeden obwód) a fototranzystorem. Chociaż masz rację, nie jest to pojedynczy element (jak MOC3020).
zmo
2

Wiele opcji tutaj wydaje się nadmiernie skomplikowanych i nachalnych.

Czujnik koloru

Inną opcją, nieco skomplikowaną (ale zabawną) do wdrożenia, ale nieinwazyjną i łatwą w instalacji, jest zbudowanie taniego czujnika koloru i zamontowanie go na ścianie za rolką. Kiedy wykryjesz kolor rolki (lub brak koloru TP), jest on niski.

Możesz też kupić jeden za 8 USD .

Możesz dostosować próg, wykorzystując cienkość TP i fakt, że zaczyna wyglądać nieco ciemniej, gdy pozostało tylko kilka arkuszy.

W razie potrzeby kalibrację można wykonać, naciskając przycisk po zainstalowaniu nowej rolki z włączonymi światłami łazienki.

Będziesz musiał dokonać kilku korekt w zależności od specyfiki swojej łazienki. Jeśli dodasz dodatkową złożoność i wyłączysz go z gniazdka sieciowego, które było podłączone do włącznika oświetlenia w łazience, możesz włączyć go tylko wtedy, gdy włączone są światła w łazience, co odfiltrowałoby wiele niewiarygodnych danych.

Jest to bardzo łatwy w instalacji i nie wymaga modyfikacji samego rzutu. Możesz przykleić czujnik do ściany dwustronną taśmą lub położyć go na małej półce pod rolką skierowaną do góry (lub na górze skierowaną w dół).

Zerwanie wiązki IR

Zamontuj małą diodę IR LED po jednej stronie dozownika, tuż nad szpulą. Zamontuj czujnik podczerwieni po drugiej stronie dozownika. Gdy czujnik zobaczy diodę, rolka jest niska. Można to zrobić również za pomocą taniego lasera (np. Wskaźnik laserowy z półki z jednej strony i czujnik światłoczuły z drugiej; ale nie rań oczu!)

Jest to również łatwe do zainstalowania (np. Gorący klej do dozownika) i nie wymaga modyfikacji rolki, chociaż lokalizacja czujników może ułatwić ich uszkodzenie podczas wymiany rolek.


Bardzo podoba mi się także czujnik kontaktronowy i czujnik zasięgu (BTW: 10 USD daje świetny czujnik odległości krótkiego zasięgu ) tutaj.

Jason C.
źródło
1
Wiązka podczerwieni była moją pierwszą myślą. Prosty i łatwy do wdrożenia i prawdopodobnie bardziej niezawodny niż niektóre inne rozwiązania, choć może mniej zabawny :)
Kevin
Hehe, zgadzam się. Myślę, że czujnik kolorów byłby zabawny, przynajmniej od strony oprogramowania; gromadzenie danych i próba opracowania algorytmu odpornego na np. zmiany naturalnego oświetlenia lub inne fałszywe wyzwalacze byłyby niezłym wyzwaniem.
Jason C
1

Masz kilka opcji:

Uwaga: podane linki są tylko pierwszymi, które się pojawią. Większość z nich jest drogie w porównaniu do innych witryn. eBay go kupić teraz może być dość tanie dla większości tych przedmiotów. Sprawdź także inne miejsca, w tym Sparkfun .

  • Ultradźwiękowy czujnik ping . Nie jest to w żaden sposób idealne, ale są łatwe w użyciu. Wystarczy dodać jeden z załącznikiem. Nie jest idealny, ponieważ nie będzie wystarczająco dokładny, aby stwierdzić, kiedy dokładnie jest pusty. To może być trochę za bardzo / za wrażliwe. Ciężar byłby trudniejszy, gdyby w ogóle się zmienił.
  • Czujnik koloru (preferowany, ale kosztuje więcej) . Wspomniałeś o tym i jest to prawdopodobnie najlepszy pomysł. Otrzymasz wartości analogowe (do odczytu z Arduino) dla czerwieni, zieleni i niebieskiego. [Zakładając, że im wyższa zawartość tego koloru, tym wyższe napięcie,] biel powinna być prawie w całości na 100%, a brązowa, wyobrażam sobie, że większość z nich wynosiłaby około 30-40%. (Więcej później, jeśli tego nie rozumiesz, pomiń tę część)

Przejdę bardziej szczegółowo do czujnika koloru:

Kolory są tutaj odczytywane z trzema wartościami: czerwoną, zieloną i niebieską. Na płycie znajdują się trzy czujniki. Jeden odfiltrowuje wszystko oprócz czerwonego, drugi niebieski, a drugi zielony. Czujniki na płycie wykrywają ilość przychodzącego światła, a następnie przekształcają je w napięcie: między 5 V („100% czerwony / zielony / niebieski”) lub 0 V („0% czerwony / zielony / niebieski”). Następnie Arduino może je przekonwertować na liczbę (0-1024 na pinie analogowym).

Problem z oświetleniem: z tego, co mogę powiedzieć, ten czujnik ma diodę LED, która jest zawsze włączona. Będziesz chciał to wylutować lub przykryć, chyba że potrzebujesz podświetlanego uchwytu na papier toaletowy. Teraz poczekaj ... Twój czujnik pomyśli, że gdy jest ciemno, jest brązowy. Nie ma problemu ... oto coś, o czym możesz pomyśleć.

Użyj próbnika kolorów, tak jak ja, i wybierz kolor brązowy . Po lewej stronie możesz kontrolować „symulowaną jasność”. Poza tym jest to szesnastkowa forma RGB. Będziesz chciał przekonwertować to na standardowe wartości za pomocą tego kalkulatora .

W kolorze brązowym kolor niebieski prawie nie istnieje. Powinniśmy zignorować ten kolor, chyba że chcesz podwójnie sprawdzić, czy jest brązowy. Powiedziałbym, że zawsze powinno być poniżej 40% dla prawie każdego odcienia brązu.

Z tego, co mogę powiedzieć na przykładowym odcieniu brązu, czerwień jest prawie dwa razy większa niż zieleń. Że stosunek ten może się różnić, ale należy upewnić się, że jest to nieco istnieje. W przypadku bieli / szarości / czerni wszystkie kolory są proporcjonalne 1: 1: 1. Możesz użyć tego do wykrycia, czy jest ciemno, czy jest brązowo.

int rPin = A0;      //Red Pin
int gPin = A1;      //Green Pin
int bPin = A2;      //Blue Pin
int ledPin = 13;    //I made this code with a LED, not a speaker
boolean testTwice = false;

void setup() {
  pinMode(ledPin, OUTPUT);  
}

void loop() {
  int rValue = analogRead(rPin);
  int gValue = analogRead(gPin);
  int bValue = analogRead(bPin);

  if (bPin < 256) { //If this is false, either something is in the way or it's white. Going to verify that something's not in the way...
    int minRed = rPin * 0.4; //A little under a half for padding... this values may need to be adjusted. Adjust this one and the one below farther apart for less sensitive.
    int maxRed = rPin * 0.6; //A little over a half for padding... this values may need to be adjusted.
    if (gPin < maxRed && gPin > minRed) { //Verifys that red between minRed and maxRed
      digitalWrite(ledPin, HIGH);
      delay(5000);
      digitalWrite(ledPin, LOW);
    }
  }
  delay(5000); // No need to waste power... you might want to add an actutal sleep function if on battery power
}

Najpierw sprawdza, czy niebieski ma mniej niż 25%. Następnie sprawdza, czy czerwony i zielony są równe ... daj lub weź 20%. (tj. czerwony = 100 zielony = 80, czerwony = 110 zielony = 90 itp.). Jeśli to prawda, możesz prawie stwierdzić, że jest brązowy. Następnie dioda LED włącza się na pięć sekund.

Jeśli chcesz, możesz zmodyfikować diodę LED tak, aby była brzęczykiem. Być może będziesz musiał dostosować instrukcję if, sprawdzając, czy niebieski jest mniejszy niż 256/1024 (1024 = rozdzielczość analogowego pinu), jeśli nie działa w dużym świetle lub działa w ciemnym świetle. Ponieważ kod później weryfikuje, że czerwony jest około 2x zielony, żaden odcień bieli nie powinien przejść tego wyrażenia if. Konieczne może być również dostosowanie minRedi maxRedbycie dalej (jeśli nie wykrywa brązu) lub bliżej (jeśli wykrywa brąz, gdy jest biały). Naprawdę nie mogę przetestować tego kodu bez czujnika koloru.


Uwaga: mogą być trochę niespokojne. Poleciłbym zamiast tego diodę LED, aby cały dom nie obudził się w środku nocy tylko z powodu niskiego papieru toaletowego. Ponadto, jeśli w ogóle przeszkadzasz czujnikowi ... Gdyby nie było go w łazience, poleciłbym kamerę i niech zrobi zdjęcie za każdym razem, gdy robi się bardzo nisko, za pomocą przełącznika kontaktronowego, takiego jak odpowiedź @ jfpolipret ... ale ... (bez zamierzonej gry słów) :)

Anonimowy pingwin
źródło
Czy czujnik koloru będzie działał tak samo (tzn. Bez konieczności dostrajania szkicu), jeśli zmienisz kolor papieru toaletowego :-)?
jfpoilpret
@ jfpoilpret Nie wiem, czy ponownie użyjesz papieru toaletowego, czy nie, ale ... :) Dodaję kod z mechanizmami, aby był podobny, ale nie dokładny.
Anonimowy pingwin
Myślę, że papier toaletowy jest wystarczająco miękki, aby pochłonąć wybuch ultradźwiękowy z czujnika ultradźwiękowego
TheDoctor
@TheDoctor Tak naprawdę, jak już zauważyłem, nie jest to dobry pomysł. To sposób na niedokładność.
Anonimowy pingwin
1
@jfpoilpret Jeśli dodałeś przycisk „kalibruj” i nacisnąłeś go przy włączonych lampkach łazienkowych po zainstalowaniu nowej rolki, możesz zmierzyć właściwy kolor.
Jason C
1

Brzmi jak fajny projekt, oto moje 2 ct:

Skieruj aparat, aby zrobić zdjęcie rolki z boku, to prawdopodobnie jedyny sposób, aby naprawdę dowiedzieć się, ile papieru pozostało. (edytuj: Możesz użyć raspberry pi z kamerą csi i stworzyć sygnał wyjściowy odpowiadający liczbie arkuszy i podać ten sygnał do arduino ?!)

Dla celów szacunkowych może być również wystarczające policzenie obrotów rolki, ale musisz lepiej przechylić rolkę, aby się nie poślizgnęła. Możesz też użyć magnesów, tak jak na rowerach, ale wtedy muszą być bezpośrednio przymocowane do rolki.

(edytuj: jeszcze jeden pomysł, zmierz grubość rolki, mierząc kąt pokrywy)

Doręczyciel gazet
źródło
Witaj na Arduino Stack Exchange! Czy możesz powiedzieć, w jaki sposób podłączasz go do Arduino? Dzięki! Nie wiem też, jak dobrym pomysłem jest umieszczenie aparatu w łazience. :)
Anonimowy pingwin
Podoba mi się twój ostatnio edytowany pomysł; można to jeszcze bardziej uprościć za pomocą przełącznika na pokrywie, który zamyka obwód, gdy pokrywa osiągnie określony kąt; wydaje się to łatwiejsze niż zmierzenie samego kąta.
jfpoilpret
1

Najlepszą opcją jest podłączenie enkodera obrotowego z boku rolki i policzyć obroty rolki, aby określić, ile zużyto. Gdy poznasz liczbę obrotów na rolce, możesz ustawić, gdzie ma być uruchamiane powiadomienie. Dołącz go do swojego rodzaju systemu rejestrowania, a będziesz mieć historyczne dane dotyczące zużycia papieru i korzystania z toalety.

stav
źródło
Zgadzam się. Wydaje się, że ludzie komplikują to. Możesz także ponownie używać tej samej rolki z dołączonym enkoderem, przenosząc TP z nowej rolki na rolkę czujnika po jej napełnieniu (np. Połóż rolki na kilku tanich prętach ustalających i zawiń); pozwala to również policzyć, ile obrotów dla tego rzutu (po jego uzupełnieniu).
Jason C
1

Mówię: weź czujnik ciężaru i zaprogramuj go na ciężar rolki. Kiedy spadnie poniżej określonej masy, zacznij migać diodę LED lub zrób sygnał dźwiękowy.

I. Golsby
źródło
0

Innym sposobem, aby to zrobić, na wypadek, gdybyś chciał to dla zabawy, umieścić metalowy pręt w rolce i metalową płytkę na zewnątrz, i zmierzyć pojemność, która powinna się zmienić wraz z pozostałym TP z powodu stała dielektryczna papieru.

Ale na pewno byłby to „malowniczy szlak”. Mimo to Arduino może dość łatwo mierzyć pojemność, a może nawet być wystarczająco czuły i nie przeszkadzałby, ponieważ byłaby to tylko metalowa płytka za rolką i metalowy pręt w rolce. Być może będziesz w stanie zmodernizować istniejącego posiadacza, nie zauważając tego.

Łatwiejszym sposobem byłby drążek przymocowany do trzonu potencjometru, utrzymywany u góry rolki. Mniej TP, wałek obniża się i obraca doniczkę. Może być potrzebny długi wałek do dźwigni, ponieważ nie można naciskać zbyt mocno bez zakłócania funkcji wyciągania papieru toaletowego.

Jak zasugerował AJMansfield, radioaktywność jest faktycznie używana do pomiaru grubości rzeczy w warunkach przemysłowych. Jeśli naprawdę chciałbyś zwariować, być może użyłbyś źródła promieniotwórczego o bardzo niskim zużyciu energii, takiego jak puszka tego dziwnie smakującego zamiennika soli, który jest nieco powyżej poziomów tła i średnio przez bardzo długi czas (papier toaletowy nie powinien się bardzo zmieniać od godziny na godzinę), więc może to być rozsądny, choć drogi sposób na zrobienie czegoś.

Czujniki przerwania wiązki podczerwieni są również dobre, a jeśli ustawisz go prawidłowo, możesz zmusić go do blokowania większej ilości światła, tym pełniejszy rolka zamiast dawać ci tylko sygnał włączenia lub wyłączenia.

EDYCJA: Dowód roboczy koncepcji podejścia pojemnościowego. Potrzebuje tylko arduino i 2 sztywnych drutów. Dokładnie do około 8 cala, z dużym hałasem. Jestem pewien, że możesz niezawodnie uzyskać co najmniej 1 calową dokładność. Czas pomiaru wynosi około minuty. Jest bardzo wrażliwy na otoczenie. Musisz upewnić się, że metal w stopie pozostanie tam, gdzie to było, lub użyć osłony.

float difference;
unsigned long i;
unsigned long j;
unsigned int temp;
volatile unsigned char blah;

void setup()
{
  pinMode(5,OUTPUT);
  Serial.begin(9600);
}

void loop()
{
 difference =0;
 Serial.print("Measuring: ");

 for(i=0;i<100;i++)
   {
     for(j=0;j<5000;j++)
     {
       digitalWrite(5,LOW);

       temp=analogRead(A0);

       digitalWrite(5,HIGH);

       temp = analogRead(A0)-temp;
       if(temp<1024)
       {
         difference += temp;
       }

     }
     //Random delay every 5000 samples helps avoid problems with interference by staggering the samples to cancel aliasing.
     delay(random(1,50));
     Serial.print("|");

   }
   Serial.print("\n");
   Serial.print("Value: ");
   Serial.print(difference/500000);
   Serial.print("\nMeasurement Complete. Press Enter to begin another test.\n");

   while(!Serial.available())
   {
     blah = 20;
   }
   Serial.read();


}

http://pastebin.com/2W5y81AB

EternityForest
źródło
Lepiej podać kod w odpowiedzi zamiast linku zewnętrznego. Jeśli link się zepsuje w przyszłości, Twoja odpowiedź będzie nadal aktualna.
sachleen