Sunteți pe pagina 1din 11

Cirlan Ana-Maria

142IA

Tema 2 – RI

1. Mood Cue

Servomotorul este un tip special de motor care poate ajunge într-o anumită poziție și
rămâne acolo. Acest proiect utilizează, de asemenea, un potențiometru, conectat la o intrare
analogică, pentru a controla poziția servo.

Pentru a utiliza biblioteca servo, va trebui mai întâi să o importam. Acest lucru face ca adăugirile din
bibliotecă să fie disponibile pentru schița.

În funcția setup(), va trebui să-i spui lui Arduino la ce pin este atașat servo-ul tău.

void setup() {
myServo.attach(9); //tells board which pin the servo is on
Cirlan Ana-Maria
142IA

Includem o conexiune serială, astfel încât să putem urmări valorile de pe potențiometru și să


vedem cum se potrivesc cu unghiurile de pe servomotor.

Serial.begin(9600);
} //end of setup()

În monitorul serial, valoarea asociată cu intrarea potențiometrului va fi cuprinsă între 0 și


1023, iar textul va arăta astfel (de exemplu): potVal: 500

Pentru a crea o valoare utilizabilă pentru servomotor de la intrarea analogică, cel mai simplu
este să folosiți o funcție numită map(). Această funcție la îndemână scalează numerele pentru
dumneavoastră! În acest caz, ea va traduce valorile de intrare ale potențiometrului (0-1023) în valori
ale unghiului motorului (0-179 grade).

2. PINWHEEL

În acest proiect, vom porni un motor cu ajutorul unui buton. Motoarele necesită mai mult
curent decât pot furniza pinii de ieșire ai lui Arduino. Motoarele își pot genera propriul curent
printr-un proces numit inducție, care vă poate deteriora circuitul dacă nu îl planificați. Cu toate
acestea, motoarele fac posibilă mișcarea lucrurilor fizice, ceea ce face ca proiectele dvs. să fie
mult mai interesante. În acest proiect, folosim tranzistori și diode pentru a rula și a proteja
circuitul motorului.
Cirlan Ana-Maria
142IA

Am setat câteva constante pentru pinii comutatorului și ai motorului și o variabilă numită


switchState pentru a păstra valoarea comutatorului. switchState are o valoare inițială de 0.

const int switchPin = 2;


const int motorPin = 9;
int switchState = 0;

Dacă întrerupătorul este apăsat, rotiți motorPin HIGH. Când este HIGH, poarta tranzistorului
se va activa, completând circuitul motorului. Dacă butonul nu este apăsat, rotiți pinul LOW. Când
este LOW, motorul nu se va roti.

void loop() {
switchState = digitalRead(switchPin);
if (switchState == HIGH) {
digitalWrite(motorPin, HIGH);
} else {
digitalWrite(motorPin, LOW);
}
} //end of loop()

Codul final:
Cirlan Ana-Maria
142IA

3. Zoetrope

Zoetroapele creează iluzia de mișcare dintr-un grup de imagini statice care prezintă mici
modificări. Acestea sunt de obicei cilindri cu fante tăiate în lateral. Atunci când cilindrul se rotește și
priviți prin fante, ochii dumneavoastră percep imaginile statice de pe partea cealaltă a peretelui ca
fiind animate. Fantele ajută ca imaginile să nu devină o mare neclaritate. Inițial, aceste noutăți erau
învârtite manual sau cu ajutorul unui mecanism cu manivelă.

În acest proiect, vom construi propriul zoetrop care animă o plantă carnivoră. Vom alimenta
mișcarea cu un motor. Pentru a face acest sistem și mai avansat, vom adăuga un comutator care ne
permite să controlam direcția, un altul pentru a-l opri și porni și un potențiometru pentru a controla
viteza.
Cirlan Ana-Maria
142IA

Cream constante pentru pinii de output si input.

//H-bridge control and enable


const int controlPin1 = 2;
const int controlPin2 = 3;
const int enablePin = 9;

//button pins
const int directionSwitchStatePin = 4;
const int onOffSwitchStatePin = 5;

//potentiometer pin
const int potPin = A0;

În continuare, cream variabile pentru a păstra valorile din intrările dumneavoastră. Vom face
detectarea schimbării de stare pentru ambele butoane (adică comutatoare), comparând starea de la
o buclă la alta.

int onOffSwitchState = 0;
int previousOnOffSwitchState = 0;
int directionSwitchState = 0;
int previousDirectionSwitchState = 0;

Variabila motorEnabled urmărește dacă motorul este activat sau nu, motorSpeed
monitorizează rata de rotație, iar motorDirection urmărește direcția în care se învârte motorul.

În funcția setup(), setam direcția fiecărui pin de intrare și ieșire. De asemenea, setam starea
inițială a pivotului enablePin la LOW.
Cirlan Ana-Maria
142IA

void setup(){
pinMode(directionSwitchStatePin, INPUT);
pinMode(onOffSwitchStatePin, INPUT);
pinMode(controlPin1, OUTPUT);
pinMode(controlPin2, OUTPUT);
pinMode(enablePin, OUTPUT); //turn the motor off, initially
digitalWrite(enablePin, LOW);
}

Variabila motorDirection determină direcția în care se rotește motorul. Pentru a seta


direcția, setam pinii de control cu unul HIGH și celălalt LOW.

Dacă variabila motorEnabled este 1, setam viteza motorului utilizând analogWrite() pentru a
activa pinul de activare și a seta viteza cu PWM.

Dacă motorEnabled este 0, atunci opriți motorul prin setarea valorii analogWrite la 0.

4. Crystal Ball

Bilele de cristal pot ajuta la "prezicerea" viitorului. În acest proiect, punem o întrebare unui glob
de cristal digital și îl întoarcem pentru a dezvălui răspunsul pe un mic ecran LCD. Răspunsurile vor fi
prestabilite (dintr-o listă generată) dar putem scrie orice dorim. Vom folosi Arduino pentru a alege
dintr-un total de 8 răspunsuri. Comutatorul de înclinare din kitul tău va ajuta la replicarea mișcării de
scuturare a mingii pentru răspunsuri.

Afișajul cu cristale lichide (LCD) poate fi utilizat pentru a afișa caractere alfanumerice. Cel din kit
are 16 coloane și 2 rânduri, pentru un total de 32 de caractere.
Cirlan Ana-Maria
142IA

Prima data vom importa libraria LiquidCrytal

#include

LiquidCrystal lcd(12,11,5,4,3,2);

Cream o constantă pentru a defini pinul comutatorului de înclinare (switchPin) și o variabilă


pentru starea curentă a comutatorului. Vom crea, de asemenea, o variabilă pentru starea anterioară
a comutatorului și încă o variabilă pentru a alege răspunsul pe care îl va afișa ecranul.

Funcția lcd.print() scrie pe ecranul LCD. Am scris cuvintele "Intreaba" pe linia de sus a
ecranului. Cursorul se află automat la începutul liniei de sus. Pentru a imprima "Globul de cristal" pe
următoarea linie, va trebui să mutam cursorul din colțul din stânga sus (0,0) în celula de mai jos (0,1).
Folosiți funcția lcd.setCursor() pentru a ne deplasa la coordonatele din dreapta.

Codul final:
Cirlan Ana-Maria
142IA

5. Knock Lock

Un buzzer piezoelectric creează de obicei vibrații, dar de data aceasta îl vom folosi ca intrare
pentru a detecta de câte ori bate cineva la ușa.
Cirlan Ana-Maria
142IA

Cream constante pentru a denumi intrările și ieșirile. Aceasta include senzorul piezoelectric
de ciocănit, butonul de blocare și LED-urile.

Cream variabile pentru a reține valorile de la comutator și piezo. Aceste variabile folosesc
ambele tipul de date "integer".

Configuram niște constante pe care le folosim ca praguri pentru nivelurile maxime și minime.
Aceste numere se încadrează bine în scala 0-1023 pe care funcția analogRead() o va returna pentru
pinul A0.

Variabila "locked" va permite să știm dacă blocajul este activat sau nu. Un boolean este un
tip de date care poate fi doar adevărat (1) sau fals (0).

Variabila globală numberOfKnocks (număr de lovituri) va conține numărul de lovituri valide


pe care le aveți. Dați-i inițial o valoare de 0.

Următoarea declarație verifică dacă avem mai puțin de trei bătăi valide și dacă există o
vibrație pe senzor (adică dacă bateți în prezent). Dacă ambele sunt adevărate, programul va face
următoarele: verifică dacă această bătaie este validă și mărește variabila numberOfKnocks.

Codul final :

#include <Servo.h>
Servo myServo;
const int piezo = A0;
const int switchPin = 2;
const int yellowLed = 3;
const int greenLed = 4;
const int redLed = 5;
Cirlan Ana-Maria
142IA

int knockVal;
int switchVal;
const int quietKnock = 10;
const int loudKnock = 1053;

boolean locked = false;


int numberOfKnocks = 0;

void setup(){
myServo.attach(9);
pinMode(yellowLed, OUTPUT);
pinMode(redLed, OUTPUT);
pinMode(greenLed, OUTPUT);
pinMode(switchPin, INPUT);
Serial.begin(9600);

digitalWrite(greenLed, HIGH);
myServo.write(0);
Serial.println("Cutia este deschisa!");
} //end of setup()

void loop(){
if(locked == false){
switchVal = digitalRead(switchPin);
if(switchVal == HIGH){
locked = true;
digitalWrite(greenLed, LOW);
digitalWrite(redLed, HIGH);
myServo.write(90);
Serial.println("Cutia este inchisa!");
delay(1000);
} //end of nested if()
} //end of outer if()

if(locked == true){
knockVal = analogRead(piezo);
if(numberOfKnocks < 3 && knockVal > 0){
if(checkForKnock(knockVal) == true){
numberOfKnocks ++;
}
//subtract knocks made so far from three
Serial.print(3-numberOfKnocks);
Serial.print(" more knocks to go");
}

if(numberOfKnocks >=3){
Cirlan Ana-Maria
142IA

locked = false;
myServo.write(0);
delay(20);
digitalWrite(greenLed, HIGH);
digitalWrite(redLed, LOW);
Serial.println("Cutia este deschisa!");
} //end of if(numberOfKnocks..)
} //end of if(locked==true)
} //end of loop

boolean checkForKnock(int value){


if(value > quietKnock && value < loudKnock){
digitalWrite(yellowLed, HIGH);
delay(50);
digitalWrite(yellowLed, LOW);
Serial.print("Valid");
Serial.println(value);
return true;
}

else{
Serial.print("Fals ");
Serial.println(value);
return false;
}
}

S-ar putea să vă placă și