Skocz do zawartości

Spalone arduino UNO R3


Arius

Pomocna odpowiedź

Witam,
Dzisiaj chciałem przetestować czy znaleziony w domu samochód RC jest jeszcze na chodzie, ale brakowało mi akumulatora więc postanowiłem go zasilić z pinu 5V arduino, które było zasilane z zasilacza 12V 900mA. Początkowo bodajże dioda L gasła i się zapalała (tak wiem, że w tym momencie powinienem odpuścić), potem poszedł dym z diod RX, TX. Natychmiast odłączyłem zasilanie. Teraz po podłączeniu diody RX oraz TX cały czas się świecą i delikatnie grzeją, a komputer nie rozpoznaje urządzenia po podłączeniu przez USB. Mierząc napięcie dostaję na pinie:

5V ---> 4,75V

3,3V ----> 3,3V

Vin -----> 4,09V

Mierzyłem tu spadek napięcia na oporniku 1k, natomiast przy podłączeniu multimetru bezpośrednio pod Vin i GND dostaję ok. 4,7V, więc dużo więcej niż z opornikiem (czemu?).

Pytanie do Was, co mogę z tym jeszcze zrobić, czy w ogóle jest jeszcze co ratować czy kupić nowe?

Sam bym podejrzewał na pewno stabilizator napięcia i pewnie mikrokontroler.

I rozumiem, że arduino oberwało tutaj od napięcia wstecznego z silnika tak? Ale czy nie powinien być on zabezpieczony jakąś diodą? I dlaczego nic się nie dzieje z akumulatorem jeśli nim zasilamy ten układ?

Link do komentarza
Share on other sites

I rozumiem, że arduino oberwało tutaj od napięcia wstecznego z silnika tak? Ale czy nie powinien być on zabezpieczony jakąś diodą? I dlaczego nic się nie dzieje z akumulatorem jeśli nim zasilamy ten układ?

Jeśli zasilałeś pojazd z 5V dostępnego na płytce Arduino, to cały prąd szedł przez malutki stabilizator wbudowany w Arudino, z którego nie można pobierać dużego prądu. Jak przeczytasz poniższy artykuł to będziesz wiedział jak dokładnie jest ono zbudowane: Arduino, co w środku piszczy – #1 – schemat. Ciężko powiedzieć co dokładnie zostało uszkodzone oprócz stabilizatora. W najgorszym wypadku mogłeś też uszkodzić mikrokontroler i inne elementy.

Link do komentarza
Share on other sites

Cześć

Uznałem, że odkopię temat bo spaliłem swoją płytkę i chciałbym wiedzieć na 100% co zrobiłem źle.

Otóż chciałem sprawdzić tego kodu, nie jestem jego autorem. Usunąłem tylko funkcję PULLUP i zmieniłem digitalREAD z LOW na HIGH.

Klawisze były podłączone w ten sposób schemat, tylko oczywiście 4 sztuki no i oporniki 10k(zostały z poprzedniego projektu i nie wymieniłem). Do tego wyświetlacz 20x4 i2c.

Płytka była podpięta pod usb+ zasilacz 1.5a

Program się uruchomił jednak gdy wcisnąłem jeden z klawiszy wystąpił efekt jakby arduino straciło zasilanie a komputer już go nie wygrywa. Oczywiście program się już nie uruchamia.

#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27, 20, 4);   // I2C address: "0x3F" or "0x27"

const byte upButtonPin = 10;
const byte downButtonPin = 11;
const byte rightButtonPin = 12;
const byte leftButtonPin = 13;
const byte tweeterPin = 9;
const byte ledPin = 13;
const byte ledPin_fade = 10; 
int fade = 0;


String MenuItems[] = {  // Your menu items
  "LED Switch",
  "LED Brightness",
  "menuitem 3",
  "menuitem 4",
  "menuitem 5",
  "menuitem 6" 
  // and so on... 
};

void menuFunctions(int menu, byte right, byte left)  // Your menu functions
{
  if(menu == 1) // example function for 1. menu item
  {
    if(right == 1)
    {
      lcd.setCursor(0, 3);
      lcd.print("Off   ");
      lcd.setCursor(10, 3);
      lcd.print("On  <<");
      digitalWrite(ledPin, HIGH);
    }
    if(left == 1)
    {
      lcd.setCursor(0, 3);
      lcd.print("Off <<");
      lcd.setCursor(10, 3);
      lcd.print("On    ");
      digitalWrite(ledPin, HIGH);
    }
  }
  if(menu == 2) // example function for 2. menu item
  {
    if(right == 1)
    {
      fade += 20;
      if(fade >= 255)
      {
        fade = 255;
      }
    }
    if(left == 1)
    {
      fade -= 20;
      if(fade <= 0)
      {
        fade = 0;
      }
    }
    lcd.setCursor(0, 3);
    lcd.print("Brightness:     ");
    lcd.setCursor(12, 3);
    lcd.print(fade);
    analogWrite(ledPin_fade, fade);
  }
  if(menu == 3)
  {
    lcd.setCursor(0,2);
    lcd.print("Hello Menu Item 3");
  }
  // and so on... 
}


/***  do not modify  ***********************************************/
template< typename T, size_t NumberOfSize > 
size_t MenuItemsSize(T (&) [NumberOfSize]){ return NumberOfSize; }
int numberOfMenuItems = MenuItemsSize(MenuItems) - 1;
int currentMenuItem = 0;
int previousMenuItem = 1;
byte button_flag = 0;
unsigned long previousMillis = millis();
const int note = 4699;
void beepsOnce()
{
  tone(tweeterPin, note, 125);
  delay(60);
  noTone(tweeterPin);
}
/*******************************************************************/

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

  /************************************/
  pinMode(upButtonPin, INPUT);
  pinMode(downButtonPin, INPUT);
  pinMode(rightButtonPin, INPUT);
  pinMode(leftButtonPin, INPUT);
  
  lcd.init();
  lcd.backlight();
  lcd.begin(20, 4);
  //lcd.noBacklight();
  lcd.clear();
  lcd.setCursor(2, 1);
  lcd.print("myhomethings.eu");
  lcd.setCursor(0, 3);
  lcd.print("Simple Dynamic Menu");
  delay(5000);
  lcd.clear();
}

void loop() 
{
  if(digitalRead(rightButtonPin) == HIGH && button_flag == 0)
  {
    menuFunctions(currentMenuItem + 1, 1, 0);
    button_flag = 1;
    previousMillis = millis();
    beepsOnce();
  }
  if(digitalRead(leftButtonPin) == HIGH && button_flag == 0)
  {
    menuFunctions(currentMenuItem + 1, 0, 1);
    button_flag = 1;
    previousMillis = millis();
    beepsOnce();
  }
  if(digitalRead(upButtonPin) == HIGH && button_flag == 0)
  {
    ++currentMenuItem;
    if(currentMenuItem > numberOfMenuItems )
    {
      currentMenuItem = numberOfMenuItems ;
    }
    button_flag = 1;
    previousMillis = millis();
    beepsOnce();
  }
  else if(digitalRead(downButtonPin) == HIGH && button_flag == 0)
  {
    currentMenuItem--;
    if(currentMenuItem < 0)
    {
      currentMenuItem = 0;
    }
    button_flag = 1;
    previousMillis = millis();
    beepsOnce();
  }
  if(currentMenuItem != previousMenuItem)
  {
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Menu Item:");
    lcd.setCursor(0, 1);
    lcd.print(MenuItems [currentMenuItem]);
    menuFunctions(currentMenuItem + 1, 0, 0);
    previousMenuItem = currentMenuItem;
  }
  if(millis() - previousMillis >= 400) 
  {
    previousMillis = millis();
    button_flag = 0;
  }
}

 

Link do komentarza
Share on other sites

@Adadadi witam na forum 🙂 Czyli dla uporządkowania, w praktyce:

  • Zwarłeś za pomocą przycisku wyjście nr 7 z dodatnią szyną zasilania.
  • W programie wyjście nr 7 nie było skonfigurowane ani jako wejście, ani jako wejście PULLUP, ani jako wyjście
  • Arduino przestało zupełnie działać dopiero po wciśnięciu przycisku.

Zgadza się?

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Klawisze były podłączone tak 

const byte upButtonPin = 10;

const byte downButtonPin = 11;

const byte rightButtonPin = 12;

const byte leftButtonPin = 13; 

Tutaj nie było pullup bo w układzie były oporniki

pinMode(upButtonPin, INPUT);

  pinMode(downButtonPin, INPUT);

  pinMode(rightButtonPin, INPUT);

  pinMode(leftButtonPin, INPUT);

 

W "if'ach" też jest digitalread

  Ale pokrótce to zwarlem linie 5v z którymś wejściem od 13-10 przez guzik.

No i nie widzę w którym miejscu kodu jest błąd więc pytam bardziej doświadczonych. 

 

Link do komentarza
Share on other sites

Zmylił mnie Twój schemat. W takim razie, podsumowując: piny były ustawione jako wejścia i zostały zwarte z 5 V. W takim razie Arduino nie powinno się spalić po wciśnięciu przycisku (reszta programu nie ma z tym nic wspólnego). Z jakiego dokładnie Arduino korzystasz? Jaka płytka? Oryginał, czy klon? Czy zasilacz był podłączony przez złącze do zasilacza, czy jakoś inaczej?

Aktualizacja:

Teraz jeszcze widzę, że pin nr 13 masz wykorzystany zarówno jako wyjście dla wbudowanej diody, jak i na wejście dla przycisku - tutaj mógł wystąpić jakiś konflikt.

 

Link do komentarza
Share on other sites

Płytka z botlanda. Oczywiście nie wykluczam, że mogłem w którymś miejscu popełnić błąd na płytce stykowe. Skoro doszło do zawarcia to coś musiało być nie tak. No coś płytkę drugą i tak zamówiłem. Pozostaje bardziej uważać na przyszłość.

 

EDIT: Mimo wszystko dzięki za odpowiedź. Temat dalszej walki będę kontynuował w temacie odnośnie budowy menu na arduino.

 

Edytowano przez Adadadi
Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.