Table of Contents

Arduino Smart Flower

Introducere

Elementul central al proiectului este floarea pe care o folosesc. Aceasta se roteste in functie de intensitatea maxima a luminii.

Am ales acest proiect deoarece iubesc foarte mult natura si mediul inconjurator si imi place foarte mult sa am grija de plantele mele si sa le ofer tot ce au nevoie. Astfel, ele vor putea beneficia mereu de lumina care este necesara dezvoltarii lor armonioase, rotindu-se in functie de intensitatea de care au nevoie.

Prin alegerea acestei teme, cu siguranta imi voi putea valorifica cunostintele dobandite in cadrul laboratoarelor intr-un mod placut si util.

Descriere generală

Pentru relizarea acestui proiect folosesc un motor stepper care face posibil ca planta sa se roteasca, cat si un senzor magnetic prin care detectez cand s-a facut o rotatie completa. De asemenea, pentru detectia intensitatii luminii folosesc si senzori de lumina cu fotorezistente. Pentru atasarea si sustinerea corecta a ghiveciului cu planta, ma ajut de un cuplaj, cu ajutorul caruia prind axul motor de tava rotativa pe care se va afla floarea pe care o folosesc.

Pentru a putea roti floarea in functie de intensitatea luminii folosesc doi senzori de lumina, unul care se afla pe partea dreapta si unul care se afla pe partea stanga. Ghiveciul cu floarea se va roti in functie de care dintre cei doi senzori primeste lumina. In momentul in care se va ajunge la o rotatie completa, senzorul magnetic va detecta acest lucru si se va opri pentru cateva secunde.

Diagrama bloc corespunzatoare proiectului:

Hardware Design

Pentru a realiza acest proiect vom avea nevoie de:

Componente Numar Descriere generală Poza
Placa de dezvoltare Uno R3 compatibil Arduino 1
Stepper Motor pas cu pas 5V DC 28BYJ-48 cu reductie + driver 1 Am folosit motorul stepper pentru a reusi sa rotesc ghiveciul cu florea atat pe partea stanga, cat si pe partea dreapta.
Modul senzor lumina 2 Pentru a roti ghiveciul stanga-dreapta am folosit aceste module de lumina, unul folosindu-l pentru partea dreapta a ghiveciului si unul pentru partea stanga.
Senzor magnetic MC-38 USA 1 Acesta detecteaza momentul in care este realizata o rotatie completa si atunci se va opri pentru cateva secunde si va porni din nou in functie de directia data.
Cuplaj flexibil(5mm) 1 Cuplajul este atasat de motorul stepper si cu ajutorul lui fixez foarte bine ghiveciul cu floarea realizat.
Suruburi M4 1 Suruburile sunt folosite tot pentru sustinerea ghiveciului.


Pe langa aceste componente a fost nevoie si sa realizez suportul pentru motorul stepper pentru ca acesta sa stea fix(suport pe care l-am realizat din lemn) si am folosit suruburi pentru a prinde motorul de suport. Am mai folosit, de asemenea, suruburi pentru a prinde ghiveciul realizat de mine de cuplaj si a sta fix pentru realizarea proiectului.

Schema cablaj:

In final, proiectul arata in felul urmator:


Software Design

Codul de implementare este:

#include <Stepper.h>
const int stepsPerRevolution = 200;

// initialize the stepper library on pins 9 through 12:
Stepper myStepperRight(stepsPerRevolution, 9, 11, 10, 12);
Stepper myStepperLeft(stepsPerRevolution, 9, 10, 11, 12);
int time = 0;
int sensorState = 0;
int lightRight = 0;
int lightLeft = 0;
void setup() {

  //----------------SENZORII DE LUMINA----------
  pinMode(8, INPUT);
  pinMode(7, INPUT);

  //----------------SEZNSORUL MAGNETIC----------
  pinMode(2, INPUT_PULLUP);
  Serial.begin(9600);
}

// 1 cand sunt departate
// 0 cand sunt apropiate
void loop() {

  //---------------SEZNORII DE LUMINA-----------
  lightLeft = digitalRead(8);
  lightRight = digitalRead(7);

  //---------------SENZORUL MAGNETIC------------
  sensorState = digitalRead(2);

  if (sensorState == 0 && time < 400) {
      delay(25);
  }

  time++;

  if (time > 400 && time < 800) {
    sensorState = 1;
  }

  if (time > 800) {
    time = 0;
  }

  //conditie a motorului in functie de fiecare senzor de lumina
  //senzorul stang sau cel drept

  if (lightLeft == LOW && sensorState) {
      int motorSpeed = map(280, 0, 1023, 0, 100);
      myStepperLeft.setSpeed(motorSpeed);
      // step 1/100 of a revolution:
      myStepperLeft.step(stepsPerRevolution / 100);
  }

  if (lightRight == LOW && sensorState) {
      int motorSpeed = map(400, 0, 1023, 0, 100);
      myStepperRight.setSpeed(motorSpeed);
      // step 1/100 of a revolution:
      myStepperRight.step(stepsPerRevolution / 100);
      sensorState = digitalRead(2);
  }
}

Am folosit libraria Servo.h pentru a putea controla stepper-ul.

Am ales sa folosesc drept mediu de dezvoltare Arduino IDE.


Rezultate Obținute

Functionalitatea proiectului poate fi vazuta aici: Proiect PM Florina Constandache.
La final a fost implementat tot ceea ce mi-am propus.

Concluzii

Proiectul a fost implementat pe etape, astfel incat sa ma asigur ca fiecare componenta functioneaza corect. Facand asta, procesul de debugging a fost destul de simplu de realizat. Mi-a placut faptul ca am avut de realizat un proiect de acest fel, in care sa putem folosi si partea hardware, pentru ca nu am facut niciodata ceva asemanator si a fost ceva foarte interesant pentru mine.

Download

Link pagina: https://ocw.cs.pub.ro/courses/pm/prj2021/apredescu/arduinosmartflower
Link documentatie: https://ocw.cs.pub.ro/courses/pm/prj2021/apredescu/arduinosmartflower?do=export_pdf
Arhiva cod: Arhiva proiect

Jurnal

25 Aprilie → alegere tema proiect
6 Mai → discutie pe baza pieselor
7 Mai → comandarea pieselor
10 Mai → sosirea pieselor
13 Mai - 22 Mai → realizarea proiectului(prima data am facut suportul pentru stepper, apoi partea hardware si la final am combinat partea hardware cu cea software)

Bibliografie/Resurse

https://www.youtube.com/watch?v=cPz5tE2EHR4
https://www.youtube.com/watch?v=avrdDZD7qEQ