XBee無線ユンボの舞。
昔、作ったユンボロボットをアルディーノでスケッチしてます。
々と調整中で
オート・キレイキレイ・ビオレ
YouTubeに動画をアップしました。
回路図
プログラム概要
1、超音波センサーで20cm以内に接近すると
赤LEDを点灯・サーボモーター2台を同時に180度駆動。戻す。他LEDは消灯
2、超音波センサーで20cm以内に接近すると黄LEDを点灯・他LEDは消灯
3、超音波センサーで30cm以内に接近すると緑LEDを点灯・他LEDは消灯
4、超音波センサーで40cm以内に接近すると青LEDを点灯・他LEDは消灯
5、超音波センサーで40cm以上離れると白LEDを点灯・他LEDは消灯
6、USBでパソコンを繋げばシリアルモニターで接近距離を表示。
アルディーノNANO・スケッチ
//LEDECO.com
//2020.07.22
const int Trig = 12;
const int Echo = 13;
const int Led_1 = 2;
const int Led_2 = 3;
const int Led_3 = 4;
const int Led_4 = 10;
const int Led_5 = 11;
#include <Servo.h>
Servo myservo1;
Servo myservo2;
int Duration;
float Distance;
void setup() {
Serial.begin(9600);
pinMode(Led_1,OUTPUT);
pinMode(Led_2,OUTPUT);
pinMode(Led_3,OUTPUT);
pinMode(Led_4,OUTPUT);
pinMode(Led_5,OUTPUT);
pinMode(Trig,OUTPUT);
pinMode(Echo,INPUT);
myservo1.attach(7);
myservo2.attach(8);
}
void loop() {
digitalWrite(Trig,LOW);
delayMicroseconds(3);
digitalWrite(Trig,HIGH);
delayMicroseconds(3);
digitalWrite(Trig,LOW);
Duration = pulseIn(Echo,HIGH);
Serial.print(Duration);
if (Duration>0) {
Distance = Duration/2;
Distance = Distance*340*100/1000000; // ultrasonic speed is 340m/s = 34000cm/s = 0.034cm/us
Serial.print(Duration);
Serial.print(" us ");
Serial.print(Distance);
Serial.println(" cm");
if (Distance < 20){
digitalWrite(Led_1,HIGH);
digitalWrite(Led_2,LOW);
digitalWrite(Led_3,LOW);
digitalWrite(Led_4,LOW);
digitalWrite(Led_5,LOW);
myservo1.write(180);
myservo2.write(180);
delay(1000);
myservo1.write(0);
myservo2.write(0);
delay(1000);
}
else if(Distance < 30){
digitalWrite(Led_1,LOW);
digitalWrite(Led_2,HIGH);
digitalWrite(Led_3,LOW);
digitalWrite(Led_4,LOW);
digitalWrite(Led_5,LOW);
delay(300);
}
else if(Distance < 40){
digitalWrite(Led_1,LOW);
digitalWrite(Led_2,LOW);
digitalWrite(Led_3,HIGH);
digitalWrite(Led_4,LOW);
digitalWrite(Led_5,LOW);
delay(300);
}
else if(Distance < 50){
digitalWrite(Led_1,LOW);
digitalWrite(Led_2,LOW);
digitalWrite(Led_3,LOW);
digitalWrite(Led_4,HIGH);
digitalWrite(Led_5,LOW);
delay(300);
}
else{
digitalWrite(Led_1,LOW);
digitalWrite(Led_2,LOW);
digitalWrite(Led_3,LOW);
digitalWrite(Led_4,LOW);
digitalWrite(Led_5,HIGH);
delay(300); }
}
}
全力で引き籠り箱の製作。回路図・アルデーノスケッチを公開
引き籠り箱の製作。回路図
引き籠り箱の製作。アルデーノ・プログラム/スケッチ
//LEDECO.com
//2020.07.09
#define OFF 0
#define ON 1
int n = 0 ;
#include <Servo.h>
Servo myservo1;
Servo myservo2;
void setup() {
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(8, INPUT_PULLUP);
pinMode(9, INPUT_PULLUP);
myservo1.attach(6);
myservo2.attach(7);
}
int toggle = OFF;
void loop(){
myservo1.write(170);
myservo2.write(30);
delay(200);
if (digitalRead(8)== HIGH){
while(digitalRead(8)== HIGH)
toggle =OFF;
}
if (digitalRead(9) == HIGH){
while(digitalRead(9)== HIGH)
toggle = ON;
delay(100);
myservo1.write(140);
delay(200);
myservo1.write(90);
delay(300);
myservo2.write(170);
delay(200);
myservo2.write(110);
delay(100);
n=n+1;
}
if ( n<=5){
digitalWrite(4,HIGH);
delay(300);
digitalWrite(5,HIGH);
delay(200);
digitalWrite(4,LOW);
delay(300);
digitalWrite(5,LOW);
}
if ( n>5){
led1_flash();
}
if ( n>=10){
led2_flash();
}
}
//LEDを点滅させる
void led1_flash() {
digitalWrite(2,HIGH);
delay(300);
digitalWrite(3,HIGH);
delay(300);
digitalWrite(2,LOW);
delay(300);
digitalWrite(3,LOW);
}
void led2_flash() {
digitalWrite(2,HIGH);
digitalWrite(3,HIGH);
delay(100);
digitalWrite(4,HIGH);
digitalWrite(5,HIGH);
delay(100);
digitalWrite(2,LOW);
digitalWrite(3,LOW);
digitalWrite(4,LOW);
digitalWrite(5,LOW);
delay(100);
digitalWrite(2,HIGH);
digitalWrite(3,HIGH);
delay(100);
digitalWrite(4,HIGH);
digitalWrite(5,HIGH);
delay(100);
digitalWrite(2,LOW);
digitalWrite(3,LOW);
digitalWrite(4,LOW);
digitalWrite(5,LOW);
delay(100);
digitalWrite(2,HIGH);
digitalWrite(3,HIGH);
delay(100);
digitalWrite(4,HIGH);
digitalWrite(5,HIGH);
delay(100);
n=0 ;
digitalWrite(2,LOW);
digitalWrite(3,LOW);
digitalWrite(4,LOW);
digitalWrite(5,LOW);
}
アルディーノで引き籠り。久しぶりのLEDチカチカ。
久しぶりのLEDチカチカ。昔に工作してた2色LEDが出て来たのでトグルスイッチで点灯してみた。
カソードコモンの2色LED赤・緑あるいは赤・青を単純に切り替え切り替え点灯するだけ。
昔ながらのアナログ回路は簡単に工作できて簡単に点灯出来るけどアルディーノでスケッチを書くのは
大変難儀。丸一日掛けてやっと出来ました。
アルディーノUNOのプログラム/スケッチ概要
1・1~5回目切り替えまでは、2個のカソードコモンの2色LED緑あるいは青を単純に点灯するだけ。
2・6~9回目切り替えまでは、2個のカソードコモンの2色LED緑と青をチカチカ点灯で注意喚起。
3・10回目切り替えで2個のカソードコモンの2色LED赤をチカチカ点灯で怒り爆発。全点灯で引き籠り。
4・元に戻る。
アルディーノUNOのプログラム/スケッチ
//LEDECO.com
//2020.07.09
#define OFF 0
#define ON 1
int n = 0 ;
void setup() {
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(8, INPUT_PULLUP);
pinMode(9, INPUT_PULLUP);
}
int toggle = OFF;
void loop(){
if (digitalRead(8)== HIGH){
digitalWrite(3, HIGH);
while(digitalRead(8)== HIGH)
toggle = OFF;
}
digitalWrite(3, LOW);
delay(50);
if (digitalRead(9) == HIGH){
digitalWrite(5, HIGH);
while(digitalRead(9)== HIGH)
toggle = ON;
}
digitalWrite(5, LOW);
delay(50);
if ( toggle = ON){
n=n+1;
}
if ( n>5){
led1_flash();
}
if ( n>=10){
led2_flash();
}delay(100);
}
//LEDを点滅させる
void led1_flash() {
digitalWrite(3, HIGH);
delay(100);
digitalWrite(3, LOW);
delay(100);
digitalWrite(5, HIGH);
delay(100);
digitalWrite(5, LOW);
delay(100);
digitalWrite(3, HIGH);
delay(50);
digitalWrite(3, LOW);
delay(50);
digitalWrite(5, HIGH);
delay(50);
digitalWrite(5, LOW);
delay(50);
}
void led2_flash() {
digitalWrite(2, HIGH);
delay(100);
digitalWrite(2, LOW);
delay(100);
digitalWrite(4, HIGH);
delay(100);
digitalWrite(4, LOW);
delay(100);
digitalWrite(2, HIGH);
delay(100);
digitalWrite(2, LOW);
delay(100);
digitalWrite(4, HIGH);
delay(100);
digitalWrite(4, LOW);
delay(100);
digitalWrite(2, HIGH);
delay(100);
digitalWrite(2, LOW);
delay(100);
digitalWrite(4, HIGH);
delay(100);
digitalWrite(4, LOW);
delay(100);
digitalWrite(2, HIGH);
delay(100);
digitalWrite(2, LOW);
delay(100);
digitalWrite(4, HIGH);
delay(100);
digitalWrite(4, LOW);
delay(100);
digitalWrite(2,HIGH);
digitalWrite(3,HIGH);
digitalWrite(4,HIGH);
digitalWrite(5,HIGH);
delay(1000);
n=0 ;
digitalWrite(2,LOW);
digitalWrite(3,LOW);
digitalWrite(4,LOW);
digitalWrite(5,LOW);
}
手首ロボットのスケッチ・回路図を公開。
手首ロボットのYouTube公開。
回路図
プログラム・スケッチ
//LEDECO.com
//2020.07.03
const int Trig = 12;
const int Echo = 13;
const int Led_1 = 2;
const int Led_2 = 3;
const int Led_3 = 4;
const int Led_4 = 10;
const int Led_5 = 11;
#include <Servo.h>
Servo myservo1;
Servo myservo2;
Servo myservo3;
Servo myservo4;
Servo myservo5;
int Duration;
float Distance;
void setup() {
Serial.begin(9600);
pinMode(Led_1,OUTPUT);
pinMode(Led_2,OUTPUT);
pinMode(Led_3,OUTPUT);
pinMode(Led_4,OUTPUT);
pinMode(Led_5,OUTPUT);
pinMode(Trig,OUTPUT);
pinMode(Echo,INPUT);
myservo1.attach(5);
myservo2.attach(6);
myservo3.attach(7);
myservo4.attach(8);
myservo5.attach(9);}
void loop() {
digitalWrite(Trig,LOW);
delayMicroseconds(3);
digitalWrite(Trig,HIGH);
delayMicroseconds(3);
digitalWrite(Trig,LOW);
Duration = pulseIn(Echo,HIGH);
Serial.print(Duration);
if (Duration>0) {
Distance = Duration/2;
Distance = Distance*340*100/1000000; // ultrasonic speed is 340m/s = 34000cm/s = 0.034cm/us
Serial.print(Duration);
Serial.print(" us ");
Serial.print(Distance);
Serial.println(" cm");
if (Distance < 20){
digitalWrite(Led_1,HIGH);
digitalWrite(Led_2,LOW);
digitalWrite(Led_3,LOW);
digitalWrite(Led_4,LOW);
digitalWrite(Led_5,LOW);
myservo1.write(60);
myservo2.write(60);
myservo3.write(60);
myservo4.write(0);
myservo5.write(0);
delay(300);
}
else if(Distance < 30){
digitalWrite(Led_1,LOW);
digitalWrite(Led_2,HIGH);
digitalWrite(Led_3,LOW);
digitalWrite(Led_4,LOW);
digitalWrite(Led_5,LOW);
myservo1.write(0);
myservo2.write(60);
myservo3.write(60);
myservo4.write(0);
myservo5.write(0);
delay(300);}
else if(Distance < 40){
digitalWrite(Led_1,LOW);
digitalWrite(Led_2,LOW);
digitalWrite(Led_3,HIGH);
digitalWrite(Led_4,LOW);
digitalWrite(Led_5,LOW);
myservo1.write(0);
myservo2.write(60);
myservo3.write(60);
myservo4.write(0);
myservo5.write(75);
delay(300);
}
else if(Distance < 50){
digitalWrite(Led_1,LOW);
digitalWrite(Led_2,LOW);
digitalWrite(Led_3,LOW);
digitalWrite(Led_4,HIGH);
digitalWrite(Led_5,LOW);
myservo1.write(0);
myservo2.write(60);
myservo3.write(60);
myservo4.write(60);
myservo5.write(60);
delay(300);}
else{
digitalWrite(Led_1,LOW);
digitalWrite(Led_2,LOW);
digitalWrite(Led_3,LOW);
digitalWrite(Led_4,LOW);
digitalWrite(Led_5,HIGH);}
myservo1.write(0);
myservo2.write(0);
myservo3.write(0);
myservo4.write(60);
myservo5.write(60);
delay(300); }
delay(300);
}
アルディーノでソーシャルディスタンスを保とう。超音波使ってLEDで近接表示
アルディーノNANOと超音波センサーを使ってLEDを5段階で表示します。
プログラム・スケッチはこんなもんかな?
//LEDECO.com
//2020.06.27
const int Trig = 12;
const int Echo = 13;
const int Led_1 = 2;
const int Led_2 = 3;
const int Led_3 = 4;
const int Led_4 = 10;
const int Led_5 = 11;
int Duration;
float Distance;
void setup() {
Serial.begin(9600);
pinMode(Led_1, OUTPUT);
pinMode(Led_2, OUTPUT);
pinMode(Led_3, OUTPUT);
pinMode(Led_4, OUTPUT);
pinMode(Led_5, OUTPUT);
pinMode(Trig, OUTPUT);
pinMode(Echo, INPUT);
}
void loop() {
digitalWrite(Trig, LOW);
delayMicroseconds(3);
digitalWrite(Trig, HIGH);
delayMicroseconds(3);
digitalWrite(Trig, LOW);
Duration = pulseIn(Echo, HIGH);
Serial.print(Duration);
if (Duration > 0) {
Distance = Duration / 2;
Distance = Distance * 340 * 100 / 1000000; // ultrasonic speed is 340m/s = 34000cm/s = 0.034cm/us
Serial.print(Duration);
Serial.print(" us ");
Serial.print(Distance);
Serial.println(" cm");
if (Distance < 15) {
digitalWrite(Led_1, HIGH);
digitalWrite(Led_2, LOW);
digitalWrite(Led_3, LOW);
digitalWrite(Led_4, LOW);
digitalWrite(Led_5, LOW);
}
else if (Distance < 25) {
digitalWrite(Led_1, LOW);
digitalWrite(Led_2, HIGH);
digitalWrite(Led_3, LOW);
digitalWrite(Led_4, LOW);
digitalWrite(Led_5, LOW);
}
else if (Distance < 35) {
digitalWrite(Led_1, LOW);
digitalWrite(Led_2, LOW);
digitalWrite(Led_3, HIGH);
digitalWrite(Led_4, LOW);
digitalWrite(Led_5, LOW);
}
else if (Distance < 45) {
digitalWrite(Led_1, LOW);
digitalWrite(Led_2, LOW);
digitalWrite(Led_3, LOW);
digitalWrite(Led_4, HIGH);
digitalWrite(Led_5, LOW);
}
else {
digitalWrite(Led_1, LOW);
digitalWrite(Led_2, LOW);
digitalWrite(Led_3, LOW);
digitalWrite(Led_4, LOW);
digitalWrite(Led_5, HIGH);
}
delay(500);
}
踊るビスコ
踊るビスコ
サーボ5台をアルディーノNANOでコントロールしてます。
アルディーノNANOスケッチ
//LEDECO.com
//2020.06.25
#include <Servo.h>
Servo myservo1;
Servo myservo2;
Servo myservo3;
Servo myservo4;
Servo myservo5;
void setup() {
Serial.begin(9600);
myservo1.attach(5);
myservo2.attach(6);
myservo3.attach(7);
myservo4.attach(8);
myservo5.attach(9);
}
void loop() {
myservo1.write(0);
myservo2.write(0);
myservo3.write(0);
myservo4.write(0);
myservo5.write(0);
delay(1000);
myservo1.write(90);
myservo2.write(90);
myservo3.write(90);
myservo4.write(90);
myservo5.write(90);
delay(1000);
myservo1.write(120);
myservo2.write(120);
myservo3.write(120);
myservo4.write(120);
myservo5.write(120);
delay(1000);
myservo1.write(180);
myservo2.write(180);
myservo3.write(180);
myservo4.write(180);
myservo5.write(180);
delay(1000);
myservo1.write(270);
myservo2.write(270);
myservo3.write(270);
myservo4.write(270);
myservo5.write(270);
delay(1000);
myservo1.write(75);
delay(1000);
myservo2.write(75);
delay(1000);
myservo3.write(75);
delay(1000);
myservo4.write(75);
delay(1000);
myservo5.write(75);
delay(1000);
myservo5.write(150);
delay(1000);
myservo4.write(150);
delay(1000);
myservo3.write(150);
delay(1000);
myservo2.write(150);
delay(1000);
myservo1.write(150);
delay(1000);
myservo1.write(75);
delay(1000);
myservo2.write(75);
delay(1000);
myservo3.write(75);
delay(1000);
myservo4.write(75);
delay(1000);
myservo5.write(75);
delay(1000);
myservo5.write(0);
delay(1000);
myservo4.write(0);
delay(1000);
myservo3.write(0);
delay(1000);
myservo2.write(0);
delay(1000);
myservo1.write(0);
delay(1000);
myservo5.write(150);
delay(1000);
myservo4.write(150);
delay(1000);
myservo3.write(150);
delay(1000);
myservo2.write(150);
delay(1000);
myservo1.write(150);
delay(1000);
}













