Se afișează postările cu eticheta comunicatie seriala. Afișați toate postările
Se afișează postările cu eticheta comunicatie seriala. Afișați toate postările

joi, 6 iunie 2019

Mesaje complexe intre placi Arduino pe comunicatie seriala (3)

    Am incercat sa transmit datele altfel, intr-un singur mesaj, de data asta cu numar fix de caractere, nu variabil ca in articolul precedent, dar am folosit aceeasi schema
   Am folosit informatiile din articolul How to Send Data to Thingspeak Using ESP8266.
   Pentru acelasi tip de mesaj, adica temperatura, stare senzor si procent, voi transmite, de datat asta,  intai un caracter de control(*), la starsit altul (#), temperatura multiplicata cu 10, apoi de zece ori semnul minus plus stare senzor si apoi procentul, dar, cu numar fix de caractere, astfel:
- temperatura -23,4 grade Celsius, senzor activat si 23% apa, voi transmite: *23411023#
- temperatura -5,7 grade Celsius, senzor dezactivat si 100% apa, voi transmite *05710100#
- temperatura 2,9 grade Celsius, senzor dezactivat si 34% apa, voi transmite *02900034#
- temperatura 29,4 grade Celsius, senzor dezactivat si 34% apa, voi transmite *29400034#
   Am facut 2 filmulete, care explica modul de codare/decodare:
Mesaje complexe intre placi Arduino pe comunicatie seriala (3)
Multiple Text Fields in Single Message using Arduino (3)
PS: Programul pentru emitator este tx_3.ino, iar pentru receptor este rx_3.ino !

sâmbătă, 1 iunie 2019

Mesaje complexe intre placi Arduino pe comunicatie seriala (2)

    Pentru a vedea utilitatea celor prezentate in articolul anterior am modificat programele sa transmit intr-un singur mesaj 3 valori alese aleator: o temperatura de genul -23.50C sau +23.50C, starea unui senzor (0 sau 1) si un procent (0 la 100).
   Schema de conectare este aceeasi
   Deoarece nu pot transmite decat valori intregi, ma voi folosi de un artificiu, voi trimite prima valoare un numar de 10 ori mai mare ca temperatura, a doua valoare va fi de un numar format din semnul temperaturii (1 pentru minus si zero pentru plus) inmultit cu 10 si starea vibratiei (0 sau 1) si procentul.
   De exemplu, daca am temperatura de +2,40C, starea senzorului activata (1) si procentul de 17%, voi transmite asa:
- primul numar va fi 24
- al doilea numar va fi 1, deoarece semnul temperaturii e plus si starea senzorului 1, deci 10*0+1=1
- al treilea numar 17.
   Daca al doilea Arduino primeste: 119,11,39, vom obtine:
- temperatura este -11,90C deoarece al doilea numar este 11 = 1*10 + 1, deci semn negativ, iar primul numar e 119 = 11,9*10;
- starea senzorului e activa 1, fiind cifra unitatilor de la al doilea numar
- procentul de umplere bazin e 39%, fiind chiar la treilea numar.
    Testul l-am realizat, ca si data trecuta, cu trimiterea datelor de o placa Arduino Uno, care are un shield pe care este fixata o placa Arduino Nano:
   Programul pentru codare si transmitere este tx_2.ino, iar pentru receptie si decodare rx_2.ino !
   Am facut si 2 filmulete:

marți, 26 noiembrie 2013

Comanda periferice de la calculator pe portul serial folosind Arduino

   O aplicatie de efect este aceea in care se comanda un motor, un ventilator, un proiector, o usa de acces prin introducerea unor cifre sau cuvinte de la tastatura calculatorului.
   Aceasta se poate baza pe comanda Serial.read() a limbajului placii de dezvoltare Arduino.
   Pe net se gasesc cateva articole despre acest tip de comanda, din care amintesc:
USING ARDUINO TO CONTROL A LED USING THE SERIAL PORT
   Am incercat si eu sa fac asta, rezultandu-mi filmuletul control a LED using Arduino thru keyboard, apoi control a LED using Arduino thru keyboard (II)
   Niste poze din timpul experimentelor:
   Un exemplu de skech simplu este: 
// sketch write by niq_ro from http://www.tehnic.go.ro
// and http://nicuflorica.blogspot.com/
// version 1.0

int motorPin = 13;
void setup()
{
pinMode(motorPin, OUTPUT);
digitalWrite(motorPin, LOW);
Serial.begin(9600);
Serial.println("Apasa 1 pentru a aprinde LED-ul si 2 sa-l stingi!!!");
}

void loop()
{
if (Serial.available())
{
int ch = Serial.read();
Serial.print(ch);

if (ch==49)
{
digitalWrite(motorPin, HIGH);
Serial.println(" Aprind LED-ul");
}
if (ch==50)
{
digitalWrite(motorPin, LOW);
Serial.println(" Sting LED-ul");
}
Serial.println("Apasa 1 pentru a aprinde LED-ul si 2 sa-l stingi!!!");
}
}

   Am modificat sketch-ul si am primit o aplicatie, cu care pot comanda pe langa LED-ul de pe placa (cel de la pinul D13) inca 3 LED-uri, dintr-ul LED multicolor, cum am prezentat in filmuletele control a few LEDs with Arduino and own software (I), respectiv control a few LEDs with Arduino and own software (II)
   Led-urile se pot inlocui cu optocuploare, relee, etc si se pot comanda si echipamente alimentate la retea... dar asta alta data...