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

miercuri, 30 mai 2012

Comunicare seriala cu Raspberry Pi

Cea mai simpla modalitate de comunicare cu placa Raspberry Pi este prin intermediul unui adaptor USB-la-serial. Eu am utilizat un "USB to UART bridge" CP2102 de la Silicon Labs, pentru ca permite comunicarea la niveluri logice de 3V3 si 5V si este si foarte ieftin. Atentie la voltajul la care functioneaza adaptorul! Daca folositi un FTDI sau ceva similar trebuie sa fie varianta la 3V3, NU la 5V !!!

Inainte de a ne apuca sa ne jucam cu pinii de pe expansion header-ul placii Raspberry Pi ar fi bine sa citim pagina de aici. Preiau ca atare avertismentul:
Extreme caution should be exercised when interfacing hardware at a low level, you may damage your RPi, your equipment and potentially yourself and others. Doing so is at your own risk!

Ce trebuie retinut este ca voltajul de pe pinii GPIO este 3V3 si NU sunt toleranti 5V !!!

Documentatia detaliata privind perifericele accesibile prin header-ul GPIO o gasim la pagina RPi Low-level peripherals, de unde este si imaginea de mai jos.

Astea fiind zise, sa ne apucam de treaba :)

Cum procedam:
1. conectam pinii de pe Raspberry la adaptorul serial-la-USB astfel GND la GND, Rx la Tx, Tx la Rx
2. conectam adaptorul la un port USB de pe PC; aflam numarul portului COM pe care il foloseste
3. Pornim un program gen Hyperterminal (eu folosesc Tera Term)
4. Alimentam placa Raspberry prin portul mini USB (am folosit incarcatorul de la Kindle, pentru ca scoate 850mA)

Daca totul merge bine (eu am avut probleme cu cardul SD, a trebuit sa-l partitionez din nou si sa-l formatez FAT), obtinem rezultate similare celor de mai jos :)
Incepe...

A terminat boot. Ne logam cu pi / raspberry

Sa dam si un help, sa vedem ce ne zice ;)

Nota: se cam incinge placa... Mult succes si, mai ales, aveti grija...

sâmbătă, 31 martie 2012

SimPlot - vizualizare date de la Arduino

SimPlot este un program gratuit si foarte simplu de utilizat impreuna cu Arduino. Permite vizualizarea datelor transmise de la orice microcontroler prin portul serial. Pot fi urmarite pana la patru canale analogice.

In exemplul de mai jos am legat la un Arduino doua potentiometre si am facut capturi de ecran in timp ce le roteam de zor ;)

/*
SimPlot Demo
 
Samples Analog Input and sends them over serial port to be plotted in SimPlot. 
This Demo software uses the default serial port "Serial".
Upto to 4 channels of data can be plotted. 

For details of SimPlot go to www.negtronics.com/simplot

Simplificata pentru postare pe blog - doua canale
Versiunea completa este la pagina de mai sus

*/

void setup() 
{ 
  Serial.begin(57600); 
} 

int buffer[20]; //Buffer needed to store data packet for transmission
int data1;
int data2;

void loop() 
{ 
  //Read Analog channels. You can connect accelerometer, gyro, temperature sensor etc to these channels
  data1 = analogRead(0);
  data2 = analogRead(1);
  
  plot(data1,data2);            //Plots 2 channels of data
  
  delay(10); //Read and plot analog inputs every 10ms.  
} 

//Function that takes 2 integer values and generates a packet to be sent to SimPlot.
void plot(int data1, int data2)
{
  int pktSize;
  
  buffer[0] = 0xCDAB;             //SimPlot packet header. Indicates start of data packet
  buffer[1] = 2*sizeof(int);      //Size of data in bytes. Does not include the header and size fields
  buffer[2] = data1;
  buffer[3] = data2;
    
  pktSize = 2 + 2 + (2*sizeof(int)); //Header bytes + size field bytes + data
  
  //IMPORTANT: Change to serial port that is connected to PC
  Serial.write((uint8_t * )buffer, pktSize);
}

miercuri, 28 martie 2012

Conexiune seriala Arduino - Android

Au aparut in ultima vreme o multime de placi (gen IOIO, Mega ADK etc) pentru cei care vor sa lucreze cu Arduino si Android. O problema ar fi pretul...

Daca aveti norocul sa dispuneti de o tableta cu USB host, conectarea directa (prin cablul USB, la fel ca la PC) nu mai reprezinta asa o problema :)

Anul trecut am achizitionat cea mai ieftina tableta care avea USB host disponibila la acea data pe piata din Romania : Evolio EvoTab. Mai jos vom vedea cum se poate conecta o placa Arduino direct la tableta.

AVERTISMENT: procedura necesita root, lucru care poate duce la pierderea garantiei, defectarea echipamentului si/sau alte probleme de care, evident, raspundeti doar voi ;)

Arduino, Android si mai vechiul meu prieten, Bitlash

Avem nevoie de urmatoarele:
1. o placa Arduino Uno
2. o tableta care dispune de USB host
3. cablul USB; in principiu este bun cablul pe care-l folositi la Arduino pentru legatura la PC, daca aveti la tableta o mufa USB type A
4. o modalitate de a obtine root pe tableta
5. o aplicatie gen Terminal pe tableta (de exemplu Android Terminal Emulator din Market/Play sau cum se mai numeste zilele astea...)
6. aplicatia BusyBox (tot de acolo, daca nu este instalata deja pe tableta)

Principala problema o reprezinta root-area tabletei, la care nu va pot ajuta ;)
Dupa aceea instalati cele doua aplicatii (Terminal si BusyBox).
Porniti aplicatia Terminal si scrieti comanda "su", urmata de un Enter, pentru a verifica root-area. Daca merge e bine... problema e ca si rezolvata.
In exemplul din imaginea de mai sus am pus Bitlash pe Arduino si am modificat sketch-ul cu viteza la 9600 in loc de 57600.
Conectam placa Arduino la tableta si pornim modul USB host din setari. Placa ar trebui sa fie pe "ttyACM0", lucru pe care-l putem verifica usor din terminal, cu comanda de mai jos:
busybox dmesg | busybox grep tty

Daca totul e OK pana aici urmeaza comanda de conectare:
busybox microcom -s 9600 /dev/ttyACM0


Mult succes!!!

miercuri, 28 decembrie 2011

Conectare seriala Arduino - calculator HP 49G

Fiind ceva mai liber in perioada sarbatorilor m-am gandit sa incerc sa leg la Arduino un calculator HP-49G ;-)
Cateva detalii despre calculatoarele grafice programabile din seria HP-49 care le fac interesante in utilizarea cu placile Arduino: sunt programabile in cateva limbaje (HP Basic, User RPL, System RPL, assembler - pentru HP 50G exista si un ARM GCC...), permit conectarea seriala, evident sunt "tari" la grafice si calcule matematice ;-)
Conectand un Arduino avem posibilitatea sa adaugam calculatorului senzori si actuatori, Bluetooth, WiFi, internet, sunet, RFID, RF, practic orice merge cu Arduino. De ce am vrea sa facem asa ceva? De exemplu, colectam date despre temperatura cu Arduino, le transmitem la calculator si utilizam un program de cateva randuri scris in User RPL pentru statistici, vizualizare grafica etc. O alta posibilitate interesanta ar fi si utilizarea calculatorului HP pe post de hyperterminal, impreuna cu un shell gen bitlash (despre care am tot discutat in postari anterioare), pentru a comanda o placa Arduino fara a mai avea nevoie de un PC.

Avertisment - verificati, verificati, verificati! Daca aveti intrebari INAINTE sa incercati cele de mai jos va rog sa ma contactati. O conexiune gresit realizata poate duce la distrugerea calculatorului HP si/sau a placii Arduino! La fel ca in orice disclaimer care se respecta, toata responsabilitatea va revine integral ;-)

Cum am procedat:

1. Am modificat setarea portului la 9600, la fel ca la calculatorul HP si am incarcat sketch-ul pe Arduino.


2. Cablul care vine impreuna cu calculatorul HP permite conectarea la PC pe port serial (RS232), asa ca pentru Arduino am avut nevoie de interfata seriala pe care am facut-o acum un an.


3. Legatura dintre cei doi conectori DB9 mama se face astfel (pinii se refera la pinii conectorului, nu la cei ai Arduino):
HP49 Pin 5 <-> Arduino Pin 5
HP49 Pin 3 <-> Arduino Pin 2
HP49 Pin 2 <-> Arduino Pin 3
Scuze pentru calitatea imaginilor de mai jos...



Rezultatul, vazut mai de aproape, cu calculatorul HP-49G ruland programul dTerm 1.1 (System RPL terminal emulator)


vineri, 27 mai 2011

Bitlash versiunea 2.0

Pentru cei care nu s-au intalnit pana acum cu Bitlash: Bitlash este un shell si, in acelasi timp, un mediu de programare embedded simplu si usor de folosit pentru Arduino. Mai este si open source ;-)

De cand am postat ultima data s-au intamplat multe... versiunea 2.0 RC2 aduce imbunatatiri, schimba sintaxa, nu mai exista macro-uri, acum sunt functii pe care le salvam in EEPROM si care primesc argumente si intorc valori numerice, if are si else, apare si switch, au aparut functii precum bitclear, bitset, bitread, bitwrite, exista exemple pentru ceas, servere web si telnet etc.

Cel mai interesant mi se pare lucrul cu task-uri asincrone care se executa in fundal :)

Chiar ieri la Intalnirea Tehnorama cineva avea nevoie sa citeasca patru intrari analogice si una digitala si sa activeze patru iesiri digitale, independen, un anumit numar de secunde... Evident ca folosirea delay() era total neadecvata. Bitlash ar fi fost solutia ideala pentru un asemenea caz.

In imaginea de mai jos putem vedea:
1. un mic HELP
2. o functie, toggle13, care stinge sau aprinde LED-ul de pe pinul 13
3. utilizarea ei din 500 in 500 milisecunde ( RUN )
4. process status ( PS )
5. oprirea procesului ( STOP )
6. listarea functiilor salvate in EEPROM ( LS )
7. stergerea functiei din EEPROM ( RM )
8. alte doua functii, f1 si f2
9. rularea lor cu timpi diferiti

marți, 30 noiembrie 2010

Bitlash - un alt shell pentru Arduino

Bitlash este un shell si, in acelasi timp, un mediu de programare embedded simplu si usor de folosit pentru Arduino. Mai este si open source ;-)

Bitlash ruleaza pe Arduino si accepta multe dintre functiile obisnuite pe care le gasim in documentatia Arduino.

Moduri de lucru cu Bitlash:
1. Comenzile se pot introduce si interpreta interactiv, cu ajutorul "Serial Monitor" din IDE-ul Arduino (vezi observatiile de mai jos), sau cu un program gen "Hyperterminal".
2. Mai interesant, pot fi salvate secvente macro in EEPROM si le putem rula oricand dorim, inclusiv la boot-area placii!
3. Si mai interesant, functiile built-in ale Bitlash pot fi apelate din propriile sketch-uri, adaugand biblioteca aferenta!!
4. Inca si mai interesant, putem adauga propriile noastre functii la biblioteca Bitlash, cu ajutorul addBitlashFunction()!!!


Sketch-ul demo incarcat pe un Arduino 2009 cu bootloader-ul normal


Sketch-ul demo incarcat pe un Arduino 2009 cu bootloader-ul Optiboot... de remarcat diferenta de spatiu liber ramas...


Cateva comenzi simple


HELP! :D

Documentatia este destul de mare, asa ca nu mai intru in alte amanunte.

Observatii:
- daca utilizati "Serial Monitor" din kit-ul Arduino pentru comunicare, fiecare comanda trebuie finalizata cu tasta apostrof "`" aflata in general pe tastatura sub Escape, in stanga sus, inainte de cifra 1;
- ocupa mult loc... dar cred ca merita ;-)
- am incercat mai de mult biblioteca inclusa in kit-ul Arduino Firmata, prefer totusi Bitlash...

duminică, 28 noiembrie 2010

FEZ Panda si LCD serial

Am postat pe Tehnorama un mic tutorial despre utilizarea unui LCD serial impreuna cu FEZ Panda.

marți, 23 noiembrie 2010

Interfata seriala

Cautand prin diverse lucruri pe care le pastrez de multi ani de zile "just in case", am gasit un mouse pe serial ;-)
Cablul de conectare este perfect pentru orice microcontroler cu interfata UART si PC cu port serial. Merge pus pe breadboard la orice montaj cu un microcontroler, in scopul comunicarii pe serial cu PC-ul.
Lista de componente necesare adaptorului pentru breadboard de mai jos: cablul, doua barete de pini a cate 4 pini fiecare, un soclu DIP16, un MAX232, 4 condensatori electrolitici de 10uF, o placa stripboard (veroboard).









Cateva pagini interesante:
http://www.arcelect.com/rs232.htm
http://www.beyondlogic.org/serial/serial.htm
http://extremeelectronics.co.in/avr-tutorials/using-the-usart-of-avr-microcontrollers-reading-and-writing-data/
http://www.captain.at/electronic-atmega16-serial-port.php
http://www.swharden.com/blog/2009-05-14-simple-case-avrpc-serial-communication-via-max232/
http://www.8051projects.net/serial-communication/introduction.php

miercuri, 3 noiembrie 2010

Arduino si Bluetooth - partea a 2-a

Am folosit un shield I/O si un modul Bluetooth de la DFRobot.
I/O Expansion
Serial Bluetooth
Shieldul I/O are deja un conector in care se potriveste modulul BT, dupa cum se vede in imaginile din partea 1. Modulul BT vine cu un dongle USB pe care l-am conectat la PC.
"Programul" pentru Arduino este cel din documentatia aferenta modulului BT:
void setup()
{
Serial.begin(115200); //Set serial baud rate to 115200
}
void loop()
{
Serial.print("Hello!"); //print out hello string
delay(1000); //1 second delay
}

Dupa ce am pornit Arduino in configuratia de mai sus, a aparut device-ul EPBMX-COM si la sfarsit am avut cele doua porturi (incoming si outgoing).
Cu ajutorul unui program gen hyperterminal, setat la 115200, am primit mesajele trimise de Arduino.

In concluzie, conectarea intre microcontrolere este simpla, la fel si cea dintre PC si microcontroler. Problema apare in cazul in care dorim sa ne conectam la un telefon mobil. Inca nu am reusit mare lucru, documentatia este destul de consistenta si ar trebui scris un program pentru mobil in Java ME.

Voi mai posta daca reusesc sa-l conectez si cu mobilul :D

marți, 22 iunie 2010

Schema pentru Arduino "de criza"

Daca tot au trecut vreo doua luni de cand am facut montajul (si de cand il folosesc aproape zilnic) m-am gandit ca ar fi cazul sa desenez si schema lui ;-)

Neavand niciun fel de experienta in materie de CAD, cu atat mai putin in ceea ce priveste schemele electronice, am incercat mai multe programe: Eagle, TinyCAD, KiCAD etc.

Pana la urma m-am oprit la ExpressSCH, parte dintr-un program gratuit numit ExpressPCB.
Cred ca este cel mai usor de folosit, deoarece in doua ore si ceva am reusit sa fac schema de mai jos, chiar daca nu mai lucrasem cu astfel de programe...



Sper ca nu am facut prea multe greseli, daca cineva incearca sa reproduca montajul dupa aceasta schema ar face bine sa verifice de doua ori ;-)

Cateva observatii:
1. daca chipul nu este programat cu bootloader trebuie folosit un programator ISP
2. daca punem bootloader se poate utiliza cu un cablu serial realizat asa cum l-am descris aici; inainte de programarea in acest mod trebuie apasat butonul Reset cam 3-4 secunde (incercati diverse variante pana reusiti...)
3. la montajul din imagine am folosit terminale bloc (cu suruburi), dar pentru reducerea costului merge sa utilizati orice fel de conectori (bareta etc.)
4. realizarea pe placa de circuit nu e chiar la nivel profesional (hmm, hmm, hmm) ca sa zic asa ;-)



marți, 11 mai 2010

Convertor USB la Serial "de criza" pentru Arduino

Convertor USB la Serial "de criza" pentru Arduino (si nu numai...)


Am modificat un pic placa din postarea anterioara pentru a putea comunica serial cu un calculator care dispune doar de port USB.

In acest scop sunt necesare urmatoarele:
1. Cablu de date Nokia tip DKU-5 sau CA-42. Important este sa aiba mufa de USB mai lunga si/sau mai groasa decat normal, sau o cutiuta mica si neagra la mijlocul cablului ;-)
2. Trei rezistente (1K, 10K, 15K)
3. Cutter, banda izolatoare, multimetru

Ideea de baza este ca aceste tipuri de cabluri contin deja un Prolific 2303 si un MAX232. Pretul de achizitie variaza intre 9-10 RON la importatori si cca. 15-20 RON la diversi comercianti, care vor fi fericiti sa scape de ele... Cred ca de ocazie, de la cineva care a avut un Nokia mai vechi, se poate obtine mult mai ieftin :D

Un tutorial pe larg gasiti la uC Hobby
Pinout-ul pentru aceste cabluri il gasiti aici.

Procedura:
1. Se verifica prezenta circuitelor in cablu.
Se introduce cablul in mufa USB a calculatorului. In Linux (Kernel 2.4.31 sau mai nou) exista deja drivere. La Windows va cere driverele. Daca nu le-ati primit pe CD impreuna cu cablul se pot descarca de aici: PL-2303 USB to Serial Bridge (H, HX, X) Installshield Driver Setup Program
Dupa instalare ar trebui sa gasim in Control Panel un port COM cu numele "Prolific".
2. Se scoate cablul din calculator si se taie in partea dinspre conectorul pentru telefon, NU CEL USB, lasand cca. 10 cm de cablu pentru identificarea firelor.

3. Se identifica cu multimetrul 3 fire (Rx, Tx si GND) conform tutorialului din linkul de mai sus sau conform pinout-ului. Ne intereseaza firele care duc la pinii 6, 7 si 8 din imagine.
Optional se testeaza corectitudinea ca loopback (legand intre ele Rx si Tx) cu ajutorul programului Hyperterminal sau asemanantor.

4. Se conecteaza Rx cablu la Tx controller prin rezistenta de 10K.
5. Se conecteaza Tx cablu la Rx controller prin rezistenta de 1K.
6. Se conecteaza GND cablu la GND placa prin rezistenta de 15-22K.

Avertisment: verificati, verificati, verificati!!!