Dozator automat pentru hrănit peștii (2) Proiect finalizat - Programarea controller-ului Arduino Nano Every, configurarea Real Time Clock-ului și asamblarea completă

Dozator automat pentru hrănit peștii cu bobițe din JBL click - Programarea controller-ului Arduino Nano Every, configurarea Real Time Clock-ului (RTC) și asamblarea completă

Am reușit să termin miniaparatul care hrănește peștii. Microcontrollerul Arduino Nano every l-am programat să pornească în fiecare dimineață la ora 7:30, dar din păcate nu i-am atașat nici un buton de control sau pentru setarea orei de pornire, practic ora de pornire este "hard-coded". Dispozitivul a devenit mai nou și un fel de ceas deșteptător pentru că are un zgomot destul de strident din cauza mișcării servomotorului. Una peste alta eu sunt mulțumit pentru că dispozitivul creeat de mine de la zero face treabă bună și mi-a luat o grijă de pe cap. Principul de funcționare este destul de simplă, doar se apasă butonul dispozitivului JBL Click, care elibereaza o doză de bobițe.Apăsarea se face folosind un dispozitiv de tip roată dințată-cremalieră. Acest dispozitiv se potriveste pentru toate recipientele cu click JBL.

Documentatie proiect:

În total prețul acestui proiect a fost cam de 92 de lei, plus încă vreo 8 lei plasticul folosit la imprimarea pieselor. Deci în total ar costa vreo 100 de lei.

Componentele și asamblarea:

Sincer a trebuit să mă chinui un pic să înghesui componentele în cutiuță. 
Dozator automat pentru hrănit peștii - Programarea controller-ului Arduino Nano Every, configurarea Real Time Clock-ului și asamblarea completă

Din păcate cablurile sunt un pic cam înghesuite și dezordonate (vezi în pozele de mai jos), din cauza faptului că am păstrat cablurile componentelor la dimesiunea initială.

I-am mai făcut un fel de pâlnie pentru a curge bobițele direct in gaura de la acvariu.
Poziționarea dispozitivului pe capacul acvariului.



Dispozitulul roată dințată-cremalieră practic actionează butonul recipientului JBL Click , și care mai departe eliberează o doză de bobițe.


Toate componentele pe care le-am printat le-am conceput in Tinkercad și le găsiți aici.



Schema electronica/sistem:

  • Pinul Arduino A4 l-am legat pinul SDA al RTC-ului 
  • Pinul Arduino A5 l-am legat pinul SDL al RTC-ului 
  • Pinul Arduino GND l-am legat pinul GND al RTC-ului 
  • Pinul Arduino 5V l-am legat pinul VCC al RTC-ului 
  • Pinul Arduino D3 l-am legat pinul de semnal al servomotorului
  • Pinul Arduino GND l-am legat pinul GND al servomotorului
  • Pinul Arduino 5V l-am legat pinul VCC al servomotorului



Source code:
/*
Florin Simedru
Complete project details at https://automatic-house.blogspot.com
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files.
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
*/
// Date and time functions using a PCF8523 RTC connected via I2C and Wire lib
#include "RTClib.h"
#include "Servo.h"
#include "stdint.h"
#include "time.h"
#include "stdio.h"
#define PIN_SERVO 3
RTC_PCF8523 rtc;
Servo myservo; // create servo object to control a servo
int pos = 0; // variable to store the servo position
int pos_read = 0; // variable to store the servo position
char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
int alarm = 0;
void setup () {
while (!Serial) {
delay(1); // for Leonardo/Micro/Zero
}
Serial.begin(57600);
if (! rtc.begin()) {
Serial.println("Couldn't find RTC");
while (1);
}
if (! rtc.initialized()) {
Serial.println("RTC is NOT running!");
// following line sets the RTC to the date & time this sketch was compiled
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
// This line sets the RTC with an explicit date & time, for example to set
// January 21, 2014 at 3am you would call:
//rtc.adjust(DateTime(2020, 4, 17, 10, 38, 0));
}
myservo.attach(PIN_SERVO); //the pin for the servoa control
if(myservo.attached() == 1)
{
Serial.println("Servo motor was attched .");
Servo_parking();
}
}
void loop () {
DateTime now = rtc.now();
DateTime future = rtc.now();
Serial.print(now.year(), DEC);
Serial.print('/');
Serial.print(now.month(), DEC);
Serial.print('/');
Serial.print(now.day(), DEC);
Serial.print(" (");
Serial.print(daysOfTheWeek[now.dayOfTheWeek()]);
Serial.print(") ");
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.println();
Serial.print(" now + 7d + 12h + 30m + 6s: ");
Serial.print(future.year(), DEC);
Serial.print('/');
Serial.print(future.month(), DEC);
Serial.print('/');
Serial.print(future.day(), DEC);
Serial.print(' ');
Serial.print(future.hour(), DEC);
Serial.print(':');
Serial.print(future.minute(), DEC);
Serial.print(':');
Serial.print(future.second(), DEC);
Serial.println();
Serial.println();
if((now.hour()== 7) && (now.minute()==30)&& ((now.second()== 10)||(now.second()== 20)||(now.second()== 30)))
{
alarm = 1;
if(myservo.attached() == 0)
{
myservo.attach(PIN_SERVO);
}
}
else
{
alarm = 0;
if( myservo.attached() == 1)
{
myservo.detach();
Serial.println("Servo motor was detached .");
}
}
if(alarm ==1)
{
Servo_click();
pos_read= myservo.read();
Serial.println(pos_read);
}
Serial.print(" Alarma: ");
Serial.print(alarm, DEC);
Serial.println();
delay(1000);
}
void Servo_click()
{
for (pos = 0; pos <= 90; pos += 1)
{ // goes from 0 degrees to 90 degrees
// in steps of 1 degree
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(10); // waits 15ms for the servo to reach the position
}
pos_read= myservo.read();
Serial.println(pos_read);
for (pos = 90; pos >= 0; pos -= 1)
{ // goes from 90 degrees to 0 degrees
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(10); // waits 15ms for the servo to reach the position
}
}
void Servo_parking()
{
pos_read= myservo.read();
Serial.println(pos_read);
for (pos = 90; pos >= 0; pos -= 1)
{ // goes from 90 degrees to 0 degrees
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(10); // waits 15ms for the servo to reach the position
}
}



Pentru cei mai pretențioși , care doresc un dozator profi puteti intra pe emag pentru a alege un asemenea dispozitiv - Dozatoare profesionale pentru hranit peștii.


Voi ce zice-ți, ce alte feature-uri ar mai trebui să-i adaug?

O zi bună tuturor !


Etichete

Afișați mai multe

Arhiva

Afișați mai multe