Skocz do zawartości

radex324

Użytkownicy
  • Zawartość

    26
  • Rejestracja

  • Ostatnio

Reputacja

1 Neutralna

O radex324

  • Ranga
    3/10
  1. @marek1707 Samochód podczas postoju pobiera około 10-20mA, moje arduino po podaniu napięcia czeka 30s i się usypia(zmniejsza pobór do 2mA) potem oczekuje na 2 sygnały(wysokie) D2 D3 otwarcia lub zamknięcia samochodu. Jeżeli auto się otworzy to arduino wstaje i już nie pójdzie spać, włączy na chwile przekaźnik i tak sobie będzie czekać na sygnał zamknięcia który spowoduje włączenie przekaźnika nr.2 na chwilkę i pójdzie spać. Chcę dorobić tylko to aby co 8s zrestartował się watchdog, aktualnie się bawię z watchdog ustawiając go na 8s i wstawiając delay na 9-10 sekund aby symulować zacinanie się procesora, jednak arduino tkwi w pętli restartów(miga dioda "L"). Mozliwe że źle zrozumiałem działanie watchdog i temu robię takie głupie testy. #include <avr/wdt.h> int licznik = 0; void setup(){ Serial.begin(115200); wdt_enable(WDTO_8S); Serial.println("!!! RESTART !!!"); } void loop(){ licznik++; Serial.print("Licznik = "); Serial.println(licznik); delay(10000); // symulacja zaciecia wdt_reset(); } Winą jest stary bootloader, muszę wgrać nowszą wersje. ps. http://donalmorrissey.blogspot.com/2010/04/sleeping-arduino-part-5-wake-up-via.html Z tej strony informacje wziąłem i zrobiłem to co chciałem. Kod jednak nie działa wg. moich założeń restartuje się podczas snu.
  2. Wydaje mi się że kod się nigdy nie powinien zaciąć, nie posiadam ani jednego delaya, przy sterowaniu przekaźników wysyłam po UART "silnik 1 włączony" itp. No ale wolałbym aby arduino się zresetowało jeżeli za tydzień,miesiąc, rok się zatnie a ja będę musiał rozbierać pół samochodu aby się do niego dostać.
  3. No właśnie moja płytka po uspaniu pobiera 2-3mA, przy normalnej pracy ok 15mA, układ musi być usypiany bo będzie na stałe w samochodzie i nasłuchuje na naciśnięcie przycisku(podanie napięcia na D2 lub D3) przekaźniki są uruchamiane tylko gdy auto będzie odpalone więc wtedy pobór prądu ok 37mA mnie nie martwi. Czytam właśnie jak zrobić przerwanie wewnętrzne które obudzi procesor, zrestartuje watchdog, i uśpi arduino, do arduino nie będzie dostępu więc jak się zatnie to kaplica.
  4. Super poradnik tam jest ale nie ogarniam jeszcze, watchdog chcę bo do modułu nie będzie dostępu i nie może się zaciąć, pomożesz dodać watchdoga do tego co teraz mam?
  5. Zmodyfikowałem układ, zastosowałem przerwania, zasilanie ACS poprzez tranzystory i pobór prądu podczas spania to 2mA więc chyba tragedii nie ma.
  6. Usypiam arduino aby oszczędzać prąd w aucie w taki sposób, void sleepNow() // here we put the arduino to sleep { set_sleep_mode(SLEEP_MODE_PWR_DOWN); // sleep mode is set here sleep_enable(); // enables the sleep bit in the mcucr register attachInterrupt(0,wakeUpNow_1, HIGH); // use interrupt 0 (pin 2) and run function attachInterrupt(1,wakeUpNow_2, HIGH); // use interrupt 0 (pin 2) and run function sleep_mode(); sleep_disable(); // first thing after waking from sleep: Wlacz_Zasilanie_ACS; detachInterrupt(0); // disables interrupt 0 on pin 2 so the detachInterrupt(1); // disables interrupt 0 on pin 3 so the } Wybudzany procesor jest przez D2 D3 potem po 25s procesor z powrotem się usypia, chce dodać watchdog aby procesor się nie zaciął a jeżeli już to ma się zresetować. Arduino steruje przekaźnikami około 5s i potem 25s czeka i się usypia.
  7. Witam, udało mi się stworzyć pewien i ten program się usypia i jest wybudzany poprzez przerwania zewnętrzne D2 D3 i teraz co zrobić aby dodać do tego watchdog? Jak wybudzać procesor co 7-8s aby zrestartować watchdog?
  8. Nie mogę zmienić bo pcb już gotowa, a moduł musi działac mimo wyłączenia auta.
  9. Witam, stworzyłem urządzenie które steruje przekaźnikami 12V poprzez PC817C i posiada 2 moduły ACS712-30A. Transoptory są podłączone pod wyjścia D7, D6, D4, D3 a ACS712 pod piny analogowe A0, A1. Pod A2, A3, A4 są podłączone dzielniki napięcia które wykrywają 12V. Układ po podłączeniu zasilania pobiera 37mA prądu(po wylutowaniu LED z ACS712) Jak zmniejszyć pobór prądu? Urządzenie będzie podłączone na stałe w samochodzie.
  10. Faktycznie pomyliło mi się przez złą nazwę, a co do zerowania to już to usuwam bo używałem to w innym kodzie gdzie musiało być zerowanie.
  11. Masz racje z tym podwójnym pomiarem, przerobiłem sobie kod który już działa na 2 czujnikach ale wywala mi błąd. Nie mam pojęcia co robię źle obie zmienne są tego samego typu. //Pobierz liczbe milisekund od startu aktualnyCzas = millis(); roznicaCzasu = aktualnyCzas - zapamietanyCzas; /*odczyt pradu z czujnikow */ float I1 = sensor1.getCurrentDC(); float I2 = sensor2.getCurrentDC(); /*odczyt pradu z czujnikow */ if (roznicaCzasu >= 1UL) { //Zapamietaj aktualny czas Prad1[x] = I1; Prad2[x] = I2; x++; if(x > 9){ x = 0; Suma1 = 0; Suma2 = 0; } } Suma1 = Prad1[0] + Prad1[1] + Prad1[2] + Prad1[3] + Prad1[4] + Prad1[5] + Prad1[6] + Prad1[7] + Prad1[8] + Prad1[9]; Prad1 = Suma1 / 10 ; Suma2 = Prad2[0] + Prad2[1] + Prad2[2] + Prad2[3] + Prad2[4] + Prad2[5] + Prad2[6] + Prad2[7] + Prad2[8] + Prad2[9]; Prad2 = Suma2 / 10 ; incompatible types in assignment of 'float' to 'float [10]' Te wysyłanie na serial to tylko test potem to będzie wyłączone jak podłącze silniki i będę na żywo testował.
  12. Zrobiłem to po swojemu ale dzięki za pomoc, jeszcze trochę potrwa zanim ogarnę bardziej. void loop() { aktualnyCzas = millis(); roznicaCzasu = aktualnyCzas - zapamietanyCzas; //Jeśli różnica wynosi 10ms if (roznicaCzasu >= 10UL) { //Zapamietaj aktualny czas I3[x] = analogRead(A6); I4 = analogRead(A6); x++; if(x > 9){ x = 0; Suma3 = 0; } } Suma3 = I3[0] + I3[1] + I3[2] + I3[3] + I3[4] + I3[5] + I3[6] + I3[7] + I3[8] + I3[9]; Prad3 = Suma3 / 10 ; Serial.print("Prad I3 = "); Serial.print(Prad3); Serial.print(" Odczyt ADC "); Serial.println( I4 );
  13. Nie wiem za bardzo jak używać tablic, a program działa po prostu tak że silnik jest sterowany w pewnych momentach a pomiar prądu ma być ciągle wykonywany co około 100ms i uśredniany. Zrobiłem coś takiego i chyba działa aktualnyCzas = millis(); roznicaCzasu = aktualnyCzas - zapamietanyCzas; if (roznicaCzasu >= 10UL) { //Zapamietaj aktualny czas I3[x] = analogRead(A6); x++; if(x > 9){ x = 0; Suma3 = 0; } } Suma3 = I3[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]; Prad3 = Suma3 / 10 ; Serial.print("Prad I3 = "); Serial.print(Prad3); Serial.print(" Odczyt ADC "); Serial.println( I3[x] );
  14. Nie mam pojęcia jak to zrobić aktualnie mam zrobione tak jak w poniższym kodzie ale nie działa to jak należy bo robi średnia i przechodzi dopiero dalej a musi to w czasie rzeczywistym być i najlepiej w odstępach 100ms 10 pomiarów. Mój kod nie ma żadnego delay(oprócz 5ms na średniej) bo nie może być i musi mierzyć prąd silnika w czasie jego pracy. Nie może to chyba być w pętli for bo ona blokuje program na chwile. for(int i = 0; i < 10; i++){ Suma3 = Suma3 + I3 ; delay(5); /////////////////// TEST } Prad3 = Suma3 / 10 ; Suma3 = 0; Serial.print("Prad I3 = "); Serial.print(Prad3); Serial.print(" Odczyt ADC "); Serial.println( I3 ); A najlepiej jakby średnia była z 20-30 pomiarów + usuwanie śmieci poniżej 0.5A
×
×
  • Utwórz nowe...