0
Offline
Newbie
Karma: 0
Posts: 29
Cool 4rdu1n0
|
 |
« on: June 27, 2009, 07:48:24 pm » |
MES v1 stands for: Minimal Experiment Shield Version 1 Possible Experiments with the MES V1, could be: E1- Digital Counter (Up - Down) E2 - 1 Nible Counter E3 - Swaping bits E4 - Odd - Even Nible E5 - Nible Vumeter with a Preset E6 - Controling a MiniServo with a Preset E7 - Understandig Analog Inputs with a Preset and Display This is the fisrt version of the MES. What do you think? This could be useful for worshops.  :-?
|
|
|
|
|
Logged
|
|
|
|
|
0
Offline
Edison Member
Karma: 6
Posts: 1398
Arduino rocks
|
 |
« Reply #1 on: June 28, 2009, 08:41:06 am » |
If this is an Arduino shield, don't you want to use the analog pins (A0-A5) of the Arduino (meaning that you would need headers on the bottom right part of the shield)?
Do you have schematics to show?
|
|
|
|
« Last Edit: June 28, 2009, 08:41:55 am by florinc »
|
Logged
|
|
|
|
|
0
Offline
Newbie
Karma: 0
Posts: 29
Cool 4rdu1n0
|
 |
« Reply #2 on: July 20, 2009, 12:43:42 pm » |
 MES v1.4 stands for: Minimal Experiment Shield Version 1.4 Possible Experiments with the MES V1.4, could be: E1- Digital Counter (Up - Down) E2 - 1 Nible Counter E3 - Swaping bits E4 - Odd - Even Nible E5 - Nible Vumeter with a Preset E6 - Controling a MiniServo with a Preset E7 - Understandig Analog Inputs with a Preset and Display E8 - Simulating an Interrupt :-? Good, here again, I've made the board in one sigle layer. Fig. 1 , now it's working fine. Some pics of the shield. Fig 2 the shield itself. Fig 3 Arduino Duemilanove with the shield. Fig.1  Fig.2  Fig.3  A small video testing the board with the code show below.  #include <Servo.h>
Servo MiServo;
int p0 = 0; int p1 = 1; int p2 = 2; int p3 = 3;
int p4 = 4; int p5 = 5; int p6 = 6; int p7 = 7;
int pm = 9;
int An0 = 0;
int Data;
void setup(){
pinMode (p0,OUTPUT); pinMode (p1,OUTPUT); pinMode (p2,OUTPUT); pinMode (p3,OUTPUT);
pinMode (p4,OUTPUT); pinMode (p5,OUTPUT); pinMode (p6,OUTPUT); pinMode (p7,OUTPUT);
digitalWrite (p0,0); digitalWrite (p1,0); digitalWrite (p2,0); digitalWrite (p3,0);
digitalWrite (p4,0); digitalWrite (p5,0); digitalWrite (p6,0); digitalWrite (p7,0);
MiServo.attach(pm);
}
void loop(){ Data = analogRead (An0); Data = map(Data,0,1024,0,255);
if ((Data >= 0) && (Data <= 64)){ leds(0); disp(0); MiServo.write (0); delay (1000); }else if ((Data >= 65) && (Data <= 127)){ leds(1); disp(1); MiServo.write (45); delay (1000); }else if ((Data >= 128) && (Data <= 191)){ leds(2); disp(2); MiServo.write (90); delay (1000); }else if ((Data >= 192) && (Data <= 255)){ leds(3); disp(3); MiServo.write (135); delay (1000); }
}
void leds (int i){ switch (i){ case 0:
digitalWrite (p0,0); digitalWrite (p1,0); digitalWrite (p2,0); digitalWrite (p3,0);
break;
case 1:
digitalWrite (p0,1); digitalWrite (p1,0); digitalWrite (p2,0); digitalWrite (p3,0);
break; case 2: digitalWrite (p0,0); digitalWrite (p1,1); digitalWrite (p2,0); digitalWrite (p3,0);
break;
case 3:
digitalWrite (p0,0); digitalWrite (p1,0); digitalWrite (p2,1); digitalWrite (p3,0);
break;
case 4:
digitalWrite (p0,0); digitalWrite (p1,0); digitalWrite (p2,0); digitalWrite (p3,1);
break;
}
}
void disp(int k){ switch (k) { case 0:
digitalWrite (p4,0); digitalWrite (p5,0); digitalWrite (p6,0); digitalWrite (p7,0); break; case 1:
digitalWrite (p4,0); digitalWrite (p5,0); digitalWrite (p6,0); digitalWrite (p7,1); break; case 2:
digitalWrite (p4,0); digitalWrite (p5,0); digitalWrite (p6,1); digitalWrite (p7,0); break; case 3:
digitalWrite (p4,0); digitalWrite (p5,0); digitalWrite (p6,1); digitalWrite (p7,1); break; case 4:
digitalWrite (p4,0); digitalWrite (p5,1); digitalWrite (p6,0); digitalWrite (p7,0); break; case 5:
digitalWrite (p4,0); digitalWrite (p5,1); digitalWrite (p6,0); digitalWrite (p7,1); break; case 6:
digitalWrite (p4,0); digitalWrite (p5,1); digitalWrite (p6,1); digitalWrite (p7,0); break; case 7:
digitalWrite (p4,0); digitalWrite (p5,1); digitalWrite (p6,1); digitalWrite (p7,1); break; case 8:
digitalWrite (p4,1); digitalWrite (p5,0); digitalWrite (p6,0); digitalWrite (p7,0); break; case 9:
digitalWrite (p4,1); digitalWrite (p5,0); digitalWrite (p6,0); digitalWrite (p7,1); break; } }
|
|
|
|
|
Logged
|
|
|
|
|
0
Offline
Newbie
Karma: 0
Posts: 14
Robotics India
|
 |
« Reply #3 on: July 22, 2009, 03:49:10 pm » |
Nice , A lot of stuff can be experimented using this.
|
|
|
|
|
Logged
|
|
|
|
|
0
Offline
Newbie
Karma: 0
Posts: 29
Cool 4rdu1n0
|
 |
« Reply #4 on: November 23, 2009, 06:44:17 pm » |
After testing and analizing the functionality of the Minimal Experimental Shield, I had order pro PCBs. This is the result, in a couple of days I'm going to work on a small manual. 
|
|
|
|
« Last Edit: November 23, 2009, 06:45:08 pm by spacebird »
|
Logged
|
|
|
|
|
0
Offline
Newbie
Karma: 0
Posts: 29
Cool 4rdu1n0
|
 |
« Reply #5 on: November 24, 2009, 02:50:25 pm » |
Just an update. MES V1.6 with components.  Comments ? 
|
|
|
|
|
Logged
|
|
|
|
|
0
Offline
Newbie
Karma: 0
Posts: 29
Cool 4rdu1n0
|
 |
« Reply #6 on: November 25, 2009, 02:59:34 pm » |
Assembling finished.  Fig. 1 - MES v1.6  Fig. 2 - MES v1.6 with Arduino Duemilanove :o Any comments?
|
|
|
|
|
Logged
|
|
|
|
|
B0100111001000011, USA
Offline
Edison Member
Karma: 0
Posts: 1503
I'm confused. Wait, maybe not..
|
 |
« Reply #7 on: November 25, 2009, 03:25:12 pm » |
Looks pretty cool! I like how it has the 7 digit display integrated  .
|
|
|
|
|
Logged
|
|
|
|
|
0
Offline
Newbie
Karma: 0
Posts: 29
Cool 4rdu1n0
|
 |
« Reply #8 on: November 28, 2009, 12:27:29 pm » |
Thanks TchnclFl and Vikas, ep, looks cool now. Well I was making a program that uses the ADXL3XX, now I post a code and a video. This takes only one axis and obtain positions on the LED and shows a numeric value on the 7 segment display. /* MES-1 V1.6 Sample code to use one axis , from accelerometer ADXL320 Displays numeric and position values using the MES. spacebird 2009 */
//LEDS int p0 = 7; int p1 = 6; int p2 = 5; int p3 = 4;
//For decoder int p4 = 13; int p5 = 12; int p6 = 11; int p7 = 10;
//Analog Input 0 int An0 = 0;
void setup(){
pinMode (p0,OUTPUT); pinMode (p1,OUTPUT); pinMode (p2,OUTPUT); pinMode (p3,OUTPUT);
pinMode (p4,OUTPUT); pinMode (p5,OUTPUT); pinMode (p6,OUTPUT); pinMode (p7,OUTPUT);
digitalWrite (p0,0); digitalWrite (p1,0); digitalWrite (p2,0); digitalWrite (p3,0);
digitalWrite (p4,0); digitalWrite (p5,0); digitalWrite (p6,0); digitalWrite (p7,0);
}
//Int variables int a; int b; int DataAn0; int Cent; int PF; int Num1; int Num2;
//Float variables float m; float P; float P1;
void loop(){ //Calculate m a = 98; b = 76;
m = 180 / (float)(a - b);
// Read actual value from accelerometer DataAn0 = analogRead (An0); DataAn0 = map(DataAn0,0,1024,0,1024);
//Calculate position Cent = 87;
P = m*(DataAn0 - Cent) + 90;
P1 = round (P);
PF = abs((int)P1 - 90);
//Display position on LEDS
if ((P1 >= 0) && (P1 <= 30)){
leds(1); delay (255); }else if ((P1 >= 31) && (P1 <= 60)){
leds(2); delay (255); }else if ((P1 >= 61) && (P1 <= 90)){
leds(5); delay (255); }else if ((P1 >= 91) && (P1 <= 120)){
leds(5); delay (255); }else if ((P1 >= 121) && (P1 <= 150)){ leds(3); delay (255); }else if((P1 >= 151) && (P1 <= 180)){ leds(4); delay (255); }
//Display numeric value on 7 Segment Display
Num1 = PF / 10; Num2 = PF % 10;
disp (Num1); delay (250); disp (Num2); delay (250); grad (); delay (250);
}
void leds (int i){ switch (i){ case 0:
digitalWrite (p0,0); digitalWrite (p1,0); digitalWrite (p2,0); digitalWrite (p3,0);
break;
case 1:
digitalWrite (p0,1); digitalWrite (p1,0); digitalWrite (p2,0); digitalWrite (p3,0);
break; case 2: digitalWrite (p0,0); digitalWrite (p1,1); digitalWrite (p2,0); digitalWrite (p3,0);
break;
case 3:
digitalWrite (p0,0); digitalWrite (p1,0); digitalWrite (p2,1); digitalWrite (p3,0);
break;
case 4:
digitalWrite (p0,0); digitalWrite (p1,0); digitalWrite (p2,0); digitalWrite (p3,1);
break;
case 5: digitalWrite (p0,0); digitalWrite (p1,1); digitalWrite (p2,1); digitalWrite (p3,0);
break;
}
}
void disp(int k){ switch (k) { case 0:
digitalWrite (p4,0); digitalWrite (p5,0); digitalWrite (p6,0); digitalWrite (p7,0); break; case 1:
digitalWrite (p4,0); digitalWrite (p5,0); digitalWrite (p6,0); digitalWrite (p7,1); break; case 2:
digitalWrite (p4,0); digitalWrite (p5,0); digitalWrite (p6,1); digitalWrite (p7,0); break; case 3:
digitalWrite (p4,0); digitalWrite (p5,0); digitalWrite (p6,1); digitalWrite (p7,1); break; case 4:
digitalWrite (p4,0); digitalWrite (p5,1); digitalWrite (p6,0); digitalWrite (p7,0); break; case 5:
digitalWrite (p4,0); digitalWrite (p5,1); digitalWrite (p6,0); digitalWrite (p7,1); break; case 6:
digitalWrite (p4,0); digitalWrite (p5,1); digitalWrite (p6,1); digitalWrite (p7,0); break; case 7:
digitalWrite (p4,0); digitalWrite (p5,1); digitalWrite (p6,1); digitalWrite (p7,1); break; case 8:
digitalWrite (p4,1); digitalWrite (p5,0); digitalWrite (p6,0); digitalWrite (p7,0); break; case 9:
digitalWrite (p4,1); digitalWrite (p5,0); digitalWrite (p6,0); digitalWrite (p7,1); break; } }
int grad(){ digitalWrite (p4,1); digitalWrite (p5,1); digitalWrite (p6,0); digitalWrite (p7,0); }
 Fig. 1 - Video testing of MES-1 v1.6 8-)
|
|
|
|
|
Logged
|
|
|
|
|
0
Offline
Newbie
Karma: 0
Posts: 29
Cool 4rdu1n0
|
 |
« Reply #9 on: December 10, 2009, 04:51:26 pm » |
Code update /* MES-1 V1.6 Sample code to use one axis , from accelerometer ADXL320 Displays numeric and position values using the MES. spacebird 2009 v0.1 - nov 2009 v0.2 - dic 2009 */
//LEDS int pLED[] = {7,6,5,4};
//For decoder int pDEC[] = {13,12,11,10};
//Analog Input 0 int An0 = 0;
int i;
void setup(){
for (i = 4; i <= 7; i++ ){
pinMode (pLED[i], OUTPUT); pinMode (pDEC[i+6],OUTPUT);
}
for (i = 4; i <= 7; i++){ digitalWrite(pLED[i],0); digitalWrite(pDEC[i+6],0); }
}
//Int variables int a; int b; int DataAn0; int Cent; int PF; int Num1; int Num2;
//Float variables float m; float P; float P1;
void loop(){ //Calculate m a = 98; b = 76;
m = 180 / (float)(a - b);
// Read actual value from accelerometer DataAn0 = analogRead (An0); DataAn0 = map(DataAn0,0,1024,0,1024);
//Calculate position Cent = 87;
P = m*(DataAn0 - Cent) + 90;
P1 = round (P);
PF = abs((int)P1 - 90);
//Display position on LEDS
if ((P1 >= 0) && (P1 <= 30)){
leds(1); delay (255); }else if ((P1 >= 31) && (P1 <= 60)){
leds(2); delay (255); }else if ((P1 >= 61) && (P1 <= 90)){
leds(5); delay (255); }else if ((P1 >= 91) && (P1 <= 120)){
leds(5); delay (255); }else if ((P1 >= 121) && (P1 <= 150)){ leds(3); delay (255); }else if((P1 >= 151) && (P1 <= 180)){ leds(4); delay (255); }
//Display numeric value on 7 Segment Display
Num1 = PF / 10; Num2 = PF % 10;
disp (Num1); delay (250); disp (Num2); delay (250); grad (); delay (250);
}
void leds (int i){ switch (i){ case 0:
for (i = 4; i <= 7; i++){ digitalWrite(pLED[i],0); }
break;
case 1:
digitalWrite (pLED[7],1);
for (i = 4; i <= 6; i++){ digitalWrite(pLED[i],0); }
break; case 2: for (i = 4; i <= 7; i++){
if (i == 6){ digitalWrite(pLED[6],1);
}else{
digitalWrite(pLED[i],0);
} }
break;
case 3:
for (i = 4; i <= 7; i++){
if (i == 5){
digitalWrite(pLED[5],1);
}else{
digitalWrite(pLED[i],0);
} }
break;
case 4: digitalWrite (pLED[4],1);
for (i = 5; i <= 7; i++){
digitalWrite(pLED[i],0); }
break;
case 5:
digitalWrite (pLED[7],0); digitalWrite (pLED[6],1); digitalWrite (pLED[5],1); digitalWrite (pLED[4],0);
break;
}
}
void disp(int k){ switch (k) { case 0:
for (i = 10; i <= 13; i++){ digitalWrite(pDEC[i],0); } break; case 1:
digitalWrite(pDEC[10],1);
for (i = 11; i <= 13; i++){ digitalWrite(pDEC[i],0); }
break; case 2:
for (i = 10; i <= 13; i++){
if (i == 11 ){ digitalWrite(pDEC[11],1); }else{ digitalWrite(pDEC[i],0); } }
break; case 3:
digitalWrite (pDEC[13],0); digitalWrite (pDEC[12],0); digitalWrite (pDEC[11],1); digitalWrite (pDEC[10],1); break; case 4:
for (i = 10; i <= 13; i++){ if (i == 12){ digitalWrite(pDEC[12],1); }else{ digitalWrite(pDEC[i],0); } }
break; case 5:
digitalWrite (pDEC[13],0); digitalWrite (pDEC[12],1); digitalWrite (pDEC[11],0); digitalWrite (pDEC[10],1); break; case 6:
digitalWrite (pDEC[13],0); digitalWrite (pDEC[12],1); digitalWrite (pDEC[11],1); digitalWrite (pDEC[10],0); break; case 7:
for (i = 10; i <= 13; i++){ if (i == 13){ digitalWrite(pDEC[13],0); }else{ digitalWrite(pDEC[i],1); } }
break; case 8:
for (i = 10; i <= 13; i++){ if (i == 13){ digitalWrite(pDEC[13],1); }else{ digitalWrite(pDEC[i],0); } } break; case 9:
digitalWrite (pDEC[13],1); digitalWrite (pDEC[12],0); digitalWrite (pDEC[11],0); digitalWrite (pDEC[10],1); break; } }
int grad(){ digitalWrite (pDEC[13],1); digitalWrite (pDEC[12],1); digitalWrite (pDEC[11],0); digitalWrite (pDEC[10],0); }
:o
|
|
|
|
|
Logged
|
|
|
|
|
0
Offline
Newbie
Karma: 0
Posts: 29
Cool 4rdu1n0
|
 |
« Reply #10 on: December 13, 2009, 11:18:25 am » |
Ok, well now MES-1 has a library, easy :o to use. Librar /* Mes1dlc.h
MES-1 Lib for Disp and LEDs v 0.1 12 dec 2009 Created > sgbzona */
#ifndef Mes1dlc_h #define Mes1dlc_h
#include "WProgram.h"
class Mes1dlc{
public: Mes1dlc(uint8_t d3, uint8_t d2, uint8_t d1, uint8_t d0); // pins used by Display or LEDs void init(uint8_t d3, uint8_t d2, uint8_t d1, uint8_t d0); void disp(int k); void ledsC(int k); void ledsE(int k);
private: uint8_t _pPIN[4]; };
#endif
/* Mes1dlc.cpp
MES-1 code for Disp and LEDs v 0.1 12 dec 2009 Created > sgbzona */
#include "WProgram.h" #include "Mes1dlc.h"
int Num [][16] = {{0,0,0,0},{0,0,0,1},{0,0,1,0},{0,0,1,1},{0,1,0,0},{0,1,0,1},{0,1,1,0},{0,1,1,1},{1,0,0,0},{1,0,0,1},{1,0,1,0},{1,0,1,1},{1,1,0,0},{1,1,0,1},{1,1,1,0},{1,1,1,1}};
int NumE [][19] = {{0,0,0,0},{0,0,0,1},{0,0,1,0},{0,1,0,0},{1,0,0,0},{1,0,0,1},{0,1,1,0},{0,0,0,0},{0,0,0,1},{0,0,1,1},{0,1,1,1},{1,1,1,1},{0,1,1,0},{1,1,0,0},{0,0,1,1},{1,0,1,0},{0,1,0,1},{0,0,0,0},{1,1,1,1}};
Mes1dlc::Mes1dlc(uint8_t d3, uint8_t d2, uint8_t d1, uint8_t d0){
init (d3, d2, d1, d0);
}
void Mes1dlc::init(uint8_t d3, uint8_t d2, uint8_t d1, uint8_t d0){
int i; _pPIN[0] = d3; _pPIN[1] = d2; _pPIN[2] = d1; _pPIN[3] = d0;
for (i = 0; i <= 3; i++){ pinMode(_pPIN[i],OUTPUT); digitalWrite(_pPIN[i],0); } }
void Mes1dlc::disp(int k){
int i; int j;
i = k; for (j = 0; j <= 3; j++){ digitalWrite(_pPIN[j],Num[i][j]); } }
void Mes1dlc::ledsC(int k){
int i; int j; i = k; for (j = 0; j <= 3; j++){ digitalWrite(_pPIN[j],Num[i][j]); } }
void Mes1dlc::ledsE(int k){
int i; int j; i = k; for (j = 0; j <= 3; j++){ digitalWrite(_pPIN[j],NumE[i][j]); } }
New Sample code. /* MES-1 V1.6 Sample code to use one axis , from accelerometer ADXL320 Displays numeric and position values using the MES. spacebird 2009 v0.1 - nov 2009 // Basic CONFIG v0.2 - dic 2009 // Using Basic CONFIG w/Cycles v0.3 - dic 2009 // Using a Library
*/
#include <Mes1dlc.h>
//LEDS Mes1dlc mes1PLEDS (7,6,5,4);
//For decoder Mes1dlc mes1PDISP (13,12,11,10);
//Analog Input 0 int An0 = 0;
int i;
//Int variables int a; int b; int DataAn0; int Cent; int PF; int Num1; int Num2;
//Float variables float m; float P; float P1;
void setup(){
}
void loop(){ //Calculate m a = 98; b = 76;
m = 180 / (float)(a - b);
// Read actual value from accelerometer DataAn0 = analogRead (An0); DataAn0 = map(DataAn0,0,1024,0,1024);
//Calculate position Cent = 87;
P = m*(DataAn0 - Cent) + 90;
P1 = round (P);
PF = abs((int)P1 - 90);
//Display position on LEDS
if ((P1 >= 0) && (P1 <= 30)){
mes1PLEDS.ledsE(4); delay (255); }else if ((P1 >= 31) && (P1 <= 60)){
mes1PLEDS.ledsE(3); delay (255); }else if ((P1 >= 61) && (P1 <= 90)){
mes1PLEDS.ledsE(6); delay (255); }else if ((P1 >= 91) && (P1 <= 120)){
mes1PLEDS.ledsE(6); delay (255); }else if ((P1 >= 121) && (P1 <= 150)){ mes1PLEDS.ledsE(2); delay (255); }else if((P1 >= 151) && (P1 <= 180)){ mes1PLEDS.ledsE(1); delay (255); }
//Display numeric value on 7 Segment Display
Num1 = PF / 10; Num2 = PF % 10;
mes1PDISP.disp(Num1); delay (250); mes1PDISP.disp(Num2); delay (250); mes1PDISP.disp(12); delay (250);
}
|
|
|
|
|
Logged
|
|
|
|
|
Norway@Oslo
Offline
Edison Member
Karma: 11
Posts: 2033
loveArduino(true);
|
 |
« Reply #11 on: December 13, 2009, 12:54:37 pm » |
Like it! Just a tip: You can cut down RAM usage to 6,25% Num [][16] = {{0,0,0,0},{0,0,0,1},{0,0,1,0},{0,0,1,1},{0,1,0,0},{0,1,0,1},{0,1,1,0},{0,1,1,1},{1,0,0,0},{1,0,0,1},{1,0,1,0},{1,0,1,1},{1,1,0,0},{1,1,0,1},{1,1,1,0},{1,1,1,1}}; Use: byte Num[8] = { B00000001, B00100011 B01000101, B01100111, B10001001, B10101011, B11001101, B11101111 }; You need to change the way you access the data, but arduino provides with some bitRead/bitWrite functions (plus some more). Look at the reference section  Gool luck!
|
|
|
|
|
Logged
|
|
|
|
|
0
Offline
Newbie
Karma: 0
Posts: 29
Cool 4rdu1n0
|
 |
« Reply #12 on: December 13, 2009, 04:27:47 pm » |
Cool... looking to improve it... nice tip, working on vectors now... 
|
|
|
|
|
Logged
|
|
|
|
|
|