Nanode: network connected microcontrollers

September 27th, 2011 § 0 comments § permalink

Nanode is a set of improvements on the original Arduino board with an integrated Ethernet controller and a design that is easy to hand-assemble while paying attention to some details such as the placement of the board LED and reset switch. The ability to connect to the network gives us a whole new universe of possibilities for Internet-connected devices.

Thanks to Ken Boak and Toby Yu for their generous donation, we’ll be received five free Nanode boards to play with in the XinCheJian hackerspace. Pricing will be around 200 RMB at the moment.

Below is a picture of the first two boards at XinCheJian running the default program (flashing the LED connected to pin #6). The Ethernet controller (ENC28J60) is the same we’ve used in the Transfabric’s interactive door project.

image

爱上Arduino: Getting Started with Arduino

September 27th, 2011 § 0 comments § permalink

image

爱上Arduino中文书:45人民币一本(附学习光碟),有兴趣的人请过来新车间购买!

We’re selling them for 45 RMB (to cover shipping), the book comes with a learning CD. Buy one and get started with Arduino!

Photos from RoboRace

September 26th, 2011 § 0 comments § permalink

Another exciting afternoon racing robots with friends. ;)

Taken by @vnsavitri

Photo 1

Photo 2

Photo 3

Taken by Ricky

IMG 0245

IMG 0249

IMG 0251

IMG 0247

wednesday meetup – Free @ XinCheJian 7 – 9 pm

September 21st, 2011 § 0 comments § permalink

Hello to all the Enthusiasts and hackers out there, come join us this evening for a jam packed 2 hours, so get up off the couch and make a difference.

As always, hacking wednesdays is open to the public, if you’d like to support the space and help us continue hacking Wednesdays feel free to donate either cash or buy products from XinCheJian (even drinks!), only your support will help us sustain the space.

Mitch Altman kits are still in stock, jump on those before it’s too late, learn how to make the LED cube using multiplexing and learn how to solder.

==== Hacking Wednesdays ====

If you want to try your robot in this weekends race and have yet to finish it or build one, dont fear, come down to XinCheJian tonight and buy a R/C car like rickys 70rmb, rip the guts out and replace it with an Arduino 180rmb, theNelsons h-bridge shield 50rmb and 2 ultra sonic sensors 35rmb.. everything you need is in the space, not only will you be a hacker but you’ll learn some awesome skills while you do it.

Tonight Min Lin and Ricky will be around to share stories from their recent hacking journeys.

Get an insight into processing. we have a special guest coming down who’ll be setting up a processing workshop, find out whats involved tonight.

Michael (RubberDucky) will be drilling into the walls to setup some computer benches, and also hooking up his mega-super-awesome-button-box for the new restricted toys (lathes, mills, bandsaw, drill)

Paul will be discussing the lock-picking study with interested participants.

Lio will be figuring out how he’s going to do the bamboo go-kart with those interested for the ben heck challenge (find out more tonight) and how you can be involved.

After the event around 9pm the hackers will take to the tracks for some go-karting “research” at Chang Feng park indoor race track for some super awesome driving skills “bring a head mounted camera”

If you thought this Wednesday is fun, wait for the weekend..

==== This Weekend ====

Saturday – all day: Organic waste workshop.. find out how to make bio-diesel, sign up and more information here:

http://xinchejian.com/event/?regevent_action=register&event_id=55&name_of_event=OrganicWasteRecyclingWorkshop

Saturday afternoon – 5 presentations from XinCheJian will be delivered at _Barcamp_ Shanghai so come and show your support for xinchejian.. sign up and more information here: http://techyizu.org/shanghai-barcamp-2011-september-24

Sunday morning – Ardublock workshop.. never programmed in arduino before? use ardublock to visually program.
sign up here: http://xinchejian.com/event/?regevent_action=register&event_id=58&name_of_event=ArduBlockWorkshop

Sunday afternoon – Robo Racing championship, find out if the Title stays with XinCheJian for a 3rd victory, find out if anyone can take on theNelsons or mindstorm robots! Man vs Machine will Machine win again!
Sign up here: http://xinchejian.com/event/?regevent_action=register&event_id=57&name_of_event=RoboracingCompetition

Arduino shield assembly workshop

August 5th, 2011 § 0 comments § permalink

Tomorrow, Saturday at 2pm. Register!

Rudy Bike @ XinCheJian

June 18th, 2011 § 5 comments § permalink

We are really happy to have the opportunities in hosting the Rudy Bike in the past few weeks so they can finish the bike for the Demo Day. Rudy Bike is a cool looking electric bike controlled by Arduino and Android.

Rudy Bike

Rudy Bike

Rudy Bike

Rudy Bike

Android & Robots

June 8th, 2011 § 1 comment § permalink

Modern smartphones come equipped with a whole array of sensors (GPS, accelerometers, compass, etc) and a CPU powerful enough to do most of the advanced processing required to do advanced decision-making and processor-intensive tasks like image processing.

In addition, smartphones communication capabilities (Bluetooth, Wifi, 3G) make them ideally suited to accessing large dataset and processing clusters hosted elsewhere.

Finally, all this functionality is available in a compact package at affordable prices due to large scale manufacturing.

The missing piece to the puzzle of smartphones and robots is a way to interact with arbitrary hardware, such as controlling servos or reading from additional sensors.

For that purpose, we’ve started developing a workshop to introduce people to using the Android Development Kit (SDK), Android Development Toolkit (ADT) – the latters using the powerful Eclipse IDE and most importantly the Android Open Accessory Development Kit.

The Android 3.1 platform (also backported to Android 2.3.4) introduces Android Open Accessory support, which allows external USB hardware (an Android USB accessory) to interact with an Android-powered device in a special “accessory” mode. When an Android-powered powered device is in accessory mode, the connected accessory acts as the USB host (powers the bus and enumerates devices) and the Android-powered device acts as the USB device. Android USB accessories are specifically designed to attach to Android-powered devices and adhere to a simple protocol (Android accessory protocol) that allows them to detect Android-powered devices that support accessory mode.

Workshops are weekly and will explore both the development on the Android-side and the micro-controllers side – touching on all aspects of mechanical, electrical and software engineering of a robot.

In particular, we will look together at the use of ADK-compatible hardware boards, such as the Google IOIO board or new hardware offerings from Seeedstudio.

Participation for XinCheJian members who’ve paid their dues is free. For the non-members, the fee is 50 RMB per workshop.

For more information, look at the “Android & Robots” wiki. Don’t forget to fulfill the necessary pre-requisites and join the android-robots+subscribe@googlegroups.com mailing list! Note that this is a collaborative workshop, so we expect everyone to contribute and participate actively.

Insect Bot Workshop [2]

May 9th, 2011 § 1 comment § permalink

We got full house this Sunday with 13 people doing Insect Bot workshop including 10 kids. It’s a lot of fun and most of insect got to walk.

IMG 20110508 141501

Miclle’s Electric Wave Board

May 7th, 2011 § 0 comments § permalink

Thanks to Miclle Zhang bringing his electronic Wave board to XinCheJian today. He hacked it out of components found on Taobao combining a Wave Board and motor from electric bike. AWESOME Hack and we had a lot of fun playing with it this afternoon. Miclle is kind enough to leave it at the space to let anyone interested to check it out.

DSC 9418

Some video

More pictures

DSC 9399

DSC 9401

DSC 9372

DSC 9394

Adding servo to RC car

May 6th, 2011 § 0 comments § permalink

遥控小车的改造

May 3rd, 2011

今天完成了遥控车的改造,这是自主控制的第一步。这辆车是在淘宝上买的,结构很简单,控制很简陋。方向就是将电机打死,这时候电流会非常大,而且对于将来的自主移动的精细控制带来不利因素。所以很早就想把它改成舵机控制的了,下面就是整个改造的过程。

这就是需要改造的部分。

NewImage

先将需要改造的部分画下来,便于设计框架结构。我不是机械出身的,所以就画个大概吧。

NewImage

结构图完成

NewImage

在图纸上设计新的结构

NewImage

根据设计切割材料

NewImage

最后完成的样子,由于是临时电路,也就没固定,看上去有点像垃圾车-_-b

NewImage

改造部分的特写

NewImage

再来一张

NewImage

这些只是机械部份,然后就是控制部份。由于舵机能够转动的角度范围到180度,而该车的转向轮仅能转动在30-40度之间。同时,自主移动机器人目标是在Arduino上面开发。所以我就一步到位,先用Arduino读取天地飞的pwm信号,然后经过转换,输出新的pwm信号给舵机,这样就不会因为卡住而损坏舵机了。

最后效果如下


http://v.youku.com/v_show/id_XMjYzOTc2NzA4.html

使用的程序非常简单,如下:


#include <Servo.h>

//Author:	HE Qichen
//Date:	2011-5-3
//Website:	http://gaishi.vicp.net
//Email:	heqichen(a)gaishi.vicp.net

Servo directionServo;

void setup()
{
  pinMode(2, INPUT);
  directionServo.attach(3);
  
}

void loop()
{
  int t, a;
  t = pulseIn(2, HIGH);
  a = map(t, 1000, 2000, 65, 115);
  directionServo.write(a);
  
  
}

Reading g-sensor with Arduino

May 6th, 2011 § 1 comment § permalink

Arduino读取g-sensor数据

May 2nd, 2011

在四轴飞行器上除了要有陀螺仪外,还要有个重要的传感器就是重力传感器。由于它们各自的误差,若使用单一的传感器会造成严重的精读问题,使飞行器丧失稳定性。所以要用两个传感器进行相互矫正。

现在重力传感器应用非常广,目前iphone等智能手机上都有重力传感器,包括笔者的一台山寨手机上都有重力传感器。

这次就是要用Android来读取重力传感器的数据。这个重力传感器模块是从淘宝购买的,模块非常简单,自己够买芯片来焊接也不成问题。根据它的datasheet,就能够知道如何使用这款重力加速度模块了。下面就进行详细的介绍

这个模块使用的芯片型号是MMA7260Q,(datasheet下载[PDF,229KB]),测试中的电路就是下面图片中的样子

Untitled

控制的目标是通过重力传感器的数据来控制舵机的转动。但是发现会有少量的抖动,于是在程序中加入了一个简单的滤波器,阶数没有仔细调,但是基本上能够进行控制了。


http://v.youku.com/v_show/id_XMjYzNjIyODIw.html

下面是芯片的特写

Untitled
Untitled

下面是用到的代码

#include <Servo.h>

//Author:  HE Qichen
//Email:  heqichen(a)gaishi.vicp.net
//Website:  http://gaishi.vicp.net
//Date:  2011-5-2

#define FILTER_LEVEL  3

class Filter
{
  private:
    int buffer[FILTER_LEVEL];
  public:
    Filter()
    {
      int i;
      for (i=0; i<FILTER_LEVEL; ++i)
      {
        buffer[i] = 0;
      }
    }
    int filter(int value)
    {
      int i;
      int sum;
      for (i=0; i<FILTER_LEVEL-1; ++i)
      {
        buffer[i] = buffer[i+1];
      }
      buffer[FILTER_LEVEL-1] = value;
      sum = 0;
      for (i=0; i<FILTER_LEVEL; ++i)
      {
        sum += buffer[i];
      }
      return sum / FILTER_LEVEL;
    }
};


Servo testServo;
Filter xFilter, yFilter, zFilter;

void setup()
{
  Serial.begin(9600);
  testServo.attach(2);
}

void loop()
{
  int gx, gy, gz;
  gx = analogRead(A0);
  gy = analogRead(A1);
  gz = analogRead(A2);
  
  Serial.print("x: ");
  Serial.print(gx, DEC);
  Serial.print("  y: ");
  Serial.print(gy, DEC);
  Serial.print("  z: ");
  Serial.println(gz, DEC);

  int fgx, fgy, fgz;
  fgx = xFilter.filter(gx);
  fgy = yFilter.filter(gy);
  fgz = zFilter.filter(gz);
  Serial.print("  fx: ");
  Serial.print(fgx, DEC);
  Serial.print("  fy: ");
  Serial.print(fgy, DEC);
  Serial.print("  fz: ");
  Serial.println(fgz, DEC);

  testServo.write((fgz-100)/3);
  //delay(10);
  
}


Hacking Embedream Car

May 6th, 2011 § 0 comments § permalink

嵌入之梦-圆梦小车开发

May 1st, 2011

今天看到一台嵌入之梦的小车,但是上电之后发了疯似的乱跑,所以刷之。但新车间却没有网络,没办法,自己一点一点试。。结果如下

CT1	接受pwm,控制速度
CT2	前进控制信号,高电位转动
CT3	后退控制信号,高电位转动

但是由于小车上的UNO与我的Ubuntu连接有问题,貌似只有Windows是好的,Mac OS有时也会出问题。所以最后车上改用了Mega 1280。

但是又发现一个问题,就是Arduino使用USB供电的时候很正常,然而,使用车上接出来的5V电源时,程序就会混乱,完全没有一点规律。猜测可能是由于电机转动导致整个系统的电压下降,无法提供足够的电压给Arduino的板子上。这大概也是之前uno不会发疯的原因。没办法,在小车上再接一块9V层叠式电池,作为Arduino的电源。最后终于行了。

后面程序的作用是往前走,遇到前方有物体是后退,打弯,然后继续往前,一个简单的壁障程序。没有用到速度控制。下面就是这个小车最后的样子,手机拍的,将就看吧

Untitled

左侧照

Untitled

右侧照

Untitled

再来一张

Untitled


http://v.youku.com/v_show/id_XMjYzMzY0NzA0.html

用到的程序就是下面的

//Author:	HE Qichen
//Email:	heqichen(a)gaishi.vicp.net
//Website:	http://gaishi.vicp.net
//Date:	2011-5-1

int status;

#define LEFT_SPEED   6
#define LEFT_FORWARD  7
#define LEFT_BACKWARD  8

#define RIGHT_SPEED  10
#define RIGHT_FORWARD  11
#define RIGHT_BACKWARD  12

#define ULTRASONIC_ECHO  3
#define ULTRASONIC_TRIG  4

#define NORMAL_SPEED  100
#define STOP_SPEED  0

void setup()
{
  Serial.begin(9600);
  setupMove();
  setupUltrasonic();
}



void loop()
{
  unsigned int d;
  moveForward();
  d = readDistance();
  Serial.println(d, DEC);
  if (d < 700)
  {
    moveBackward();
    delay(500);
    turnLeft();
    delay(200);
  }
}

void moveForward()
{
  analogWrite(LEFT_SPEED, NORMAL_SPEED);
  digitalWrite(LEFT_BACKWARD, LOW);
  digitalWrite(LEFT_FORWARD, HIGH);
  analogWrite(RIGHT_SPEED, NORMAL_SPEED);
  digitalWrite(RIGHT_BACKWARD, LOW);
  digitalWrite(RIGHT_FORWARD, HIGH);
}

void moveBackward()
{
  analogWrite(LEFT_SPEED, NORMAL_SPEED);
  digitalWrite(LEFT_BACKWARD, HIGH);
  digitalWrite(LEFT_FORWARD, LOW);
  analogWrite(RIGHT_SPEED, NORMAL_SPEED);
  digitalWrite(RIGHT_BACKWARD, HIGH);
  digitalWrite(RIGHT_FORWARD, LOW);
}

void turnLeft()
{
  analogWrite(LEFT_SPEED, NORMAL_SPEED);
  digitalWrite(LEFT_BACKWARD, HIGH);
  digitalWrite(LEFT_FORWARD, LOW);
  analogWrite(RIGHT_SPEED, NORMAL_SPEED);
  digitalWrite(RIGHT_BACKWARD, LOW);
  digitalWrite(RIGHT_FORWARD, HIGH);
}

void turnRight()
{
  analogWrite(LEFT_SPEED, NORMAL_SPEED);
  digitalWrite(LEFT_BACKWARD, LOW);
  digitalWrite(LEFT_FORWARD, HIGH);
  analogWrite(RIGHT_SPEED, NORMAL_SPEED);
  digitalWrite(RIGHT_BACKWARD, HIGH);
  digitalWrite(RIGHT_FORWARD, LOW);
}

void moveStop()
{
  analogWrite(LEFT_SPEED, STOP_SPEED);
  digitalWrite(LEFT_BACKWARD, LOW);
  digitalWrite(LEFT_FORWARD, LOW);
  analogWrite(RIGHT_SPEED, STOP_SPEED);
  digitalWrite(RIGHT_BACKWARD, LOW);
  digitalWrite(RIGHT_FORWARD, LOW);
}

void setupMove()
{
  pinMode(LEFT_SPEED, OUTPUT);
  pinMode(LEFT_FORWARD, OUTPUT);
  pinMode(LEFT_BACKWARD, OUTPUT);
  pinMode(RIGHT_SPEED, OUTPUT);
  pinMode(RIGHT_FORWARD, OUTPUT);
  pinMode(RIGHT_BACKWARD, OUTPUT);

  analogWrite(LEFT_SPEED, STOP_SPEED);
  digitalWrite(LEFT_FORWARD, LOW);
  digitalWrite(LEFT_BACKWARD, LOW);
  analogWrite(RIGHT_SPEED, STOP_SPEED);
  digitalWrite(RIGHT_FORWARD, LOW);
  digitalWrite(RIGHT_BACKWARD, LOW);
}

unsigned int readDistance()
{
  
  int duration;
  digitalWrite(ULTRASONIC_TRIG, LOW);
  delayMicroseconds(2);
  digitalWrite(ULTRASONIC_TRIG, HIGH);
  delayMicroseconds(5);
  digitalWrite(ULTRASONIC_TRIG, LOW);


  // The same pin is used to read the signal from the PING))): a HIGH
  // pulse whose duration is the time (in microseconds) from the sending
  // of the ping to the reception of its echo off of an object.
  duration = pulseIn(ULTRASONIC_ECHO, HIGH);
  return duration;

}

void  setupUltrasonic()
{
  pinMode(ULTRASONIC_TRIG, OUTPUT);
  pinMode(ULTRASONIC_ECHO, INPUT);
  
  digitalWrite(ULTRASONIC_TRIG, LOW);
}

Where Am I?

You are currently browsing the arduino category at 新车间 [Xinchejian].