Publicat la data

Radar cu ultrasunete cu Arduino UNO

Radar cu ultrasunete cu Arduino UNO

 

Este un proiect Arduino care necesită cunoştinţe medii în domeniu.
Vom prezenta în continuare paşii de realizare.

Ce vrem să realizăm ?

Vrem să construim un aparat care să ne arate pe display-ul PC obiecte detectate cu un radar cu ultrasunete

Pe display va apare o fereastra monitor (Processing)

schemamonitor-radar

Ce materiale avem nevoie ?

O placă compatibilă Arduino Uno sau Nano sau Mini.

Uno-roboromania

un senzor cu ultrasunete

HC-SR04-roboromania

un Servomotor

SG90-9G-Micro-Servo-Motor-avr-roboromania-Bucuresti

cabluri Dupont

Ce urmează ?

Să le conectam.
E simplu, trebuie doar să fim atenți la conectarea pinilor, corespunzător sketch-ului Arduino folosit.
Dar puteți veni la sediul nostru și vă învățăm noi cat putem … vă ajutăm și la montaj …

schema

Să uploadăm codul (download) și cel pentru Processing (atenție să aveți același COM și la Arduino și la Processing)

dacă nu puteți downloada codul scrieți pe office@roboromania.ro

video

Colectivul magazinului roboromania.ro vă urează succes !  După realizare va rugam sa trimiteți poze și sugestii.

Publicat la data

Robot 4WD Roboromania autonom ocolire obstacole realizat de MERS Robotica pentru copii – Mihai Dascaliuc

Robot 4WD Roboromania autonom ocolire obstacole realizat de MERS Robotica pentru copii – Mihai Dascaliuc

MERS Robotica pentru copii – Constanţa  https://www.facebook.com/roboticaconstanta/

default_comp26

321

Aveti nevoie de :
o Placă de dezvoltare tip Arduino UNO (oricare)
un Modul driver motoare L293D
un Senzor cu ultrasunete HCSR04
un Kit șasiu 4WD
cabluri Dupont

Modul driver motoare L293D este shield si nu aveți cum să greșiți pinii

Codul (sau download) :

// Robot 4WD autonom ocolire obstacole – „MERS Robotica pentru copii” – Mihai Dascaliuc

#include <AFMotor.h> //import your motor shield library
#define trigPin A0 // define the pins of your sensor
#define echoPin A1
AF_DCMotor motor1(1,MOTOR12_64KHZ); // set up motors.
AF_DCMotor motor2(2, MOTOR12_8KHZ);
AF_DCMotor motor3(3, MOTOR12_8KHZ);
AF_DCMotor motor4(4, MOTOR12_8KHZ);

void setup() {
Serial.begin(9600); // begin serial communitication
Serial.println(„Motor test!”);
pinMode(trigPin, OUTPUT);// set the trig pin to output (Send sound waves)
pinMode(echoPin, INPUT);// set the echo pin to input (recieve sound waves)
motor1.setSpeed(200); //set the speed of the motors, between 0-255
motor2.setSpeed (200);
motor3.setSpeed (200);
motor4.setSpeed (200);
}

void loop() {

long duration, distance; // start the scan
digitalWrite(trigPin, LOW);
delayMicroseconds(2); // delays are required for a succesful sensor operation.
digitalWrite(trigPin, HIGH);

delayMicroseconds(10); //this delay is required as well!
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = (duration/2) / 29.1;// convert the distance to centimeters.
if (distance < 40)/*if there’s an obstacle 25 centimers, ahead, do the following: */ {
Serial.println(„Close Obstacle detected!” );
Serial.println(„Obstacle Details:”);
Serial.print(„Distance From Robot is ” );
Serial.print( distance);
Serial.print( ” CM!”);// print out the distance in centimeters.

Serial.println(” The obstacle is declared a threat due to close distance. „);
Serial.println(” Turning !”);
motor1.run(FORWARD); // Turn as long as there’s an obstacle ahead.
motor2.run(FORWARD);
motor3.run(BACKWARD);
motor4.run(BACKWARD);
} else {
Serial.println(„No obstacle detected. going forward”);
delay (15);
motor1.run(FORWARD); //if there’s no obstacle ahead, Go Forward!
motor2.run(FORWARD);
motor3.run(FORWARD);
motor4.run(FORWARD);
}
}

filmuleț realizat de MERS Robotica pentru copii – Constanţa

Succes!

Publicat la data

Măsurarea temperaturii cu un termistor de 10k și afișare pe LCD

Măsurarea temperaturii cu un termistor de 10k și afișare pe LCD

Este un proiect Arduino care necesită cunoştinţe medii în domeniu.
Vom prezenta în continuare paşii de realizare.

Ce vrem să realizăm ?

Vrem să construim un aparat care să ne arate valoarea temperaturii în Kelvin Celsius și Fahrenheit pe un display LCD 2×16 I2C.

schema

Ce materiale avem nevoie ?

O placă compatibilă Arduino Uno sau Nano sau Mini.

Uno-roboromania

Un LCD i2C sau un LCD 2×16 + Modul i2C

2x16blue-roboromania

și evident un Termistor de 10k

Cât ne costă ?

În varianta făcută de noi şi cumpărate de la roboromania.ro costa cam 60 de lei

Ce urmează ?

Să le conectam.
E simplu, trebuie doar să fim atenți la conectarea pinilor, corespunzător sketch-ului Arduino folosit.
Dar puteți veni la sediul nostru și vă învățăm noi cat putem … vă ajutăm și la montaj …

schema

Să uploadăm codul (download)

Colectivul magazinului roboromania.ro vă urează succes !  După realizare va rugam sa trimiteți poze și sugestii.

Publicat la data

Arduino Senzor Puls Heart Tutorial

Arduino Senzor Puls Heart Tutorial

Este un proiect Arduino care necesită cunoştinţe medii în domeniu.
Vom prezenta în continuare paşii de realizare.

Ce vrem să realizăm ?

Vrem să construim un aparat care să ne arate valoarea pulsului uman pe un display LCD 2×16 și să ne arate dacă e ok.

Pe display apare valoarea pulsului iar dacă valoarea e ok apare și cuvântul PULS lângă care va pulsa în acord cu pulsul dvs.

arduino-lcd-i2c-heart

Ce materiale avem nevoie ?

O placă compatibilă Arduino Uno sau Nano sau Mini.

Uno-roboromania

Un LCD i2C sau un LCD 2×16 + Modul i2C

2x16yellow-roboromania

și evident

Un Senzor de puls

Senzor-ritm-cardiac-puls-roboromania

Cât ne costă ?

În varianta făcută de noi şi cumpărate de la roboromania.ro costa cam 85 de lei

Ce urmează ?

Să le conectam.
E simplu, trebuie doar să fim atenți la conectarea pinilor, corespunzător sketch-ului Arduino folosit.
Dar puteți veni la sediul nostru și vă învățăm noi cat putem … vă ajutăm și la montaj …

arduino-lcd-i2c-heart

Să uploadăm codul (download)

Colectivul magazinului roboromania.ro vă urează succes !  După realizare va rugam sa trimiteți poze și sugestii.

 

Publicat la data

Robot 2WD Roboromania autonom ocolire obstacole realizat de Ștefan Ziegler din Arad

default_comp26 Robot 2WD Roboromania autonom ocolire obstacole realizat de Ștefan Ziegler din Arad

2

Aveti nevoie de :
o placă de dezvoltare tip Arduino UNO (oricare)
un modul driver motoare L298N
un senzor cu ultrasunete
șasiu cu 2 motoare 2WD
cabluri Dupont

robot-2wd-roboromania

//––––-
// roboromania.ro
// Robot 2WD Roboromania autonom ocolire obstacole – versiunea testata 2018.02.03
// Ștefan Ziegler din Arad stefan@ecomania.ro

#include <NewPing.h>

#define TRIG_PIN 8
#define ECHO_PIN 7
#define MAX_DISTANCE 400
#define COLL_DIST 15 // distanta de coliziune la care robot stop si inapoi este de : 15cm
NewPing sonar(TRIG_PIN, ECHO_PIN, MAX_DISTANCE);

#define SPEED 10

// L298n module
// 1(+)inainte dreapta = DrFr
// 2(+)inapoi dreapta = DrSp
// 3(+)inainte stanga = StFr
// 4(+)inapoi stanga = StSp

int DrFr = 3;
int DrSp = 2;
int StFr = 4;
int StSp = 5;

void setup() {
Serial.begin(9600);
pinMode(DrFr,OUTPUT);
pinMode(StFr,OUTPUT);
pinMode(DrSp,OUTPUT);
pinMode(StSp,OUTPUT);
digitalWrite(DrFr,LOW);
digitalWrite(StFr,LOW);
digitalWrite(DrSp,LOW);
digitalWrite(StSp,LOW);
}

int scan() {
return (sonar.ping() / US_ROUNDTRIP_CM); //masurare distanta in cm
}

void loop() {
int Dist = scan(); // masuram distanta curenta
// Serial.println(Dist);
if ((Dist < COLL_DIST) && (Dist > 0)) { // daca distanta curenta < decit distanta de coliziune
moveStop();
moveBackward();
delay(500);
turnRight();
delay(300);
} else {
moveForward();
}
}

void moveStop() {
digitalWrite(DrFr,LOW);
digitalWrite(StFr,LOW);
digitalWrite(DrSp,LOW);
digitalWrite(StSp,LOW);
}

void moveForward() {
digitalWrite(DrFr,HIGH);
digitalWrite(StFr,HIGH);
digitalWrite(DrSp,LOW);
digitalWrite(StSp,LOW);
}

void moveBackward() {
digitalWrite(DrFr,LOW);
digitalWrite(StFr,LOW);
digitalWrite(DrSp,HIGH);
digitalWrite(StSp,HIGH);
}

void turnRight() {
digitalWrite(DrFr,LOW);
digitalWrite(StFr,HIGH);
digitalWrite(DrSp,HIGH);
digitalWrite(StSp,LOW);
}

void turnLeft() {
digitalWrite(DrFr,HIGH);
digitalWrite(StFr,LOW);
digitalWrite(DrSp,LOW);
digitalWrite(StSp,HIGH);
}

//––––––

Pentru întrebări suplimentare : Ștefan Ziegler din Arad – stefan@ecomania.ro

filmuleț realiyat de Ștefan Ziegler

Publicat la data

Robot 2WD Roboromania comandat Bluetooth (cu telefonul)

Robot 2WD Roboromania comandat Bluetooth (cu telefonul)

default_comp26

robot-2wd-bluetooth-roboromania-conectare

Avem nevoie de :
o placă de dezvoltare tip Arduino UNO (sau oricare)
un modul Bluetooth HC-05 (sau HC-06)
un modul driver motoare L298N
șasiu cu 2 motoare 2WD
cabluri Dupont

Puteți folosi orice APK din Play Store (ex. : Arduino Bluetooth Controller) și nu uitați sa setați butoanele din aplicație

Cel mai simplu cod :

//––––––––––––––

#include <SoftwareSerial.h>

#define in1 5 //L298n Motor Driver pins.
#define in2 6
#define in3 10
#define in4 11

#define SPEED 200

SoftwareSerial blue_serial(3, 4); // RX, TX

void setup() {
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);
blue_serial.begin(9600);
}

void loop() {
int command = blue_serial.read();
if(command != -1) {
switch (command) {
case ‘F’: forward(); break;
case ‘B’: back(); break;
case ‘L’: left(); break;
case ‘R’: right(); break;
case ‘K’: stop(); break;
}
delay(10);
}
}

void forward() {
stop();
analogWrite(in1, SPEED);
analogWrite(in3, SPEED);
}

void back() {
stop();
analogWrite(in2, SPEED);
analogWrite(in4, SPEED);
}

void left() {
stop();
analogWrite(in3, SPEED);
analogWrite(in2, SPEED);
}

void right() {
stop();
analogWrite(in4, SPEED);
analogWrite(in1, SPEED);
}

void stop() {
analogWrite(in1, 0);
analogWrite(in2, 0);
analogWrite(in3, 0);
analogWrite(in4, 0);
}

//––––––––––––––

Colectivul magazinului roboromania.ro vă urează succes !  După realizare va rugam sa trimiteți poze și sugestii.

Publicat la data

Hai să ne jucăm cu BYJ48 Stepper motor + Driver Stepper ULN2003

BYJ48 Stepper motor + Modulul Driver Stepper ULN2003

default_comp26

Modulul Driver Stepper ULN2003 cu motor Stepper 28BYJ-48 compatibil Arduino de la Roboromania

stepper1

Speed Variation Ratio 1/64
Stride Angle 5.625° /64
Frequency 100Hz
DC resistance 50Ω±7%(25℃)
Idle In-traction Frequency > 600Hz
Idle Out-traction Frequency > 1000Hz
In-traction Torque >34.3mN.m(120Hz)
Self-positioning Torque >34.3mN.m
Friction torque 600-1200 gf.cm
Pull in torque 300 gf.cm
Insulation grade A

ID-ul Arduino + Library pentru un motor Stepper, foarte ușor de folosit, după conectarea motorului cu arduino Puteți încărca Sketch pe arduino.

Dar …

Trebuie să luați în considerare:

Acest motor are un raport de transmisie de 64 și unghi Stride 5.625 °, astfel că acest motor are un pas de 4096.

 steps = Number of steps in One Revolution  * Gear ratio   .

steps= (360°/5.625°)*64″Gear ratio” = 64 * 64 =4096 . this value will substitute it on The arduino Sketch

For adafruit Stepper Motor , the Stride Angle 7.5° and Gear ratio is 16 , So number of steps in 1 Revolution is :

steps in One Revolution  = 360 / 7.5 = 48   .

steps= 48 * 16 = 768

Asta va fi diferit depinde de ce motor utilizați, așa că verificați datele pentru stepper motor pentru a calibra aceste valori.

 stepper2

stepper4

Motor Driver ULN2003 Breakout conectat la Arduino de la IN1 – IN4 la D8 – D11 Respectiv
Pentru a alimenta motorul, utilizați sursa externă de alimentare cu cel puțin 5V-500mA, nu-l alimentați direct de la arduino 5V.

Când încărcați Sketch în arduino, motorul va fi rotit într-o singură direcție Prin tastarea comenzii:

step(steps);

Deci, trebuie să puneți numărul de pași pentru a porni motorul.

Puteți pune valoarea pozitivă pentru o direcție, negativă pentru cealaltă.
Acest motor trebuie să funcționeze ca
în tabelul atașat.

stepper3

Am scris un cod care permite acestui motor să se miște în sensul acelor de ceasornic și contra sensului acelor de ceasornic

codul final pentru acest motor Stepper:

/*
BYJ48 Stepper motor code
Connect :
IN1 >> D8
IN2 >> D9
IN3 >> D10
IN4 >> D11
VCC … 5V Prefer to use external 5V Source
Gnd
*/

#define IN1  8
#define IN2  9
#define IN3  10
#define IN4  11
int Steps = 0;
boolean Direction = true;// gre
unsigned long last_time;
unsigned long currentMillis ;
int steps_left=4095;
long time;
void setup()
{
Serial.begin(115200);
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
// delay(1000);

}
void loop()
{
while(steps_left>0){
currentMillis = micros();
if(currentMillis-last_time>=1000){
stepper(1);
time=time+micros()-last_time;
last_time=micros();
steps_left–;
}
}
Serial.println(time);
Serial.println(„Wait…!”);
delay(2000);
Direction=!Direction;
steps_left=4095;
}

void stepper(int xw){
for (int x=0;x<xw;x++){
switch(Steps){
case 0:
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, HIGH);
break;
case 1:
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, HIGH);
break;
case 2:
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
break;
case 3:
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
break;
case 4:
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
break;
case 5:
digitalWrite(IN1, HIGH);
digitalWrite(IN2, HIGH);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
break;
case 6:
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
break;
case 7:
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, HIGH);
break;
default:
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
break;
}
SetDirection();
}
}
void SetDirection(){
if(Direction==1){ Steps++;}
if(Direction==0){ Steps–; }
if(Steps>7){Steps=0;}
if(Steps<0){Steps=7; }
}

stepper5

Am tăiat dimensiunea codului în jos și l-am modificat astfel încât să puteți specifica viteza și nu aveți nevoie de direcție. Doar apelați „stepper ()” și dați numărul de pași pe care doriți să îl rotiți.

Utilizați numere negative pentru a inversa direcția.

Probabil că va trebui să modificați valorile pentru IN1-IN4 pentru a se potrivi cu pinii folosiți de pe Arduino:

#define IN1 5

#define IN2 4

#define IN3 3

#define IN4 2

#define FULL_ROTATION 4076

const int phases1[] = {0, 0, 0, 0, 0, 1, 1, 1};

const int phases2[] = {0, 0, 0, 1, 1, 1, 0, 0};

const int phases3[] = {0, 1, 1, 1, 0, 0, 0, 0};

const int phases4[] = {1, 1, 0, 0, 0, 0, 0, 1};

int Phase = 0;

int Speed = 100; //MUST BE 1 – 100

void setup()

{

pinMode(IN1, OUTPUT);

pinMode(IN2, OUTPUT);

pinMode(IN3, OUTPUT);

pinMode(IN4, OUTPUT);

Serial.begin(115200);

}

void loop()

{

stepper(FULL_ROTATION);

stepper(-FULL_ROTATION);

}

void stepper(int count)

{

int rotationDirection = count < 1 ? -1 : 1;

count *= rotationDirection;

for (int x = 0; x < count; x++)

{

digitalWrite(IN1, phases1[Phase]);

digitalWrite(IN2, phases2[Phase]);

digitalWrite(IN3, phases3[Phase]);

digitalWrite(IN4, phases4[Phase]);

IncrementPhase(rotationDirection);

delay(100/Speed);

}

}

void IncrementPhase(int rotationDirection)

{

Phase += 8;

Phase += rotationDirection;

Phase %= 8;

}

Am schimbat codul puțin pentru a scăpa de direcție și pentru a folosi semnul minus pentru rotirea CCW și plus pentru CW rotativ.

De asemenea, vreau să dezactivez motorul după fiecare rotire.

Scrieți doar câți pași ai nevoie și executa.

#define IN1 8

#define IN2 9

#define IN3 10

#define IN4 11

int Steps = 0;

void setup()

{

Serial.begin(115200);

pinMode(IN1, OUTPUT);

pinMode(IN2, OUTPUT);

pinMode(IN3, OUTPUT);

pinMode(IN4, OUTPUT);

// delay(1000);

}

void loop() {

while (Serial.available()>0){

int st = Serial.parseInt();

if(Serial.read()==’\n’){

String message = „STEPS „;

message+=st;

Serial.println(message);

stepper(st);

delay(500);

digitalWrite(IN1, LOW);

digitalWrite(IN2, LOW);

digitalWrite(IN3, LOW);

digitalWrite(IN4, LOW);

}

}

}

void stepper(int doSteps){

int xw =abs(doSteps);

for (int x=0;x<xw;x++){

switch(Steps){

case 0:

digitalWrite(IN1, LOW);

digitalWrite(IN2, LOW);

digitalWrite(IN3, LOW);

digitalWrite(IN4, HIGH);

break;

case 1:

digitalWrite(IN1, LOW);

digitalWrite(IN2, LOW);

digitalWrite(IN3, HIGH);

digitalWrite(IN4, HIGH);

break;

case 2:

digitalWrite(IN1, LOW);

digitalWrite(IN2, LOW);

digitalWrite(IN3, HIGH);

digitalWrite(IN4, LOW);

break;

case 3:

digitalWrite(IN1, LOW);

digitalWrite(IN2, HIGH);

digitalWrite(IN3, HIGH);

digitalWrite(IN4, LOW);

break;

case 4:

digitalWrite(IN1, LOW);

digitalWrite(IN2, HIGH);

digitalWrite(IN3, LOW);

digitalWrite(IN4, LOW);

break;

case 5:

digitalWrite(IN1, HIGH);

digitalWrite(IN2, HIGH);

digitalWrite(IN3, LOW);

digitalWrite(IN4, LOW);

break;

case 6:

digitalWrite(IN1, HIGH);

digitalWrite(IN2, LOW);

digitalWrite(IN3, LOW);

digitalWrite(IN4, LOW);

break;

case 7:

digitalWrite(IN1, HIGH);

digitalWrite(IN2, LOW);

digitalWrite(IN3, LOW);

digitalWrite(IN4, HIGH);

break;

default:

digitalWrite(IN1, LOW);

digitalWrite(IN2, LOW);

digitalWrite(IN3, LOW);

digitalWrite(IN4, LOW);

break;

}

delay(1);

if(doSteps>=0){ Steps++;}

if(doSteps<0){ Steps–; }

if(Steps>7){Steps=0;}

if(Steps<0){Steps=7; }

}

}

Codul ar putea
să fie simplificat.

Folosind matrice, redenumirea variabilelor și simplificarea controlului

/*
BYJ48 Stepper motor code
Conectați :
IN1 >> D8
IN2 >> D9
IN3 >> D10
IN4 >> D11
VCC … 5V folosiți external 5V Source
Gnd
*/

#define IN1 8
#define IN2 9
#define IN3 10
#define IN4 11
const int NBSTEPS = 4096;
const int STEPTIME = 900;
int Step = 0;
boolean Clockwise = true;

int arrayDefault[4] = {LOW, LOW, LOW, LOW};

int stepsMatrix[8][4] = {
{LOW, LOW, LOW, HIGH},
{LOW, LOW, HIGH, HIGH},
{LOW, LOW, HIGH, LOW},
{LOW, HIGH, HIGH, LOW},
{LOW, HIGH, LOW, LOW},
{HIGH, HIGH, LOW, LOW},
{HIGH, LOW, LOW, LOW},
{HIGH, LOW, LOW, HIGH},
};

unsigned long lastTime;
unsigned long time;

void setup(){
Serial.begin(9600);
Serial.println(„Starting…”);
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
}

void loop(){
unsigned long currentMicros;
int stepsLeft = NBSTEPS;
time = 0;
while(stepsLeft > 0){
currentMicros = micros();
if(currentMicros – lastTime >= STEPTIME){
stepper();
time += micros() – lastTime;
lastTime = micros();
stepsLeft–;
}
}
Serial.println(time);
Serial.println(„Wait…!”);
delay(2000);
Clockwise = !Clockwise;
stepsLeft = NBSTEPS;
}

void writeStep(int outArray[4]){
for (int i=0;i < 4; i++){
digitalWrite(IN1 + i, outArray[i]);
}
}

void stepper(){
if ((Step >= 0) && (Step < 8)){
writeStep(stepsMatrix[Step]);
}else{
writeStep(arrayDefault);
}
setDirection();
}

void setDirection(){
(Clockwise) ? (Step++) : (Step–);

if(Step>7){
Step=0;
}else if(Step<0){
Step=7;
}
}

 

Succes !

Colectivul Roboromania

Publicat la data

Arduino Rotary Encoder Roboromania Tutorial pentru începători

Arduino Rotary Encoder Roboromania Tutorial pentru începători

default_comp26

O schema simpla :

Afișează pe serial poziția encoderului

rotary-encoder-arduino-tutorial-roboromania-wiring rotary-encoder-arduino-tutorial-roboromania

Și un cod simplu :

// Arduino Rotary Encoder Tutorial
int encoderCLK = 2;
int encoderDT = 4;

volatile int lastEncoded = 0;
volatile long encoderValue = 0;

long lastencoderValue = 0;

int lastMSB = 0;
int lastLSB = 0;

void setup() {
Serial.begin (9600);

pinMode(encoderCLK, INPUT);
pinMode(encoderDT, INPUT);

digitalWrite(encoderCLK, HIGH); //turn pullup resistor on
digitalWrite(encoderDT, HIGH); //turn pullup resistor on

//call updateEncoder() when any high/low changed seen
//on interrupt 0 (pin 2), or interrupt 1 (pin 3)
attachInterrupt(0, updateEncoder, CHANGE);
attachInterrupt(1, updateEncoder, CHANGE);
}

void loop(){
Serial.println(encoderValue);
delay(10);
}

void updateEncoder(){
int MSB = digitalRead(encoderCLK); //MSB = most significant bit
int LSB = digitalRead(encoderDT); //LSB = least significant bit

int encoded = (MSB << 1) |LSB; //converting the 2 pin value to single number
int sum = (lastEncoded << 2) | encoded; //adding it to the previous encoded value

if(sum == 0b1101 || sum == 0b0100 || sum == 0b0010 || sum == 0b1011) encoderValue ++;
if(sum == 0b1110 || sum == 0b0111 || sum == 0b0001 || sum == 0b1000) encoderValue –;

lastEncoded = encoded; //store this value for next time
}

// Arduino Rotary Encoder Tutorial

Pentru butonul SW folosim exemplu clasic de la Arduino :

// Button
// set pin numbers:
const int buttonPin = 5; // the number of the pushbutton pin
const int ledPin = 13; // the number of the LED pin

// variables will change:
int buttonState = 0; // variable for reading the pushbutton status

void setup() {
// initialize the LED pin as an output:
pinMode(ledPin, OUTPUT);
// initialize the pushbutton pin as an input:
pinMode(buttonPin, INPUT);
}

void loop() {
// read the state of the pushbutton value:
buttonState = digitalRead(buttonPin);

// check if the pushbutton is pressed.
// if it is, the buttonState is HIGH:
if (buttonState == HIGH) {
// turn LED on:
digitalWrite(ledPin, HIGH);
} else {
// turn LED off:
digitalWrite(ledPin, LOW);
}
}
// Button

Succes !

Colectivul Roboromania

Publicat la data

Proiect Lacăt cu Amprentă digitală cu Arduino si Senzor Fingerprint

Proiect Lacăt cu Amprentă digitală cu Arduino si Senzor Fingerprint

Avem nevoie de :

Placă de dezvoltare UNO R3 (sau oricare)
Uno-roboromania-fata
Senzor Fingerprint (de amprentă - optic)
http://roboromania.ro/wp-content/uploads/2016/09/fingerprint-sensor-pinout-roboromania.jpg
LCD 2×16 caractere LED Display cu interfață i2C
2x16yellow-roboromania
Servo Motor 9G Micro (pin9)
SG90-9G-Micro-Servo-Motor-avr-roboromania-set

Leduri : rosu(pin7) și verde(pin8) și rezistori de 1k în serie pe fiecare
Breadboard mic pentru montaj

Cum facem :
După realizarea cablării
1

Upload libraria Fingerprint aici
Pasul 1
ÎNROLAREA AMPRENTELOR
în exemple găsiți :
"enroll"
5
După upload senzorul clipește și urmați indicațiile din Serial Monitor
Pasul 2
Upload cod "Lacăt cu Amprentă digitală" aici
Pe LCD apare în setup 2 secunde "Roboromania"
Apoi "Scanare amprenta"
2
Dacă amprenta e corectă atunci se aprinde verde și servo execută rotirea de 90 grade pentru "deschis" stă 5 secunde și revine pe "închis"
4
Dacă amprenta e incorectă atunci se aprinde rosu 
3


La cerere : ajutor la montaj și upload codul
Colectivul magazinului roboromania.ro vă urează succes !  După realizare va rugam sa trimiteți poze și sugestii.
Creative Commons License
 Proiect Lacăt cu Amprentă digitală de Popescu Viorel licențiat sub Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License.
Publicat la data

LED ON/OFF comandat la bătaie din palme „CLAPS” – pentru începători

LED ON/OFF comandat la bătaie din palme „CLAPS”

Puteți să aprindeți/stingeți lumina din camera la o bătaie din palme

Avem nevoie de :

Placă de dezvoltare UNO R3 (sau oricare)
Uno-roboromania-fata

Modulul senzor de detectare a sunetului

Modulul-senzor-detectare-sunet-roboromania
Ca LED îl vom folosi pe cel de la placa de dezvoltare : Led13 (sau oricare LED montat în "pin" cu o rezistentă în serie de 1k))

Codul : CLAPS
//-------------------------------
const int sound_pin = 2;
const int led_pin = 13;
const unsigned long min_time_distance_between_signals = 100UL;
const unsigned long max_time_distance_between_signals = 500UL;

const unsigned long delay_after_triggered = 2000UL;

bool led_state;
unsigned long last_time_since_clap;
unsigned long last_action_time;

void setup ()
{
 Serial.begin(9600); 
 pinMode (sound_pin, INPUT) ; 
 pinMode(led_pin, OUTPUT);
 digitalWrite(led_pin, LOW);

 led_state = false;
 last_action_time = 0;
 last_time_since_clap = 0;
}

void update_state(bool new_state, unsigned long current_time) {
 led_state = new_state;
 last_action_time = current_time;
 digitalWrite(led_pin, led_state ? HIGH : LOW);
 Serial.print("state = ");
 Serial.println(led_state);
}

void loop () {
 int sound_detected_state = digitalRead(sound_pin);

 unsigned long current_time = millis();
 unsigned long delta_time_since_last_action = current_time - last_action_time;

 if ((delta_time_since_last_action > delay_after_triggered) && ( sound_detected_state == HIGH )) {
 if (!led_state) {
 unsigned long current_delta_time_between_signals = current_time - last_time_since_clap;
 if (current_delta_time_between_signals > max_time_distance_between_signals) {
 last_time_since_clap = current_time;
 } else if (current_delta_time_between_signals > min_time_distance_between_signals) {
 update_state(true, current_time);
 }
 } else {
 update_state(false, current_time);
 }
 }
}
//-------------------------------

Succes !

Colectivul Roboromania