electronista.ro blog Just another WordPress weblog

31Mar/100

DIY hardware racing sim

Unul dintre oamanii care au cumparat de la mine avea un link pe IM catre un proiect personal foarte interesant, un simulator hardware pentru racing. Pe blogul proiectului prezinta in mare pasii necesari pentru al realiza dar inca nu este nici o schema. Din cate am inteles, primul pas este realizarea unui bord controlat de PC iar sistemul este compus dintr-o placa arduino, un dashboard de BMW 325i din '92 si o interfata arduino <-> dashboard.

blogul proiectului

19Mar/101

Cocoa (Mac osx) / c# (win) -> arduino via portul serial

Un tutorial + cod pentru comunicarea pe portul serial cu o placa arduino. Din pacate si aceste exemple sunt tot intr-o singura directie (PC -> arduino) dar sunt foarte simple si usor de invatat. Cel pentru mac nu am avut unde sa-l testez dar presupun ca functioneaza, se pare ca este acelasi cod cu acesta.

Dupa ce termin cu firma, gasesc contabil si fac comenzi la o gramada de furnizori promit ca o sa scriu eu o librarie cu evenimente pentru platforma .net care sa permita comunicarea arduino -> PC :).

Codul sursa + explicatii VIA instructables.com

codul sursa - download direct, ca sa nu mai trebuiasca sa va faceti cont pe site-ul acela.

Tagged as: 1 Comment
28Feb/100

Visual basic .net 2008 -> arduino LCD

Proiectul acesta arata cat la suta este folosit din procesor. Este facut in visual basic .net 2008 si foloseste codul pentru arduino scris mai devreme care afiseaza direct pe LCD tot ce primeste via portul serial. Am schimbat doar viteza de comunicare de la 9600 bounds la 115200 bounds.

  1. Download si uploadeaza codul pentru arduino
  2. Download codul sursa visual basic (va trebuie visual basic express pentru a-l rula). Daca nu aveti Visual Basic-ul instalat, aici este aplicatia gata compilata si pregatita pentru rulare.


'Clasa visual basic .net 2008
'pentru comunicarea seriala cu arduino
'TODO: inca nu stie sa primeasca info
'      de la arduino
'by electronista.ro
Imports System
Imports System.IO.Ports

Public Class arduinoSerial
    Dim comPort_ As String = "COM3"
    Dim comSpeed_ As Integer = 9600
    Dim WithEvents Port As SerialPort

    Public Property comPort()
        Get
            Return comPort_
        End Get
        Set(ByVal value)
            comPort_ = value
        End Set
    End Property

    Public Property comSpeed()
        Get
            Return comSpeed_
        End Get
        Set(ByVal value)
            comSpeed_ = value
        End Set
    End Property

    Public Sub open()
        Port = New SerialPort(comPort_, comSpeed_, Parity.None, 8, StopBits.One)
        Port.Open()
    End Sub

    Public Sub close()
        Port.Close()
        Port.Dispose()
    End Sub

    Public Function send(ByVal text As String)
        Try
            Port.Write(text)
            Return True
        Catch ex As Exception
            Return "error: " & ex.Message
        End Try
    End Function
End Class
Tagged as: No Comments
25Feb/100

LCD smartie + LCD shield

LCD smartie este un program pentru afisarea pe LCD, acesta poate afisa frecventa curenta a procesorului, cpu load-ul, piesa curenta din winamp etc... Din pacate ultima versiune a programului este din 2007 si numai versiunea 5.4 merge pe windows 7/vista (versiunea 5.4.1 nu merge).

Programul simuleaza pe arduino un LCD de tipul Matrix Orbital, care este compatibil cu softul LCD smartie, acesta comunicand cu lcd-ul via portului com virtual.

  1. instalati libraria lcd-ului LCD4Bit_mod
  2. download arduino sketch
  3. compilaza si uploadeaza schita arduino
  4. download LCD smartie
  5. setare LCD smartie

Cititi tot tutorialul pe: nuelectronics.com

Tagged as: No Comments
17Feb/100

Arduino – comunicare PC -> lcd shield

Codul de mai jos afiseaza pe lcd tot ce primeste de pe portul serial. La sfarsitul primei linii coboara cursorul pe randul al doilea iar cand si pe acest rand ajunge la sfarsit, muta cursorul de la inceput pe primul rand. Pentru a trimite informatii spre lcd se poate folosi serial monitor-ul din IDE-ul arduino.

Pentru a sterge tot ce este pe lcd trimiteti caracterul "~" (shift + tasta de deasupra la TAB).

Arduino foloseste libraria LCD4Bit_mod pentru a comunica cu LCD shield-ul, puneti continutul arhivei in arduino folder\libraries.

ATENTIE: uneori apar probleme cu prima linie din codul acesta, probabil de la cum sunt codate caracterele de wordpress/chrome etc... Daca va da erori incercati sa stergeti prima linie dupa care dati click in meniul pe sketch-> Import library... -> LCD4Bit_mod SAU download sketch.

#include
LCD4Bit_mod lcd = LCD4Bit_mod(2);
char inByte; //caracterul curent de pe serial 

void setup() {
  //initializam lcd-ul si portul serial
  lcd.init();
  lcd.clear();
  Serial.begin(9600);
}

void loop() {

  if (Serial.available() > 0) {
    //citim caracterul
    inByte = Serial.read();
    Serial.println(inByte);
    //afisam caracterul pe lcd
    displayContChar(inByte);
  }
}

/*
 * Display on lcd
 * Copyright electronista.ro
 */

int displayCurPosX = 0; //coloanele de la 0
int displayCurPosY = 1; //randurile incep de la 1
char convertToStr[2] = "0"; //pt conversia char to string  

void displayContChar(char mychar) {
  if (mychar == '~') {
    //reseteaza totul cand primim ~
    lcd.clear();
    displayCurPosX = 0;
    displayCurPosY = 1;
    return;
  }

  //convertim char to char array
  convertToStr[0] = mychar;
  if (displayCurPosX == 16) {
    //0 - 15 digits - am ajuns la sf
    displayCurPosX = 0;
    if (displayCurPosY == 1) {
      //mergem pe linia 2
      displayCurPosY = 2;
      lcd.cursorTo(displayCurPosY, displayCurPosX);
    } else {
      //revenim pe prima linie
      displayCurPosY = 1;
      lcd.cursorTo(displayCurPosY, displayCurPosX);
    }
  }
  //dupa ce am setat cursorul mai sus
  //afisam caracterul
  lcd.printIn(convertToStr);
  displayCurPosX ++;
}
//  bug cu js code highlight

Tagged as: No Comments
15Feb/100

Arduino – comunicare PC -> Arduino

Pentru acest monatj o sa legam un led pe pinul 13 digital, dupa care o sa-l controlam de pe PC via monitorului serial care vine cu ide-ul arduino.

Hardware-ul
legati led-ul pe pinul 13 ca si in tutorialul acesta.

Software-ul

Codul este foarte simplu:

  • initializam led-ul si portul serial
  • intram in loop unde verificam daca este ceva in bufferul serial
  • daca este ceva in buferul serial, vedem daca am primit o - oprim ledul | p - pornim led-ul
//inchar - tinem caracterul de pe serial
//inchar - tinem caracterul de pe serial
char inChar;
int ledPin =  13; //pinul led-ului

void setup() {
  Serial.begin(9600); // setam serial com
  pinMode(ledPin, OUTPUT); //setam output pt led
}

void loop() {
  //vedem daca este ceva in bufferul pt serial
  if (Serial.available() > 0) {
    //luam primul caracter
    inChar = Serial.read();
    //il printam
    Serial.println(inChar);

    if (inChar == 'o') {
      //led Oprit
      Serial.println("LED oprit");
      digitalWrite(ledPin, LOW);
    }

    if (inChar == 'p') {
      //led Pornit
       Serial.println("LED pornit");
       digitalWrite(ledPin, HIGH);
    }
  }
}

Deschideti serial monitor-ul, scrieti 'p'  si dati click pe send - led-ul se va aprinde.

12Feb/100

Arduino – Debug tutorial

Cum detectezi probleme unui soft sau a unui montaj din jurul arduino cand placa nu are nici un instrument de afisare onboard? S-a blocat programul din cauza unei greseli sau programul o ia pe calea gresita a unui if sau un contact face probleme? Nu ai de unde sa stii ca programul a rulat bine daca nu ai o metoda prin care placa sa-ti transmita ca lucreaza ok.

arduino 2 pc.... arduino 2 pc

Arduino are onboard un port serial, acesta poate folosii fie pinii 0 si 1 de pe placa fie conexiunea usb cu calculatorul. Pentru debug folosim conexiunea cu pc-ul via virtual usb com. Placa o setam sa transmita niste mesaje iar pe pc deschidem serial monitorul ce vine cu IDE-ul arduino.

Activare serial monitor din IDE

The code:

int ledPin =  13;

void setup()   {
  pinMode(ledPin, OUTPUT);
  Serial.begin(9600); //initializam libraria Serial
  Serial.println("Am pornit!"); //trimitem un msg via com
}

void loop()
{
  digitalWrite(ledPin, HIGH);
  Serial.println("LED pornit :)");
  delay(1000);                  

  digitalWrite(ledPin, LOW);
  Serial.println("LED oprit :|");
  delay(1000);
}

Rezultat-ul:

12Feb/100

Arduino – LED blink tutorial

Acesta este primul tutorial de pe electronista.ro :) si acopera urmatoarele chestii:

  • O parte din functiile arduino si cum sunt chemate de program
  • Exemplu simplu pentru folosirea variabilelor
  • Folosim un pin pentru output digital
Hardware-ul

Polaritatea led-ului:

Cum se leaga LED-ul la arduino:

ATENTIE: nu conectati ledul pe alti pini fara rezistenta, pe pinul 13 arduino are o rezistenta pe placa de 1K. Majoritate ledurilor functioneaza la 3 - 3.3V iar arduino scoate pe pini digitali 5V. LED-ul se va arde si e posibil sa ia si pinul digital cu el daca il conectati direct pe alti pini fara rezistenta.

Software-ul
// Initializam o variabila globala de tip integer (numar intreg)
int ledPin =  13;   

// Functia setup() este chemata prima data cand porneste controlerul
void setup() {
  // Setam pinul 13 pentru output digital
  //(acesta va scoate +5v in starea HIGH sau 0V in stare LOW)
  pinMode(ledPin, OUTPUT);
}

// Functia loop ruleaza cat de repede posibil
// si se repeta atata timp cat arduino are curent

void loop() {
  digitalWrite(ledPin, HIGH);   // Aprinde LED-ul
  delay(1000);                  // Asteptare de 1000 ms (1 sec)
  digitalWrite(ledPin, LOW);    // Stange LED-ul
  delay(1000);                  // Asteptare de 1000 ms (1 sec)
}