CMF海水论坛

标题: 完全分享利用Arduino制作的单片机控制4头滴定 [打印本页]

作者: zizii    时间: 2013-12-8 19:52
标题: 完全分享利用Arduino制作的单片机控制4头滴定
本帖最后由 zizii 于 2013-12-11 22:39 编辑

(, 下载次数: 288)
先贴出最后的成品,采用Arduino控制,红外线遥控设置。

功能介绍:
1、4头滴定,每路一路启动时间一路滴定时间。
2、采用Apple盒子的遥控器控制设置。
3、断电记忆,重新启动后不用重新设置。
4、1分钟自动锁定,防止干扰和不明真相的群众改动设置。
5、可以手动启动任何一个泵头,启动到设置的时间后自动关闭。

看完该帖子,动手能力ok的人可以完全自己采购零件和参考我贴出的程序做一个一样的出来。


以前做的那个8头滴定移步看这里:http://www.cmfish.com/bbs/forum. ... d=243405&extra=
原来那个造价800左右,8头,但是每次设置必须联网或者通过串口连接电脑设置,不好用。

后来去朋友家玩过BM那个,有屏幕操作起来的确方便一点,不过1200块3个头,还是觉得划不来。
再后来研究了一下Arduino这个单片机,发现原来我想要的控制器就在身边(谷歌Arduino)。

采购,全部淘宝,先申明一下,该DIY的成本并不便宜(大概1000左右,最重要的是看泵头,从几十到几百一个),甚至贵过一些成品。
但是它可以完全按照自己的想法来运作,最重要的,它可以随时升级,支持更多的功能和联动更多的设置,例如LED模拟日出、直流造浪等等,都可以用几行代码搞定。

好了,下面开始看图说话。

(, 下载次数: 267)
整个控制电路:
1、Arduino UNO r3 一块,淘宝50-80,建议买改进版本的带插针的,接线方便很多。
2、Arduino I2C 2004 LCD 一块,淘宝30-50。
3、Arduino I2C/IIC DS3231 高精度时钟模块一个,淘宝十几块。
4、Arduino 3线按钮一个,用来控制解锁的,几块钱一个。
5、Arduino 数字38KHz红外接收模块一个,十来块。
6、Arduino 4路继电器一个,30左右。

基本上就上面这些吧,当然,还要12v1A电源一个,25cm宽的大盒子一个,泵头尺寸5.5宽一个。

(, 下载次数: 289)
屏幕大概就是这样,2004的意思就是每行20个字可以显示4行,不过只支持英文,够用了。

(, 下载次数: 290)
哦,补充一点,还有4个电源模块,可以参考我之前那个滴定,我新买的这个带电压显示,调整起来方便一点。
搜索LM2596S,DC-DC模块,用来精确调正滴定泵速度的,基本可以做到1秒1ml这个样子。

关于泵头,我之前的帖子有分析过,不过真心买不起步进电机的,用了一款性价比还不错的,运行安静:
(, 下载次数: 296)
图片是淘宝上面的,就是这款感觉还行,98一个。

(, 下载次数: 290)
安装了控制板和电源板,刚开始我将交流电源也装在里面,结果发现干扰太严重,基本单片机无法工作,所以这个图片是告诉大家,不要把AC-DC模块放在一起。

(, 下载次数: 282)
去掉了交流电源以后,只保留了控制板和滴定泵,把线都接好。

(, 下载次数: 291)
最后一步接上屏幕,基本上硬件部分就ok了。

线是怎么接的,其实不用我画电路图出来,因为你在淘宝购买的每一个Arduino模块都带有接线图。
你要做的只是把他们用杜邦线连接起来而已。

大概接法:
1、Arduino 主板IIC接口接时钟模块,时钟模块再串接屏幕(这里可能要给时钟模块焊接插针)。
2、Arduino 主板I数字12接口,接按钮。
3、Arduino 主板I数字11接口,接红外线。
4、4路继电器6根线,电源对接,4个控制线接Arduino 主板数字7-10接口。
5、继电器输出开关接12v电源给4块DC-DC电源板。
6、DC-DC输出直接接泵头。


(, 下载次数: 273)
详细介绍一下屏幕功能设置。

第一排,显示日期和温度(这个是模块温度,没啥用,跟天气温度差不多)。
第二排,显示时间,后面的“____”显示4个泵头是否工作,工作会显示1234.
第三排,4个泵头启动的时间。
第四排,4个泵头启动持续时间,如果1秒1ml也可以理解为滴定多少ml。

程序楼下再贴。
作者: zizii    时间: 2013-12-8 19:54
本帖最后由 zizii 于 2014-2-12 22:37 编辑

程序太长,不让直接贴,还是下载附件吧。

其实代码才是整个滴定制作的重点,下面我简单注释一下代码:

#include <Wire.h>
#include <EEPROM.h>
#include <IRremote.h>
#include <DS3231.h>
#include <LiquidCrystal_I2C.h>

包含头文件,跟c语言是很类似的,本身Arduino使用的就是C语言。
#include <Wire.h>
#include <EEPROM.h>
这两个是系统自带的。
#include <IRremote.h>
这个是外线现控制模块的
#include <DS3231.h>
这个是时间模块的。
#include <LiquidCrystal_I2C.h>
这个是LCD液晶显示的。

附件的代码有一处错误,请查看53楼的修复代码。
作者: zizii    时间: 2013-12-8 20:24
const String Ver = "V1.1";
常量,版本,这个无所谓啦。

int BTN_PIN = 12;
int LED_PIN = 13;
定义按钮在数字接口12,用来解锁屏幕的。
定义LED在数字接口13,我没用这个。

int IR_RECV_PIN = 11;
红外线在数字接口11。

bool IREnabled = true;
默认红外线接收打开。

unsigned long IREnabledTime = 60000;
定义1分钟后自动关闭红外线控制。

int RELAY_PINS[4] = {7, 8, 9, 10};
继电器接在数字接口7-10

bool RelayOn[4] = {false, false, false, false};
4个继电器是否在工作。

int RelayStartHour[4] = {18, 19, 20, 21};
4个继电器开始的时间,18代表下午6点。

unsigned long RelayRunSecond[4] = {60, 60, 60, 60}; // Default 1 minute
继电器每次工作多长时间,默认1分钟。

unsigned long RelayOnTime[4] = {0, 0, 0, 0}; // Countdown to close relay
用来控制继电器到时间关闭的。

union EEPROMData {
  long v;
  unsigned char c[4];
} EEPROMValue;
bool DataChanged = false;
这个联合体用来往单片机写入和读取数据,断电不用重新设置就是因为有这个,EEPROM。

int CursorPos[2] = {15, 1};
设置模式下光标的位置。

unsigned long setModeTime = 1000;
bool SetModeOn = false;
是否在设置模式,默认1秒钟没操作就关闭设置模式。
这里简单说明一下:因为这个液晶屏幕不能分开操作字符显示位置和光标显示位置,所以每次刷新屏幕光标位置都会到最后一个字符的位置。
因而增加一个模式,记录每次刷新后都恢复显示当前操作的光标位置。


LiquidCrystal_I2C LCD(0x27, 20, 4); // set the LCD address to 0x27 for a 16 chars and 2 line display
DS3231 Clock; // DS3213 Clock
IRrecv IR(IR_RECV_PIN);
decode_results IRResults;
unsigned long lastIRCode = 0;
这些都是常规变量设置。

int second, minute, hour, day, month, year, temperature;
bool h12, PM;
bool Century = false;
时间相关的变量。
bool backLight = true;
unsigned long backLightTime = 5000;
液晶显示背光显示和自动5秒关闭。
作者: zizii    时间: 2013-12-8 20:29
Arduino主程序一般只有2个函数,一个setup函数用来初始化端口和设置一些初始值,复位后或者断电重开后会运行一次。
一个loop函数,会一直重复运行,这里面放需要检测或者显示的东西。

void setup() {
  pinMode(BTN_PIN, INPUT); //设置按钮输入接口
  pinMode(LED_PIN, OUTPUT); //忽略
  for (int i = 0; i < 4; i = i + 1) {
    pinMode(RELAY_PINS[i], OUTPUT); //设置4个继电器输出接口
  }

  Wire.begin(); // Start the I2C interface 串口界面开始
  Serial.begin(9600); // Start the serial interface 串口波特率设置
  IR.enableIRIn(); // Start the receiver 红外线开始接收

  LCD.init(); // Initialize the LCD 初始化屏幕
  if (backLight) //是否打开背光
    LCD.backlight();
  else
    LCD.noBacklight();

  ReadFromEEPROM(); // Read relay options from EEPROM 从存储器读出以前的设置。
}

void loop() {
  if (!IREnabled) { //如果锁定,则跳过所有红外线命令
    IR.resume();
  } else { //执行红外线命令
    RevIR();
  }
  if (!SetModeOn) { //设置模式下,所有显示不刷新。
    DisplayTime(); //刷新时间
    DisplayRelay(); //刷新继电器设置显示
    DisplayIR(); //刷新是否锁屏
  }
  CheckBtnClicked(); //检测按钮,有按下解锁。
  CheckRelayClock(); //检测是否到时间启动滴定泵头。
  AutoCloseIR(); //自动关闭红外线接收,默认1分钟锁定。
  AutoCloseLight(); //自动关闭背光,默认5秒。
  AutoCloseRelay(); //自动关闭继电器控制,也就是关闭滴定头。
  AutoExitSetMode(); //自动退出编辑模式,默认1秒退出。
}
作者: zizii    时间: 2013-12-8 20:35
//红外线接收解析,我这里采用家里的苹果盒子带的那个遥控器,其实家里大多数遥控器都能用,重要的是稳定。
//我之前用小米盒子的遥控器,居然同一个按钮会出现好几个不同的编码,质量真心不咋的。

void RevIR() {
  unsigned long resultIRCode;
  if (IR.decode(&IRResults)) {
    BackLight5s(); //有接收到命令,自动打开背光5秒。
    SetIREnabled(true); //延迟锁定,复位锁定计数
    //Apple IR Controler
    //0x77E1D04B UP
    //0x77E1B04B DOWN
    //0x77E1104B LEFT
    //0x77E1E04B RIGHT
    //0x77E1404B MENU
    //0x77E17A4B PLAY
    //0x77E1BA4B OK
    resultIRCode = IRResults.value;
    if (resultIRCode != 0xFFFFFFFF) {
      lastIRCode = resultIRCode;
    } else {
      resultIRCode = lastIRCode;
    }
    switch (resultIRCode) {
      case 0x77E1404B: //Menu
        SetModeStatus(false); //菜单按钮,退出编辑模式
        ReadFromEEPROM(); //从存储器重新读一次设置
        DisplayVer(); //显示软件版本
        break;
      case 0x77E17A4B: //Play
        SetModeStatus(false); //播放按钮,退出编辑模式
        SetIREnabled(false); //锁定屏幕,红外线接收退出,需要按钮解锁
        break;
      case 0x77E1BA4B: //OK
        SetModeStatus(false); //确认按钮
        WriteToEEPROM(); //写入设置数据
        break;
      case 0x77E1D04B: //Up
        SetPosValue(1); //设置当前位置的设定值+1
        SetModeStatus(false); //退出编辑模式(刷新屏幕)
        break;
      case 0x77E1B04B: //Down
        SetPosValue(-1); //设置当前位置的设定值-1
        SetModeStatus(false);
        break;
      case 0x77E1104B: //Left
        SetModeStatus(true);
        SetCursorPos(-1); //设置当前光标位置左移一位
        break;
      case 0x77E1E04B: //Right
        SetModeStatus(true);
        SetCursorPos(1); //设置当前光标位置右移一位
        break;
    }
    Serial.print("IR:");
    Serial.println(IRResults.value, HEX); //在窗口显示接收到的红外线编码,可以配对家里几乎所有的遥控器。
//这也是用这套系统最好玩的地方,几乎所有的东西都可以自定义。
    delay(80);  // delay in between reads for stability
    IR.resume();
  }
}
作者: zizii    时间: 2013-12-8 20:44
剩下的就自己看附件的代码吧,分享完毕。
作者: fish8231    时间: 2013-12-8 21:12
高手,谢谢楼主分享~
作者: 遇见vivin    时间: 2013-12-8 22:44
牛人
作者: fashionhuang    时间: 2013-12-9 19:52
非常感谢,非常感兴趣,如果有问题再请教楼主!
作者: tanff    时间: 2013-12-9 21:44
技术帝,这个只能膜拜
作者: 郁闷中    时间: 2013-12-9 21:51
这个要顶
作者: seanfox    时间: 2013-12-9 23:55
太强悍了!
作者: luotao21    时间: 2013-12-10 01:07
真厉害,而且里面的布局也很漂亮。要是能再紧凑点就更好了。
作者: sdtimer    时间: 2013-12-10 11:46
支持一个,非常棒的滴定!
作者: 小郭子    时间: 2013-12-10 17:58
支持贡献源代码的
作者: 我姓沈    时间: 2013-12-10 19:28
好帖!!!
作者: 孰是孰非    时间: 2013-12-11 20:29
真TMD的厉害
作者: zizii    时间: 2013-12-11 22:43
最近正打算模拟mp的控制器做一个造浪控制,也用arduino来搞,很好玩。
作者: easyz    时间: 2013-12-11 22:44
支持一下.牛人
作者: wyl11385    时间: 2013-12-12 00:31
楼主 能不能pm一下所有淘宝地址

作者: wywy7979    时间: 2013-12-12 01:56

作者: loadingnow    时间: 2013-12-12 14:02
这个必须顶 ~~
作者: wyl11385    时间: 2013-12-22 00:32
zizii 发表于 2013-12-8 20:24
const String Ver = "V1.1";
常量,版本,这个无所谓啦。

楼主 这个是什么问题?
error messages是Arduino:1.5.5 (Windows 7), 板:"Arduino Uno"

TimeTest:37: error: 'LiquidCrystal_I2C' does not name a type
TimeTest:38: error: 'DS3231' does not name a type
TimeTest.ino: In function 'void AutoCloseLight()':
TimeTest:54: error: 'LCD' was not declared in this scope
TimeTest.ino: In function 'void SetModeStatus(bool)':
TimeTest:104: error: 'LCD' was not declared in this scope
TimeTest:107: error: 'LCD' was not declared in this scope
TimeTest.ino: In function 'void GetI2CTime()':
TimeTest:115: error: 'Clock' was not declared in this scope
TimeTest.ino: In function 'void DisplayStandBy()':
TimeTest:131: error: 'LCD' was not declared in this scope
TimeTest.ino: In function 'void DisplayTime()':
TimeTest:142: error: 'LCD' was not declared in this scope
TimeTest.ino: In function 'void DisplayRelay()':
TimeTest:193: error: 'LCD' was not declared in this scope
TimeTest.ino: In function 'void DisplayIR()':
TimeTest:222: error: 'LCD' was not declared in this scope
TimeTest.ino: In function 'void DisplayVer()':
TimeTest:232: error: 'LCD' was not declared in this scope
TimeTest.ino: In function 'void SetCursorPos(int)':
TimeTest:273: error: 'LCD' was not declared in this scope
TimeTest.ino: In function 'void SetPosValue(int)':
TimeTest:294: error: 'Clock' was not declared in this scope
TimeTest:300: error: 'Clock' was not declared in this scope
TimeTest:306: error: 'Clock' was not declared in this scope
TimeTest:315: error: 'Clock' was not declared in this scope
TimeTest:321: error: 'Clock' was not declared in this scope
TimeTest:327: error: 'Clock' was not declared in this scope
TimeTest.ino: In function 'void BackLight5s()':
TimeTest:442: error: 'LCD' was not declared in this scope
TimeTest.ino: In function 'void setup()':
TimeTest:516: error: 'LCD' was not declared in this scope

  报告将会包含更多的信息
  "Show verbose output during compilation"
  在 文件>首选项 中启用

作者: zizii    时间: 2013-12-23 16:53
wyl11385 发表于 2013-12-22 00:32
楼主 这个是什么问题?
error messages是Arduino:1.5.5 (Windows 7), 板:"Arduino Uno"

你要去网上下载对应的库文件,然后到入库,这样才能编译那些第三方的库。
作者: wyl11385    时间: 2013-12-23 16:56
本帖最后由 wyl11385 于 2013-12-23 17:00 编辑
zizii 发表于 2013-12-23 16:53
你要去网上下载对应的库文件,然后到入库,这样才能编译那些第三方的库。


楼主能发布个直接用的代码么?想按着你的方法自己做一个,可是代码我实在是不行
作者: luoziheng8    时间: 2013-12-23 17:18
真的不错   
作者: xubingl    时间: 2013-12-23 23:24
zizii 发表于 2013-12-11 22:43
最近正打算模拟mp的控制器做一个造浪控制,也用arduino来搞,很好玩。

支持楼主!成功后分享下!
作者: heqzamd    时间: 2013-12-26 13:06
厉害阿
作者: zizii    时间: 2014-1-1 11:53
wyl11385 发表于 2013-12-23 16:56
楼主能发布个直接用的代码么?想按着你的方法自己做一个,可是代码我实在是不行


我发布的就是直接能用的代码啊,你的硬件和软件如果跟我一样就不需要调试,不一样的硬件你要选择对应你自己的硬件。
那几个库文件我打包放附件,你下载解压到我的文档\Arduino\libraries目录。
作者: zizii    时间: 2014-1-1 11:57
另外今天更新一点点内容:
1、最小设置从10s改为5s,有时候滴定10s都太多了。

void SetPosValue(int value) {
  int x, y, i;
  //  Serial.print("SetValue:");
  //  Serial.println(value);

  x = CursorPos[0];
  y = CursorPos[1];

  if (y == 0) { // Set date
    GetI2CTime();
    if ((x >= 5) && (x <= 8)) { // Set year
      year += value;
      if (year < 10) year = 10;
      if (year > 99) year = 99;
      Clock.setYear(year);
    }
    if ((x >= 10) && (x <= 11)) { // Set month
      month += value;
      if (month < 1) month = 1;
      if (month > 12) month = 12;
      Clock.setMonth(month);
    }
    if ((x >= 13) && (x <= 14)) { // Set day
      day += value;
      if (day < 1) day = 1;
      if (day > 31) day = 31;
      Clock.setDate(day);
    }
  }
  if (y == 1) { // Set time and relay
    GetI2CTime();
    if ((x >= 5) && (x <= 6)) { // Set hour
      hour += value;
      if (hour < 1) hour = 1;
      if (hour > 24) hour = 24;
      Clock.setHour(hour);
    }
    if ((x >= 8) && (x <= 9)) { // Set minute
      minute += value;
      if (minute < 1) minute = 1;
      if (minute > 59) minute = 59;
      Clock.setMinute(minute);
    }
    if ((x >= 11) && (x <= 12)) { // Set second
      second += value;
      if (second < 1) second = 1;
      if (second > 59) second = 59;
      Clock.setSecond(second);
    }
    if ((x >= 16) && (x <= 19)) { // Set relay
      i = x - 16;
      RelayOn[i] = (value == 1);
      if (RelayOn[i]) {
        RelayOnXs(i);
      } else {
        RelayOff(i);
      }
    }
  }
  if (y == 2) { // Set relay start hour
    if ((x >= 4) && (x <= 5)) {
      RelayStartHour[0] += value;
      RelayStartHour[0] = constrain(RelayStartHour[0], 0, 23);
      DataChanged = true;
    }
    if ((x >= 8) && (x <= 9)) {
      RelayStartHour[1] += value;
      RelayStartHour[1] = constrain(RelayStartHour[1], 0, 23);
      DataChanged = true;
    }
    if ((x >= 12) && (x <= 13)) {
      RelayStartHour[2] += value;
      RelayStartHour[2] = constrain(RelayStartHour[2], 0, 23);
      DataChanged = true;
    }
    if ((x >= 16) && (x <= 17)) {
      RelayStartHour[3] += value;
      RelayStartHour[3] = constrain(RelayStartHour[3], 0, 23);
      DataChanged = true;
    }
  }
  if (y == 3) { // Set relay on time
    if ((x >= 4) && (x <= 6)) {
      RelayRunSecond[0] += value * 5;
      RelayRunSecond[0] = constrain(RelayRunSecond[0], 0, 900);
      DataChanged = true;
    }
    if ((x >= 8) && (x <= 10)) {
      RelayRunSecond[1] += value * 5;
      RelayRunSecond[1] = constrain(RelayRunSecond[1], 0, 900);
      DataChanged = true;
    }
    if ((x >= 12) && (x <= 14)) {
      RelayRunSecond[2] += value * 5;
      RelayRunSecond[2] = constrain(RelayRunSecond[2], 0, 900);
      DataChanged = true;
    }
    if ((x >= 16) && (x <= 18)) {
      RelayRunSecond[3] += value * 5;
      RelayRunSecond[3] = constrain(RelayRunSecond[3], 0, 900);
      DataChanged = true;
    }
  }
}

2、遥控设置改为menu键+,Play键-,上下左右都为方向了,确定键保存。

void SetCursorPos(int x, int y) {
  CursorPos[0] += x;
  if (CursorPos[0] < 0) CursorPos[0] = 19;
  if (CursorPos[0] > 19) CursorPos[0] = 0;
  CursorPos[1] += y;
  if (CursorPos[1] < 0) CursorPos[1] = 3;
  if (CursorPos[1] > 3) CursorPos[1] = 0;
  LCD.setCursor(CursorPos[0], CursorPos[1]);
  Serial.print("CursorPos:");
  Serial.print(CursorPos[0]);
  Serial.print(',');
  Serial.println(CursorPos[1]);
}

void RevIR() {
  unsigned long resultIRCode;
  if (IR.decode(&IRResults)) {
    BackLight5s();
    SetIREnabled(true);
    //Apple IR Controler
    //0x77E1D04B UP
    //0x77E1B04B DOWN
    //0x77E1104B LEFT
    //0x77E1E04B RIGHT
    //0x77E1404B MENU
    //0x77E17A4B PLAY
    //0x77E1BA4B OK
    resultIRCode = IRResults.value;
    if (resultIRCode != 0xFFFFFFFF) {
      lastIRCode = resultIRCode;
    } else {
      resultIRCode = lastIRCode;
    }
    switch (resultIRCode) {
      case 0x77E1404B: //Menu
        SetPosValue(+1);
        SetModeStatus(false);
        break;
      case 0x77E17A4B: //Play
        SetPosValue(-1);
        SetModeStatus(false);
        break;
      case 0x77E1BA4B: //OK
        SetModeStatus(false);
        SetIREnabled(false);
        WriteToEEPROM();
        DisplayVer();
        ReadFromEEPROM();
        break;
      case 0x77E1D04B: //Up
        SetModeStatus(true);
        SetCursorPos(0, -1);
        break;
      case 0x77E1B04B: //Down
        SetModeStatus(true);
        SetCursorPos(0, 1);
        break;
      case 0x77E1104B: //Left
        SetModeStatus(true);
        SetCursorPos(-1, 0);
        break;
      case 0x77E1E04B: //Right
        SetModeStatus(true);
        SetCursorPos(1, 0);
        break;
    }
    Serial.print("IR:");
    Serial.println(IRResults.value, HEX);
    delay(80);  // delay in between reads for stability
    IR.resume();
  }
}

替换掉原来的三个函数就行了。
作者: bg7owd    时间: 2014-1-1 13:18
爽,值得一试的好东西
作者: wyl11385    时间: 2014-1-2 23:10
zizii 发表于 2014-1-1 11:53
我发布的就是直接能用的代码啊,你的硬件和软件如果跟我一样就不需要调试,不一样的硬件你要选择对应你 ...

谢谢哦,我的硬件和你应该一样,照着你的单子买的,现在把库文件放进去了,别的还没试,但是显示上第一行的date和第二行的time一直在闪,不知道什么原因
作者: zizii    时间: 2014-1-4 11:56
本帖最后由 zizii 于 2014-1-4 11:58 编辑
wyl11385 发表于 2014-1-2 23:10
谢谢哦,我的硬件和你应该一样,照着你的单子买的,现在把库文件放进去了,别的还没试,但是显示上第一行 ...


一直在闪是什么意思,时间本来1s钟就会刷新一次显示呀,是光标在闪还是文字在闪,你查看一下2004显示模块是不是跟我一样的,使用的iic接口,屏幕初始化有没有关掉光标闪烁等。
作者: wyl11385    时间: 2014-1-4 12:53
zizii 发表于 2014-1-4 11:56
一直在闪是什么意思,时间本来1s钟就会刷新一次显示呀,是光标在闪还是文字在闪,你查看一下2004显示模 ...

date一直在和0-1之间切换,time在和-1h之间切换,我的是iic的接口,只是我的是蓝屏白字,初始化时会显示光标然后关掉背灯
作者: 无尽旅途    时间: 2014-1-4 12:58
牛掰,好玩,心动了! Arduino 得搞一套。

能 PM 下你那个盒子的购买链接吗?  怎么打孔、开槽、以及固定各个配件? 机械方面小白。
作者: zizii    时间: 2014-1-5 00:34
wyl11385 发表于 2014-1-4 12:53
date一直在和0-1之间切换,time在和-1h之间切换,我的是iic的接口,只是我的是蓝屏白字,初始化时会显示 ...

你是不是没有初始化时间模块,在setup函数里面运行一次:

        Clock.setSecond(50);//Set the second
        Clock.setMinute(59);//Set the minute
        Clock.setHour(11);  //Set the hour
        Clock.setDoW(5);    //Set the day of the week
        Clock.setDate(31);  //Set the date of the month
        Clock.setMonth(5);  //Set the month of the year
        Clock.setYear(13);  //Set the year (Last two digits of the year)

试试看。
作者: zizii    时间: 2014-1-5 00:35
无尽旅途 发表于 2014-1-4 12:58
牛掰,好玩,心动了! Arduino 得搞一套。

能 PM 下你那个盒子的购买链接吗?  怎么打孔、开槽、以及固 ...

http://trade.taobao.com/trade/de ... eID=462251752433321
我用的是这个大小的。
作者: wyl11385    时间: 2014-1-5 01:02
zizii 发表于 2014-1-5 00:34
你是不是没有初始化时间模块,在setup函数里面运行一次:

        Clock.setSecond(50);//Set the sec ...

好的,我试试,谢谢哦

作者: 无尽旅途    时间: 2014-1-5 09:53
zizii 发表于 2014-1-5 00:35
http://trade.taobao.com/trade/detail/tradeSnap.htm?spm=a1z09.2.9.264.iKov22&tradeID=46225175243332 ...

收到。多谢。
作者: wyl11385    时间: 2014-1-7 22:52
zizii 发表于 2014-1-5 00:34
你是不是没有初始化时间模块,在setup函数里面运行一次:

        Clock.setSecond(50);//Set the sec ...

楼主,我试了,还是不行
(, 下载次数: 72)
作者: zizii    时间: 2014-1-8 17:41
看上去蛮奇怪的,如果你照抄我的代码,没理由这样的啊,不只是闪的问题,1-4的时间应该显示000h的你也显示0-1h,SEC显示000的你也显示00-1,你应该改过代码吧。。。
作者: wyl11385    时间: 2014-1-12 02:25
zizii 发表于 2014-1-8 17:41
看上去蛮奇怪的,如果你照抄我的代码,没理由这样的啊,不只是闪的问题,1-4的时间应该显示000h的你也显示0 ...

没有改过啊 直接用的你的代码啊
作者: 李冰110    时间: 2014-1-15 23:11
zizii 发表于 2013-12-8 19:54
程序太长,不让直接贴,还是下载附件吧。

其实代码才是整个滴定制作的重点,下面我简单注释一下代码:

哥们 我对安卓一窍不通。看你这个接线我怎么越看越糊涂呀  能不能给详细的说说怎么接呀  我想问一下,你的那个开关能不能换成天使眼的那个开关呀,那个药漂亮一些。还有就是在前面板上是不是有个指示灯。后面是个电源输入接口
作者: 糖果芋圆    时间: 2014-1-15 23:46
其它方面不懂就不说, 就说说泵,中间一根棍子的这种泵非常的不好,会打滑. 寿命短,不准确.  现在一般都是用轴是塑料方形的,可以拔出来的那种
作者: zizii    时间: 2014-1-16 15:07
y2385808 发表于 2014-1-15 23:46
其它方面不懂就不说, 就说说泵,中间一根棍子的这种泵非常的不好,会打滑. 寿命短,不准确.  现在一般都是用轴 ...

这个也不尽然,我用过好几种泵头,用过圆棍的,也用过粗轴带缺口的那种。
从打滑的角度讲,肯定粗轴的那种不容易打滑,但是:一是要看做工,二是看设计理念。
你是想如果胶管卡住不能转动的时候,是希望他打滑呢还是希望他不能打滑烧电机呢?
就好比电梯,为什么开门的传动一定要皮带而不用此轮,因为就是要他在出故障的时候打滑。

另外你看看国外最好的几款滴定,很多用细棍,所以这个不是主要考虑的,最重要的其实是里面的马达,步进的,减速的,无刷的,这个才是影响精度和价格的东西。
作者: zizii    时间: 2014-1-16 15:09
李冰110 发表于 2014-1-15 23:11
哥们 我对安卓一窍不通。看你这个接线我怎么越看越糊涂呀  能不能给详细的说说怎么接呀  我想问一下,你 ...

哥们,这个不是安卓啊,是Arduino,一种单片机,那个接线的问题,现在装好机了实在不好重新画出来,但是我保证真的很简单,都是插插插搞定,但是前提是你要去研究。
作者: ccjsoft    时间: 2014-1-16 21:07
好东西,就是代码看着吐血,要是有更简洁的客户端软件就好了!
作者: 李冰110    时间: 2014-1-16 21:26
哦了   我这不是也在研究这东西了么  就是看不懂呀
作者: zizii    时间: 2014-1-16 21:46
本帖最后由 zizii 于 2014-1-16 21:48 编辑
李冰110 发表于 2014-1-16 21:26
哦了   我这不是也在研究这东西了么  就是看不懂呀


嗯嗯,然后研究过程中遇到具体的问题再提出来,不要一来就说我不会,没法解释呀。
单片机是需要一定基础的,至少懂一点硬件,例如电源+,-,接地,串口啥的。
还要懂一点软件,例如C++的基本语法,然后再深入研究和学习

至于你问的天使眼的开关,当然没问题,可以替换,但是代码要修改,因为他可能是高电平是开,跟我使用的开关是反的。
作者: 李冰110    时间: 2014-1-16 22:57
zizii 发表于 2014-1-16 21:46
嗯嗯,然后研究过程中遇到具体的问题再提出来,不要一来就说我不会,没法解释呀。
单片机是需要一定基 ...

c++可是没研究过,不过我的led灯就是自己做的,
就是看到你的3线开工不是很好看所以想换成天使眼,那个要漂亮的多,价格也不是很贵。我先做吧,到时候麻烦大哥给写个代码。还是得麻烦大哥去看看天使眼是不是你说的这个。到时候帮忙弄弄
作者: 鞍山-琦琦    时间: 2014-1-27 23:31
提示: 作者被禁止或删除 内容自动屏蔽
作者: kunsito    时间: 2014-2-2 08:43
好帖要顶
作者: zizii    时间: 2014-2-12 22:35
wyl11385 发表于 2014-1-7 22:52
楼主,我试了,还是不行


找到问题了,修改下面的函数:
  1. void ReadFromEEPROM() {
  2.   int i, v;
  3.   for (i = 0; i < 4; i++) {
  4.     v = READ_LONG_EEPROM(i * 4);
  5.     if (v != -1) {
  6.       RelayStartHour[i] = v;
  7.     }
  8.     //    Serial.print("RelayStartHour:");
  9.     //    Serial.println(RelayStartHour[i], DEC);
  10.     v = READ_LONG_EEPROM((i + 4) * 4);
  11.     if (v != -1) {
  12.       RelayRunSecond[i] = v;
  13.     }
  14.     //    Serial.print("RelayRunSecond:");
  15.     //    Serial.println(RelayRunSecond[i], DEC);
  16.   }
  17.   DataChanged = false;
  18.   delay(100);
  19. }
复制代码
出错的原因是第一次运行读出的时间和滴定的秒都是-1,所以这里判断一下,不是-1才读取。
作者: wyl11385    时间: 2014-2-13 18:33
zizii 发表于 2014-2-12 22:35
找到问题了,修改下面的函数:出错的原因是第一次运行读出的时间和滴定的秒都是-1,所以这里判断一下, ...

谢谢楼主,这回好了
(, 下载次数: 99)
作者: Alix    时间: 2014-2-13 19:37
我51单片机做的4头滴定还差点手尾 楼主能分享滴定壳的链接吗?
作者: zizii    时间: 2014-2-13 20:53
wyl11385 发表于 2014-2-13 18:33
谢谢楼主,这回好了

哈哈,原来你等了这么久才等到我的更新啊,辛苦了,我以为你早解决这个问题了。
作者: wyl11385    时间: 2014-2-13 21:41
zizii 发表于 2014-2-13 20:53
哈哈,原来你等了这么久才等到我的更新啊,辛苦了,我以为你早解决这个问题了。

哈哈,没关系,其实我什么也不会的
作者: 82463180    时间: 2014-2-25 13:37
是不是吧您提供的代码直接载入就OK?
作者: luohly    时间: 2014-3-3 01:57
:)牛人要顶。
作者: telanx    时间: 2014-3-6 00:22
这个帖子一定要顶!呵呵
作者: telanx    时间: 2014-3-6 00:32
另请问一下,你是怎么知道每秒输出就是1ml呢?怎么测定的?
作者: zizii    时间: 2014-3-6 10:14
telanx 发表于 2014-3-6 00:32
另请问一下,你是怎么知道每秒输出就是1ml呢?怎么测定的?

不是有4个电源模块的吗?调整电压改变滴定头电机速度,让他正好1分钟滴60ml,不就是1s1ml咯。
作者: telanx    时间: 2014-3-6 15:11
本帖最后由 telanx 于 2014-3-6 15:52 编辑
zizii 发表于 2014-3-6 10:14
不是有4个电源模块的吗?调整电压改变滴定头电机速度,让他正好1分钟滴60ml,不就是1s1ml咯。


啊?滴到试管测量?手上有microduino ,12864B屏和4口继电器模块,哈哈,好像就差没多少东西就可以了嘛!
作者: zizii    时间: 2014-3-6 21:41
telanx 发表于 2014-3-6 15:11
啊?滴到试管测量?手上有microduino ,12864B屏和4口继电器模块,哈哈,好像就差没多少东西就可以了嘛 ...

是的,只用了很少的数字接口,原则上nano, micro arduino都足够了。不过你那块屏幕如果不是串口的就比较麻烦。
作者: luohly    时间: 2014-3-6 21:46
准备买配件了,可以pm配件清单么,购物车截图就行,tks
作者: zizii    时间: 2014-3-6 22:21
luohly 发表于 2014-3-6 21:46
准备买配件了,可以pm配件清单么,购物车截图就行,tks

整个控制电路:
1、Arduino UNO r3 一块,淘宝50-80,建议买改进版本的带插针的,接线方便很多。
2、Arduino I2C 2004 LCD 一块,淘宝30-50。
3、Arduino I2C/IIC DS3231 高精度时钟模块一个,淘宝十几块。
4、Arduino 3线按钮一个,用来控制解锁的,几块钱一个。
5、Arduino 数字38KHz红外接收模块一个,十来块。
6、Arduino 4路继电器一个,30左右。

12v1A电源一个,25cm宽的大盒子一个,泵头尺寸5.5宽一个。

就是上面这些啊,泵头可以买98那种。
作者: telanx    时间: 2014-3-6 22:34
红外接收模块,淘宝上搜索的时候后乱来的,后来另外找按钮,顺便在按钮的店里面搜索红外才搞定,晕死啊!呵呵
作者: luohly    时间: 2014-3-7 00:46
(, 下载次数: 48)
请问是这些对吧
作者: telanx    时间: 2014-3-8 22:55
luohly 发表于 2014-3-7 00:46
请问是这些对吧

发现你跟我是同一家店买的,哈哈!不过数字红外线接收模块和按钮他没有,正好我手头上就有!你是打算这两个模块自己做算了?

作者: luohly    时间: 2014-3-8 23:32
telanx 发表于 2014-3-8 22:55
发现你跟我是同一家店买的,哈哈!不过数字红外线接收模块和按钮他没有,正好我手头上就有!你是打算这两 ...

我买了两个arduino,一个是UNO,一个是2560,准备做一个控制器
作者: telanx    时间: 2014-3-9 12:05
luohly 发表于 2014-3-8 23:32
我买了两个arduino,一个是UNO,一个是2560,准备做一个控制器

牛!鱼缸控制器一直有这个想法,可是每次要做的时候,却发现好像没啥好控制的,我汗啊!因为以前不玩arduino的时候,加热棒和冷水机接了个冷暖温控,灯是usb时间继电器,补水器也另规另有的!其他好像就只要开关或者常开就行,你有什么好想法吗?
作者: luohly    时间: 2014-3-9 16:01
想做一个可以控制灯,造浪,滴定,PH,ORP,盐度,自动补水,温控的啊!
作者: telanx    时间: 2014-3-9 17:16
luohly 发表于 2014-3-9 16:01
想做一个可以控制灯,造浪,滴定,PH,ORP,盐度,自动补水,温控的啊!

哇,PH,ORP,盐度挺有兴趣,不知道是啥原理!
作者: luohly    时间: 2014-3-9 18:27
telanx 发表于 2014-3-9 17:16
哇,PH,ORP,盐度挺有兴趣,不知道是啥原理!

装探头就行了,本贴程序已验证成功
作者: telanx    时间: 2014-3-9 20:54
luohly 发表于 2014-3-9 18:27
装探头就行了,本贴程序已验证成功

装探头就行啊。。。。你广州的?这么快,我的货老板都还没给我发出呢!汗
作者: luohly    时间: 2014-3-9 21:02
佛山的
作者: telanx    时间: 2014-3-9 21:48
luohly 发表于 2014-3-9 21:02
佛山的

爽的!

作者: dicky007    时间: 2014-4-2 10:38
跟楼主的代码昨天運行成功,正找盒子把東西装起來。謝楼主這么好的分享!
作者: snpl    时间: 2014-6-17 15:33
请问,您泵边上的按钮。。是三线按钮吗,另外,在屁股后面电源边上那个是解锁的按钮吗。。。小白啊。。照你的单子买啊。。请教啊。。谢谢。
作者: snpl    时间: 2014-6-17 17:54
本帖最后由 snpl 于 2014-6-17 17:56 编辑

您好,有几个问题想问一下,
1。您的料单里的Arduino 3线按钮我一直找不到,请问这个是用来解锁用的吗。另外,您作的这个滴定,怎么调校呢(程序写完怎么写到单片机里??,平时的微调是通过遥控器调校吗,是不是所有的遥控器都可以啊。。自学型的都行?
2。如果我D两台您这样的滴定,红外线控制这个。。会不会错乱啊,谢谢。
3.您机子左上方这棵是什么,料单里没有,是不是运行的LED灯??
4.那个黄色的两根压线的叫什么名字哈。

不懂电子啊。那个程序更是不懂,能否给个更新过的程序包啊,实在不懂得改。谢谢。
作者: zizii    时间: 2014-6-18 18:15
snpl 发表于 2014-6-17 17:54
您好,有几个问题想问一下,
1。您的料单里的Arduino 3线按钮我一直找不到,请问这个是用来解锁用的吗。另 ...

1、那个按钮直接搜索 arduino 按钮,就出来了,一般都是三线的。
2、不会乱,因为每个遥控器的发射出来的编码都不一样,你只是对应在代码里写死某个遥控器的控制编号就行了,当然,你不能用同一个遥控器遥控2台,会乱的,你要找两个不同的遥控器分别遥控两台。
3、电源LED灯吧,貌似没接,这个无所谓的。
4、那个条条就是普通的塑料条而已,你用筷子压也行,不压也行。
作者: snpl    时间: 2014-6-18 18:53
本帖最后由 snpl 于 2014-6-18 18:55 编辑
zizii 发表于 2014-6-18 18:15
1、那个按钮直接搜索 arduino 按钮,就出来了,一般都是三线的。
2、不会乱,因为每个遥控器的发射出来 ...


楼主,你料单里少了一个很重要的东西。。LCD的转接板,没写进去哦。还好我看到了,买了一块。哈哈。可是怎么接。。我就悲剧了。。还烦请明示哇。
遥控器这个编码需要写到代码里在烧进单片机吗。。呃。。不会啊。。技术含量太高,
作者: zizii    时间: 2014-6-18 21:58
snpl 发表于 2014-6-18 18:53
楼主,你料单里少了一个很重要的东西。。LCD的转接板,没写进去哦。还好我看到了,买了一块。哈哈。可 ...

直接买IIC接口的LCD就自带转接板了。
代码我已经放附件了,直接下载烧录,烧录的方法请参考arduion入门教程,很简单的,一天一般就能学会了。
另外遥控器的编码,请查看源代码中关于遥控器编码那一段有注释。
作者: snpl    时间: 2014-6-19 09:51
zizii 发表于 2014-6-18 21:58
直接买IIC接口的LCD就自带转接板了。
代码我已经放附件了,直接下载烧录,烧录的方法请参考arduion入门 ...

谢谢,幸好还没有发货,哈叫商家看下板子。。这个单片机和FLASH一样可以重复烧录吗?
作者: 大扑勒蛾子    时间: 2014-6-21 09:57
膜拜 支持无私奉献的精神
作者: zizii    时间: 2014-6-21 15:16
snpl 发表于 2014-6-19 09:51
谢谢,幸好还没有发货,哈叫商家看下板子。。这个单片机和FLASH一样可以重复烧录吗?

是的,可以重复写。
作者: snpl    时间: 2014-6-28 01:32
zizii 发表于 2014-6-21 15:16
是的,可以重复写。

我买了uno r3 16u的板,这下晕菜了,,方便帮我看看接线吗?谢谢

作者: SAGA    时间: 2014-6-29 17:15
技术贴!牛!楼主能否出个带按钮的版本!
作者: snpl    时间: 2014-7-8 08:47
本帖最后由 snpl 于 2014-7-10 17:31 编辑
zizii 发表于 2014-6-21 15:16
是的,可以重复写。


楼主,几经周折,终于可以把程序烧进板子里了。程序方便应该是没有什么问题了,。现在我出现下面这几个问题呀,麻烦您看一下,

1.前面你提到的IR模块接收到的编码,是可以显示在LCD屏上的,可是,我把LCD屏解锁后,显示不出来,这个为啥啊?,是我用的遥控器不对吗,还是操作有误??另外,我想作一台用按键的,是否可以把IR这块去掉,改用三线按键模块,支持输入操作。谢谢。
        我的IR模块,很奇怪,通电后板子上的LED,一会是一闪一闪,一会又灭了,如果偶尔碰一下线,或是接收到IR信号,LED会更亮一下,有时会解锁LCD屏,这样正常吗,谢谢

2.继电器你用的是12V的工作电压吗,那电源电压和输出电压都是12V?那VCC和JD VCC可以短接了,共地,那按你的接法,继电器输出端上只接一根正极到常闭端??这能不能画个简单的示意电路图啊,实在不想不通接法
3.请问一下给UNO供电的电源线 是怎么接的啊
4.请问,你盒子左上角是二极管的LED灯吗?是用来提示运行状态的还是电源状态的?直接接在供电电源上吗。12V?
5.请问,单独控制的那个红色的按键,接在主板上的A口区域,是串联吗??怎么接线,这些也要经过UNO控制吗,还是只要VCC和GND接上就好。

作者: angelopszq    时间: 2014-7-9 14:55
{:3_63:}
作者: zizii    时间: 2014-7-10 21:46
snpl 发表于 2014-7-8 08:47
楼主,几经周折,终于可以把程序烧进板子里了。程序方便应该是没有什么问题了,。现在我出现下面这几个 ...

1.前面你提到的IR模块接收到的编码,是可以显示在LCD屏上的,可是,我把LCD屏解锁后,显示不出来,这个为啥啊?,是我用的遥控器不对吗,还是操作有误??另外,我想作一台用按键的,是否可以把IR这块去掉,改用三线按键模块,支持输入操作。谢谢。
我的IR模块,很奇怪,通电后板子上的LED,一会是一闪一闪,一会又灭了,如果偶尔碰一下线,或是接收到IR信号,LED会更亮一下,有时会解锁LCD屏,这样正常吗,谢谢

》》可以去掉IR改用按键操作,方法参考解锁按键,需要6个IO口连接按键,需要改写不少代码,目前我没有时间调试和改写代码,如果您有时间和兴趣请自行研究。
》》IR的代码是在调试窗口显示的,也就是你打开Arduino IDE界面里面有个显示串口内容的窗口,在那里显示的,不是在LCD显示屏显示的。

2.继电器你用的是12V的工作电压吗,那电源电压和输出电压都是12V?那VCC和JD VCC可以短接了,共地,那按你的接法,继电器输出端上只接一根正极到常闭端??这能不能画个简单的示意电路图啊,实在不想不通接法

》》继电器好像是12V的,直接接12V,4口公地。

3.请问一下给UNO供电的电源线 是怎么接的啊

》》UNO的电源根据你买的板子,一般电压要求7-15v,个别板子支持7-24v,建议使用9v电压最好。

4.请问,你盒子左上角是二极管的LED灯吗?是用来提示运行状态的还是电源状态的?直接接在供电电源上吗。12V?

》》那个的确是LED指示灯,一般LED是需要3v电压的,因为我没有3v电压,所以我没有接那个,你可以自己找个3v电压接上去,或者淘宝一个12v的LED指示灯。

5.请问,单独控制的那个红色的按键,接在主板上的A口区域,是串联吗??怎么接线,这些也要经过UNO控制吗,还是只要VCC和GND接上就好。

》》A口是啥?主板只有模拟接口和数字接口,对于按键都可以用的,代码不同而已,数字接口只支持0和1,模拟接口支持0-5v,接到vcc或者gnd都可以,代码里面判断就行了。
作者: snpl    时间: 2014-7-16 10:18
本帖最后由 snpl 于 2014-7-16 10:19 编辑
zizii 发表于 2014-7-10 21:46
1.前面你提到的IR模块接收到的编码,是可以显示在LCD屏上的,可是,我把LCD屏解锁后,显示不出来,这个为 ...


楼主,工作小忙了一阵,目前大部分电路已调通,程序和IR问题也都得到了解决,在此感谢下,另外我又产生了一些问题,您在帮我看看。

1.前面提到的LED指示灯,如果是电源指示灯,我研究了一下UNO的板子,板子上有自带3V电压接口,共地,应该是可以接3V的LED灯的,是吗?
  LED灯是买两脚的二极发光管呢,还是买模块?我准备直接就接在3V共地的这两个口上。仅作设备运行状态灯,是否可行?

2.单独控制单个泵开启关闭的那按键,您是否方便给我个TB的地址,我一直找找不到和您同款的,您买的这个按键是高电平启,还是低电平启动??单独启动单泵后,需要在按一下关闭吗,还是开启后会自动停止,何时停?
  能稍微的介绍一下这个单控的原理吗?接线方面,我研究了下程序,因为基础较差,还是无法理解接线口的位置(你最后一张图应该是接在A0-AX的区域),能说明一下吗?谢谢。

3.我研究了下你的程序,也研究了一下成品机子,有点想法:
     你D的机子,是把要滴的量,一次性集中在一个时间点内全部滴完,是否可以改写代码产生后面的效果:一是设置要滴定的全部的量,二是分时间段或分N次滴入,三是各泵头滴入的时间点固定个间隔时间,这样能缓冲缸里的水质参数,让参数缓慢的UP和DOWN,对于个别比较敏感的生物会有点好处吧。你说呢?

4.UNO一共有13个IO口,有四个可以PWM模式,其它的都是数字IO,那这里只用到了7-10四个,是否可以增加四个,也就是一共控制8个泵头,这样一来DIY的成本会大大降低,是吧。哈哈。。


作者: LIA_邦    时间: 2014-7-16 11:35
高手在民间啊
作者: zizii    时间: 2014-7-18 17:51
snpl 发表于 2014-7-16 10:18
楼主,工作小忙了一阵,目前大部分电路已调通,程序和IR问题也都得到了解决,在此感谢下,另外我又产生 ...

1.前面提到的LED指示灯,如果是电源指示灯,我研究了一下UNO的板子,板子上有自带3V电压接口,共地,应该是可以接3V的LED灯的,是吗?
  LED灯是买两脚的二极发光管呢,还是买模块?我准备直接就接在3V共地的这两个口上。仅作设备运行状态灯,是否可行?

不可以直接接,UNO板子的电压是3.3v,比较危险,建议你用LED模块吧。

2.单独控制单个泵开启关闭的那按键,您是否方便给我个TB的地址,我一直找找不到和您同款的,您买的这个按键是高电平启,还是低电平启动??单独启动单泵后,需要在按一下关闭吗,还是开启后会自动停止,何时停?
  能稍微的介绍一下这个单控的原理吗?接线方面,我研究了下程序,因为基础较差,还是无法理解接线口的位置(你最后一张图应该是接在A0-AX的区域),能说明一下吗?谢谢。

我那个就是普通的开关,不稳定,会干扰,所以我才没有用,如果你要用,就买模块开关,三线的,用高电平还是低电平控制这个你自己写代码。至于A0还是D0,对于开关来说,无所谓,有空io口就行了。A端口就是检测电压,D端口就是检测0,1

3.我研究了下你的程序,也研究了一下成品机子,有点想法:
     你D的机子,是把要滴的量,一次性集中在一个时间点内全部滴完,是否可以改写代码产生后面的效果:一是设置要滴定的全部的量,二是分时间段或分N次滴入,三是各泵头滴入的时间点固定个间隔时间,这样能缓冲缸里的水质参数,让参数缓慢的UP和DOWN,对于个别比较敏感的生物会有点好处吧。你说呢?

可以,只是要修改比较多的代码。

4.UNO一共有13个IO口,有四个可以PWM模式,其它的都是数字IO,那这里只用到了7-10四个,是否可以增加四个,也就是一共控制8个泵头,这样一来DIY的成本会大大降低,是吧。哈哈。。

对于滴定,用不到PWM模式,本身就是泵头贵,不是端口贵,只要端口够用你接20个泵头都没问题。
作者: facai    时间: 2014-7-19 13:32
请问泵头边上的红色按钮是控制什么的需要单配吗?谢谢 还有遥控器 “单片机 51 遥控器 MP3遥控器 红外线遥控器” 这样的遥控器可以吗?
作者: zizii    时间: 2014-7-21 20:59
facai 发表于 2014-7-19 13:32
请问泵头边上的红色按钮是控制什么的需要单配吗?谢谢 还有遥控器 “单片机 51 遥控器 MP3遥控器 红外线遥 ...

那个红色按钮是以前盒子上留下的,没接线,没用的。
遥控器用普通电视遥控器都可以的,反正对编码而已。
作者: nikola    时间: 2014-7-25 20:58
代码看了晕了


作者: a6164968    时间: 2014-9-3 10:25
楼主再PM一下你的盒子的地址吧,我找不到了。。
作者: zizii    时间: 2014-9-9 11:10
a6164968 发表于 2014-9-3 10:25
楼主再PM一下你的盒子的地址吧,我找不到了。。

http://item.taobao.com/item.htm? ... ;id=3143653407&
作者: 人间大炮    时间: 2014-10-2 18:29
赞,技术牛人




欢迎光临 CMF海水论坛 (https://www.cmfish.com/bbs/) Powered by Discuz! X3.4