Skocz do zawartości

Pomocna odpowiedź

Napisano

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?

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.

  • 4 lat(a) później...

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;
  }
}

 

@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ę?

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. 

 

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.

 

(edytowany)

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

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...