This is an old revision of the document!
Proiectul Feline Feeder este un dispozitiv automatizat care asigură hrănirea regulată a pisicilor tale. Acesta stochează o cantitate generoasă de hrană într-un recipient și eliberează porțiuni controlate în mod automat, la orele programate. Scopul principal al lui este acela de a facilita și de a face mai convenabilă hrănirea pisicilor, în special pentru proprietarii ocupați sau cei care călătoresc des.
Ideea a pornit de la pisicuța mea Luna, care, de multe ori, a rămas fără mâncare atunci când eu eram plecată la facultate sau în alte locuri pentru o perioadă mai lungă de timp.
Feline Feeder este util atât pentru noi, cât și pentru animăluțele noastre de companie. Pentru proprietari, acest dispozitiv oferă liniștea că pisicile lor sunt hrănite regulat chiar și atunci când sunt ocupați sau plecați de acasă. De asemenea, ne oferă satisfacția că putem contribui la sănătatea și bunăstarea lor.
Dispozitivul constă într-un recipient mai mare în care poți stoca hrana preferată a pisicii tale. Folosind un servomotor, Feline Feeder eliberează automat porțiuni din mâncare la orele programate de tine. Setezi cu ușurință ora de hrănire folosind o tastatură matriceală, iar informațiile sunt afișate clar pe un ecran LCD.
Piese:
Librării și surse 3rd-party
Inițializarea motoarelor:
Se seteaza pinii driverului pe output si se ataseaza intreruperea la un pin de directie (odata cu modificarea lui se va aprinde ulterior un led)
void setup() { pinMode(motorSpeedPinA, OUTPUT); pinMode(motorDirection1A, OUTPUT); pinMode(motorDirection2A, OUTPUT); pinMode(motorSpeedPinB, OUTPUT); pinMode(motorDirection1B, OUTPUT); pinMode(motorDirection2B, OUTPUT); analogWrite(motorSpeedPinA, 0); digitalWrite(motorDirection1A, HIGH); digitalWrite(motorDirection2A, LOW); analogWrite(motorSpeedPinB, 0); digitalWrite(motorDirection1B, LOW); digitalWrite(motorDirection2B, HIGH); attachInterrupt(digitalPinToInterrupt(motorDirection2A), handlePinChange, CHANGE); Serial.begin(9600); }
Controlul mișcării:
Am facut functiile de moveForward si moveBackward, fara turnLeft si turnRight pentru ca abordarea cu un indice de corectie ma restrange la a avea 2 parametri, deci pentru left si right unul din parametri va fi 0.
void moveForward(int leftSpeed, int rightSpeed) { digitalWrite(motorDirection1A, HIGH); digitalWrite(motorDirection2A, LOW); digitalWrite(motorDirection1B, LOW); digitalWrite(motorDirection2B, HIGH); analogWrite(motorSpeedPinA, leftSpeed); analogWrite(motorSpeedPinB, rightSpeed); } void moveBackward() { digitalWrite(motorDirection1A, LOW); digitalWrite(motorDirection2A, HIGH); digitalWrite(motorDirection1B, HIGH); digitalWrite(motorDirection2B, LOW); analogWrite(motorSpeedPinA, baseSpeed); analogWrite(motorSpeedPinB, baseSpeed); } void stopMotors() { analogWrite(motorSpeedPinA, 0); analogWrite(motorSpeedPinB, 0); }
Gestionarea întreruperii:
Functia seteaza un flag, o variabila volatile bool care se va verifica constant in functia de loop.
void handlePinChange() { pin2Changed = true; }
Fişierele se încarcă pe wiki folosind facilitatea Add Images or other files. Namespace-ul în care se încarcă fişierele este de tipul :pm:prj20??:c? sau :pm:prj20??:c?:nume_student (dacă este cazul). Exemplu: Dumitru Alin, 331CC → :pm:prj2009:cc:dumitru_alin.