Uno R3 und HC05

Ich versuche gerade mein neues HC05 Modul am Arduino Uno R3 in Betrieb zu nehmen.
Nach den Anleitungen, die im Netz zu finden sind, sollte diese Verbindung hier ausreichen:
HC05 VCC -> ARD 5V
HC05 GND -> ARD GND
HC05 TX -> ARD RX (Pin0)
HC05 RX -> ARD TX (Pin1)

An dem HC05 steht "Power:3.6V - 6V", die 5V Versorgung sollte also passen.
Die Spannungsversorgung des Uno kommt über USB (PC oder Netzteil, kein Unterschied).
Die LED auf dem Uno blinkt, d.h. die Software läuft.

Das Problem:
Auf dem HC05 blinkt nichts
Auf dem Smartphone sehe ich den HC05 nicht bei den Bluetooth-Geräten

Was mache ich falsch?
Hier im Forum hatte jemand schon mal das gleiche Problem, hat aber am Ende leider nicht mitgeteilt, woran es gelegen hatte.

Der Code ist Standard:

#include "Arduino.h"
char blueToothVal; //Werte sollen per Bluetooth gesendet werden
char lastValue;   //speichert den letzten Status der LED (on/off)

bool ledState = 0;
long timerMs = 0;
long timerMs_last = 0;

void setup(){
	Serial.begin(9600);  //serieller Monitor wird gestartet, Baudrate auf 9600 festgelegt
	pinMode(13, OUTPUT);  //PIN 13 wird als Ausgang festgelegt
	pinMode(11, OUTPUT);
	pinMode(10, OUTPUT);
}

void loop(){
  if(Serial.available()) //wenn Daten empfangen werden...
  {
      blueToothVal=Serial.read();//..sollen diese ausgelesen werden
  }
  if (blueToothVal=='1') //wenn das Bluetooth Modul eine „1“ empfängt..
  {
    digitalWrite(13,HIGH);   //...soll die LED leuchten
    if (lastValue!='1') //wenn der letzte empfangene Wert keine „1“ war...
      Serial.println(F("LED is on")); //..soll auf dem Seriellen Monitor „LED is on“ angezeigt werden
    lastValue=blueToothVal;
  }
  else if (blueToothVal=='0') //wenn das Bluetooth Modul „0“ empfängt...
  {
    digitalWrite(13,LOW);  //..soll die LED nicht leuchten
    if (lastValue!='0')  //wenn der letzte empfangene Wert keine „0“ war...
      Serial.println(F("LED is off")); //..soll auf dem seriellen Monitor „LED is off“ angezeigt werden
    lastValue=blueToothVal;
  }

	timerMs = millis();
	if ((timerMs - timerMs_last) > 1000)
	{
    ledState = 1 - ledState;
    digitalWrite(10, ledState);
		timerMs_last = timerMs;
	}

}

Danke für Eure Hilfe,
Axel

Der Code kam mir bekannt vor...

Auch wenn es dort heisst,

Beim Hochladen auf den Mikrocontroller muss das Bluetooth Modul herausgenommen werden.

würde ich das Modul extra betreiben und einen softwareSerial aufmachen.

Wenn Du RX und TX richtig verdrahtet hast, sollte es eigentlich gehen...

Ansonsten: Bild vom Aufbau von Oben, das man das gut erkennt.

#include "Arduino.h"
#include <SoftwareSerial.h>

SoftwareSerial mySerial(8, 9); // RX, TX

char blueToothVal; //Werte sollen per Bluetooth gesendet werden
char lastValue;   //speichert den letzten Status der LED (on/off)

bool ledState = 0;
long timerMs = 0;
long timerMs_last = 0;

void setup(){
  Serial.begin(9600);  //serieller Monitor wird gestartet, Baudrate auf 9600 festgelegt
  mySerial.begin(9600);
  pinMode(13, OUTPUT);  //PIN 13 wird als Ausgang festgelegt
  pinMode(11, OUTPUT);
  pinMode(10, OUTPUT);
}

void loop(){
  if(mySerial.available()) //wenn Daten empfangen werden...
  {
      blueToothVal=mySerial.read();//..sollen diese ausgelesen werden
  }
  if (blueToothVal=='1') //wenn das Bluetooth Modul eine „1“ empfängt..
  {
    digitalWrite(13,HIGH);   //...soll die LED leuchten
    if (lastValue!='1') //wenn der letzte empfangene Wert keine „1“ war...
      Serial.println(F("LED is on")); //..soll auf dem Seriellen Monitor „LED is on“ angezeigt werden
    lastValue=blueToothVal;
  }
  else if (blueToothVal=='0') //wenn das Bluetooth Modul „0“ empfängt...
  {
    digitalWrite(13,LOW);  //..soll die LED nicht leuchten
    if (lastValue!='0')  //wenn der letzte empfangene Wert keine „0“ war...
      Serial.println(F("LED is off")); //..soll auf dem seriellen Monitor „LED is off“ angezeigt werden
    lastValue=blueToothVal;
  }

  timerMs = millis();
  if ((timerMs - timerMs_last) > 1000)
  {
    ledState = 1 - ledState;
    digitalWrite(10, ledState);
    timerMs_last = timerMs;
  }

}

Bist du denn sicher, dass der Sketch fehlerfrei auf den Uno geladen wurde ?
Wenn du D01 und D1 für den HC-05 verwendest, gibt es meist beim Upload Probleme.
Daher folge dem Tipp von @my_xy_projekt und verwende SoftwareSerial.

Hallo,
ich weiß gar nicht wie jemand sowas öffentlich anbieten kann. Entweder benutzt man die Serielle für das zusätzliche Modul , oder aber für die Monitorausgabe. Was soll das Modul mit dem Text "LED ist on" anfangen. Beides geht nicht. Dazu nutzt man eine 2. Schnittstelle.
Bei dem Vorschlag von @my_xy_projekt solltest Du natürlich dann auch das Modul an pin8 und 9 anschließen.
Heinz

Richtig :slight_smile:

Da ich keine Widerstände für den Spannungsteiler zur Hand habe, dachte ich mir ich gehe den "einfachen" Weg und nehme sicherheitshalber D0 und D1. Dass ich das Modul zum Upload rausnehmen muss, nehme ich erstmal in Kauf.

Ja bin ich. Ich hatte die Blinkfrequenz geändert. Daran sehe ich dass der neue Sketch läuft.

Braucht man nicht Interrupt-fähige Pins für das Modul? Das wären dann beim Uno Pin2+3. In meiner geplanten Anwendung werde ich allerdings Interrupts brauchen, so dass ich vermutlich sowieso bei D0+D1 bleiben muss (Korrigiert mich bitte, wenn ich falsch liege)

Ok, hab ich rausgeworfen, keine Änderung:

#include "Arduino.h"
char blueToothVal; //Werte sollen per Bluetooth gesendet werden
char lastValue;   //speichert den letzten Status der LED (on/off)

bool ledState = 0;
long timerMs = 0;
long timerMs_last = 0;

void setup(){
	Serial.begin(9600);  //serieller Monitor wird gestartet, Baudrate auf 9600 festgelegt
	pinMode(13, OUTPUT);  //PIN 13 wird als Ausgang festgelegt
	pinMode(11, OUTPUT);
	pinMode(10, OUTPUT);
}

void loop(){
  if(Serial.available()) //wenn Daten empfangen werden...
  {
      blueToothVal=Serial.read();//..sollen diese ausgelesen werden
  }
  if (blueToothVal=='1') //wenn das Bluetooth Modul eine „1“ empfängt..
  {
    digitalWrite(13,HIGH);   //...soll die LED leuchten
    lastValue=blueToothVal;
  }
  else if (blueToothVal=='0') //wenn das Bluetooth Modul „0“ empfängt...
  {
    digitalWrite(13,LOW);  //..soll die LED nicht leuchten
    lastValue=blueToothVal;
  }

	timerMs = millis();
	if ((timerMs - timerMs_last) > 200)
	{
    ledState = 1 - ledState;
    digitalWrite(10, ledState);
		timerMs_last = timerMs;
	}

}

Gruß,
Axel

Für welchen Spannungsteiler?

Nein! Auf D0 und D1 liegt RX/TX von Serial.

Warum machst Du das? Ich habe Dir doch was geliefert, was definitv tuen muss.
Und es fehlt sowas wie ein Foto....

Was hast du rausgeworfen ?
Die serielle wird bei dir immer noch gestartet.

Also nochmal, verwene für den HC05 SoftwareSerial.

HC05 RX/TX will 3,3V haben. Die GPIOs des Unos haben 5V. In verschiedenen Beiträgen wird darauf hingewiesen, dass man einen Spannungsteiler benötigt, wenn man andere Pins als D0/D1 verwenden will.
Bis Du sicher dass man HC05 an beliebige Ports des UNO anschließen kann (8/9) und dass für RX nicht ein Interrupt (2/3) verwendet werden muss?

Ich habe Deinen Code geladen und den HC05 an 8/9 angeschlossen.
Kein Unterschied.
Foto folgt

Hier das Foto. Die Elemente seitlich sind für eine Lichtschranke. Der Teil läuft erfolgreich mit einem anderen Sketch.


Ich hatte auch probiert, 8 und 9 zu vertauschen.

Müsste eine LED auf dem HC05 nicht schon mal irgendwie blinken oder leuchten, sobald man eine Spannung anlegt, unabhängig von RX/TX?

Das Problem war das Breadboard! Wenn ich das HC05 direkt an den UNO anschließe, ohne Umweg über das Breadboard, blinkt es und ich sehe den HC05 auf dem Smartphone. Damit kann ich weiterarbeiten.
Seltsam: Ich hatte die Spannung an VCC und GND mehrfach gemessen und da waren immer 5V. Werde ich näher untersuchen aber Euch damit nicht weiter belästigen.

Ich habe gelernt: den HC05 kann man an beliebige IOs anschließen und ich kann die Interrupts für mein weiteres Projekt benutzen.

Vielen Dank für die Unterstützung!

Gruß,
Axel

Das können durchaus auch andere Verbindungen sein, die schlechten Kontakt habe.
Daher die Kontakte immer prüfen bzw. Kabel durchmessen.

Aber der Strom hat nicht gereicht.
Wenn Du irgendwo eine Stelle hast, die einen hohen Übergangswidersstand hat, kommt das Ding nicht ans laufen. Der hohe Innenwiderstand des Messgerätes tut dann sein Übriges...

Dann war ja mein Einsatz nicht ganz ohne Sinn :wink: Na dann...

Hallo,

wenn das HC noch eine Weile Leben soll dann mach an RX einen Spannungsteiler ran. 1k/2k oder wenn möglich besser 10k/20k.

Ja, das macht Sinn, Je nachdem wie ich die Jumperkabel stecke, läuft er mal an, mal nicht.
Schade, dass der UNO nur 1 5V-Ausgang hat. Also muss ich wohl löten, um eine zuverlässige Verbindung zu bekommen (und ein besseres Breadboard besorgen)

Gruß,
Axel

Danke, werd ich machen.

Gruß,
Axel

Hallo,

die Verbindungsprobleme liegen höchstwahrscheinlich nicht am Breadboard sondern an den Kabeln. Die kommen ja alle aus China und ich habe hier welche die kann ich alle nachpressen. Die sind einfach Sch... gepresst. Die Aderlitze liegt nur ungepresst gerade drin, die dünnen Adern liegen nur am Metall der Kontakte an. Kleinste Biegungen am Kabel führen diese weg vom Metall und zack kein Kontakt mehr.
Messe du die Kabel mit Multimeter durch, biege sie dabei sachte und beobachte den Widerstand. Mach die schwarze Hülse runter und schau dir den Kontakt an.
Ich schneide aktuell alle Stecker ab, lege die Litze 3 fach gelegt in neue Kontakte und presse alles neu. Die einzigen Kabel die keine Probleme machen sind die alten mit den schwarzen runden Verguss, ich glaube die hatte ich damals von Conrad. Aber das sind nur Stiftkabel.

Ach die Breadboards aus China haben auch gern Eisen im inneren als Leiter. Korrodiert schnell und hat hohe Widerstandswerte.

Und wenn sich dann alles aufsummiert, sucht man Fehler, wo man keine vermutet.

Danke für die Hinweise.
Kabel sind in Ordnung, aber das Breadboard macht schon einen anderen Eindruck als das ordentliche, was ich "damals" hatte. Wird wahrscheinlich nicht so lange durchhalten und ich schaue mich schon mal nach einem neuen um.

Jedenfalls hab ich mir jetzt einen "Verteiler" gelötet, an den ich das HC05 anschließe und von da gehts weiter zum Breadboard. Der Rest der Schaltung ist nicht so empfindlich.

Und die Verbindung zum Smartphone hab ich jetzt auch hinbekommen :slight_smile:

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.