Wednesday, September 30, 2015

Atmel Studio 7 is now live!

Arduino co-founder Massimo Banzi introduces Atmel Studio 7 and one of its unique features, which enables Makers and designers to import their Arduino sketches and then debug their code.




Atmel Studio 7 is free of charge and is integrated with the Atmel Software Framework (ASF)—a large library of free source code with 1,600 project examples. ASF strengthens Atmel Studio by providing, in the same environment, access to ready-to-use code that minimizes much of the low-level design required for projects. Standard IDEs are suited for creating new software for an MCU project. In addition to this, the Atmel Studio 7 IDP also:

  • Facilitates reuse of existing software and, by doing so, enables design differentiation.
  • Supports the product development process with easy access to integrated tools and software extensions through Atmel Gallery.
  • Reduces time to market by providing advanced features, an extensible software eco-system, and powerful debug integration.

One of the benefit for Arduino developer is Atmel Studio 7 features seamless one-click import of projects created in the Arduino development environment. Your sketch, including any libraries it references, will be imported into Studio 7 as a C++ project. Once imported, you can leverage the full capabilities of Studio 7 to fine-tune and debug your design. Atmel Studio 7 fully supports the powerful embedded debugger on the Arduino Zero board. For other Arduino boards, shield-adapters that expose debug connectors are available, or switch to one of the many available Xplained-Mini/PRO boards to fully leverage the Atmel HW eco-system. Regardless of what you choose, you will surely make something amazing.

An introduction to Atmel Studio 7, the free integrated development environment (IDE) for MCU development using Atmel | SMART ARM-based and AVR MCUs.



Download Atmel Studio 7 NOW.

Arduino Development for OSX and iOS

Arduino Development for OSX and iOS

This is a special book for readers who want to learn Arduino development on OSX and iOS environments. The following is highlight topics on this book:
  • Preparing development environment 
  • Sketch programming 
  • Controlling Arduino from OSX 
  • Controlling Arduino from iOS 
  • Debugging Arduino Logic

Friday, September 25, 2015

Digispark USB Development Workshop

Digispark USB Development Workshop

The Digispark is an Attiny85 based microcontroller development board similar to the Arduino line, only cheaper, smaller, and a bit less powerful. This book helps you to get started with Digispark USB development. The following is highlight topics in this book:
  • Preparing development environment 
  • Setting up Digispark USB 
  • Working with Digital I/O 
  • DigiUSB - Digispark debugging 
  • PWM and Analog Input 
  • Working with I2C

Thursday, September 24, 2015

Arduino Programming using MATLAB

Arduino Programming using MATLAB
MATLAB has a feature to enable Arduino development via MATLAB Support Package for Arduino Hardware since MATLAB 2014a. This book helps you to develop Arduino program using MATLAB. The following is highlight topics:
  • Preparing Development Environment 
  • Setting Arduino Development for MATLAB 
  • Working with Digital I/O 
  • Working with PWM and Analog Input 
  • Working with I2C 
  • Working with SPI 
  • Working with Servo Motor 
  • Measuring and Plotting Sensor Data in Real-Time

Wednesday, September 23, 2015

Arduino by Example

Design and build fantastic projects and devices using the Arduino platform

Arduino by Example

About This Book
  • Explore the different sensors that can be used to improve the functionality of the Arduino projects
  • Program networking modules in conjunction with Arduino to make smarter and more communicable devices
  • A practical guide that shows you how to utilize Arduino to create practical, useful projects
Who This Book Is For
This book is an ideal choice for hobbyists or professionals who want to create quick and easy projects with Arduino. As a prerequisite, readers must have a working Arduino system and some programming background, ideally in C/C++. Basic knowledge of Arduino is helpful but not required to follow along with this book.

What You Will Learn
  • Understand and utilize the capabilities of the Arduino
  • Integrate sensors to gather environmental data and display this information in meaningful ways
  • Add modules such as Bluetooth and Wi-Fi that allow the Arduino to communicate and send data between devices
  • Create simple servers to allow communication to occur
  • Build automated projects including robots while learning complex algorithms to mimic biological locomotion
  • Implement error handling to make programs easier to debug and look more professional
  • Integrate powerful programming tools and software such as Python and Processing to broaden the scope of what the Arduino can achieve
  • Practice and learn basic programming etiquette
In Detail
Arduino an opensource physical computing platform based on a simple microcontroller board, and a development environment for writing software for the board. The opensource Arduino software (IDE) makes it easy to write code and upload it to the board. It runs on Windows, Mac OS X, and Linux. The environment is written in Java and based on Processing and other opensource software.

With the growing interest in home-made, weekend projects among students and hobbyists alike, Arduino offers an innovative and feasible platform to create projects that promote creativity and technological tinkering.

Arduino by Example is a project-oriented guide to help you fully utilize the power of one of the world's most powerful open source platforms, Arduino. This book demonstrates three projects ranging from a home automation project involving your lighting system to a simple robotic project to a touch sensor project. You will first learn the basic concepts such as how to get started with the Arduino, and as you start building the project, you will develop the practical skills needed to successfully build Arduino powered projects that have real-life implications.

The complexity of the book slowly increases as you complete a project and move on to the next. By the end of this book, you will be able to create basic projects and utilize the elements used in the examples to construct your own devices.

Style and approach
This book follows a project-oriented approach, with multiple images and plenty of code to help you build your projects easily. The book uses a tutorial-based methodology where the concepts are first explained and then implemented to help you develop the projects.

Thursday, September 17, 2015

Raspberry Pi control Arduino + 8x8 LED Matrix, using Java/JavaFX/jSSC

Actually, it's same as last post "Java/JavaFX/jSSC control Arduino + 8x8 LED Matrix", but run on Raspberry Pi 2/Raspbian remotely, instead of run on Windows 10/NetBeans locally.





Host development platform:
OS: Windows 10
IDE: NetBeans IDE 8.0.2
Programming Language: Java + JavaFX + jSSC

Target platform:
Raspberry Pi 2
OS: Raspbian
IP: 192.168.1.112
Both Host development platform and Target platform in the same Network.
(How to set Remote Java SE Platform to deploy on Raspberry Pi, refer to the video in the post "Java + JavaFX + jSSC run on Raspberry Pi, control Arduino Uno")

remark: due to something wrong on my Raspberry Pi 2 cannot detect monitor correctly, I have to edit /boot/config.txt to set framebuffer_width and framebuffer_height to 500x400. So the screen output may be differency to you.

Arduino Side:
Board: Arduino Uno + 8x8 LED Matrix
Connected to Raspberry Pi 2 with USB.

Arduino Side:

Arduino code and connection between Arduino Uno and 8x8 LED Matrix, refer last post.

Java/JavaFX/jSSC code, program on Windows 10/NetBeans, run on Raspberry Pi 2:
(Basically same as last post, with moving btnExit to vBoxMatrix, such that user can exit the program in raspberry Pi UI.

    package javafx_matrix;

import java.util.logging.Level;
import java.util.logging.Logger;
import javafx.application.Application;
import javafx.application.Platform;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.ComboBox;
import javafx.scene.control.Label;
import javafx.scene.control.RadioButton;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.scene.text.Font;
import javafx.stage.Stage;
import jssc.SerialPort;
import static jssc.SerialPort.MASK_RXCHAR;
import jssc.SerialPortEvent;
import jssc.SerialPortException;
import jssc.SerialPortList;

public class JavaFX_Matrix extends Application {
    
    final private int NUM_X = 8;
    final private int NUM_Y = 8;
    
    SerialPort arduinoPort = null;
    ObservableList<String> portList;

    @Override
    public void start(Stage primaryStage) {
        
        //ComboBox for port selection
        detectPort();
        final ComboBox comboBoxPorts = new ComboBox(portList);
        comboBoxPorts.valueProperty()
                .addListener(new ChangeListener<String>() {

            @Override
            public void changed(ObservableValue<? extends String> observable, 
                    String oldValue, String newValue) {

                System.out.println(newValue);
                disconnectArduino();
                connectArduino(newValue);
            }

        });
        
        //
        
        final Label label = new Label("arduino-er.blogspot.com");
        label.setFont(Font.font("Arial", 24));
        
        Button btnExit = new Button("Exit");
        btnExit.setOnAction((ActionEvent event) -> {
            Platform.exit();
        });

        VBox vBoxInfo = new VBox();
        //vBoxInfo.getChildren().addAll(label, btnExit);
        vBoxInfo.getChildren().add(label);
        
        //Matrix of RadioButton
        VBox vBoxMatrix = new VBox();
        vBoxMatrix.setPadding(new Insets(10, 10, 10, 10));

        for(int y=0; y<NUM_Y; y++){
            
            HBox box = new HBox();
            for(int x=0; x<NUM_X; x++){
                MatrixButton btn = new MatrixButton(x, y);
                box.getChildren().add(btn);
            }
            vBoxMatrix.getChildren().add(box);
            
        }
        vBoxMatrix.getChildren().add(btnExit);
        
        vBoxMatrix.widthProperty().addListener(new ChangeListener<Number>(){

            @Override
            public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) {
                comboBoxPorts.setPrefWidth((double)newValue);
                btnExit.setPrefWidth((double)newValue);
            }
        });

        BorderPane borderPane = new BorderPane();
        borderPane.setTop(comboBoxPorts);
        borderPane.setCenter(vBoxMatrix);
        borderPane.setBottom(vBoxInfo);

        Scene scene = new Scene(borderPane, 300, 250);

        primaryStage.setTitle("Arduino-er");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
    
    @Override
    public void stop() throws Exception {
        disconnectArduino();
        super.stop();
    }
    
    private void detectPort(){
         
        portList = FXCollections.observableArrayList();
 
        String[] serialPortNames = SerialPortList.getPortNames();
        for(String name: serialPortNames){
            System.out.println(name);
            portList.add(name);
        }
    }
    
    public boolean connectArduino(String port){
        
        System.out.println("connectArduino");
        
        boolean success = false;
        SerialPort serialPort = new SerialPort(port);
        try {
            serialPort.openPort();
            serialPort.setParams(
                    SerialPort.BAUDRATE_9600,
                    SerialPort.DATABITS_8,
                    SerialPort.STOPBITS_1,
                    SerialPort.PARITY_NONE);
            serialPort.setEventsMask(MASK_RXCHAR);
            serialPort.addEventListener((SerialPortEvent serialPortEvent) -> {
                if(serialPortEvent.isRXCHAR()){            
                    //receive something for debug
                    try {
                        String st = serialPort.readString(serialPortEvent
                                .getEventValue());
                        System.out.println(st);
                        
                    } catch (SerialPortException ex) {
                        Logger.getLogger(JavaFX_Matrix.class.getName())
                                .log(Level.SEVERE, null, ex);
                    }
                    
                }
            });
            
            arduinoPort = serialPort;
            
            //Send dummy to clear buffer
            try {
                Thread.sleep(2000);
            } catch (InterruptedException ex) {
                Logger.getLogger(JavaFX_Matrix.class.getName())
                        .log(Level.SEVERE, null, ex);
            }
            sendDotArduino(0, 0, false);
            
            success = true;
        } catch (SerialPortException ex) {
            Logger.getLogger(JavaFX_Matrix.class.getName())
                    .log(Level.SEVERE, null, ex);
            System.out.println("SerialPortException: " + ex.toString());
        }

        return success;
    }
    
    public void disconnectArduino(){
        
        System.out.println("disconnectArduino()");
        if(arduinoPort != null){
            try {
                arduinoPort.removeEventListener();
                
                if(arduinoPort.isOpened()){
                    arduinoPort.closePort();
                }
                
                arduinoPort = null;
            } catch (SerialPortException ex) {
                Logger.getLogger(JavaFX_Matrix.class.getName())
                        .log(Level.SEVERE, null, ex);
            }
        }
    }
    
    public void sendDotArduino(int x, int y, boolean s){
        final byte SYNC_WORD = (byte)0xFF;
        if(arduinoPort != null){
            byte[] buffer = new byte[]{
                SYNC_WORD,
                (byte)x, 
                (byte)y, 
                (byte)(s ? 1 : 0)
            };

            try {
                arduinoPort.writeBytes(buffer);
            } catch (SerialPortException ex) {
                Logger.getLogger(JavaFX_Matrix.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }

    class MatrixButton extends RadioButton {

        public MatrixButton(int x, int y) {
            
            setOnAction((ActionEvent event) -> {
                
                RadioButton src = (RadioButton) event.getSource();    
                JavaFX_Matrix.this.sendDotArduino(x, y, src.isSelected());
                
            });
        }
    }

}



Wednesday, September 16, 2015

Java/JavaFX/jSSC control Arduino + 8x8 LED Matrix

It's a example to control Arduino Uno + 8x8 LED Matrix, from USB connected PC running Windows 10, programmed with Java + JavaFX + jSSC(java-simple-serial-connector).



Arduino Side:

Connection between Arduino Uno and 8x8 LED:


UnoSerialInMatrix.ino
// 2-dimensional array of row pin numbers:
const int row[8] = {
  2, 7, 19, 5, 13, 18, 12, 16
};

// 2-dimensional array of column pin numbers:
const int col[8] = {
  6, 11, 10, 3, 17, 4, 8, 9
};

// 2-dimensional array of pixels:
int pixels[8][8];

int incomingByte = 0;

void setup() {
  // initialize the I/O pins as outputs
  // iterate over the pins:
  for (int thisPin = 0; thisPin < 8; thisPin++) {
    // initialize the output pins:
    pinMode(col[thisPin], OUTPUT);
    pinMode(row[thisPin], OUTPUT);
    // take the col pins (i.e. the cathodes) high to ensure that
    // the LEDS are off:
    digitalWrite(col[thisPin], HIGH);
  }

  clearScr();

  Serial.begin(9600);
  
}

void loop() {
  if (Serial.available() > 0) {
    incomingByte = Serial.read();
    doProcess(incomingByte);
  }
  
  // draw the screen:
  refreshScreen();

}

const int SYNC_WORD = 0xFF;
const int ST_0_IDLE = 0;
const int ST_1_WAITX = 1;
const int ST_2_WAITY = 2;
const int ST_3_WAITB = 3;
int prc_State = ST_0_IDLE;
int dotX, dotY, dotB;

void doProcess(int b){
  switch(prc_State){
    case ST_0_IDLE:
        if(b == SYNC_WORD){
          prc_State = ST_1_WAITX;
          Serial.println("1");
        }
        break;
    case ST_1_WAITX:
        dotX = b;
        prc_State = ST_2_WAITY;
        Serial.println("2");
        break;
    case ST_2_WAITY:
        dotY = b;
        prc_State = ST_3_WAITB;
        Serial.println("3");
        break;
    case ST_3_WAITB:

        if(b == 1){
          pixels[dotY][dotX] = LOW;
        }else{
          pixels[dotY][dotX] = HIGH;
        }

        prc_State = ST_0_IDLE;
        Serial.println("0");
        break;
    default:
        prc_State = ST_0_IDLE;
  }
}

void clearScr(){
  for (int x = 0; x < 8; x++) {
    for (int y = 0; y < 8; y++) {
      pixels[x][y] = HIGH;
    }
  }
}

void refreshScreen() {
  // iterate over the rows (anodes):
  for (int thisRow = 0; thisRow < 8; thisRow++) {
    // take the row pin (anode) high:
    digitalWrite(row[thisRow], HIGH);
    // iterate over the cols (cathodes):
    for (int thisCol = 0; thisCol < 8; thisCol++) {
      // get the state of the current pixel;
      int thisPixel = pixels[thisRow][thisCol];
      // when the row is HIGH and the col is LOW,
      // the LED where they meet turns on:
      digitalWrite(col[thisCol], thisPixel);
      // turn the pixel off:
      if (thisPixel == LOW) {
        digitalWrite(col[thisCol], HIGH);
      }
    }
    // take the row pin low to turn off the whole row:
    digitalWrite(row[thisRow], LOW);
  }
}

PC Side:

Before start, you have to Prepare jSSC on your NetBeans project.

JavaFX_Matrix.java
package javafx_matrix;

import java.util.logging.Level;
import java.util.logging.Logger;
import javafx.application.Application;
import javafx.application.Platform;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.ComboBox;
import javafx.scene.control.Label;
import javafx.scene.control.RadioButton;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.scene.text.Font;
import javafx.stage.Stage;
import jssc.SerialPort;
import static jssc.SerialPort.MASK_RXCHAR;
import jssc.SerialPortEvent;
import jssc.SerialPortException;
import jssc.SerialPortList;

public class JavaFX_Matrix extends Application {
    
    final private int NUM_X = 8;
    final private int NUM_Y = 8;
    
    SerialPort arduinoPort = null;
    ObservableList<String> portList;

    @Override
    public void start(Stage primaryStage) {
        
        //ComboBox for port selection
        detectPort();
        final ComboBox comboBoxPorts = new ComboBox(portList);
        comboBoxPorts.valueProperty()
                .addListener(new ChangeListener<String>() {

            @Override
            public void changed(ObservableValue<? extends String> observable, 
                    String oldValue, String newValue) {

                System.out.println(newValue);
                disconnectArduino();
                connectArduino(newValue);
            }

        });
        
        //
        
        final Label label = new Label("arduino-er.blogspot.com");
        label.setFont(Font.font("Arial", 24));
        
        Button btnExit = new Button("Exit");
        btnExit.setOnAction((ActionEvent event) -> {
            Platform.exit();
        });

        VBox vBoxInfo = new VBox();
        vBoxInfo.getChildren().addAll(label, btnExit);
        
        //Matrix of RadioButton
        VBox vBoxMatrix = new VBox();
        vBoxMatrix.setPadding(new Insets(10, 10, 10, 10));

        for(int y=0; y<NUM_Y; y++){
            
            HBox box = new HBox();
            for(int x=0; x<NUM_X; x++){
                MatrixButton btn = new MatrixButton(x, y);
                box.getChildren().add(btn);
            }
            vBoxMatrix.getChildren().add(box);
            
        }
        
        vBoxMatrix.widthProperty().addListener(new ChangeListener<Number>(){

            @Override
            public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) {
                comboBoxPorts.setPrefWidth((double)newValue);
                btnExit.setPrefWidth((double)newValue);
            }
        });

        BorderPane borderPane = new BorderPane();
        borderPane.setTop(comboBoxPorts);
        borderPane.setCenter(vBoxMatrix);
        borderPane.setBottom(vBoxInfo);

        Scene scene = new Scene(borderPane, 300, 250);

        primaryStage.setTitle("Arduino-er");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
    
    @Override
    public void stop() throws Exception {
        disconnectArduino();
        super.stop();
    }
    
    private void detectPort(){
         
        portList = FXCollections.observableArrayList();
 
        String[] serialPortNames = SerialPortList.getPortNames();
        for(String name: serialPortNames){
            System.out.println(name);
            portList.add(name);
        }
    }
    
    public boolean connectArduino(String port){
        
        System.out.println("connectArduino");
        
        boolean success = false;
        SerialPort serialPort = new SerialPort(port);
        try {
            serialPort.openPort();
            serialPort.setParams(
                    SerialPort.BAUDRATE_9600,
                    SerialPort.DATABITS_8,
                    SerialPort.STOPBITS_1,
                    SerialPort.PARITY_NONE);
            serialPort.setEventsMask(MASK_RXCHAR);
            serialPort.addEventListener((SerialPortEvent serialPortEvent) -> {
                if(serialPortEvent.isRXCHAR()){            
                    //receive something for debug
                    try {
                        String st = serialPort.readString(serialPortEvent
                                .getEventValue());
                        System.out.println(st);
                        
                    } catch (SerialPortException ex) {
                        Logger.getLogger(JavaFX_Matrix.class.getName())
                                .log(Level.SEVERE, null, ex);
                    }
                    
                }
            });
            
            arduinoPort = serialPort;
            
            //Send dummy to clear buffer
            try {
                Thread.sleep(2000);
            } catch (InterruptedException ex) {
                Logger.getLogger(JavaFX_Matrix.class.getName())
                        .log(Level.SEVERE, null, ex);
            }
            sendDotArduino(0, 0, false);
            
            success = true;
        } catch (SerialPortException ex) {
            Logger.getLogger(JavaFX_Matrix.class.getName())
                    .log(Level.SEVERE, null, ex);
            System.out.println("SerialPortException: " + ex.toString());
        }

        return success;
    }
    
    public void disconnectArduino(){
        
        System.out.println("disconnectArduino()");
        if(arduinoPort != null){
            try {
                arduinoPort.removeEventListener();
                
                if(arduinoPort.isOpened()){
                    arduinoPort.closePort();
                }
                
                arduinoPort = null;
            } catch (SerialPortException ex) {
                Logger.getLogger(JavaFX_Matrix.class.getName())
                        .log(Level.SEVERE, null, ex);
            }
        }
    }
    
    public void sendDotArduino(int x, int y, boolean s){
        final byte SYNC_WORD = (byte)0xFF;
        if(arduinoPort != null){
            byte[] buffer = new byte[]{
                SYNC_WORD,
                (byte)x, 
                (byte)y, 
                (byte)(s ? 1 : 0)
            };

            try {
                arduinoPort.writeBytes(buffer);
            } catch (SerialPortException ex) {
                Logger.getLogger(JavaFX_Matrix.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }

    class MatrixButton extends RadioButton {

        public MatrixButton(int x, int y) {
            
            setOnAction((ActionEvent event) -> {
                
                RadioButton src = (RadioButton) event.getSource();    
                JavaFX_Matrix.this.sendDotArduino(x, y, src.isSelected());
                
            });
        }
    }

}


Next:
Raspberry Pi control Arduino + 8x8 LED Matrix, using Java/JavaFX/jSSC


- More example of Java/JavaFX/jSSC communicate with Arduino.

Arduino Meets Linux: The User's Guide to Arduino Yún Development

Build the next generation of connected projects.

Arduino Meets Linux: The User's Guide to Arduino Yún Development

The Yún is one of the most powerful and flexible hardware development boards in the Arduino range. It combines the ease-of-use of the Arduino platform, with the power of a 400 MHz Atheros AR9331 Wi-Fi system-on-chip (WiSOC) that runs Linux.

But if you are not experienced and confident in working with Linux-based operating systems, it may be difficult for you to use the Yún to its full potential.

Bob Hammell is the author of popular Arduino learning resources, such as Connecting Arduino: Programming and Networking with the Ethernet Shield. In this book, he guides you through all of the Arduino Yún’s features and explains how to make use of this unique board.

Using interesting and fun examples, in Arduino Meets Linux: The User’s Guide to Arduino Yún Development you can learn how to:
  • Connect your Arduino Yún to your network, using built-in support for Wi-Fi and Ethernet;
  • Work with OpenWrt-Yun Linux through the command line;
  • Use the Bridge Library to communicate and share data between both of the Yún's chips;
  • Write Python and shell scripts to automate tasks and use the power of the AR9331 in your Arduino projects;
  • Work with Temboo and third-party APIs to access popular web services;
  • Host your own websites and application programming interfaces (APIs) on the Yún;
  • Use USB devices, such as audio interfaces and gamepads from Microsoft Xbox 360® and Sony PlayStation® games consoles;
  • Build Arduino projects that act as a keyboard or mouse when you plug your Yún into a PC or Mac;
  • Add voice recognition and speech to your Arduino projects;
  • Download source code, view demo videos, and access extra projects from the book's companion website, ArduinoMeetsLinux.com;
  • And much, much more.
Whether you are an experienced Linux developer looking for specific details on using the Arduino Yún or a beginner who has never used Linux before, you can find all of the key information that you need in this book.

With the Arduino Yún, you can take your Arduino projects to the next level. This book shows you how.

Monday, September 14, 2015

Kamibot: Interactive Papercraft



Kamibot, simply put, is a paper robot hybrid. Users can build and rebuild their desired papercraft on a single robot. After building, users can move and interact with their papercraft. In addition, anyone can reprogram Kamibot to change their individual interactive experience.

http://www.kamibot.com/


Building Multicopter Video Drones

Build and fly multicopter drones to gather breathtaking video footage

Building Multicopter Video Drones

About This Book
  • Capture mind-blowing video from the sky and impress your friends and colleagues
  • Choose and configure components to build your own multicopter
  • Fully illustrated and written in a conversational manner
Who This Book Is For
This book is for a wide range of individuals who are looking to shoot aerial footage with a multicopter. No previous flying experience is assumed, but even the most expert flyers will find unexpected and interesting information.

What You Will Learn
  • Discover the physics of multicopter flight
  • Browse through the plethora of turnkey systems to choose a fabricated platform that suits your needs
  • Get acquainted with safety precautions to minimize your legal and financial liability
  • Calculate the specifications of the components you're purchasing to maximize flight time and performance
  • Program and calibrate the guidance system of your drone
  • Familiarize yourself with the key maneuvers for cinematic multicopter videography
  • Understand post-production editing and preparation techniques to improve your multicopter footage
In Detail
Multicopters have revolutionized the television and film industry. For the cost of just a few hours of traditional helicopter rental, videographers and cinematographers can own a multicopter drone that shoots stunning aerial shots that helicopter pilots can only dream of. This book is a practical guide that aims to help you learn how to build, fly, and program your own drone.

The book starts by explaining the physics of multicopter flight and then walks you through all of the decision processes when choosing a platform. From turnkey systems to custom-built multicopters, you will not only comprehend the working of the components, but also gauge why the choices you make are crucial and how they affect your flight. As you go through the book, you will gain a firm grip on the principles, choices, and safety issues involved in a multicopter flight.

Finally, it will teach you the maneuvers to capture great camera movements and explain the intricacies of stabilizing them in post-production. In short, you will be well on your way to becoming a professional multicopter videographer.

Sunday, September 13, 2015

Java + JavaFX + jSSC run on Raspberry Pi, control Arduino Uno

Last post show a example of Java + JavaFX + jSSC run on PC/Windows 10 developed in NetBeans IDE, to communicate with/control Arduino Uno. Here we remote run it on Raspberry Pi to communicate with/control Arduino Uno.

This video show how to create Remote Java SE Platform on NetBeans IDE run on Windows 10, and run it remotely on Raspberry Pi 2.


Host development platform:
OS: Windows 10
IDE: NetBeans IDE 8.0.2
Programming Language: Java + JavaFX + jSSC (refer last post Last Post)

Target platform:
Raspberry Pi 2
OS: Raspbian
IP: 192.168.1.110
Both Host development platform and Target platform in the same Network.

remark: due to something wrong on my Raspberry Pi 2 cannot detect monitor correctly, I have to edit /boot/config.txt to set framebuffer_width and framebuffer_height to 500x400. So the screen output may be differency to you.

Arduino Side:
Board: Arduino Uno
Connected to Raspberry Pi 2 with USB.
Program and Connection: (refer last post Last Post)


Related:
- Raspberry Pi control Arduino + 8x8 LED Matrix, using Java/JavaFX/jSSC

Saturday, September 12, 2015

Arduino Robotic Projects

Build awesome and complex robots with the power of Arduino

Arduino Robotic Projects

Who This Book Is For
This book is for anyone who has been curious about using Arduino to create robotic projects that were previously the domain of research labs of major universities or defense departments. Some programming background is useful, but if you know how to use a PC, you can, with the aid of the step-by-step instructions in this book, construct complex robotic projects that can roll, walk, swim, or fly.

About This Book
  • Develop a series of exciting robots that can sail, go under water, and fly
  • Simple, easy-to-understand instructions to program Arduino
  • Effectively control the movements of all types of motors using Arduino
  • Use sensors, GSP, and a magnetic compass to give your robot direction and make it lifelike
In Detail
Arduino is an open source microcontroller, built on a single circuit board that is capable of receiving sensory input from the environment and controlling interactive physical objects.

Arduino Robotic Projects starts with the fundamentals of turning on the basic hardware and then provides complete, step-by-step instructions that allow almost anyone to use this low-cost hardware platform. You'll build projects that can move using DC motors, walk using servo motors, and then add sensors to avoid barriers. You'll also learn how to add more complex navigational techniques such as GPRS so that your robot won't get lost.

Friday, September 11, 2015

Bi-direction communication between Arduino and PC using Java + jSSC

This example show Bi-direction communication between Arduino Uno and PC using Java + javaFX + jSSC:
Arduino to PC: Arduino Uno analog input, display on JavaFX LineChart
PC to Arduino: Button to control Arduino Uno on-board LED


Before start, you have to Prepare jSSC on your NetBeans project.

Arduino side: AnalogInputToUSB.ino, run on Arduino Uno.
/*
 * AnalogInputUSB
 * Read analog input from analog pin 0
 * and send data to USB
 */

int ledPin = 13;
int analogPin = A0;
int analogValue = 0;

int incomingByte = 0;

void setup() {
  pinMode(ledPin, OUTPUT);
  Serial.begin(9600);
}

void loop() {

  if (Serial.available() > 0) {
    incomingByte = Serial.read();

    if(incomingByte & 0x01){
      digitalWrite(ledPin, HIGH);
    }else{
      digitalWrite(ledPin, LOW);
    }
  }
  
  analogValue = analogRead(analogPin);  //Read analog input
  analogValue = map(analogValue, 0, 1023, 0, 255);
  Serial.write(analogValue);            //write as byte, to USB

  delay(100);
}a

PC Side, JavaFX_jssc_Uno.java
/*
 * Example of using jSSC library to handle serial port
 * Receive number from Arduino via USB/Serial and display on Label
 */
package javafx_jssc_uno;

import java.util.logging.Level;
import java.util.logging.Logger;
import javafx.application.Application;
import javafx.application.Platform;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.scene.Scene;
import javafx.scene.chart.LineChart;
import javafx.scene.chart.NumberAxis;
import javafx.scene.chart.XYChart;
import javafx.scene.control.Button;
import javafx.scene.control.ComboBox;
import javafx.scene.control.Label;
import javafx.scene.control.ToggleButton;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.scene.text.Font;
import javafx.stage.Stage;
import jssc.SerialPort;
import static jssc.SerialPort.MASK_RXCHAR;
import jssc.SerialPortEvent;
import jssc.SerialPortException;
import jssc.SerialPortList;

public class JavaFX_jssc_Uno extends Application {
    
    SerialPort arduinoPort = null;
    ObservableList<String> portList;
    
    ToggleButton tbLED13;
    Label labelValue;
    final int NUM_OF_POINT = 50;
    XYChart.Series series;
     
    private void detectPort(){
         
        portList = FXCollections.observableArrayList();
 
        String[] serialPortNames = SerialPortList.getPortNames();
        for(String name: serialPortNames){
            System.out.println(name);
            portList.add(name);
        }
    }
    
    @Override
    public void start(Stage primaryStage) {
        
        labelValue = new Label();
        labelValue.setFont(new Font("Arial", 28));
        
        detectPort();
        final ComboBox comboBoxPorts = new ComboBox(portList);
        comboBoxPorts.valueProperty()
                .addListener(new ChangeListener<String>() {

            @Override
            public void changed(ObservableValue<? extends String> observable, 
                    String oldValue, String newValue) {

                System.out.println(newValue);
                disconnectArduino();
                connectArduino(newValue);
                
                tbLED13.setSelected(false);
            }

        });
        
        //Toggle Button to control LED on Arduino 
        tbLED13 = new ToggleButton("Arduino LED 13");
        tbLED13.setOnAction((ActionEvent event) -> {
            updateLED13();
        });
        
        //LineChart
        final NumberAxis xAxis = new NumberAxis();
        final NumberAxis yAxis = new NumberAxis();
        yAxis.setLabel("Voltage");
        
        final LineChart<Number,Number> lineChart = 
                new LineChart<>(xAxis,yAxis);
        lineChart.setTitle("Arduino Uno A0 Analog Input");
        series = new XYChart.Series();
        series.setName("A0 analog input");
        lineChart.getData().add(series);
        lineChart.setAnimated(false);
        
        //pre-load with dummy data
        for(int i=0; i<NUM_OF_POINT; i++){
            series.getData().add(new XYChart.Data(i, 0));
        }
        //
        
        VBox vBox = new VBox();
        vBox.getChildren().addAll(
                comboBoxPorts,  
                tbLED13, 
                labelValue, 
                lineChart);
        
        StackPane root = new StackPane();
        root.getChildren().add(vBox);
        
        Scene scene = new Scene(root, 500, 400);
        
        primaryStage.setTitle(
                "arduino-er.blogspot.com: Java + JavaFX + jSSC demo");
        primaryStage.setScene(scene);
        primaryStage.show();
    }
    
    private void updateLED13(){
        try {
            if(tbLED13.isSelected()){
                if(arduinoPort != null){
                    arduinoPort.writeByte((byte)0x01);
                    System.out.println("LED 13 ON");
                }else{
                    System.out.println("arduinoPort not connected!");
                }
            }else {
                if(arduinoPort != null){
                    arduinoPort.writeByte((byte)0x00);
                    System.out.println("LED 13 OFF");
                }else{
                    System.out.println("arduinoPort not connected!");
                }
            }
        }catch (SerialPortException ex) {
            Logger.getLogger(JavaFX_jssc_Uno.class.getName())
                    .log(Level.SEVERE, null, ex);
        }
    }
    
    public void shiftSeriesData(float newValue)
    {
        for(int i=0; i<NUM_OF_POINT-1; i++){
            XYChart.Data<String, Number> ShiftDataUp = 
                    (XYChart.Data<String, Number>)series.getData().get(i+1);
            Number shiftValue = ShiftDataUp.getYValue();
            XYChart.Data<String, Number> ShiftDataDn = 
                    (XYChart.Data<String, Number>)series.getData().get(i);
            ShiftDataDn.setYValue(shiftValue);
        }
        XYChart.Data<String, Number> lastData = 
            (XYChart.Data<String, Number>)series.getData().get(NUM_OF_POINT-1);
        lastData.setYValue(newValue);
    }

    public boolean connectArduino(String port){
        
        System.out.println("connectArduino");
        
        boolean success = false;
        SerialPort serialPort = new SerialPort(port);
        try {
            serialPort.openPort();
            serialPort.setParams(
                    SerialPort.BAUDRATE_9600,
                    SerialPort.DATABITS_8,
                    SerialPort.STOPBITS_1,
                    SerialPort.PARITY_NONE);
            serialPort.setEventsMask(MASK_RXCHAR);
            serialPort.addEventListener((SerialPortEvent serialPortEvent) -> {
                if(serialPortEvent.isRXCHAR()){
                    try {
                        
                        byte[] b = serialPort.readBytes();
                        int value = b[0] & 0xff;    //convert to int
                        String st = String.valueOf(value);

                        //Update label in ui thread
                        Platform.runLater(() -> {
                            labelValue.setText(st);
                            shiftSeriesData((float)value * 5/255); //in 5V scale
                        });
                        
                    } catch (SerialPortException ex) {
                        Logger.getLogger(JavaFX_jssc_Uno.class.getName())
                                .log(Level.SEVERE, null, ex);
                    }
                    
                }
            });
            
            arduinoPort = serialPort;
            success = true;
        } catch (SerialPortException ex) {
            Logger.getLogger(JavaFX_jssc_Uno.class.getName())
                    .log(Level.SEVERE, null, ex);
            System.out.println("SerialPortException: " + ex.toString());
        }

        return success;
    }
    
    public void disconnectArduino(){
        
        System.out.println("disconnectArduino()");
        if(arduinoPort != null){
            try {
                arduinoPort.removeEventListener();
                
                if(arduinoPort.isOpened()){
                    arduinoPort.closePort();
                }
                
                arduinoPort = null;
            } catch (SerialPortException ex) {
                Logger.getLogger(JavaFX_jssc_Uno.class.getName())
                        .log(Level.SEVERE, null, ex);
            }
        }
    }

    @Override
    public void stop() throws Exception {
        disconnectArduino();
        super.stop();
    }
            
    public static void main(String[] args) {
        launch(args);
    }
    
}


Connect a potentiometer in Arduino Uno side to set analog input A0.
Next:
- Run it remotely on Raspberry Pi 2.

Basic Electronics: Theory and Practice

Basic Electronics: Theory and Practice

Designed for both the student and hobbyist, this book is an introduction to the theory and practice of electronics including advances in microcontrollers, sensors, and wireless communication. Each chapter contains a brief lab to demonstrate the topic covered then moves on to the final part which combines the knowledge mastered by building a programmable robot (Arduino and Netduino). The companion disc includes videos of the labs, soldering skills, and code samples for programming of the robot.

Covering both the theory and its practical application, this text leads the reader through the basic science concepts underlying electronics, building basic circuits, learning the roles of the components, the application of digital theory, and the possibilities for innovation by combining sensors, motors, and microcontrollers. The book includes appendices on mathematics for electronics, a timeline of electronics innovation, careers in electronics, and a glossary.

Features:
Includes a companion disc with eighteen video tutorials on currents, soldering, power supply, resistors, decoder circuits, and more
  • Leads the reader through an introductory understanding of electronics with simple labs and then progressing to the construction of a microcontroller-driven robot using open source software and hardware (Netduino and Arduino versions)
  • Presents theoretical concepts in a conversational tone, followed by hands-on labs to engage readers by presenting practical applications

Wednesday, September 9, 2015

JavaFX + jSSC - read byte from Arduino Uno, display in LineChart


Similar to last example "JavaFX + jSSC - read byte from Arduino Uno, read from Analog Input". This example plot the analog data in JavaFX LineChart. (This video show the effect of calling lineChart.setAnimated(false) and default true also.)


Before start, you have to Prepare jSSC on your NetBeans project.

JavaFX_jssc_Uno.java
/*
 * Example of using jSSC library to handle serial port
 * Receive number from Arduino via USB/Serial and display on Label
 */
package javafx_jssc_uno;

import java.util.logging.Level;
import java.util.logging.Logger;
import javafx.application.Application;
import javafx.application.Platform;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Scene;
import javafx.scene.chart.LineChart;
import javafx.scene.chart.NumberAxis;
import javafx.scene.chart.XYChart;
import javafx.scene.control.ComboBox;
import javafx.scene.control.Label;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.scene.text.Font;
import javafx.stage.Stage;
import jssc.SerialPort;
import static jssc.SerialPort.MASK_RXCHAR;
import jssc.SerialPortEvent;
import jssc.SerialPortException;
import jssc.SerialPortList;

public class JavaFX_jssc_Uno extends Application {
    
    SerialPort arduinoPort = null;
    ObservableList<String> portList;
    
    Label labelValue;
    final int NUM_OF_POINT = 50;
    XYChart.Series series;
     
    private void detectPort(){
         
        portList = FXCollections.observableArrayList();
 
        String[] serialPortNames = SerialPortList.getPortNames();
        for(String name: serialPortNames){
            System.out.println(name);
            portList.add(name);
        }
    }
    
    @Override
    public void start(Stage primaryStage) {
        
        labelValue = new Label();
        labelValue.setFont(new Font("Arial", 28));
        
        detectPort();
        final ComboBox comboBoxPorts = new ComboBox(portList);
        comboBoxPorts.valueProperty()
                .addListener(new ChangeListener<String>() {

            @Override
            public void changed(ObservableValue<? extends String> observable, 
                    String oldValue, String newValue) {

                System.out.println(newValue);
                disconnectArduino();
                connectArduino(newValue);
            }

        });
        
        //LineChart
        final NumberAxis xAxis = new NumberAxis();
        final NumberAxis yAxis = new NumberAxis();
        yAxis.setLabel("Voltage");
        
        final LineChart<Number,Number> lineChart = 
                new LineChart<>(xAxis,yAxis);
        lineChart.setTitle("Arduino Uno A0 Analog Input");
        series = new XYChart.Series();
        series.setName("A0 analog input");
        lineChart.getData().add(series);
        lineChart.setAnimated(false);
        
        //pre-load with dummy data
        for(int i=0; i<NUM_OF_POINT; i++){
            series.getData().add(new XYChart.Data(i, 0));
        }
        //
        
        VBox vBox = new VBox();
        vBox.getChildren().addAll(
                comboBoxPorts, labelValue, lineChart);
        
        StackPane root = new StackPane();
        root.getChildren().add(vBox);
        
        Scene scene = new Scene(root, 500, 400);
        
        primaryStage.setTitle(
                "arduino-er.blogspot.com: Java + JavaFX + jSSC demo");
        primaryStage.setScene(scene);
        primaryStage.show();
    }
    
    public void shiftSeriesData(float newValue)
    {
        for(int i=0; i<NUM_OF_POINT-1; i++){
            XYChart.Data<String, Number> ShiftDataUp = 
                    (XYChart.Data<String, Number>)series.getData().get(i+1);
            Number shiftValue = ShiftDataUp.getYValue();
            XYChart.Data<String, Number> ShiftDataDn = 
                    (XYChart.Data<String, Number>)series.getData().get(i);
            ShiftDataDn.setYValue(shiftValue);
        }
        XYChart.Data<String, Number> lastData = 
            (XYChart.Data<String, Number>)series.getData().get(NUM_OF_POINT-1);
        lastData.setYValue(newValue);
    }

    public boolean connectArduino(String port){
        
        System.out.println("connectArduino");
        
        boolean success = false;
        SerialPort serialPort = new SerialPort(port);
        try {
            serialPort.openPort();
            serialPort.setParams(
                    SerialPort.BAUDRATE_9600,
                    SerialPort.DATABITS_8,
                    SerialPort.STOPBITS_1,
                    SerialPort.PARITY_NONE);
            serialPort.setEventsMask(MASK_RXCHAR);
            serialPort.addEventListener((SerialPortEvent serialPortEvent) -> {
                if(serialPortEvent.isRXCHAR()){
                    try {
                        
                        byte[] b = serialPort.readBytes();
                        int value = b[0] & 0xff;    //convert to int
                        String st = String.valueOf(value);

                        //Update label in ui thread
                        Platform.runLater(() -> {
                            labelValue.setText(st);
                            shiftSeriesData((float)value * 5/255); //in 5V scale
                        });
                        
                    } catch (SerialPortException ex) {
                        Logger.getLogger(JavaFX_jssc_Uno.class.getName())
                                .log(Level.SEVERE, null, ex);
                    }
                    
                }
            });
            
            arduinoPort = serialPort;
            success = true;
        } catch (SerialPortException ex) {
            Logger.getLogger(JavaFX_jssc_Uno.class.getName())
                    .log(Level.SEVERE, null, ex);
            System.out.println("SerialPortException: " + ex.toString());
        }

        return success;
    }
    
    public void disconnectArduino(){
        
        System.out.println("disconnectArduino()");
        if(arduinoPort != null){
            try {
                arduinoPort.removeEventListener();
                
                if(arduinoPort.isOpened()){
                    arduinoPort.closePort();
                }
                
            } catch (SerialPortException ex) {
                Logger.getLogger(JavaFX_jssc_Uno.class.getName())
                        .log(Level.SEVERE, null, ex);
            }
        }
    }

    @Override
    public void stop() throws Exception {
        disconnectArduino();
        super.stop();
    }
            
    public static void main(String[] args) {
        launch(args);
    }
    
}


For the Arduino Uno side and hardware connection, refer to last post "JavaFX + jSSC - read byte from Arduino Uno, read from Analog Input".

Next:
Bi-direction communication between Arduino and PC using Java + jSSC

JavaFX + jSSC - read byte from Arduino Uno, read from Analog Input

This example show how to use Java + jSSC + JavaFX running on PC/Windows 10, read bytes from USB/Serial. The data sent from Arduino Uno by reading analog input. The PC and Arduino Uno connected with USB.


Before start, you have to Prepare jSSC on your NetBeans project.

Java code, run on PC side - JavaFX_jssc_Uno.java
/*
 * Example of using jSSC library to handle serial port
 * Receive number from Arduino via USB/Serial and display on Label
 */
package javafx_jssc_uno;

import java.util.logging.Level;
import java.util.logging.Logger;
import javafx.application.Application;
import javafx.application.Platform;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Scene;
import javafx.scene.control.ComboBox;
import javafx.scene.control.Label;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.scene.text.Font;
import javafx.stage.Stage;
import jssc.SerialPort;
import static jssc.SerialPort.MASK_RXCHAR;
import jssc.SerialPortEvent;
import jssc.SerialPortException;
import jssc.SerialPortList;

public class JavaFX_jssc_Uno extends Application {
    
    SerialPort arduinoPort = null;
    ObservableList<String> portList;
    
    Label labelValue;
     
    private void detectPort(){
         
        portList = FXCollections.observableArrayList();
 
        String[] serialPortNames = SerialPortList.getPortNames();
        for(String name: serialPortNames){
            System.out.println(name);
            portList.add(name);
        }
    }
    
    @Override
    public void start(Stage primaryStage) {
        
        labelValue = new Label();
        labelValue.setFont(new Font("Arial", 150));
        
        detectPort();
        final ComboBox comboBoxPorts = new ComboBox(portList);
        comboBoxPorts.valueProperty()
                .addListener(new ChangeListener<String>() {

            @Override
            public void changed(ObservableValue<? extends String> observable, 
                    String oldValue, String newValue) {

                System.out.println(newValue);
                disconnectArduino();
                connectArduino(newValue);
            }

        });
        
        VBox vBox = new VBox();
        vBox.getChildren().addAll(
                comboBoxPorts, labelValue);
        
        StackPane root = new StackPane();
        root.getChildren().add(vBox);
        
        Scene scene = new Scene(root, 300, 250);
        
        primaryStage.setTitle("Hello World!");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public boolean connectArduino(String port){
        
        System.out.println("connectArduino");
        
        boolean success = false;
        SerialPort serialPort = new SerialPort(port);
        try {
            serialPort.openPort();
            serialPort.setParams(
                    SerialPort.BAUDRATE_9600,
                    SerialPort.DATABITS_8,
                    SerialPort.STOPBITS_1,
                    SerialPort.PARITY_NONE);
            serialPort.setEventsMask(MASK_RXCHAR);
            serialPort.addEventListener((SerialPortEvent serialPortEvent) -> {
                if(serialPortEvent.isRXCHAR()){
                    try {
                        
                        byte[] b = serialPort.readBytes();
                        int value = b[0] & 0xff;    //convert to int
                        String st = String.valueOf(value);


                        //Update label in ui thread
                        Platform.runLater(() -> {
                            labelValue.setText(st);  
                        });
                        
                    } catch (SerialPortException ex) {
                        Logger.getLogger(JavaFX_jssc_Uno.class.getName())
                                .log(Level.SEVERE, null, ex);
                    }
                    
                }
            });
            
            arduinoPort = serialPort;
            success = true;
        } catch (SerialPortException ex) {
            Logger.getLogger(JavaFX_jssc_Uno.class.getName())
                    .log(Level.SEVERE, null, ex);
            System.out.println("SerialPortException: " + ex.toString());
        }

        return success;
    }
    
    public void disconnectArduino(){
        
        System.out.println("disconnectArduino()");
        if(arduinoPort != null){
            try {
                arduinoPort.removeEventListener();
                
                if(arduinoPort.isOpened()){
                    arduinoPort.closePort();
                }
                
            } catch (SerialPortException ex) {
                Logger.getLogger(JavaFX_jssc_Uno.class.getName())
                        .log(Level.SEVERE, null, ex);
            }
        }
    }

    @Override
    public void stop() throws Exception {
        disconnectArduino();
        super.stop();
    }
            
    public static void main(String[] args) {
        launch(args);
    }
    
}


Arduino Uno side - AnalogInputToUSB.ino
/*
 * AnalogInputUSB
 * Read analog input from analog pin 0
 * and send data to USB
 */

int ledPin = 13;
int analogPin = A0;
int analogValue = 0;

void setup() {
  pinMode(ledPin, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  digitalWrite(ledPin, HIGH);
  
  analogValue = analogRead(analogPin);  //Read analog input
  analogValue = map(analogValue, 0, 1023, 0, 255);
  Serial.write(analogValue);            //write as byte, to USB
  
  digitalWrite(ledPin, LOW);
  delay(1000);
}

Connect a potentiometer in Analog Input A0 as input.


Next:
JavaFX + jSSC - read byte from Arduino Uno, display in LineChart

Download and Install 64 bit Fritzing on Windows 10


Fritzing is an open-source hardware initiative that makes electronics accessible as a creative material for anyone.

http://fritzing.org/

Video show how to download and install 64 bit Fritzing on Windows 10




Tuesday, September 8, 2015

Example of using jSSC, communicate between JavaFX and Arduino Uno via USB Serial port

Prepare a simple sketch run on Arduino Uno to send a counting number to serial port, tested on Windows 10.

BlinkUSB.ino
/*
 * Send number to Serial
 */
int i = 0;

// the setup function runs once when you press reset or power the board
void setup() {
  // initialize digital pin 13 as an output.
  pinMode(13, OUTPUT);
  Serial.begin(9600);
}

// the loop function runs over and over again forever
void loop() {

  Serial.print(i);
  i++;
  
  digitalWrite(13, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);              // wait for a second
  digitalWrite(13, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);              // wait for a second
}

Read last post to "Prepare jSSC - download and add library to NetBeans, and create project using jSSC library".

modify the java code, JavaFX_jssc_Uno.java
/*
 * Example of using jSSC library to handle serial port
 * Receive number from Arduino via USB/Serial and display on Label
 */
package javafx_jssc_uno;

import java.util.logging.Level;
import java.util.logging.Logger;
import javafx.application.Application;
import javafx.application.Platform;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Scene;
import javafx.scene.control.ComboBox;
import javafx.scene.control.Label;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
import jssc.SerialPort;
import static jssc.SerialPort.MASK_RXCHAR;
import jssc.SerialPortEvent;
import jssc.SerialPortException;
import jssc.SerialPortList;

public class JavaFX_jssc_Uno extends Application {
    
    SerialPort arduinoPort = null;
    ObservableList<String> portList;
    
    Label labelValue;
     
    private void detectPort(){
         
        portList = FXCollections.observableArrayList();
 
        String[] serialPortNames = SerialPortList.getPortNames();
        for(String name: serialPortNames){
            System.out.println(name);
            portList.add(name);
        }
    }
    
    @Override
    public void start(Stage primaryStage) {
        
        labelValue = new Label();
        
        detectPort();
        final ComboBox comboBoxPorts = new ComboBox(portList);
        comboBoxPorts.valueProperty()
                .addListener(new ChangeListener<String>() {

            @Override
            public void changed(ObservableValue<? extends String> observable, 
                    String oldValue, String newValue) {

                System.out.println(newValue);
                disconnectArduino();
                connectArduino(newValue);
            }

        });
        
        VBox vBox = new VBox();
        vBox.getChildren().addAll(
                comboBoxPorts, labelValue);
        
        StackPane root = new StackPane();
        root.getChildren().add(vBox);
        
        Scene scene = new Scene(root, 300, 250);
        
        primaryStage.setTitle("Hello World!");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public boolean connectArduino(String port){
        
        System.out.println("connectArduino");
        
        boolean success = false;
        SerialPort serialPort = new SerialPort(port);
        try {
            serialPort.openPort();
            serialPort.setParams(
                    SerialPort.BAUDRATE_9600,
                    SerialPort.DATABITS_8,
                    SerialPort.STOPBITS_1,
                    SerialPort.PARITY_NONE);
            serialPort.setEventsMask(MASK_RXCHAR);
            serialPort.addEventListener((SerialPortEvent serialPortEvent) -> {
                if(serialPortEvent.isRXCHAR()){
                    try {
                        String st = serialPort.readString(serialPortEvent
                                .getEventValue());
                        System.out.println(st);
                        
                        //Update label in ui thread
                        Platform.runLater(() -> {
                            labelValue.setText(st);
                        });
                        
                    } catch (SerialPortException ex) {
                        Logger.getLogger(JavaFX_jssc_Uno.class.getName())
                                .log(Level.SEVERE, null, ex);
                    }
                    
                }
            });
            
            arduinoPort = serialPort;
            success = true;
        } catch (SerialPortException ex) {
            Logger.getLogger(JavaFX_jssc_Uno.class.getName())
                    .log(Level.SEVERE, null, ex);
            System.out.println("SerialPortException: " + ex.toString());
        }

        return success;
    }
    
    public void disconnectArduino(){
        
        System.out.println("disconnectArduino()");
        if(arduinoPort != null){
            try {
                arduinoPort.removeEventListener();
                
                if(arduinoPort.isOpened()){
                    arduinoPort.closePort();
                }
                
            } catch (SerialPortException ex) {
                Logger.getLogger(JavaFX_jssc_Uno.class.getName())
                        .log(Level.SEVERE, null, ex);
            }
        }
    }

    @Override
    public void stop() throws Exception {
        disconnectArduino();
        super.stop();
    }
            
    public static void main(String[] args) {
        launch(args);
    }
    
}



Next:
- JavaFX + jSSC - read byte from Arduino Uno, read from Analog Input

Prepare jSSC - download and add library to NetBeans, and create project using it.

jSSC (Java Simple Serial Connector) is a library for working with serial ports from Java. jSSC support Win32(Win98-Win8), Win64, Linux(x86, x86-64, ARM), Solaris(x86, x86-64), Mac OS X 10.5 and higher(x86, x86-64, PPC, PPC64)

link: https://code.google.com/p/java-simple-serial-connector/

Here show how to download and add library to NetBeans, and create NetBeans project using jSSC library. Next post will show a javaFX example to communicate with Arduino Uno via USB Serial.

Prepare jSSC - java serial port communication library - Download and add library to NetBeans


Prepare jSSC - Create NetBeans project using jSSC library



Example of using Java + jSSC:
- Example of using jSSC, communicate between JavaFX and Arduino Uno via USB Serial port
- JavaFX + jSSC - read byte from Arduino Uno, read from Analog Input
JavaFX + jSSC - read byte from Arduino Uno, display in LineChart
Bi-direction communication between Arduino and PC using Java + jSSC
Java + JavaFX + jSSC run on Raspberry Pi, control Arduino Uno
Java/JavaFX/jSSC control Arduino + 8x8 LED Matrix
- Raspberry Pi control Arduino + 8x8 LED Matrix, using Java/JavaFX/jSSC

Monday, September 7, 2015

Install Arduino Software (IDE) on Windows 10



To install Arduino Software (IDE) on Windows 10, visit https://www.arduino.cc/en/Main/Software to download and run Windows Installer.

This video show the steps:




Due to any reason, you cannot install the Arduino driver on Windows, you can try to update the driver manually in your Device Manager.

Sunday, September 6, 2015

Arduino Wearable Projects

Design, code, and build exciting wearable projects using Arduino tools

Arduino Wearable Projects

About This Book
  • Develop an interactive program using sensors and actuators suitable with wearables
  • Understand wearable programming with the help of hands-on projects
  • Explore different wearable design processes in the Arduino platform and customize them to fit your individual needs
Who This Book Is For
This book is intended for readers who are familiar with the Arduino platform and want to learn more about creating wearable projects. No previous experience in wearables is expected, although a basic knowledge of Arduino programming will help.

What You Will Learn
  • Develop a basic understanding of wearable computing
  • Learn about Arduino and its compatible prototyping platforms suitable for creating wearables
  • Understand the design process surrounding the creation of wearable objects
  • Gain insight into the materials suitable for developing wearable projects
  • Design and create projects including interactive bike gloves, GPRS locator watch, and more using various kinds of electronic components
  • Discover programming for interactivity
  • Learn how to connect and interface wearables' with Bluetooth and WiFi
  • Get your hands dirty with your own personalized designs
In Detail
The demand for smart wearable technologies is becoming more popular day by day. The Arduino platform was developed keeping wearables, such as watches that track your location or shoes that count the miles you've run, in mind. It is basically an open-source physical computing platform based on a simple microcontroller board and a development environment in which you create the software for the board. If you're interested in designing and creating your own wearables, this is an excellent platform for you.

This book provides you with the skills and understanding to create your own wearable projects. The book covers different prototyping boards which are compatible with the Arduino platform and are suitable for creating wearable projects. Each chapter of the book covers a project in which knowledge and skills are introduced gradually, making the book suitable for all kinds of readers.

You begin your journey with understanding electronic components, including LEDs and sensors, to get yourself up to scratch and comfortable with different components. You will then gain hands-on experience by creating your very first wearable project, a pair of interactive bike gloves that help you cycle at night. This is followed by a project making your own funky LED glasses and a cool GPS watch. You'll also delve into other projects including creating your own keyless doorlock, wearable NFC tags, a fitness-tracking device, and a WiFi-enabled spark board. The final project is a compilation of the previous concepts used where you make your own smart watch with fitness tracking, internet-based notifications, GPS, and of course time telling.

Style and approach
This is a project-based book that introduces each project to the reader step-by-step. Each project starts out by covering all the components individually, and then explains how to combine them into interactive objects. Each project contains an easy-to-follow guide to design and implement the electronics into wearable objects.

Friday, September 4, 2015

Intel Galileo Networking Cookbook

Over 50 recipes that will help you use the Intel Galileo board to build exciting network-connected projects

About This Book

Intel Galileo Networking Cookbook
  • Create networking applications using the Intel Galileo board
  • Control your web-based projects in real time from anywhere in the world
  • Connect to the Temboo web service to interact with a huge range of APIs
Who This Book Is For
If you have already worked on ARM boards like Arduino, but now want to learn Intel Galileo, then this book is for you. Knowledge of C programming language is required.

What You Will Learn
  • Set up your Galileo board for the Internet of Things
  • Connect external sensors to the Intel Galileo
  • Create and run a web server on the Galileo board
  • Control hardware devices from the Galileo
  • Host web-based applications on the Intel Galileo
  • Monitor data from the cloud using the Galileo
  • Build a complete home automation hub using the Galileo board
In Detail
Arduino is an electronic prototyping platform used by millions of people around the world. Intel Galileo is fully Arduino compatible; hence it combines the high performance of Intel with the simplicity of Arduino Software Development Environment. This makes it the ideal platform to build exciting projects, especially in the field of web-based connected applications and the Internet of Things.

The book features several recipes all based on the Intel Galileo board, and that exploit the powerful features of the board. Each chapter explores a given field using the Galileo board.

The book is mainly divided in three parts. The first part is all about learning the basics of the Intel Galileo board, but it uses some of the powerful features of the board such as connecting external sensors and complex hardware devices, compared with more basic Arduino boards.

Then, the book dives into the topics related to networking and the Internet of Things. You will learn how to run a web server on the board and log data using a cloud-based service.

Finally, the book ends with a chapter that aims to build a complete home automation hub using the Galileo board. This chapter uses everything that was learned in the book to make a home automation system using the Galileo board and Arduino.

Style and approach
This book contains exciting recipes that will help you create projects using the Intel Galileo platform to build systems in various domains like local networking applications, the Internet of Things, and home automation. Each recipe is explained in a step-by-step fashion, always starting with the assembly of the hardware, followed by basics tests of all hardware components. At the end, an exciting project is built using the knowledge acquired in the rest of the book.