Documente Academic
Documente Profesional
Documente Cultură
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
Serial.begin(9600);
} //end of setup()
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
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
//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);
}
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
#include
LiquidCrystal lcd(12,11,5,4,3,2);
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).
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;
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
else{
Serial.print("Fals ");
Serial.println(value);
return false;
}
}