Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Arduino nano + HC-06 bluetooth
#1
Već duže vremena razmišljam kako krenuti u neko programiranje koje bi zadovoljilo moje veoma skromne potrebe,a da ne preopteretim ono malo memorije u mozgu koja mi je još slobodna. Tongue 

Nabavio sam arduino nano i bluetooth modul hc-06,a imam i jedan wifi kojeg za sada ne mislim koristiti. Našao sam i stranicu remotexy http://remotexy.com/en/examples/firstproject/ i krenuo sa prvim projektom, pali/gasi LED na Nanou. RX i TX pinovi na Nanou su 1 i 2, tako da sam u programu koji je predviđen za neki veliki Arduino promijenio pinove za komunikaciju sa HC-06

Quote:// RemoteXY connection settings
#define REMOTEXY_SERIAL_RX 1 
#define REMOTEXY_SERIAL_TX 2
#define REMOTEXY_SERIAL_SPEED 9600
Na tome Arduinu su pinovi RX i TX 2 i 3.

Za upload programa u Arduino sam upotrijebio njihov program verzije 1.8.9 i upload na Nano je prošao bez problema, barem mi je tako program javio.Nano ima 5V komunikaciju dok HC-06 3,3V znači na TX pina na Nanou sam stavio dijeljitelj sa 10k i 20k da se 5V spusti na 3,3V. E sada tu se javio problem, na tome pinu imam 2,6V dok na RX imam cijelih 3,3V.

Također mobitel mi se ne da spojiti sa HC-06 modulom,da li je to do onih 2,6V na TX pinu ili nečeg drugog nemam pojma. Imam instaliranu najnoviju verziju remotexy na mobitelu ali kaže mi da je vrijeme za spajanje isteklo i ćorak.

Evo i program koji sam ukucao u Nano. Znači kod programa se automatski generira na remotexy stranici kada se završi sa izradom grafičkog sučelja. Nakon toga se učita library remotexy u Arduino 1.8.9 i učita kod koji je generiran, uploada na Nano i to bi trebalo raditi...

.zip   Gumb arduino.zip (Size: 1,14 KB / Downloads: 2)
Reply
#2
Da nisi omasio u povezivanju? Rx i Tx na nao plocici su D0 i D1. Sa softwareSerial mozes da koristis bilo koja dva nano pina ali si mozda pogresno vezao. Pogledaj na osciloskopu sta se dogadja.
Reply
#3
Obicno kad se probava neki kod ili rad sa recimo Arduino Nano svi koriste napajanje preko USB-a ako je tako onda ti je i komunikacija u koliziji izmedju racunara i tog HC modula jer su na istoj liniji...Znaci trebao bi iskljuciti USB kabl iz Nano dok probavas program a napajanje dovesti neko spoljno na Vin cca 5-12V. Ako je problem ove prirode onda je resena i misterija 2.5V na TX pinu koja bi u tom slucaju bila posledica iste kolizije....Program nisam gledao dok ne proverimo gornje navode
Kao sto ti @gorankg rece RX-TX su pinovi D0, D1 tj. 0,1

p.s. sta bi ti tacno hteo da radis sa tim hc modulom tj. sta bi program trebao da obradi ili uradi????



[Image: introduction-to-arduino-nano-13-1.png]

Tvoj #define treba da bude ovako:
Code:
// RemoteXY connection settings
#define REMOTEXY_SERIAL_RX 0
#define REMOTEXY_SERIAL_TX 1
#define REMOTEXY_SERIAL_SPEED 9600
Reply
#4
Imam analogni skop tako da uhvatiti neku pojavu koja je jednokratna malo teže ili ne znam kako jer ja sam analogni tip. hihi

Recimo da sam krivo u kodu označio pinove na Nanou kao što si naveo. Evo pinouta Nanoa pa lijepo meni bedaku objasni kako da u kodu napišem ime tim pinovima. Tongue
Ja sam ih nazvao 1 i 2 ali moguće da je to pogrešno. Pa kako je ime tim pinovima da ih Arduino program prepozna.
 



Sada sam se igrao sa remotexy sučeljem i ovaj puta sam odabrao Nano a ne defaultni Uno, stavio sam hardversku komunikaciju i za divno čudo programčić je proradio. Znači greška je u imenovanju pinova. Također koliko vidim remotexy ima neke pinove rezervirane. Znači kada sam odabrao softversku komunikaciju mogu odabrati pinove 2 pa na dalje, a kada odaberem hardversku onda mi on automatski odabere 0 i 1.  Zaobišao sam pravilno ukucavanje naziva pinova jer je program sve riješio ali i problem i dalje ostaje.
Kako u kodu ukucati ime pinova kod recimo Nana da ih program prepozna.
Ako ti nije problem imaš u prvom postu zakačen kod za Nano pa da mi prepraviš te rx i tx linije da vidim na primjeru kako bi to trebalo izgledati.
Reply
#5
@Yumera,
Meni sada program radi dok je Nano uštekan u komp na usb 2.0(radi i kada je ištekan i na eksternom napajanju).Na usb 3.0 komp nije uopće prepoznavao modul. Također dok mi je bio uštekan HC-06 na rx i tx Nano se nije dao programirati tako da svako probavanje i programiranje morao sam te dvije linije ištekati.

Idem sada probati daj define kako si ga ti napisao da vidim jel šljaka.

EDIT:
Prepravio sam define i sada radi. Ja mislim da sam sada skužio kako se imenuju pinovi pa barem na tome ne bi trebao da zapnem.

Mislim ganjati motor pot, input selektor audio ulaza i takve sitnice preko mobitela. Znam da remotexy može da prikaže recimo temperaturu koju Nano očita pa na istu foru mogu da gledam i bias lampi,izlazni DC offset i takve stvarčice. Sada se sve samo stvar izrade periferije i nešto malo programiranja koje uz FLProg nadam se da će biti svedeno na minimum.
Reply
#6
Nacrtaj nam kako si povezao nano i HC-06. Tako ćemo brže naći grešku.
Reply
#7
Nema hardverske greške,problem je bio u imenovanju RX i TX pinova u kodu.
Reply
#8
Za te stvari koje nameravaš raditi mnogo bolje rešenje su ti ESP32 moduli. Takav jedan ima na sebi i WiFi i bluetooth i još puno toga. Možeš da koristiš Arduino IDE za programiranje na koji si već navikao.
Evo ovde imaš više informacija:

https://randomnerdtutorials.com/getting-...ith-esp32/
Reply
#9
...........................................................

p.s. greska otislo pogresno ovde... sorry
Reply
#10
Ne mislim koristiti Arduino IDE jer to zahtjeva poznavanje nekog programskog jezika. Arduino IDE sam uzeo za ovaj primjer samo radi jednostavnosti implementiranja gotovog koda jer je tako bilo u uputama na remotexy web stranici.
U planu mi je koristiti FLProg program za programiranje Arduina i remotexy za grafičko sučelje. FLProg je neki ruski program koji je sveo programiranje na čisto grafičko stavljanje blokova i njihovo podešavanje, nešto kao što Cypress ima samo naravno puno slabije. Ja mislim da ima podršku za neke MCUe koji na sebi imaju wi-fi ali nisam siguran. Uglavnom ako netko zna za nekakav program u kojemu se programiranje svodi na grafičke blokove i koji podržava te ESP32 module neka samo viče.
Reply
#11
(07-05-2019, 10:06 PM)Khadgar2007 Wrote: Ja mislim da ima podršku za neke MCUe koji na sebi imaju wi-fi ali nisam siguran. Uglavnom ako netko zna za nekakav program u kojemu se programiranje svodi na grafičke blokove i koji podržava te ESP32 module neka samo viče.

Podržava ESP8266 koji ima WiFi.
Odlično ti je ova kombinacija.
Reply
#12
Piše da je prošlo više od godine dana od moje igrarije sa Nanom. Uglavnom zaključio sam da barem za sada otkantam upravljanje preko mobitela iz dva razloga, Remote XY se plaća, a kao besplatan je skoro neupotrebljiv i onaj ruski program za programiranje je na ćirilici pa nema šanse da sve pohvatam kako treba. Googlao sam malo i našao jednostavne upute za IR komunikaciju.  https://www.circuitbasics.com/arduino-ir...-tutorial/ Sve radi kako je čovjek napisao i na to nemam prigovora. Skužio sam malo kako dodavati kodove za daljince u kod i uz copy+paste i nešto mojeg pisanja složio sam neki polufunkcionalan kod.

Polufunkcionalan je zato jer izlaz ne drži stalno high dok god je pritisnuta tipka na daljincu, jednostavno tako je napisan kod. Nakon što Nano vidi da je na IR pinu neki impuls, on postavi izlazni pin na high i drži ga onoliko dugo koliko mu je zadan delay,nebitno da li je držao tipku pritisnutu ili ju otpustio. Googlao sam ali nisam našao ništa što bi sa razumijevanjem uspio implementirati u svoj kod pa se nadam malo pomoći od strane forumskih znalaca.

Code:
#include <IRremote.h>
#include <ir_Lego_PF_BitStreamEncoder.h>

#include <IRremote.h>

IRrecv irrecv(RECV_PIN);
decode_results results;
const int RECV_PIN = 12;
const int volumeup = 10;
const int volumedown = 9;
const int mute = 8;


void setup(){
  Serial.begin(9600);
  irrecv.enableIRIn();
  irrecv.blink13(true);
  pinMode(volumeup, OUTPUT);
  pinMode(volumedown, OUTPUT);
  pinMode(mute, OUTPUT);
}

void loop(){
    if (irrecv.decode(&results)){

        switch(results.value){
          case 0xF7CB: //Keypad button "5"
          digitalWrite(volumeup, HIGH);
          delay(2000);
          digitalWrite(volumeup, LOW);
          }

        switch(results.value){
          case 0xF74B: //Keypad button "2"
          digitalWrite(volumedown, HIGH);
          delay(2000);
          digitalWrite(volumedown, LOW);
          }
         
          switch(results.value){
          case 0xF702: //Keypad button "2"
          digitalWrite(mute, HIGH);
          delay(2000);
          digitalWrite(mute, LOW);
          }

        irrecv.resume();
    }
}


Inače ovo će biti jedan daljinac za hi-fi potrebe, glasnoća +/-, biranje kanala, mute i možda još koja opcija za nešto. Što se tiče kodova planirao sam koristiti philipsov RC5 jer kao da mi se čini da je on najrasprostranjeniji. Što se tiče korištenja RC5 koda da li ručno upisati kod za pojedinu tipku kao što sam sada napravio ili opet uključiti nekakav library sa RC5(a ima ih), trebam malo izviditi. Nabaviti ću nekoliko philipsovih daljinaca i očitati kod nama zanimljivih tipki u serijal monitoru.
Reply
#13
Dupli post. Sry
Reply
#14
Probaj ovako

Code:
#include <IRremote.h>
#include <ir_Lego_PF_BitStreamEncoder.h>

#include <IRremote.h>

IRrecv irrecv(RECV_PIN);
decode_results results;
const int RECV_PIN = 12;
const int volumeup = 10;
const int volumedown = 9;
const int mute = 8;


void setup(){
  Serial.begin(9600);
  irrecv.enableIRIn();
  irrecv.blink13(true);
  pinMode(volumeup, OUTPUT);
  pinMode(volumedown, OUTPUT);
  pinMode(mute, OUTPUT);
}

void loop(){
    if (irrecv.decode(&results)){

        switch(results.value){
          case 0xF7CB: //Keypad button "5"
          digitalWrite(volumeup, HIGH);
          delay(5);
          digitalWrite(volumeup, LOW);
          }

        switch(results.value){
          case 0xF74B: //Keypad button "2"
          digitalWrite(volumedown, HIGH);
          delay(5);
          digitalWrite(volumedown, LOW);
          }
       
          switch(results.value){
          case 0xF702: //Keypad button "2"
          digitalWrite(mute, !digitalRead(mute));
          delay(1000);
          //digitalWrite(mute, LOW);
          }

        irrecv.resume();
    }
}

Ovo mute bi trebalo da bude ili on ili of pa sam ti stavio delay(1000); to ti je 1 sec ako za mute zadrzis taster duze od tog intervala on ce automatski promeniti stanje i vratiti se na prethodno stanje.
Zato bi trebalo kad jednom stisnes tipku na daljincu za mute da bude off a drugi pritisak da bude on. Ako zadrzis tu tipku duze vremena pritisnutu svaki  secund ce se stanje promeniti za mute.
Ne znam da li si me razumeo ili da li sam ja razumeo sta u stvasri hoces da postignes
Reply
#15
Ovako, za mute se slažem, treba napraviti onako kako si ti rekao. Što se tiče volume +/- baš ne ide onako kako si ti napisao. Već sam probao sa raznim delay vremenima ali to nije to. Znači treba neka petlja koja kaže "drži taj i taj izlaz MCUa high, sve dok je pritisnuta tipka na daljincu" jer ovo sa delay funkcionira samo ako konstantno stišćeš i puštaš tipku. Imam spojenu LEDicu na volume +/- izlaze pa vidim točno što se dešava.
Reply
#16
Ne znam kako izgleda biblioteka ta koju koristis #include <ir_Lego_PF_BitStreamEncoder.h>. Pogledacu na netu i da li bas mora taj lib?
Reply
#17
Pa ne mora ali onda netko treba napisati kompletan kod, a ja i programiranje nismo niti na Vi.
Evo linka sa vodičem i librarijem https://www.circuitbasics.com/arduino-ir...-tutorial/ od kuda sam manje više iskopirao kompletan kod.
Reply
#18
Probaj ovako :

Code:
#include <IRremote.h>
#include <ir_Lego_PF_BitStreamEncoder.h>

#include <IRremote.h>

IRrecv irrecv(RECV_PIN);
decode_results results;
const int RECV_PIN = 12;
const int volumeup = 10;
const int volumedown = 9;
const int mute = 8;

unsigned long key_value = 0;


void setup(){
  Serial.begin(9600);
  irrecv.enableIRIn();
  irrecv.blink13(true);
  pinMode(volumeup, OUTPUT);
  pinMode(volumedown, OUTPUT);
  pinMode(mute, OUTPUT);
}

void loop(){
    if (irrecv.decode(&results)){
       
        if (results.value == 0XFFFFFFFF)
          results.value = key_value;

        switch(results.value){
          case 0xF7CB: //Keypad button "5"
          digitalWrite(volumeup, HIGH);
          delay(100);
          digitalWrite(volumeup, LOW);
          }

        switch(results.value){
          case 0xF74B: //Keypad button "2"
          digitalWrite(volumedown, HIGH);
          delay(100);
          digitalWrite(volumedown, LOW);
          }
     
          switch(results.value){
          case 0xF702: //Keypad button "2"
          digitalWrite(mute, !digitalRead(mute));
          delay(1000);
          //digitalWrite(mute, LOW);
          }

        key_value = results.value;

        irrecv.resume();
    }
}

Tamo na sajtu pise :

Quote:Before the switch block starts there is a conditional block:

if (results.value == 0XFFFFFFFF)
results.value = key_value;
If we receive 0XFFFFFFFF from the remote, it means a repetition of the previous key. So in order to handle the repeat key pattern, I am storing the hex code in a global variable key_value every time a code is received:

key_value = results.value;

When you receive a repeat pattern, then the previously stored value is used as the current key press.

At the end of the void loop() section, we call irrecv.resume() to reset the receiver and prepare it to receive the next code.
Reply
#19
Sada sve radi kako treba. Jedino ne znam koliko će smetati za pogon motora onaj 100ms delay za volume +/- jer vidim da mi LEDica trepće ali to lako isprobam. Složim hardver i vidim kako funkcionira.
Treba dodati i jedan gumbić(ili dva) za odabir kanala ali polako nema žurbe.
Reply
#20
Drago mi je da je proradilo.
Sto se tice delay(100) ti experimentisi ali sto ti je taj delay manji to ti je rezolucija volumena veca sto znaci da ce se motor manje pomerati i samim tim dobices finiju regulaciju volumena a sto je delay veci rezolucija je manja i imaces velike pomake za volumen tj. skokovite nivoe volumena.
Na tvom daljinskom skeniraj kodove za volume+ i volume- pa to koristi za volumen pojacala kao i mute. Sto se tice selektora ulaza moze se lako dodati u kod za bilo koji broj sa daljinskog...
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)