What hardware do we need?

I use Arduino UNO REV3. We also need BreadBoard + Jumper Wires, resistor, temperature sensor - waterproof DS18B20. To show the water temperature on a screen, we need the LCD Screen and the fish feeder is made by SERVO. I got the LCD screen and servo from the ARDUINO 2171188 K000007 The Starter Kit.
And my fish tank is 'Back to the Roots Water Garden Betta Fish Tank' from Amazon.


What software do we need?

I use NodeJS . We also need Johnny-Five the JavaScript platform for Robotics and IoT. With Johnny-Five, all was much simpler.
I used Johnny Five to connect to our Temperature Sensor connected through the Arduino board, and we basically listened to data changes (temperature readings) before then creating a file to write the readings line by line with one-hour frequency. Codes refer to the Johnny Five API docs: http://johnny-five.io/api/


Install the Water Temperature Sensor

I had our Arduino board connected and Arduino IDE running. All we needed to do now is write a simple application in Node which logged into the Arduino's temperature sensor. In Arduino IDE, you must go to: File -> Examples -> ConfigurableFirmata and click the 'load' button (YOU MUST DO THIS, otherwise the water temperature sensor won't show the correct temperature on the LCD or any console.log). Or we can get the ConfigurableFirmata from here https://github.com/firmata/ConfigurableFirmata

Alternatively, the app written in JavaScript is published on GitHub as an open source code so let's dive in and check what we've got there. We can clone the app from https://github.com/juliancwirko/arduino-temperature-logger



What else?

I stuck a small bottle on to the servo before drilling a small hole on the bottle. When the servo is spinning, the fish food will drop through the hole. This is how the servo feeds the fish! I also used Lego to make a box container to cover the breadboard and wires. But you can use anything you like. Be creative :D

Other references you may need:
Johnny-Five and Arduino (up and running with Arduino and Johnny-Five platform)
Set up the LCD screen with a knob
Set up the servo
Set up a button to control things


Materials

Arduino Uno

uno

Water Temperature Sensor DS18B20

water temp

Servo

servo

LCD Screen

LCD
hand-sketch
lego
frizt

Codes on GitHub


													var five = require("johnny-five"), board, button, servo, lcd;
var directionCw = true;
board = new five.Board();
board.on("ready", function() {
	lcd = new five.LCD({
		pins: [7,6,5,4,3,2],
		backlight: 6,
		rows: 2,
		cols: 20
	});

	button = new five.Button({
		pin: 9,
		isPullup: true
		//* with out resistance on board
	});

	var servo = new five.Servo({

		pin: 12,
		type: "continuous",  //* for CW
	});

	setInterval(function () {
		if( directionCw ) {
			servo.cw(2);
			console.log("servo CW");
		} else {
			servo.ccw(2);
			console.log("servo CCW");
		}
		directionCw = !directionCw;
	}, 5000);

	//* 5000 for every 5 seconds in the video Demo

	var count = 0;
	button.on("press", function() {
		count++;
		console.log('btn pressed ' + count.toString());

		var pin = 8;
		board.firmata = board.io;
		board.firmata.sendOneWireConfig(pin, true);
		board.firmata.sendOneWireSearch(pin, function(error, devices) {
			if(error) {
				console.error(error);
				return;
			}

			//* only interested in the first device
			var device = devices[0];

			var readTemperature = function() {
				// led.on();

				// *start transmission
				board.firmata.sendOneWireReset(pin);

				// *a 1-wire select is done by ConfigurableFirmata
				board.firmata.sendOneWireWrite(pin, device, 0x44);

				// *the delay gives the sensor time to do the calculation
				board.firmata.sendOneWireDelay(pin, 1000);

				// *start transmission
				board.firmata.sendOneWireReset(pin);

				// *tell the sensor we want the result and read it from the scratchpad
				board.firmata.sendOneWireWriteAndRead(pin, device, 0xBE, 9, function(error, data) {
					if(error) {
						//console.error(error);
						return;
					}
					var raw = (data[1] << 8) | data[0];
					var celsius = raw / 16.0;
					var fahrenheit = celsius * 1.8 + 32.0;

					console.info('celsius', celsius);
					console.info('fahrenheit', fahrenheit);

					// updateLed(celsius, led)
					// led.off();

					//* to show on LCD
					lcd.cursor(1, 0).print( `Water :${fahrenheit} ` );

					//console.log("LCD water temp");
				});
			};
		});		
	});

	this.repl.inject({
		lcd: lcd,
		button: button,
		servo: servo
	});												
});