Skocz do zawartości
xien

Własne arduino i problem z zasilaniem

Pomocna odpowiedź

Napisano (edytowany)

Hej, zbudowałem sobie takie samodzielne Arduino w oparciu o ATmega328p, jako mój programator służy arduino, z jego pomocą wgrałem bootloader na wyżej wymienioną atmege. I pojawił się problem gdy wgrywam za pomocą programatora(arduino as isp) program(miganie diodą) i podpinam zewnętrzne zasilanie, odpinam programator wszystko działa okej, ale gdy wgrałem sobie drugi program(sterowanie serwomechanizmem z pomocą modułu bluetooth HC-05) to jeśli jestem na zasilaniu z programatora(arduino) to program działa, natomiast jeśli odepnę i podłącze zewnętrzne zasilanie 5V to wtedy nie działa, (chyba) układ jest zasilony bo zapala się dioda z funkcji setup(), ale to co dzieje się w loop() tak jakby już nie działało bo nie ma mrugnięcia diodą a więc tym samym i sam serwomechanizm nie działa. Będę wdzięczny za wszystkie pomysły które mogą pomóc rozwiązać problem. Poniżej fragment kodu gdyby był potrzebny. Dodałem również schemat rozważałem rozdzielenie zasilania atmegi 5V i serwomechanizmy odzielnie na 6V(docelowo 4 serwomechanizmy), ale jeszcze nie wiem jak to się do końca łączy czy masy zasilania razem czy osobno czy w jakiś inny sposób(fajnie jakby ktoś się również tą wiedzą podzielił) ale na ten moment jest na jednym zasilaniu 5V całość atmega jak i 1 serwomechanizm. Na rx/tx dałem konwerter poziomów logicznych 5V/3.3V i jest też stabilizator żeby zrobić 3.3V. JP2 na schemacie to goldpiny na podpięcie serwa.

#include <Servo.h>
#include <SoftwareSerial.h>

Servo s1;

int bluetoothTx = 11;
int bluetoothRx = 10;
SoftwareSerial bluetooth(bluetoothTx, bluetoothRx);
unsigned int servopos = 0;
unsigned int servopos1 = 0;
unsigned int servopos2 = 0;
unsigned int realservo = 0;

void setup() {
 s1.attach(9);
 bluetooth.begin(9600);
 pinMode(8, OUTPUT);
 digitalWrite(8, HIGH); 
}

void loop() {
if(bluetooth.available() >= 2)
 {
   digitalWrite(8, LOW);
   delay(700);
   digitalWrite(8, HIGH);
   servopos1 = bluetooth.read();
   
   servopos2 = bluetooth.read();
   realservo = servopos1 + (servopos2*256);
   Serial.print("Realservo - odczyt: ");
   Serial.println(realservo);

    if(realservo >=0 && realservo <=180)
   {
     digitalWrite(8, LOW);
     delay(300);
     digitalWrite(8, HIGH);
     digitalWrite(8, LOW);
     delay(300);
     
     digitalWrite(8, HIGH);
     s1.write(realservo);

     Serial.print("Pozycja serwo s1 ");
     Serial.println(realservo);
     delay(200);
   }
 }

 

schemat.jpg

Edytowano przez xien
Dodano schemat + aktualizacja opisu

Udostępnij ten post


Link to post
Share on other sites

Pewnie za mało wydajne zasilanie nie radzi sobie z zasileniem serwa.

Udostępnij ten post


Link to post
Share on other sites

Przeniosłem układ na diody żeby sprawdzić czy faktycznie zasilanie nie wyrabia i okazało się, że zachowuje się tak samo. Kiedy arduino było podpięte jako isp
Arduino | ATmega
   D10  -> RESET
   D11  -> MOSI
   D12  -> MISO
   D13  -> SCK
to zauważyłem że po odpięciu MOSI, MISO, SCK układ działał ale przy odpięciu reset zachowywał się tak jak opisywałem czyli tak jakby działało tylko to co jest w setup(), być może to jest problemem ale czym to może być spowodowane?

Udostępnij ten post


Link to post
Share on other sites

No to pewnie moduł bluetooth nie jest "available" z powodu mało wydajnego zasilania.

Udostępnij ten post


Link to post
Share on other sites

A w tym twoim Arduino podciągnąłeś reset do 5V za pomocą rezystora 10K?

Udostępnij ten post


Link to post
Share on other sites

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ę »

×