|
|
Elektronika.lt portalo forumas
Jūs esate neprisijungęs lankytojas. Norint dalyvauti diskusijose, būtina užsiregistruoti ir prisijungti prie forumo.
Prisijungę galėsite kurti naujas temas, atsakyti į kitų užduotus klausimus, balsuoti forumo apklausose.
Administracija pasilieka teisę pašalinti pasisakymus bei dalyvius,
kurie nesilaiko forumo taisyklių.
Pastebėjus nusižengimus, prašome pranešti.
Dabar yra 2025 01 28, 19:19. Visos datos yra GMT + 2 valandos.
|
|
|
|
Forumas » Mikrovaldikliai » Roboto ranka
|
Jūs negalite rašyti naujų pranešimų į šį forumą Jūs negalite atsakinėti į pranešimus šiame forume Jūs negalite redaguoti savo pranešimų šiame forume Jūs negalite ištrinti savo pranešimų šiame forume Jūs negalite dalyvauti apklausose šiame forume
|
|
|
Puslapis 1 iš 2 Pereiti prie 1, 2 Toliau |
|
|
|
|
Roboto ranka |
Parašytas: 2016 05 13, 16:43 |
|
|
|
Sveiki visi
Man reikia pagalbos su projektu.
Projekte naudoju 2x arduino, 5x poteciometrus, 5x servo ir hc-06 bei hc-05 bluetooth modulius.
Šiame kode naudojamas tik vienas potenciometras: (1 kodas)
-----------------------------------------------------------------------
Kodas: |
#include <SoftwareSerial.h>
#define BT_SERIAL_TX 4
#define BT_SERIAL_RX 3
SoftwareSerial BTSerial(BT_SERIAL_TX, BT_SERIAL_RX);
int Sending_value_0;
int Sending_value_1;
int Sending_value_2;
const int analogInPin_1 = A1; // LDR signal
void Transfer_value(int Send_value, int Index)
{
if (Send_value < 10)
{
BTSerial.print(Index);
BTSerial.print("0");
BTSerial.print("0");
BTSerial.print("0");
BTSerial.print(Send_value);
delay(100);
}
else if (Send_value < 100)
{
BTSerial.print(Index);
BTSerial.print("0");
BTSerial.print("0");
BTSerial.print(Send_value);
delay(100);
}
else if (Send_value < 1000)
{
BTSerial.print(Index);
BTSerial.print("0");
BTSerial.print(Send_value);
delay(100);
}
else
{
BTSerial.print(Index);
BTSerial.print(Send_value);
delay(100);
}
}
void setup()
{
Serial.begin(9600);
BTSerial.begin(9600);
}
void loop()
{
Sending_value_0 = analogRead(analogInPin_1);
Sending_value_0 = map(Sending_value_0, 0, 1023, 0, 179);
Serial.println(Sending_value_0);
Sending_value_1 = 345;
Sending_value_2 = 6789;
Transfer_value(Sending_value_0,0);
Transfer_value(Sending_value_1,1);
Transfer_value(Sending_value_2,2);
}
|
-------------------------------------------------------------------------
Šiame kode viskas gerai, keičiant potenciometro varžą, vertė(value) keičiasi, tos vertės perduodamos per bluetooth į kitą arduino ir į servo, bet kažkas yra negerai, gal su antruoju kodu nes viską įjungus servo nereguoja į potenciometro vertės keitimą, o tiesiog servo trukčioja apie 5 laipsnius(pirmyn ir atgal)...
Servo: (2 kodas)
--------------------------------------------------------------------------
Kodas: |
#include <Servo.h>
#include <SoftwareSerial.h>
Servo servo_0;
int Receive_value[5];
#define BT_SERIAL_TX 4
#define BT_SERIAL_RX 3
SoftwareSerial BTSerial(BT_SERIAL_TX, BT_SERIAL_RX);
void Receive_value_void()
{
byte Index = BTSerial.read() - 48;
byte Receive_value_t = BTSerial.read();
byte Receive_value_h = BTSerial.read();
byte Receive_value_z = BTSerial.read();
byte Receive_value_e = BTSerial.read();
Receive_value[Index] = ((Receive_value_t - 48 ) * 1000 + (Receive_value_h - 48 ) * 100 + (Receive_value_z - 48 ) * 10 + (Receive_value_e - 48 ) * 1);
}
void setup()
{
Serial.begin(9600);
Serial.println("Incoming Signals:");
BTSerial.begin(9600);
servo_0.attach(11); //Signal to servo pin 11
for (int i=0; i <= 4; i++)
{
Receive_value[i] = 0;
}
}
void loop()
{
if(BTSerial.available() >=5)
{
Receive_value_void();
}
servo_0.write(Receive_value[0]);
}
|
-------------------------------------------------------------------------------
Gal kas turite įdėju? ir tik įdėju, o ne kritikos... :[/code] |
|
Paskutinį kartą redagavo altair, 2016 05 13, 18:25. Redaguota 1 kartą |
|
|
|
|
|
Re: Roboto ranka |
Parašytas: 2016 05 13, 17:35 |
|
|
|
Kodas: |
byte Index = BTSerial.read() - 48; // <-----------
byte Receive_value_t = BTSerial.read();
byte Receive_value_h = BTSerial.read();
byte Receive_value_z = BTSerial.read();
byte Receive_value_e = BTSerial.read();
Receive_value[Index] = ((Receive_value_t - 48 ) * 1000 + (Receive_value_h - 48 ) * 100 + (Receive_value_z - 48 ) * 10 + (Receive_value_e - 48 ) * 1);
}
|
Jeigu cia tik retkarciais arba niekada neateina 0, tai
Kodas: |
void loop()
{
if(BTSerial.available() >=5)
{
Receive_value_void();
}
servo_0.write(Receive_value[0]); // <------
}
|
Sitas narys visada tuscias.
Ir is esmes jei ten priimi skaiciu didesni uz nurodyta masyvo dydi, tai rasai duomenis per virsu.
Issivesk visus skaicius ka gauni per BT. Nezinau koks tikslas masyvo indeksa pasiimti is zinutes? Ar ten ilga zinute kapota gabalais? Nors is idejos neatrodo kad taip tu nori padaryti. |
|
|
|
|
|
|
Re: Roboto ranka |
Parašytas: 2016 05 13, 18:17 |
|
|
|
Socrates rašo: |
Ir is esmes jei ten priimi skaiciu didesni uz nurodyta masyvo dydi, tai rasai duomenis per virsu.
Issivesk visus skaicius ka gauni per BT. Nezinau koks tikslas masyvo indeksa pasiimti is zinutes? Ar ten ilga zinute kapota gabalais? Nors is idejos neatrodo kad taip tu nori padaryti. |
Gali būti, kad kažko nesuprantu vadinasi.... į serial monitor potenciometras išveda skaičius nuo tarkim 8 iki 150 , priklauso, kokia varža potenciometre... |
|
|
|
|
|
|
Roboto ranka |
Parašytas: 2016 05 13, 18:23 |
|
|
|
Aš turiu veikianti kodą jei nenaudojant bluetooth ir tiesiogiai jungiant---->
Kodas: |
#include <Servo.h>
// Open servo library || Atidaroma servo varikliukų biblioteka
Servo Finger1;
Servo Finger2;
Servo Finger3;
Servo Finger4;
Servo Finger5;
int BT1;
int BT2;
int BT3;
int BT4;
int BT5;
void setup()
{
// Finger x attach with pin x || Piršto x varikliukas priskiriamas jungčiai x
Finger1.attach(11);
Finger2.attach(10);
Finger3.attach(9);
Finger4.attach(6);
Finger5.attach(5);
}
void loop()
{
// Read LDR || Nuskaito LDR
BT1 = analogRead(1);
BT2 = analogRead(2);
BT3 = analogRead(3);
BT4 = analogRead(4);
BT5 = analogRead(5);
// Set rotation || Nustato sukimasi
BT1 = map(BT1, 0, 1023, 0, 179);
BT2 = map(BT2, 0, 1023, 0, 179);
BT3 = map(BT3, 0, 1023, 0, 179);
BT4 = map(BT4, 0, 1023, 0, 179);
BT5 = map(BT5, 0, 1023, 0, 179);
// Move servo
Finger1.write(BT1);
Finger2.write(BT2);
Finger3.write(BT3);
Finger4.write(BT4);
Finger5.write(BT5);
delay(15);
}
|
Gal tada jei ten niekam nepavyktu sugalvot kanors, tai šį kodą galimą pameginti pakėisti, kad veiktu su bluetooth |
|
|
|
|
|
|
Roboto ranka |
Parašytas: 2016 05 13, 19:45 |
|
|
|
Ziurint i sita koda, neaisku ka anam tavo kode reiskia Index, kuri priimi per BT? |
|
|
|
|
|
Roboto ranka |
Parašytas: 2016 05 13, 23:22 |
|
|
|
Socrates rašo: |
Ziurint i sita koda, neaisku ka anam tavo kode reiskia Index, kuri priimi per BT? |
jo... |
|
|
|
|
|
|
|
|
Roboto ranka |
Parašytas: 2016 05 15, 09:29 |
|
|
|
Gavimas
Kodas: |
Pridedama Servo biblioteka
// Library needed to use function for servomotors
#include <Servo.h>
// Inicijuojami servo motoriukai
// Initiating servomotors
Servo Servo_1, Servo_2,
Servo_3, Servo_4, Servo_5;
// Variable that will contain the character of start package set in the GloveTX sketch, "<"
byte startPackage;
// Kintamas dydis su vertėmis (tarp 0 ir 180)
// Variables with the values for the servomotors (between 0 and 180)
int Ang_1 = 0;
int Ang_2 = 0;
int Ang_3 = 0;
int Ang_4 = 0;
int Ang_5 = 0;
void setup()
{
// Serial sujungimui aktivuojama 9600 baud/s.
// Serial communication is activated at 9600 baud/s.
Serial.begin(9600);
// Servo varikliukai susiejami su Arduino UNO jungtimis
// The servomotors are asigned to the pins of the Arduino UNO board.
Servo_1.attach(11);
delay(300); // 300ms delsa nustatyta saugiam sujungimui (neprivaloma)
// A delay of 300ms is set for a secure connection (this can be optional)
Servo_2.attach(10);
delay(300);
Servo_3.attach(9);
delay(300);
Servo_4.attach(6);
delay(300);
Servo_5.attach(5);
delay(300);
Serial.println("Ready to receive... // Pasiruošes gauti...");
}
void loop()
{
// Laukiami duomenys siunčiami iš kito bluetooth modulio
// Waiting for data incoming from the other bluetooth module
if(Serial.available()) {
// Pirma vertė bus "<", kita yra priskirta pirštui
// The first value will be "<", the other are assigned to the finger
startPackage = Serial.read();
Ang_1 = Serial.read();
Ang_2 = Serial.read();
Ang_3 = Serial.read();
Ang_4 = Serial.read();
Ang_5 = Serial.read();
// Tikrinama, kad pirma vertė yra "<"
// Verifying that the first value is "<"
if(startPackage == '<'){
if(Ang_1!=255) // You can remove this line for every finger if you don't have a of problems
// Servo varikliukas pasisuka priskirtam laipsniui
// The servomotors rotates of the assigned degrees
Servo_1.write(Ang_1);
if(Ang_2!=255)
Servo_2.write(Ang_2);
if(Ang_3!=255)
Servo_3.write(Ang_3);
if(Ang_4!=255)
Servo_4.write(Ang_4);
if(Ang_5!=255)
Servo_5.write(Ang_5);
}
}
// Delsa daroma, kad servo varikliukai veiktų teisingai (dėl žemesnės vertės sistema gali neveikti, dėl aukštesnės - veiks lėčiau)
// a delay to make the servomotors working correctly (a lower value could make the system not working, higher value make it slower)
delay(30);
}
|
------------------------------------+--+
Siuntimas
Kodas: |
int Res_Finger_1 = A1; // Variables of the analog read form the flex sensors connected to the analog pins of Arduino LilyPad
int Res_Finger_2 = A2;
int Res_Finger_3 = A3;
int Res_Finger_4 = A4;
int Res_Finger_5 = A5;
int Opened_Finger_1 = 0; // Variables of the values when the hand is completely opened
int Opened_Finger_2 = 0; // This is needed for a continuous calibration
int Opened_Finger_3 = 0;
int Opened_Finger_4 = 0;
int Opened_Finger_5 = 0;
int Closed_Finger_1; // Variables of the values when the hand is completely closed
int Closed_Finger_2; // We can't set it to zero since that the minimum value reached
int Closed_Finger_3; // in the analog read never reach zero. We'll assign the value of
int Closed_Finger_4; // a first analog read, then the program in the loop will
int Closed_Finger_5; // automatically assing lower values
int Finger_1 = 0; // Variables of the values to send
int Finger_2 = 0;
int Finger_3 = 0;
int Finger_4 = 0;
int Finger_5 = 0;
void setup()
{
Serial.begin(9600); // Activating serial communication, XBee Series 1 are pre-programmed at 9600 baud/s
pinMode(Res_Finger_1, INPUT); // The variables of the sensor are set as input
pinMode(Res_Finger_2, INPUT);
pinMode(Res_Finger_3, INPUT);
pinMode(Res_Finger_4, INPUT);
pinMode(Res_Finger_5, INPUT);
Closed_Finger_1 = analogRead(Res_Finger_1);
Closed_Finger_2 = analogRead(Res_Finger_2);
Closed_Finger_3 = analogRead(Res_Finger_3);
Closed_Finger_4 = analogRead(Res_Finger_4);
Closed_Finger_5 = analogRead(Res_Finger_5);
}
void loop()
{
Finger_1 = analogRead(Res_Finger_1);
Finger_2 = analogRead(Res_Finger_2);
Finger_3 = analogRead(Res_Finger_3);
Finger_4 = analogRead(Res_Finger_4);
Finger_5 = analogRead(Res_Finger_5);
if(Finger_1 > Opened_Finger_1) // Calibration reading and setting the maximum values. This needs you to completely open your hand a few times
Opened_Finger_1 = Finger_1;
if(Finger_2 > Opened_Finger_2)
Opened_Finger_2 = Finger_2;
if(Finger_3 > Opened_Finger_3)
Opened_Finger_3 = Finger_3;
if(Finger_4 > Opened_Finger_4)
Opened_Finger_4 = Finger_4;
if(Finger_5 > Opened_Finger_5)
Opened_Finger_4 = Finger_5;
if(Finger_1 < Closed_Finger_1) // Calibration reading and setting the minimum values. This needs you to completely close your hand a few times
Closed_Finger_1 = Finger_1;
if(Finger_2 < Closed_Finger_2)
Closed_Finger_2 = Finger_2;
if(Finger_3 < Closed_Finger_3)
Closed_Finger_3 = Finger_3;
if(Finger_4 < Closed_Finger_4)
Closed_Finger_4 = Finger_4;
if(Finger_5 < Closed_Finger_5)
Closed_Finger_5 = Finger_5;
Finger_1 = map(Finger_1 ,Closed_Finger_1 ,Opened_Finger_1 ,0,180); // The analog read has to be readapted in values between 0 and 180 to be used by the servomotors.
Finger_2 = map(Finger_2 ,Closed_Finger_2 ,Opened_Finger_2 ,0,180); // The minimum and maximum values from the calibrations are used to correctly set the analog reads.
Finger_3 = map(Finger_3 ,Closed_Finger_3 ,Opened_Finger_3 ,0,180);
Finger_4 = map(Finger_4 ,Closed_Finger_4 ,Opened_Finger_4 ,0,180);
Finger_5 = map(Finger_5 ,Closed_Finger_5 ,Opened_Finger_5 ,0,180);
Serial.write("<"); // This character represent the beginning of the package of the five values
Serial.write(Finger_1); // The values are sent via the Tx pin (the digital pin 1)
Serial.write(Finger_2);
Serial.write(Finger_3);
Serial.write(Finger_4);
Serial.write(Finger_5);
delay(30);
}
|
Na, radau panašų būdą su Xbee, bet ar tą pati galima naudoti hc-05 ir hc-06 |
|
|
|
|
|
|
Roboto ranka |
Parašytas: 2016 05 15, 10:27 |
|
|
|
Tu ne svetimų kodu talpinimu užsiimk, o gilinkis į kažkurį ir bandyk jį koreguoti, kad tiktų tavo poreikiams. Pirmoj vietoje tau reiktų pajungti ekraniuką siustuve ir teisingai nuskaityti ADC, tada sugalvok kaip atrodys siunčiamas paketas su tais duomenim, tada gauk tuos duomenis ir išvesk į ekraniuką imtuve, ir tik tada jau generuok PPM signalą servoms. Ekraniukas bus kaip pagalba derinant programą, kad matytum jog ji veikia taip kaip tau reikia. |
|
|
|
|
|
|
Roboto ranka |
Parašytas: 2016 05 15, 14:55 |
|
|
|
altair rašo: |
Gavimas
Kodas: |
{
// Laukiami duomenys siunčiami iš kito bluetooth modulio
// Waiting for data incoming from the other bluetooth module
if(Serial.available()) {
// Pirma vertė bus "<", kita yra priskirta pirštui
// The first value will be "<", the other are assigned to the finger
startPackage = Serial.read();
Ang_1 = Serial.read(); <--- iskur kontroleris zino apie situos kintamuosius?!!!!!!!!!!
Ang_2 = Serial.read();
Ang_3 = Serial.read();
Ang_4 = Serial.read();
Ang_5 = Serial.read();
// Tikrinama, kad pirma vertė yra "<"
// Verifying that the first value is "<"
if(startPackage == '<'){
|
Na, radau panašų būdą su Xbee, bet ar tą pati galima naudoti hc-05 ir hc-06 |
serial taip nedirba. pastave gaunasi tx 01234
rx 23
rx 01
rx 4
ir t.t. ziurek pavizdius. ar bentjau skaityti ismok gal tada gausis.
PVZ !!!
//---------------------------------------------------------------
if ((int(incomingByte) == 254)) {
sensor1 = Serial.read();
Serial.print(Sensor 1 = );
Serial.print(int(sensor1));
}
//--------------------------------------------------------------- |
|
|
|
|
|
|
Roboto ranka |
Parašytas: 2016 05 16, 18:39 |
|
|
|
sopkls rašo: |
Tu ne svetimų kodu talpinimu užsiimk, o gilinkis į kažkurį ir bandyk jį koreguoti... |
Tame esmė, kad aš beveik, nieko nežinau apie bluetooth ir teoriškai nežinau kaipparašyt tinkamą kodą, nes tik mėnesis, kai susipažystu su bluetooth ir mėginu suderinti jį su arduino. |
|
|
|
|
|
Roboto ranka |
Parašytas: 2016 05 16, 19:11 |
|
|
|
Prie ko čia tas bliutufo žinojimas, jei vienam paduodi duomenis per UART, o iš kito tą patį gauni? Kad datašytą teks paskaityti ir abu bliutufus reikės suporuoti čia turėtų būti ir taip aišku. O jei trūksta žinių tai studijuoji datašytus arba nesiimi tokių projektų. |
|
|
|
|
|
Roboto ranka |
Parašytas: 2016 05 16, 20:38 |
|
|
|
sopkls rašo: |
Prie ko čia tas bliutufo žinojimas, jei vienam paduodi duomenis per UART, o iš kito tą patį gauni? Kad datašytą teks paskaityti ir abu bliutufus reikės suporuoti čia turėtų būti ir taip aišku. O jei trūksta žinių tai studijuoji datašytus arba nesiimi tokių projektų. |
Pagaliau išsiaiškinau kaip pajungti, viskas gerai su bluetooth, perduoda info...
dabar tik reikia kodus susitvarkyti... kažkaip... hell |
|
|
|
|
|
Roboto ranka |
Parašytas: 2016 05 16, 22:22 |
|
|
|
Gal, kasnos padėdumėte parašyti visa kodą? Labai būčiau dėkingas |
|
|
|
|
|
|
Google paieška forume |
|
|
Naujos temos forume |
|
|
FS25 Tractors
Farming Simulator 25 Mods,
FS25 Maps,
FS25 Trucks |
|
ETS2 Mods
ETS2 Trucks,
ETS2 Bus,
Euro Truck Simulator 2 Mods
|
|
FS22 Tractors
Farming Simulator 22 Mods,
FS22 Maps,
FS25 Mods |
|
VAT calculator
VAT number check,
What is VAT,
How much is VAT |
|
LEGO
Mänguköök,
mudelautod,
nukuvanker |
|
Thermal monocular
Thermal vision camera,
Night vision ar scope,
Night vision spotting scope |
|
FS25 Mods
FS25 Harvesters,
FS25 Tractors Mods,
FS25 Maps Mods |
|
Dantų protezavimas
All on 4 implantai,
Endodontija mikroskopu,
Dantų implantacija |
|
FS25 Mods
FS25 Maps,
FS25 Cheats,
FS25 Install Mods |
|
GTA 6 Weapons
GTA 6 Characters,
GTA 6 Map,
GTA 6 Vehicles |
|
FS25 Mods
Farming Simulator 25 Mods,
FS25 Maps |
|
ATS Trailers
American Truck Simulator Mods,
ATS Trucks,
ATS Maps |
|
|
|