0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

自动宠物喂食机的制作

454398 来源:wv 2019-08-31 09:27 次阅读

步骤1:需要硬件

- 1x Arduino Mega 2560

- 1x步进电机12V 28BYJ-48

- 1x步进电机驱动器ULN2003

- 1x超声波传感器HC-SR04

- 1x时钟模块DS1307

- 1x 0.91“IIC I2C 128x32 SSD1306 SPI OLED显示模块

- 20x线路M/F& 2x线M/M

- 1x面包板

- 1x电池

步骤2:设置

电源= 5V

接地= GND

OLED_MOSI = 9

OLED_CLK = 10

OLED_DC = 11

OLED_CS = 12

OLED_RESET = 13

trigPin = 2

echoPin = 3

RTC SDA = SDA 20

RTC SCL = SCL 21

motorPin1Feed = 22

motorPin2Feed = 24

motorPin3Feed = 26

motorPin4Feed = 28

第3步:3D打印。..。.. 3D打印。..。..以及更多3D打印

您可能已经注意到STL的数量相当多 - 附在这个Instructable上的文件,因此我们的构造非常需要手头有3D打印机。

虽然我们使用了所有的设计来创建这台机器,但是有几个STL文件你可以在技术上没有生活;

“mount-base-pet-feeder.stl” - 取决于你打算如何设置包含布线的机舱,Arduino,步进电机和步进驱动器

“left-mount-adjuster-pet-feeder.stl“ -

”right-mount-adjuster-pet-feeder.stl“ -

”离开-spacer-mount-adjuster-pet-feeder.stl“ -

”right-spacer-mount-adjuster-pet-feeder.stl“ -

”Bowl-v2.stl “ - 如果你不使用我们特制的碗,我们不会抱怨。

“M& M‘s.stl” - 这仅用于在Autodesk Fusion 360中渲染和说明我们的自动PetFeeder。**不能用作宠物的食物。我们对不当使用不承担任何责任**

第4步:让我们添加一些代码

//Basic Embedded Programming 2. Semester Project UCL

//TinyRTC I2C module DS1307

#include ”Wire.h“

#define DS1307_I2C_ADDRESS 0x68

// Convert normal decimal numbers to binary coded decimal

byte decToBcd(byte val)

{

return( (val/10*16) + (val%10) );

}

// Convert binary coded decimal to normal decimal numbers

byte bcdToDec(byte val)

{

return( (val/16*10) + (val%16) );

}

#include

#include

#include

#include

#include

#include

RTC_DS1307 RTC;

//#include DS1307 rtc(SDA, SCL);

//declaring variables for the motor (driver) pins

int motorPin1Feed = 22;

int motorPin2Feed = 24;

int motorPin3Feed = 26;

int motorPin4Feed = 28;

//if(hour 》=

int petFeedMorning;

int petFeedAfternoon;

int petFedMorning;

int petFedAfternoon;

//Declare ultrasonic sensor pins

int trigPin = 2; // Trigger

int echoPin = 3; // Echo

long duration, cm, inches;

// Variables will change:

//Millis()

long previousMillis = 0; // will store last time LED was updated

// the follow variables is a long because the time, measured in miliseconds,

// will quickly become a bigger number than can be stored in an int.

long interval = 1000; // interval at which to blink (milliseconds)

//Disp millis()

//int period = 1000;

unsigned long time_now = 0;

#define STEPSFeed 64

#define STEPSTop 64 //Number of steps per revolution

#define STEPSBottom 64 //Number of steps per revolution

//The pin connections need to be 4 pins connected

// to Motor Driver In1, In2, In3, In4 and then the

// here in the sequence 1-3-2-4 for proper sequencing of 28BYJ48

Stepper small_stepperFeed(STEPSFeed, motorPin1Feed, motorPin3Feed, motorPin2Feed, motorPin4Feed);

Stepper small_stepperTop(STEPSTop, motorPin1Top, motorPin3Top, motorPin2Top, motorPin4Top);

int Steps2TakeFeed;

int Steps2TakeTop;

unsigned long startMillis; //some global variables available anywhere in the program

unsigned long currentMillis;

const unsigned long period = 1000; //the value is a number of milliseconds

#define SCREEN_WIDTH 128 // OLED display width, in pixels

#define SCREEN_HEIGHT 32 // OLED display height, in pixels

// Declaration for SSD1306 display connected using software SPI (default case):

#define OLED_MOSI 9

#define OLED_CLK 10

#define OLED_DC 11

#define OLED_CS 12

#define OLED_RESET 13

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT,

OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);

// ’Logo 2‘, 128x32px

static const unsigned char myBitmap [] PROGMEM = {

0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff,

0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff,

0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff,

0xff, 0xbc, 0x3c, 0xc6, 0x1e, 0x0e, 0x07, 0xfc, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff,

0xff, 0xbc, 0x3c, 0xc6, 0x3c, 0x0f, 0x07, 0xfc, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff,

0xff, 0xb4, 0x7c, 0xc6, 0x78, 0x1f, 0x07, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff,

0xff, 0xbe, 0x7c, 0xc6, 0xf0, 0x1b, 0x87, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff,

0xff, 0xbe, 0x7c, 0xc7, 0xe0, 0x1b, 0x87, 0xf8, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff,

0xff, 0xb6, 0x7c, 0xc7, 0xe0, 0x39, 0x87, 0xf8, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff,

0xff, 0xba, 0x5c, 0xc7, 0xf0, 0x31, 0xc7, 0xf8, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff,

0xff, 0xbb, 0xdc, 0xc7, 0x70, 0x7f, 0xc7, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff,

0xff, 0xbb, 0xdc, 0xc6, 0x38, 0x7f, 0xc7, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff,

0xff, 0xbb, 0xdc, 0xc6, 0x1c, 0x60, 0xe7, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff,

0xff, 0xbb, 0x9c, 0xc6, 0x1e, 0xe0, 0xe7, 0xfc, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff,

0xff, 0xb9, 0x9c, 0xc6, 0x0e, 0xe0, 0x67, 0xfc, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff,

0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff,

0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff,

0xff, 0x80, 0x00, 0x00, 0x00, 0x60, 0xe7, 0xfc, 0xe0, 0xc7, 0x0e, 0x73, 0x83, 0x07, 0xe1, 0xff,

0xff, 0x80, 0x00, 0x00, 0x00, 0x60, 0xc7, 0xfc, 0xf0, 0xc7, 0x0e, 0x73, 0x83, 0x0f, 0xf1, 0xff,

0xff, 0x80, 0x00, 0x00, 0x00, 0x60, 0xe7, 0x00, 0xf8, 0xc7, 0x8e, 0x73, 0xc3, 0x1c, 0x39, 0xff,

0xff, 0x80, 0x00, 0x00, 0x00, 0x60, 0xe7, 0x00, 0xf8, 0xc7, 0x8e, 0x73, 0xe3, 0x38, 0x19, 0xff,

0xff, 0x80, 0x00, 0x00, 0x00, 0x60, 0xc7, 0x00, 0xfc, 0xc6, 0xce, 0x73, 0x63, 0x38, 0x01, 0xff,

0xff, 0x80, 0x00, 0x00, 0x00, 0x7f, 0xe7, 0xfc, 0xec, 0xc6, 0xee, 0x73, 0x73, 0x38, 0x01, 0xff,

0xff, 0x80, 0x00, 0x00, 0x00, 0x7f, 0xe7, 0xfc, 0xee, 0xc6, 0x6e, 0x73, 0x33, 0x38, 0xf9, 0xff,

0xff, 0x80, 0x00, 0x00, 0x00, 0x60, 0xc7, 0x00, 0xe6, 0xc6, 0x7e, 0x73, 0x1b, 0x30, 0xf9, 0xff,

0xff, 0x80, 0x00, 0x00, 0x00, 0x60, 0xc7, 0x00, 0xe3, 0xc6, 0x3e, 0x73, 0x1b, 0x38, 0x19, 0xff,

0xff, 0x80, 0x00, 0x00, 0x00, 0x60, 0xe7, 0x00, 0xe3, 0xc6, 0x3e, 0x73, 0x0f, 0x38, 0x39, 0xff,

0xff, 0xbf, 0xff, 0xff, 0xfc, 0x60, 0xc7, 0xfc, 0xe1, 0xc6, 0x1e, 0x73, 0x0f, 0x1e, 0x79, 0xff,

0xff, 0xbf, 0xff, 0xff, 0xfc, 0x60, 0xc7, 0xfc, 0xe1, 0xc6, 0x0e, 0x73, 0x07, 0x0f, 0xf9, 0xff,

0xff, 0xbf, 0xff, 0xff, 0xfc, 0x60, 0xe7, 0xfe, 0xe0, 0xc6, 0x0e, 0x73, 0x07, 0x07, 0xc9, 0xff,

0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff,

0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff

};

void setup() {

Wire.begin();

//Serial Port begin

Serial.begin(9600);

// Using this to set the initial time:

// DS1307 seconds, minutes, hours, day, date, month, year

// setDS1307time(30,9,19,1,1,4,19);

// 1 = Sunday

//Define inputs and outputs (Ultrasonic sensor)

pinMode(trigPin, OUTPUT);

pinMode(echoPin, INPUT);

startMillis = millis(); //initial start time

// put your setup code here, to run once:

small_stepperFeed.setSpeed(200);

small_stepperTop.setSpeed(200);

// SSD1306_SWITCHCAPVCC = generate display voltage from 3.3V internally

if(!display.begin(SSD1306_SWITCHCAPVCC)) {

Serial.println(F(”SSD1306 allocation failed“));

for(;;); // Don’t proceed, loop forever

}

// Show initial display buffer contents on the screen --

// the library initializes this with an Adafruit splash screen.

display.display();

delay(500); // Pause for 2 seconds

// Clear the buffer

display.clearDisplay();

}

void loop() {

//Over 35 cm display length, time, day and date

if(cm 》= 45) {

ultrasonic();

displayTimeSerial();

displayTimeDisplay();

delay(750);

displayDayDateDisplay();

delay(750);

checkTime();

Serial.print(”Morning: “);

Serial.println(petFeedMorning);

Serial.print(”Afternoon: “);

Serial.println(petFeedAfternoon);

}

//Between 35 cm (under) and 5 cm (over) feed pet, turn motor CW

//else if(cm 《= 20 && hour 》= 7 && hour 《= 13) {

if(cm 《= 45 && cm 》8) {

ultrasonic();

stepMotorFeed();

}

//Under 5 cm display length, time, day and date

else if(cm 《= 8) {

ultrasonic();

displayTimeSerial();

displayTimeDisplay();

if(petFedMorning 《1) {

petFedMorning +1;

Serial.print(petFedMorning);

}

}

}

void setDS1307time(byte second, byte minute, byte hour, byte dayOfWeek, byte

dayOfMonth, byte month, byte year)

{

// sets time and date data to DS1307

Wire.beginTransmission(DS1307_I2C_ADDRESS);

Wire.write(0); // set next input to start at the seconds register

Wire.write(decToBcd(second)); // set seconds

Wire.write(decToBcd(minute)); // set minutes

Wire.write(decToBcd(hour)); // set hours

Wire.write(decToBcd(dayOfWeek)); // set day of week (1=Sunday, 7=Saturday)

Wire.write(decToBcd(dayOfMonth)); // set date (1 to 31)

Wire.write(decToBcd(month)); // set month

Wire.write(decToBcd(year)); // set year (0 to 99)

Wire.endTransmission();

}

void readDS1307time(byte *second,

byte *minute,

byte *hour,

byte *dayOfWeek,

byte *dayOfMonth,

byte *month,

byte *year)

{

Wire.beginTransmission(DS1307_I2C_ADDRESS);

Wire.write(0); // set DS1307 register pointer to 00h

Wire.endTransmission();

Wire.requestFrom(DS1307_I2C_ADDRESS, 7);

// request seven bytes of data from DS1307 starting from register 00h

*second = bcdToDec(Wire.read() & 0x7f);

*minute = bcdToDec(Wire.read());

*hour = bcdToDec(Wire.read() & 0x3f);

*dayOfWeek = bcdToDec(Wire.read());

*dayOfMonth = bcdToDec(Wire.read());

*month = bcdToDec(Wire.read());

*year = bcdToDec(Wire.read());

}

void checkTime() {

byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;

// retrieve data from DS1307

readDS1307time(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month,

&year);

if(hour 》= 6 && hour 《= 11) {

petFeedMorning = 1;

}

else if (hour 》= 5 && hour 《= 13) {

petFeedMorning = 0;

}

if(hour 》= 17 && hour 《= 21) {

petFeedAfternoon = 1;

}

else if(hour 《= 16 && hour 》= 18) {

petFeedAfternoon = 0;

}

}

void displayTimeSerial()

{

byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;

// retrieve data from DS1307

readDS1307time(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month,

&year);

//Current function prints this on the serial monitor

Serial.print(hour, DEC);

// convert the byte variable to a decimal number when displayed

Serial.print(”:“);

if (minute《10)

{

Serial.print(”0“);

}

Serial.print(minute, DEC);

Serial.print(”:“);

if (second《10)

{

Serial.print(”0“);

}

//Print seconds on serial monitor

Serial.print(second, DEC);

Serial.print(” “);

//Print numerical day of the month on serial monitor

Serial.print(dayOfMonth, DEC);

Serial.print(”/“);

//Print month on serial monitor

Serial.print(month, DEC);

Serial.print(”/“);

//Print year on serial monitor

Serial.print(year, DEC);

Serial.print(” Day of week: “);

//Determine specific day of the week

switch(dayOfWeek){

case 1:

Serial.println(”Sunday“);

break;

case 2:

Serial.println(”Monday“);

break;

case 3:

Serial.println(”Tuesday“);

break;

case 4:

Serial.println(”Wednesday“);

break;

case 5:

Serial.println(”Thursday“);

break;

case 6:

Serial.println(”Friday“);

break;

case 7:

Serial.println(”Saturday“);

break;

}

}

void displayTimeDisplay()

{

byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;

// retrieve data from DS1307

readDS1307time(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month,

&year);

//Current function shows this on the OLED display

//Display

//TODO Millis

/*

currentMillis = millis(); //get the current ”time“ (actually the number of milliseconds since the program started)

if (currentMillis - startMillis 》= period) //test whether the period has elapsed

{

display.clearDisplay();

display.display();

display.setCursor(0,0);

display.setTextSize(2); // Draw 2X-scale text

display.setTextColor(WHITE);

display.print(cm);

display.println(” Millis“);

display.display();

digitalWrite(trigPin, LOW);

delayMicroseconds(5);

digitalWrite(trigPin, HIGH);

delayMicroseconds(10);

digitalWrite(trigPin, LOW);

startMillis = currentMillis; //IMPORTANT to save the start time of the current LED state.

}

*/

//Display distance measured from Ultrasonic sensor on OLED

display.clearDisplay();

display.display();

display.setCursor(0,0);

display.setTextSize(2); // Draw 2X-scale text

display.setTextColor(WHITE);

display.print(cm);

display.println(” cm“);

display.setTextSize(1); // Draw 2X-scale text

display.setTextColor(WHITE);

display.println();

//Display hours on OLED

display.print(hour, DEC);

//Converting the byte variable to a decimal number when displayed

display.print(”:“);

if (minute《10)

{

display.print(”0“);

}

//Display minutes on OLED

display.print(minute, DEC);

display.print(”:“);

if (second《10)

{

display.print(”0“);

}

//Display seconds on OLED

display.print(second, DEC);

display.print(” “);

//Between 35 cm (under) and 5 cm (over) feed pet, turn motor CW

//else if(cm 《= 20 && hour 》= 7 && hour 《= 13) {

if(cm 《= 35 && cm 》5) {

display.setCursor(85,25);

display.setTextSize(1); // Draw 2X-scale text

display.setTextColor(WHITE);

display.print(”FEEDING“);

}

//Under 5 cm display length, time, day and date

else if(cm 《= 5) {

display.setCursor(85,25);

display.setTextSize(1); // Draw 2X-scale text

display.setTextColor(WHITE);

display.print(”DONE“);

}

display.display();

//TODO Millis

//delay(1000);

}

void displayDayDateDisplay()

{

byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;

//Retrieving data from DS1307

readDS1307time(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month,

&year);

//Sending it to the OLED display

//Display

//TODO Millis

//Day

display.clearDisplay();

display.setCursor(0,0);

display.setTextSize(1); // Draw 2X-scale text

display.setTextColor(WHITE);

display.println();

//Determine specific day of the week

switch(dayOfWeek){

case 1:

display.println(”Sunday“);

//display.println();

break;

case 2:

display.println(”Monday“);

break;

case 3:

display.println(”Tuesday“);

break;

case 4:

display.println(”Wednesday“);

break;

case 5:

display.println(”Thursday“);

break;

case 6:

display.println(”Friday“);

break;

case 7:

display.println(”Saturday“);

break;

}

//Date

display.setTextSize(2); // Draw 2X-scale text

display.setTextColor(WHITE);

display.print(dayOfMonth, DEC);

display.print(”/“);

display.print(month, DEC);

display.print(”/“);

display.print(year, DEC);

display.println(” “);

display.display();

//TODO Millis

//delay(500);

}

void ultrasonicTimeout() {

// The sensor is triggered by a HIGH pulse of 10 or more microseconds.

// Give a short LOW pulse beforehand to ensure a clean HIGH pulse:

/*

//Without Millis

digitalWrite(trigPin, LOW);

delayMicroseconds(5);

digitalWrite(trigPin, HIGH);

delayMicroseconds(10);

digitalWrite(trigPin, LOW);

*/

currentMillis = millis(); //get the current ”time“ (actually the number of milliseconds since the program started)

if (currentMillis - startMillis 》= period) //test whether the period has elapsed

{

digitalWrite(trigPin, LOW);

delayMicroseconds(5);

digitalWrite(trigPin, HIGH);

delayMicroseconds(10);

digitalWrite(trigPin, LOW);

startMillis = currentMillis; //IMPORTANT to save the start time of the current LED state.

}

// Read the signal from the sensor: a HIGH pulse whose

// duration is the time (in microseconds) from the sending

// of the ping to the reception of its echo off of an object.

pinMode(echoPin, INPUT);

duration = pulseIn(echoPin, HIGH);

// Convert the time into a distance

cm = (duration/2) / 29.1; // Divide by 29.1 or multiply by 0.0343

inches = (duration/2) / 74; // Divide by 74 or multiply by 0.0135

Serial.print(inches);

Serial.print(”in, “);

Serial.print(cm);

Serial.print(”cm“);

Serial.println();

//delay(200);

}

void ultrasonic() {

// The sensor is triggered by a HIGH pulse of 10 or more microseconds.

// Give a short LOW pulse beforehand to ensure a clean HIGH pulse:

/*

//Without Millis

digitalWrite(trigPin, LOW);

delayMicroseconds(5);

digitalWrite(trigPin, HIGH);

delayMicroseconds(10);

digitalWrite(trigPin, LOW);

*/

currentMillis = millis(); //get the current ”time“ (actually the number of milliseconds since the program started)

if (currentMillis - startMillis 》= period) //test whether the period has elapsed

{

digitalWrite(trigPin, LOW);

delayMicroseconds(5);

digitalWrite(trigPin, HIGH);

delayMicroseconds(10);

digitalWrite(trigPin, LOW);

startMillis = currentMillis; //IMPORTANT to save the start time of the current LED state.

}

// Read the signal from the sensor: a HIGH pulse whose

// duration is the time (in microseconds) from the sending

// of the ping to the reception of its echo off of an object.

pinMode(echoPin, INPUT);

duration = pulseIn(echoPin, HIGH);

// Convert the time into a distance

cm = (duration/2) / 29.1; // Divide by 29.1 or multiply by 0.0343

inches = (duration/2) / 74; // Divide by 74 or multiply by 0.0135

Serial.print(inches);

Serial.print(”in, “);

Serial.print(cm);

Serial.print(”cm“);

Serial.println();

}

void stepMotorFeed() {

/*

currentMillis = millis(); //get the current ”time“ (actually the number of milliseconds since the program started)

if (currentMillis - startMillis 》= period) //test whether the period has elapsed

{

//function to turn stepper motor 32 steps left

small_stepperFeed.setSpeed(300); // 200 as max speed?

//ultrasonic();

Steps2TakeFeed = -3200; // Rotate CW

//ultrasonic();

small_stepperFeed.step(Steps2TakeFeed);

startMillis = currentMillis; //IMPORTANT to save the start time of the current LED state.

}

*/

//function to turn stepper motor 32 steps left

small_stepperFeed.setSpeed(300); // 200 as max speed?

//ultrasonic();

Steps2TakeFeed = -520; // Rotate CW

//ultrasonic();

small_stepperFeed.step(Steps2TakeFeed);

}

void testdrawlogo() {

display.clearDisplay();

display.drawBitmap(

(display.width() - SCREEN_WIDTH ),

(display.height() - SCREEN_HEIGHT),

myBitmap, SCREEN_WIDTH, SCREEN_HEIGHT, 1);

display.display();

// Invert and restore display, pausing in-between

display.invertDisplay(true);

delay(1000);

display.invertDisplay(false);

delay(8000);

}

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 喂食器
    +关注

    关注

    1

    文章

    23

    浏览量

    3051
收藏 人收藏

    评论

    相关推荐

    Wio LTE的宠物物流安全卫士设计案例

    今天小编给大家带来的是来自墨西哥的Maker Victor Altamirano为了解决宠物寄送过程中可能遇到的安全问题,而制作的“Follow My Paws”项目,该项目可以在远程实时向用户发送宠物航空仓的各种信息。
    的头像 发表于 11-12 09:46 193次阅读
    Wio LTE的<b class='flag-5'>宠物</b>物流安全卫士设计案例

    宠物自动喂食器主控芯片DSH3186

    宠物在现代人的生活中占有极大的比重,甚至愿意将宠物当做孩子精细地养活。也正因为如此,由宠物而衍生出来的产业链涉及方方面面,不但解决了宠物主人的烦恼,也给
    的头像 发表于 11-01 16:26 180次阅读

    装配液位传感器的智能宠物饮水:流水不腐、喝水不累!

    配备液位传感器的智能宠物饮水之所以重要,是因为它确保了水源的持续新鲜和充足。例如,通过活水循环系统,它防止了水的停滞,符合“流水不腐”的理念,而自动感应出水功能减少了宠物饮水的劳累,
    的头像 发表于 09-03 00:00 310次阅读
    装配液位传感器的智能<b class='flag-5'>宠物</b>饮水<b class='flag-5'>机</b>:流水不腐、喝水不累!

    NVF04M录音芯片在宠物喂食器的应用:录音播放功能,内置SPI闪存

    在现代社会中,宠物已经成为人们生活中的一部分,而宠物喂食器作为宠物养护的重要工具,也越来越受到人们的关注。为了满足人们对宠物
    的头像 发表于 08-30 12:05 302次阅读
    NVF04M录音芯片在<b class='flag-5'>宠物</b><b class='flag-5'>喂食</b>器的应用:录音播放功能,内置SPI闪存

    宠物烘干需不需要做CCC认证?需要准备哪些材料?

    随着宠物经济的蓬勃发展,越来越多小猫小狗走进我们的家庭,现如今新一代的家庭模式基本每家都会养宠物。在这样的大环境下,宠物烘干作为宠物护理的
    的头像 发表于 06-12 17:41 624次阅读
    <b class='flag-5'>宠物</b>烘干<b class='flag-5'>机</b>需不需要做CCC认证?需要准备哪些材料?

    宠物烘干投放北美市场需不需要做FCC认证?

    宠物毛发卫生问题。这时候就衍生出来一种特殊的宠物用电器产品宠物烘干宠物烘干凭借其高效、便捷
    的头像 发表于 06-11 16:48 279次阅读
    <b class='flag-5'>宠物</b>烘干<b class='flag-5'>机</b>投放北美市场需不需要做FCC认证?

    物联网智能宠物管理系统

    是否补充粮食,监测空气质量并自动清新。1、智能宠物管家系统的工作原理STM32单片作为控制核心,控制LED照明模块、水位传感器模块、OLED显示模块、舵机模块、电
    的头像 发表于 06-01 08:10 1791次阅读
    物联网智能<b class='flag-5'>宠物</b>管理系统

    基于WTR096-28SS芯片方案的宠物喂食器实现智能化喂食功能

    功能,可以根据主人设定的时间和食物量,自动宠物提供食物,确保宠物按时获得充足的饮食。同时,该喂食器还支持多餐分配,可以设定多个餐次,根据宠物
    的头像 发表于 03-19 13:57 495次阅读
    基于WTR096-28SS芯片方案的<b class='flag-5'>宠物</b><b class='flag-5'>喂食</b>器实现智能化<b class='flag-5'>喂食</b>功能

    求一种基于WTR096-28SS芯片方案的宠物喂食器设计方案

    本方案宠物喂食器采用了WTR096-28SS芯片方案来实现智能化的喂食功能。该方案结合了先进的技术和设计理念,提供了便捷、智能和个性化的宠物喂食
    的头像 发表于 03-12 10:38 458次阅读
    求一种基于WTR096-28SS芯片方案的<b class='flag-5'>宠物</b><b class='flag-5'>喂食</b>器设计方案

    萌宠智能生活进化史:探索背后的核心元器件

    随着智能技术的快速发展,从自动喂食自动铲屎,到通过IoT健康监测,再到通过AI情绪识别,智能化技术正在重塑养宠方式,让养宠人搭建一个高质量的宠物环境变得更加容易,也让
    的头像 发表于 02-28 09:32 806次阅读

    ESP32-C3 Wifi模组在宠物饮水机上的应用

    数据显示,2023年,城镇宠物(犬猫)消费市场规模为2793亿元,较2022年增长3.2%。随之而来的宠物用品销售数据也在上升,为了提升品牌竞争力,很多商家都在对产品升级。今天的内容是关于宠物饮水
    的头像 发表于 01-06 08:03 815次阅读
    ESP32-C3 Wifi模组在<b class='flag-5'>宠物</b>饮水机上的应用

    定制无线应用:宠物电子围栏无线报警方案

    思为无线设计的宠物电子围栏方案通过无线模块技术设定一个虚拟边界,确保宠物在一个预设的安全区域内活动,一旦宠物越界,系统便会自动触发预设的报警机制。该电子围栏方案由一个遥控器可控制多个接
    的头像 发表于 12-07 14:49 599次阅读
    定制无线应用:<b class='flag-5'>宠物</b>电子围栏无线报警方案

    WT588F02A-16S录音语音芯片在宠物喂食器中的应用:小芯片,大功能

    在现代社会中,宠物已经成为人们生活中的一部分,而宠物喂食器作为宠物养护的重要工具,也越来越受到人们的关注。为了满足人们对宠物
    的头像 发表于 11-28 09:37 385次阅读

    WT588F02A-16S录音语音芯片IC在宠物喂食器中的应用:小芯片,大功能

    在现代社会中,宠物已经成为人们生活中的一部分,而宠物喂食器作为宠物养护的重要工具,也越来越受到人们的关注。为了满足人们对宠物
    的头像 发表于 11-28 09:28 366次阅读
    WT588F02A-16S录音语音芯片IC在<b class='flag-5'>宠物</b><b class='flag-5'>喂食</b>器中的应用:小芯片,大功能

    雷达宠物自动喂食/水器,毛孩子的自动餐神器~

    了...... 雷达模组自动喂食器/喂水器可以起到人工投喂的效果,按需为宠物提供食物和水。 雷达模组宠物喂食器是一种利用雷达技术来控制
    的头像 发表于 11-22 16:24 489次阅读