2016年12月11日日曜日

Arduino と L298N使用 2Aデュアルモーターコントローラー 使ってみた

[準備]
 ◆Arduino IDE (PCにインストール無料)

 ◆Arduino Uno (360円+送料170円)


Arduino IDE(PC) と Arduino Uno をつなぐUSBケーブル(100円+送料170円)


L298N使用 2Aデュアルモーターコントローラー(340円+送料170円)
L298Nデータシート


 工作開始

接続します
例1
Connection example1

例2
Connection example2



◆接続を確認します
確認1

確認2(Arduinoがつながっているポート)

◆スケッチを書きます


/*----  created 8 Dec 2016 by dd647 ----*/

int IN2 = 8;//Direction of roation

int IN1 = 7;//Direction of roation

int ENA = 6;//on,off

void setup() 

  pinMode(IN2, OUTPUT);
  pinMode(IN1, OUTPUT);
  pinMode(ENA, OUTPUT);    
}  
void loop() 
  roation(1,0);//Foward
  breaking();
  delay(4000);
  roation(0,1);//Reverse
  free();
  delay(4000);  
}
void roation(int a, int b){
  digitalWrite(IN1,a);
  digitalWrite(IN2,b);
  digitalWrite(ENA, HIGH);
  delay(3000); 
}
void breaking(){
  digitalWrite(ENA, HIGH);
  digitalWrite(IN1,0);
  digitalWrite(IN2,0);
}
void free(){
  digitalWrite(ENA, LOW);





2016年10月27日木曜日

Arduino と リアルタイムクロックモジュール DS1302 使ってみた

準備 
◆Arduino IDE (PCにインストール無料)

◆Arduino Uno(360円+送料170円)


◆Arduino IDE(PC) と Arduino Uno をつなぐUSBケーブル(100円+送料170円)


◆リアルタイムクロックモジュール DS1302 (100円+送料170円)
内臓メモリSRAM 31 byte に読み書き可
ボタン電池でメモリ内データ保存
Data sheet


工作開始 
◆接続します 

◆接続を確認します
確認1

確認2(Arduinoがつながっているポート)

◆スケッチを書きます
/*----   created 27 Oct 2016 by dd647  -------*/
  int DAT_pin = 3;
  int CLK_pin = 4;
  int RST_pin = 2;
 
void set(int c, int v){
    digitalWrite(CLK_pin, LOW);  
    digitalWrite(RST_pin, HIGH);    
    shiftOut(DAT_pin, CLK_pin, LSBFIRST, c);//Command write
    shiftOut(DAT_pin, CLK_pin, LSBFIRST, v);//set time
    digitalWrite(RST_pin, LOW);
}

int read_t(int c){
  int Bit = 0;
  int v = 0;
    digitalWrite(CLK_pin, LOW);
    digitalWrite(RST_pin, HIGH);    
    shiftOut(DAT_pin, CLK_pin, LSBFIRST, c);//Command read
        for (int i = 0; i < 8; ++i)//read time
        {   
                Bit = digitalRead(DAT_pin);
                Serial.print(Bit);
                v |= (Bit << i);
                digitalWrite(CLK_pin, HIGH);
        delayMicroseconds(1);
        digitalWrite(CLK_pin, LOW);
        }
    digitalWrite(RST_pin, LOW);       
    Serial.print(" ");     
    int t = (v & 15) + (10 * (v  >> 4)) ;  
    return(t);   
}

void setup()
{
      pinMode(CLK_pin,OUTPUT);
      pinMode(RST_pin,OUTPUT);
  Serial.begin(9600);
  Serial.println("reset time ?  [y or n]");
  while(Serial.available() == 0){}
  int c = Serial.read();
   if(c == 121){
      pinMode(DAT_pin,OUTPUT);   
        set(128,72);//Seconds set to 48      or  
set(128,0x48);
        set(130,89);//Minutes set to 59       or   set(130,0x59);
        set(132,35);//Hour set to 23
             or   set(132,0x23);
        set(134,49);//Date set to 31
              or   set(134,0x31);
        set(136,16);//Month set to 10
          or   set(136,0x10);
        set(140,22);//Year set to 16
              or   set(140,0x16);
      pinMode(DAT_pin, INPUT); 
    }else{
      pinMode(DAT_pin, INPUT);
    }
  Serial.println("  s| 10s|  m| 10m|  h| 10h|  d| 10d|"); 
}

void loop()
{
  int S = read_t(129);//read Second
  int MI =  read_t(131);//read Minute
  int H =  read_t(133);//read Hour
  int D =  read_t(135);//read Date
  int MO =  read_t(137);//read Month
  int Y =  read_t(141);//read Year    
  Serial.print("  ");        
  Serial.print(S);     
  Serial.print("s ");        
  Serial.print(MI);     
  Serial.print("mi ");        
  Serial.print(H);        
  Serial.print("h ");
  Serial.print(D);        
  Serial.print("d ");
  Serial.print(MO);        
  Serial.print("mo ");
  Serial.print("20");
  Serial.print(Y);        
  Serial.println("y ");
  delay(1000);
}


◆シリアルモニタで見てみます

input y  

close window.
again


input n



2016年10月20日木曜日

Arduino と microSDカードモジュール 使ってみた

準備 
 ◆Arduino IDE (PCにインストール無料)

◆Arduino Uno (360円+送料170円)


Arduino IDE(PC) と Arduino Uno をつなぐUSBケーブル(100円+送料170円)


microSDカードモジュール (100円+送料170円)

microSDカード(299円+送料無料)

工作開始 
接続します

接続を確認します
確認1

確認2(Arduino Uno がつながっているポート)


スケッチを開きます

スケッチを変更します
 
const int chipSelect = 4;  →  const int chipSelect = 10;


シリアルモニタで見ます







2016年8月2日火曜日

Arduino と GY-521 MPU-6050 加速度 ジャイロ センサーモジュール 使ってみた

準備 
◆Arduino IDE(PCにインストール)

 ◆Arduino Uno(360円 + 送料170円)


◆USBケーブル AーBタイプ(100円 + 送料170円) 

◆GY-521 MPU-6050  加速度 ジャイロ センサーモジュール
・角速度と加速度と温度の検出
・VCC電圧は5V
・SCL、SDA電圧は3.3V
・SCL、SDA端子は 4.7kΩでpullUpされています
・MPU-6000詳細
・データーシート
・レジスタマップ


◆できれば、何か電圧レベル変換するもの(N-JFETを使った)


工作開始
◆ 接続します
(外部抵抗不要)GY-521 MPU-6050の SCL、SDA端子は 4.7kΩでpullUpされています
※(外部抵抗不要)Arduino の Wire ライブラリーを利用すると、内部の抵抗を利用して プルアップしてくれます

◆接続確認します
確認1

 確認2(Arduino Uno がつながっているポート)

 ◆スケッチを書きます
 


//An Arduino code by dd647
#include <Wire.h>
int GY521Address = 0b1101000;//pin AD0 is logic low
void setup() {
   Serial.begin(9600);
   Wire.begin();
    Wire.beginTransmission(GY521Address);
    Wire.write(0x6b);//Register_Name Power Management
    Wire.write(0b00000010);//Upon power up mode and Clock PLL
    Wire.endTransmission();
    delay(500);
   
    Wire.beginTransmission(GY521Address);
    Wire.write(0x1c);//Register_Name ACCEL_CONFIG
    Wire.write(0b00011000);//+-16g mode
    Wire.endTransmission();
    delay(500);

    Wire.beginTransmission(GY521Address);
    Wire.write(0x1b);//Register_Name GYRO_CONFIG
    Wire.write(0b00000000);//+-250°/s mode
    Wire.endTransmission();
    delay(500);   
}

void loop(){  
  getData(0x41,0x42,"TEMP");//Register_Name TEMP_OUT
  getData(0x3b,0x3c,"ACCELx");//Register_Name ACCEL_XOUT
  getData(0x3d,0x3e,"ACCELy");//Register_Name ACCEL_YOUT
  getData(0x3f,0x40,"ACCELz");//Register_Name ACCEL_ZOUT
  getData(0x43,0x44,"GYROx");//Register_Name GYRO_XOUT_
  getData(0x45,0x46,"GYROy");//Register_Name GYRO_YOUT_
  getData(0x47,0x48,"GYROz");//Register_Name GYRO_ZOUT_
  Serial.println("    ");
  delay(500);
}

void getData(int AddressH, int AddressL, char Str[]){
    Wire.beginTransmission(GY521Address);
    Wire.write(AddressH);
    Wire.endTransmission();
    Wire.requestFrom(GY521Address, 1);
    while(!Wire.available()) {
        // waiting
    }
    int h = Wire.read();
   
    Wire.beginTransmission(GY521Address);
    Wire.write(AddressL);
    Wire.endTransmission();
    Wire.requestFrom(GY521Address, 1);
    while(!Wire.available()) {
        // waiting
    }
    int l = Wire.read();
    int c = 0;
  if (Str == "TEMP"){
     c = (256 * h + l)/340+35;//Ofset=35°,LSB/1°=340
  }else{
     c = 256 * h + l;
  }   
    Serial.print(Str);
    Serial.print("=");
    Serial.print(c);
    Serial.print("    ");
}






◆シリアルモニタで見ます

重力に反応しています