To control an automatic lighthouse.
For safety reasons every lighthouse has a signal that is distinctive and individual e.g. the lighthouse at Flamborough Head in Yorkshire flashes four times, waits 15 seconds and then flashes again. This signal is called the lighthouse character and you can see them all listed on the Trinity House Website. An activity for children would be to visit the Trinity House site, find the lighthouse nearest to them and discover the signal their lighthouse uses. They could then create a programme that simulates that lighthouse.
You will be able to:
- use the gPiO interface for input as well as output.
- program an input and output control system.
- understand how an LDR can be used as a light sensor.
To create a lighthouse control program.
The control program must:
- turn on the main light beam when it is dark and turn it off when it is daylight
- make the main beam flash to produce a unique signal
- turn on the fog horn when it is foggy and turn it off when it is not foggy
- make the fog horn produce a unique sequence of sound
You will need to consider the range of sensors and select the most suitable input device for the job:
- LDR (light sensor)
- for sensor (in fact we do not have one so you can use a simple push switch for now)
You will need a processing device (computer), an interface to connect the components to the computer and a power supply.
- Raspberry Pi
- gPiO interface and power supply
- filament lamp
- white LED
You will need to select a programming language that can communicate with the input output devices:
- input, an LDR connected to a gPiO interface.
- 6 volt output connected to a bright, white, LED.
- input, a push switch connected to a gPiO interface.
- 6 volt output connected to a buzzer.
Making the model
The lighthouse is quite an easy model to make and all of the electrical components can be built into the model as it is made or they can be added afterwards.The gallery below shows a model made from a kitchen roll holder, an alternative is to use a Pringles tube. The LDR can be difficult to find so we’ve added it to our ‘Hard to Find’ Pinterest board.
You can also watch the video
- Design the circuits that will be built into your lighthouse model and use connection blocks to connect your model to the gPiO interface.
- Bring all of the wires into the eight connection blocks
- Use additional pieces of wire to connect the blocks to the inputs and outputs on the gPiO.
Scripts & Code
These are the Scratch Scripts and Python Code for this project. All of these are available in the Code Library. The scripts follow the flowchart, you can follow these scripts or create your own for a different lighthouse.
When using Scratch, pin connection numbers are dependent on whether you are using ScratchGPIO or GPIOServer. Use this document to determine the correct pins to use.
If you use Flowol(TM) in your school you can download this flowchart from the Code Library. Version 4 and above of Flowol can be used with the gPiO Box, so that you can use this flowchart to control physical devices directly. For more information on using Flowol with the gPiO please contact us.
There is also another version of this flowchart in the Code Library, to keep things simple we haven’t shown it here. The alternate version utilises Flowol’s ability to use subroutines to create more elegant code.
This is the ScratchGPIO version of this project, you can download this script from the Code Library.
This is the GPIOServer version of this project, you can download this script from the Code Library.
The script shown will work, and appears simple to use.However, in practice the need to initially declare ports as Inputs or Outputs can be difficult for children to grasp and ‘gets in the way’ of actually producing the project code. A better solution is to create a template script that is hidden from the children and does the heavy lifting. This technique is fully documented here and the associated scripts are in the Code Library.
<p>import time<br />
import RPi.GPIO as gpio<br />
gpio.setup(11,gpio.OUT)#red LED<br />
gpio.setup(12,gpio.OUT)#Yellow LED<br />
<p> gpio.output(11,gpio.LOW)<br />