ソレノイドどんどん! -8ページ目

ソレノイドどんどん!

無名の電気部品ソレノイド、だけどたくさん使われているのだ

新製品デモ機「たこ焼きPON☆PON」作り方紹介のシリーズ、
今回はプログラミング編2です。

  プログラミング編2


たこ焼きポンポンのプログラミングを全て載せているので
このままコピーしたりアレンジしたりして使ってみてください(^^)

int sol0=0;   //pinの名前付け 
int sol1=1;
int sol2=2;
int sol3=3;
int sol4=4;
int sol5=5;
int sol6=6;
int sol7=7;
int sol8=8;
int sol9=9;
int sol10=10;
int sol11=11;
int sol12=12;
int sol13=13;
int sol14=14;
int sol15=15;
int sol16=16;
int sol17=17;

int i=0;
int d=0;
int dh=0;
int dl=0;

void setup() {
  pinMode(sol0,OUTPUT);   //0番PINをOUTPUTに設定
  pinMode(sol1,OUTPUT);
  pinMode(sol2,OUTPUT);
  pinMode(sol3,OUTPUT);
  pinMode(sol4,OUTPUT);
  pinMode(sol5,OUTPUT);
  pinMode(sol6,OUTPUT);
  pinMode(sol7,OUTPUT);
  pinMode(sol8,OUTPUT);
  pinMode(sol9,OUTPUT);
  pinMode(sol10,OUTPUT);
  pinMode(sol11,OUTPUT);
  pinMode(sol12,OUTPUT);
  pinMode(sol13,OUTPUT);
  pinMode(sol14,OUTPUT);
  pinMode(sol15,OUTPUT);
  pinMode(sol16,OUTPUT);
  pinMode(sol17,OUTPUT);
}

void allHIGH() {
  digitalWrite(sol0,HIGH); 
  digitalWrite(sol1,HIGH);
  digitalWrite(sol2,HIGH);
  digitalWrite(sol3,HIGH);
  digitalWrite(sol4,HIGH); 
  digitalWrite(sol5,HIGH);
  digitalWrite(sol6,HIGH);
  digitalWrite(sol7,HIGH);
  digitalWrite(sol8,HIGH); 
  digitalWrite(sol9,HIGH);
  digitalWrite(sol10,HIGH);
  digitalWrite(sol11,HIGH);
  digitalWrite(sol12,HIGH); 
  digitalWrite(sol13,HIGH);
  digitalWrite(sol14,HIGH);
  digitalWrite(sol15,HIGH);
  digitalWrite(sol16,HIGH);
  digitalWrite(sol17,HIGH);
}

void allLOW() {
  digitalWrite(sol0,LOW); 
  digitalWrite(sol1,LOW);
  digitalWrite(sol2,LOW);
  digitalWrite(sol3,LOW);
  digitalWrite(sol4,LOW); 
  digitalWrite(sol5,LOW);
  digitalWrite(sol6,LOW);
  digitalWrite(sol7,LOW);
  digitalWrite(sol8,LOW); 
  digitalWrite(sol9,LOW);
  digitalWrite(sol10,LOW);
  digitalWrite(sol11,LOW);
  digitalWrite(sol12,LOW); 
  digitalWrite(sol13,LOW);
  digitalWrite(sol14,LOW);
  digitalWrite(sol15,LOW);
  digitalWrite(sol16,LOW); 
  digitalWrite(sol17,LOW);
}

void LR() {
  dh=100;
  dl=dh*4;
  
  for(i=0;i<2;i++){
  digitalWrite(sol0,HIGH); 
  digitalWrite(sol1,HIGH);
  digitalWrite(sol2,HIGH);
  delay(dh);
  digitalWrite(sol0,LOW); 
  digitalWrite(sol1,LOW);
  digitalWrite(sol2,LOW);
  delay(dl);
  }
  
  for(i=0;i<2;i++){
  digitalWrite(sol3,HIGH); 
  digitalWrite(sol4,HIGH);
  digitalWrite(sol5,HIGH);
  digitalWrite(sol6,HIGH);
  delay(dh);
  digitalWrite(sol3,LOW); 
  digitalWrite(sol4,LOW);
  digitalWrite(sol5,LOW);
  digitalWrite(sol6,LOW);
  delay(dl);
  }
  
  for(i=0;i<2;i++){
  digitalWrite(sol7,HIGH); 
  digitalWrite(sol8,HIGH);
  digitalWrite(sol9,HIGH);
  digitalWrite(sol10,HIGH);
  delay(dh);
  digitalWrite(sol7,LOW); 
  digitalWrite(sol8,LOW);
  digitalWrite(sol9,LOW);
  digitalWrite(sol10,LOW);
  delay(dl);
  }
  
  for(i=0;i<2;i++){
  digitalWrite(sol11,HIGH); 
  digitalWrite(sol12,HIGH);
  digitalWrite(sol13,HIGH);
  digitalWrite(sol14,HIGH);
  delay(dh);
  digitalWrite(sol11,LOW); 
  digitalWrite(sol12,LOW);
  digitalWrite(sol13,LOW);
  digitalWrite(sol14,LOW);
  delay(dl);
  }
  
  for(i=0;i<2;i++){
  digitalWrite(sol15,HIGH); 
  digitalWrite(sol16,HIGH);
  digitalWrite(sol17,HIGH);
  delay(dh);
  digitalWrite(sol15,LOW); 
  digitalWrite(sol16,LOW);
  digitalWrite(sol17,LOW);
  delay(dl);
  }
}

void RL() {
  dh=100;
  dl=dh*4;
  
  for(i=0;i<2;i++){
  digitalWrite(sol15,HIGH); 
  digitalWrite(sol16,HIGH);
  digitalWrite(sol17,HIGH);
  delay(dh);
  digitalWrite(sol15,LOW); 
  digitalWrite(sol16,LOW);
  digitalWrite(sol17,LOW);
  delay(dl);
  }
  
  for(i=0;i<2;i++){
  digitalWrite(sol11,HIGH); 
  digitalWrite(sol12,HIGH);
  digitalWrite(sol13,HIGH);
  digitalWrite(sol14,HIGH);
  delay(dh);
  digitalWrite(sol11,LOW); 
  digitalWrite(sol12,LOW);
  digitalWrite(sol13,LOW);
  digitalWrite(sol14,LOW);
  delay(dl);
  }
  
  for(i=0;i<2;i++){
  digitalWrite(sol7,HIGH); 
  digitalWrite(sol8,HIGH);
  digitalWrite(sol9,HIGH);
  digitalWrite(sol10,HIGH);
  delay(dh);
  digitalWrite(sol7,LOW); 
  digitalWrite(sol8,LOW);
  digitalWrite(sol9,LOW);
  digitalWrite(sol10,LOW);
  delay(dl);
  }
  
  for(i=0;i<2;i++){
  digitalWrite(sol3,HIGH); 
  digitalWrite(sol4,HIGH);
  digitalWrite(sol5,HIGH);
  digitalWrite(sol6,HIGH);
  delay(dh);
  digitalWrite(sol3,LOW); 
  digitalWrite(sol4,LOW);
  digitalWrite(sol5,LOW);
  digitalWrite(sol6,LOW);
  delay(dl);
  }
  
  for(i=0;i<2;i++){
  digitalWrite(sol0,HIGH); 
  digitalWrite(sol1,HIGH);
  digitalWrite(sol2,HIGH);
  delay(dh);
  digitalWrite(sol0,LOW); 
  digitalWrite(sol1,LOW);
  digitalWrite(sol2,LOW);
  delay(dl);
  }
}

void wave() {
  d=100;
  
  digitalWrite(sol0,HIGH);
  digitalWrite(sol6,HIGH);
  digitalWrite(sol7,HIGH);
  digitalWrite(sol14,HIGH);
  digitalWrite(sol15,HIGH);
  delay(d);
  digitalWrite(sol0,LOW);
  digitalWrite(sol6,LOW);
  digitalWrite(sol7,LOW);
  digitalWrite(sol14,LOW);
  digitalWrite(sol15,LOW);
  delay(d);
  digitalWrite(sol1,HIGH);
  digitalWrite(sol5,HIGH);
  digitalWrite(sol8,HIGH);
  digitalWrite(sol13,HIGH);
  digitalWrite(sol16,HIGH);
  delay(d);
  digitalWrite(sol1,LOW);
  digitalWrite(sol5,LOW);
  digitalWrite(sol8,LOW);
  digitalWrite(sol13,LOW);
  digitalWrite(sol16,LOW);
  delay(d);
  digitalWrite(sol2,HIGH);
  digitalWrite(sol4,HIGH);
  digitalWrite(sol9,HIGH);
  digitalWrite(sol12,HIGH);
  digitalWrite(sol17,HIGH);
  delay(d);
  digitalWrite(sol2,LOW);
  digitalWrite(sol4,LOW);
  digitalWrite(sol9,LOW);
  digitalWrite(sol12,LOW);
  digitalWrite(sol17,LOW);
  delay(d);
  digitalWrite(sol3,HIGH);
  digitalWrite(sol10,HIGH);
  digitalWrite(sol11,HIGH);
  delay(d);
  digitalWrite(sol3,LOW);
  digitalWrite(sol10,LOW);
  digitalWrite(sol11,LOW);
}

void spinP(){
  d=100;
  digitalWrite(sol0,HIGH);
  delay(d);
  digitalWrite(sol0,LOW);
  digitalWrite(sol3,HIGH);
  delay(d);
  digitalWrite(sol3,LOW);
  digitalWrite(sol7,HIGH);
  delay(d);
  digitalWrite(sol7,LOW);
  digitalWrite(sol11,HIGH);
  delay(d);
  digitalWrite(sol11,LOW);
  digitalWrite(sol15,HIGH);
  delay(d);
  digitalWrite(sol15,LOW);
  digitalWrite(sol16,HIGH);
  delay(d);
  digitalWrite(sol16,LOW);
  digitalWrite(sol17,HIGH);
  delay(d);
  digitalWrite(sol17,LOW);
  digitalWrite(sol14,HIGH);
  delay(d);
  digitalWrite(sol14,LOW);
  digitalWrite(sol10,HIGH);
  delay(d);
  digitalWrite(sol10,LOW);
  digitalWrite(sol6,HIGH);
  delay(d);
  digitalWrite(sol6,LOW);
  digitalWrite(sol2,HIGH);
  delay(d);
  digitalWrite(sol2,LOW);
  digitalWrite(sol1,HIGH);
  delay(d);
  digitalWrite(sol1,LOW);
  digitalWrite(sol4,HIGH);
  delay(d);
  digitalWrite(sol4,LOW);
  digitalWrite(sol8,HIGH);
  delay(d);
  digitalWrite(sol8,LOW);
  digitalWrite(sol12,HIGH);
  delay(d);
  digitalWrite(sol12,LOW);
  digitalWrite(sol13,HIGH);
  delay(d);
  digitalWrite(sol13,LOW);
  digitalWrite(sol9,HIGH);
  delay(d);
  digitalWrite(sol9,LOW);
  digitalWrite(sol5,HIGH);
  delay(d);
  digitalWrite(sol5,LOW);
}

void spinN(){
  d=100;
  digitalWrite(sol5,HIGH);
  delay(d);
  digitalWrite(sol5,LOW);
  digitalWrite(sol9,HIGH);
  delay(d);
  digitalWrite(sol9,LOW);
  digitalWrite(sol13,HIGH);
  delay(d);
  digitalWrite(sol13,LOW);
  digitalWrite(sol12,HIGH);
  delay(d);
  digitalWrite(sol12,LOW);
  digitalWrite(sol8,HIGH);
  delay(d);
  digitalWrite(sol8,LOW);
  digitalWrite(sol4,HIGH);
  delay(d);
  digitalWrite(sol4,LOW);
  digitalWrite(sol1,HIGH);
  delay(d);
  digitalWrite(sol1,LOW);
  digitalWrite(sol2,HIGH);
  delay(d);
  digitalWrite(sol2,LOW);
  digitalWrite(sol6,HIGH);
  delay(d);
  digitalWrite(sol6,LOW);
  digitalWrite(sol10,HIGH);
  delay(d);
  digitalWrite(sol10,LOW);
  digitalWrite(sol14,HIGH);
  delay(d);
  digitalWrite(sol14,LOW);
  digitalWrite(sol17,HIGH);
  delay(d);
  digitalWrite(sol17,LOW);
  digitalWrite(sol16,HIGH);
  delay(d);
  digitalWrite(sol16,LOW);
  digitalWrite(sol15,HIGH);
  delay(d);
  digitalWrite(sol15,LOW);
  digitalWrite(sol11,HIGH);
  delay(d);
  digitalWrite(sol11,LOW);
  digitalWrite(sol7,HIGH);
  delay(d);
  digitalWrite(sol7,LOW);
  digitalWrite(sol3,HIGH);
  delay(d);
  digitalWrite(sol3,LOW);
  digitalWrite(sol0,HIGH);
  delay(d);
  digitalWrite(sol0,LOW);
}

void loop() {
  delay(1000);
  allHIGH();
  delay(100);
  allLOW();
  delay(1000);
  
  for(i=0;i<2;i++){
  LR();  //left-right
  RL();  //right-left
  }
  
  delay(1000);
  allHIGH();
  delay(100);
  allLOW();
  delay(1000);
  
  for(i=0;i<2;i++){
  wave();
  }
  
  delay(1000);
  allHIGH();
  delay(100);
  allLOW();
  delay(1000);
  
  for(i=0;i<2;i++){
  delay(1000);
  spinP();
  delay(1000);
  spinN();
  }




にほんブログ村

にほんブログ村

にほんブログ村
<br>
新製品デモ機「たこ焼きPON☆PON」作り方紹介のシリーズ、
今回はプログラミング編です。

4:プログラミング編1
  プログラミング編2



今回はArduinoでのプログラミングを紹介します。

ソレノイドを動かすのは電気を入れればいいだけなんですが、自動的に動かすには「制御」が必要です。
制御ができなくて、ソレノイド挫折した方もいらっしゃるのでは?

まずは、Arduino専用ソフトをインストールしましょう!
https://www.arduino.cc/en/Main/Software

(インストール方法は、検索するといろんなブログでわかりやすく説明されていますよ!)


では、たこ焼きポンポンのプログラミングを部分的に説明していきますね!

C言語の紹介って感じかもです。

プログラミングの完成版は、プログラミング編2をご覧ください。

ここから、だらだら書いていきますが、

digitalWrite(sol1,HIGH) ・・・ソレノイド1に電流が流れる 
digitalWrite(sol2,LOW)  ・・・ソレノイド2に電流が流れない
delay(dh)                  ・・・指定した時間だけとまる
                  例)dh=1000 なら1秒とまる
                  Arduinoはミリ秒で入力するようです
for(i=0;i<☆;i++)      ・・・☆の回数だけ反復

ということをおさえておいてください。


まず、ピンとソレノイドをつなげます。
初めに名前を付けないとあとのプログラミングができません。


int sol0=0; 
ソレノイド0は0番のピンにつながりました。

この要領ですべてのソレノイドをつなげます。
int sol1=1;
int sol2=2;
int sol3=3;
  ・
  ・
  ・
int sol17=17;


たこ焼きポンポンでは6パターンの動きをプログラミングしています。

・全部動く
・左から右へ1列ずつ動く
・右から左へ1列ずつ動く
・ランダムに動く
・外から内へ渦巻きに動く
・内から外へ渦巻きに動く

言葉で言うより、動画を見てもらうとわかりやすいか。。


1.全部(all)

全部のソレノイドを1回だけ動かします。

void allHIGH() {
  digitalWrite(sol0,HIGH); 
  digitalWrite(sol1,HIGH);
   ・
  ・
  ・
  digitalWrite(sol16,HIGH);
  digitalWrite(sol17,HIGH);
}


これだけでは電流が流れっぱなしなので、
次に、電気を切るプログラムを入れます。

void allLOW() {
  digitalWrite(sol0,LOW); 
  digitalWrite(sol1,LOW);
   ・
  ・
  ・
  digitalWrite(sol16,LOW); 
  digitalWrite(sol17,LOW);
}


これで、1回だけソレノイドが動きます!



2.左から右(LR)


この3つを動かします


  digitalWrite(sol0,HIGH); 
  digitalWrite(sol1,HIGH);
  digitalWrite(sol2,HIGH);
  delay(dh);             
  digitalWrite(sol0,LOW); 
  digitalWrite(sol1,LOW);
  digitalWrite(sol2,LOW);
  delay(dl);            
  

これを2回くりかえしたいので、先頭にfor文を1行加えます

for(i=0;i<2;i++){          
  digitalWrite(sol0,HIGH); 
  digitalWrite(sol1,HIGH);
  digitalWrite(sol2,HIGH);
  delay(dh);
  digitalWrite(sol0,LOW); 
  digitalWrite(sol1,LOW);
  digitalWrite(sol2,LOW);
  delay(dl);
  }


以下のプログラムで左から右へ縦1列ずつ動作します。

void LR() {
  dh=100;
  dl=dh*4;
  
  for(i=0;i<2;i++){
  digitalWrite(sol0,HIGH); 
  digitalWrite(sol1,HIGH);
  digitalWrite(sol2,HIGH);
  delay(dh);
  digitalWrite(sol0,LOW); 
  digitalWrite(sol1,LOW);
  digitalWrite(sol2,LOW);
  delay(dl);
  }
    
  ・
  ・
  ・
  ・

  for(i=0;i<2;i++){
  digitalWrite(sol15,HIGH); 
  digitalWrite(sol16,HIGH);
  digitalWrite(sol17,HIGH);
  delay(dh);
  digitalWrite(sol15,LOW); 
  digitalWrite(sol16,LOW);
  digitalWrite(sol17,LOW);
  delay(dl);
  }


3.右から左

右の列から2のパターンを入れていきます。
void RL() {
  dh=100;
  dl=dh*4;
  
  for(i=0;i<2;i++){
  digitalWrite(sol15,HIGH); 
  digitalWrite(sol16,HIGH);
  digitalWrite(sol17,HIGH);
  delay(dh);
  digitalWrite(sol15,LOW); 
  digitalWrite(sol16,LOW);
  digitalWrite(sol17,LOW);
  delay(dl);
  }

  ・
  ・
  ・
  ・

 for(i=0;i<2;i++){
  digitalWrite(sol0,HIGH); 
  digitalWrite(sol1,HIGH);
  digitalWrite(sol2,HIGH);
  delay(dh);
  digitalWrite(sol0,LOW); 
  digitalWrite(sol1,LOW);
  digitalWrite(sol2,LOW);
  delay(dl);
  }
}


4.ランダム(wave)


digitalWrite(sol0,HIGH);
  digitalWrite(sol6,HIGH);
  digitalWrite(sol7,HIGH);
  digitalWrite(sol14,HIGH);
  digitalWrite(sol15,HIGH);
  delay(d);
  digitalWrite(sol0,LOW);
  digitalWrite(sol6,LOW);
  digitalWrite(sol7,LOW);
  digitalWrite(sol14,LOW);
  digitalWrite(sol15,LOW);

動かしたいソレノイドだけこのように入力していきます。


5.外から内(spin)

外側から中心に向かって追いかけっこをする動きです。


d=100;
  digitalWrite(sol0,HIGH);
  delay(d);
  digitalWrite(sol0,LOW);
  digitalWrite(sol3,HIGH);
  delay(d);
  digitalWrite(sol3,LOW);
  digitalWrite(sol7,HIGH);
  delay(d);
  digitalWrite(sol7,LOW);
  digitalWrite(sol11,HIGH);
  delay(d);
  digitalWrite(sol11,LOW);


6.内から外(spinN)

中心まできたら、今度は逆回りです。



d=100;
  digitalWrite(sol5,HIGH);
  delay(d);
  digitalWrite(sol5,LOW);
  digitalWrite(sol9,HIGH);
  delay(d);
  digitalWrite(sol9,LOW);
  digitalWrite(sol13,HIGH);
  delay(d);


プログラミングは敷居が高いけど
まずは既存のプログラムをコピーして使ってみるといいかも。
ぼちぼち勉強していこうと思いました、、、

にほんブログ村

にほんブログ村

にほんブログ村



新製品デモ機「たこ焼きPON☆PON」作り方紹介のシリーズ、
今回はハード製作編です。

3:ハード製作編
5:回路製作編

・たこやき
・たこやき器
・たこやき内部 (ソレノイド・リンクなど)
の3つをおおまかにやっていきます!

☆たこやき
たこやきはグッデイで購入した発砲スチロールの球に
色を塗りました。
青のりと紅ショウガはビニールひもをペイントして細かく切り刻みました。



☆たこやき器
たこやき器は、ダンボール製です。


上の鉄板、横のカーバー、それぞれダンボールで組み立てます。
このあとスプレーで色を塗りました。

☆たこやき器内部

設計
編で紹介したリンクとソレノイドです。


たこ焼きが乗るように丸く切り抜いたアクリル板をとりつけます。




完成です。

プログラミング編へつづく!


にほんブログ村

にほんブログ村

にほんブログ村