Урок по созданию ноутбука на Raspberry Pi и Arduino

С того дня, как мы услышали и даже несколько раз поигрались с "малиной" (Raspberry Pi), нам было интересно сделать из него ноутбук. С выходом Raspberry Pi 3 наконец-то мы решили реализовать данный проект.

Шаг 1: Что мы хотим делать?

Прежде чем мы сможем начать выбирать и покупать детали для проекта, которые мы будем использовать, нам нужно выяснить все, что мы хотим, чтобы наш ноутбук мог делать. Например, мы хотим, чтобы наш ноутбук имел:

  • встроенная мышь (трекпад)
  • длительное время автономной работы
  • не менее 2 USB-портов
  • полная клавиатура
  • встроенный зарядник для аккумулятора Arduino
  • интегрированный Arduino с разъемами для подключения компонентов
  • малый форм-фактор

Поскольку мы используем Pi 3, нам не нужно беспокоиться о покупке Wi-Fi или Bluetooth-ключа (донгла), потому что он интегрирован. Этот список никоим образом не является исключительным, есть много других вещей, которые можно добавить, чтобы сделать этот ноутбук лучше.

Тем не менее, функции, которые мы добавили, придадут ему некоторую потрясающую юзабилити, такую как встроенный зарядник с питанием от Arduino, который будет небольшим OLED-экраном рядом с основным экраном, который будет постоянно показывать процент и напряжение батареи.

Еще одна особенность, которая нам очень нравится - это встроенный Arduino с разъемами. В корпусе имеются небольшие отверстия, которые позволяют пользователю получить доступ к штырькам и подключить компоненты, поэтому все это действительно просто Arduino, встроенный в ноутбук.

Шаг 2: Детали для проекта

Для этого проекта нам потребуется довольно много деталей, нам понадобятся:

1 x Raspberry Pi 3
2 x Arduino Micro
1 x Семи дюймовый 7" Raspberry PI экран
3 x Литиевые батареи 18650
1 x Цепь Powerbank
x1 USB хаб
x1 Мини USB коавиатура
x1 USB разъем
x1 Модуль-экран SPI OLED
Армированный картон

Нам также понадобится трекпад, который мы сделаем сами в следующих проектах, но сейчас можно его приобрести. Еще раз -  это ни в коем случае не является эксклюзивным списком. Что приятно в этих деталях, так это то, что большинство из них независимы друг от друга, поэтому вы можете поменять все, что захотите. У нас есть много деталей для настройки, чтобы было проще, мы собираемся настроить их индивидуально, а затем в конце мы можем собрать их все вместе.

Шаг 3: Настройка "малины" и экрана

Давайте начнем с нашего Rasberry PI и экрана, наш экран не подключается к нашему Pi через порт HDMI, а скорее через 50-контактный ленточный кабель, который подключается к GPIO Pi.

Однако, если вы просто подключите его и запустите Pi, он не будет работать, нам нужно отредактировать некоторые строки кода в файле запуска для Pi.

Мы начинаем с того, что загружаем свежий образ "малины" Raspbian, который можно скачать здесь, затем записываем его на нашу SD-карту с помощью 7Zip (или любого другого программного обеспечения, которое вам нравится). Теперь после нам нужно открыть файл на SD-карте с именем config.txt и добавить код (ниже). Что делает этот код - говорит Pi отправлять данные экрана через заголовки GPIO, а не через порт HDMI (по умолчанию HDMI) при запуске.

Ввод кода очень прост. Откройте файл config.txt с помощью программы "блокнот" для Windows (мы используем notepad ++) и скопируйте этот код в файл config.txt, который теперь сохраняется и закрывается, и он должен работать, как только SD-карта будет вставлена обратно в Pi. Если экран выглядит слишком ярким или слишком тусклым, поверните маленький потенциометр на монтажной плате экрана, пока всё не будет выглядеть правильно.

Код:

dtoverlay=dpi24
enable_dpi_lcd=1
display_default_lcd=1
dpi_group=2
dpi_mode=87
dpi_output_format=0x6f005
hdmi_cvt 1024 600 60 6 0 0 0

Наша Raspberry Pi также нуждается в физической модификации, чтобы соответствовать нужному размеру под ноутбук. Мы должны отпаять один из двойного USB-портов. Это делается путем помещения довольно большого количества припоя на контакты разъема USB и его медленного отсоединения, пока он не станет свободным. Мы делаем это, потому что нам нужно припаять USB хаб к Pi, чтобы иметь возможность подключить все наши устройства ввода.

Шаг 4: Настройка аккумулятора

Наша батарея использует 3 батареи 18650, каждый из которых имеет емкость 2400 мА/ч, параллельно 3 ячеек имеют общую емкость 7200 мАч. Наш Raspberry Pi со всем, что подключено, имеет около 1 ампер, что означает, что наши 3 ячейки могут питать "малину" примерно 4,5 - 5 часов, но это можно увеличить, добавив больше батарей, если хотите.

Чтобы сделать это, мы должны заряжать все 3 ячейки до 4,2 вольта по отдельности, так как соединение литиевых элементов очень опасно, если они имеют разные состояния заряда (разные напряжения), чтобы избежать этого, проще всего убедиться, что они полностью заряжены до их подключения.

Теперь мы хотим подключить эти батареи параллельно, чтобы сделать это, мы соединяем все положительные клеммы вместе, а затем соединяем все отрицательные клеммы вместе. Используйте толстый провод, поскольку между этими батареями может проходить много тока, который нагревал бы более тонкую проволоку. Теперь подключите отрицательный и положительный выводы батарей к отрицательным и положительным входным клеммам схемы питания, соответственно.

Вместо использования схемы накопителя, например, который мы использовали здесь, вы можете использовать литиевое зарядное устройство для зарядки ячеек до 4,2 вольта и повышающего преобразователя для повышения напряжения с 4,2 вольта до 5 вольт, но в конечном итоге это будет делать то же самое, что и блок питания и займет больше места.

Шаг 5: Настройка дисплея батареи

Теперь, чтобы настроить дисплей батареи, этот шаг определенно не является необходимым, поскольку вы можете считывать напряжение батареи через PIS GPIO и отображать уровень заряда батареи через программное обеспечение.

Тем не менее, мы хотели его добавить, потому что экран OLED дает всему ноутбуку действительно классный вид. Чтобы сделать это, нам нужно припаять наш OLED-экран к нашему Arduino, OLED, который мы использовали, не является версией SPI, поэтому я должен припаять 7 контактов к Arduino.

Распиновка выглядит следующим образом:

OLED -> Arduino

  • Rest - Pin 7
  • DC - Pin 12
  • CS - Pin 9
  • DIN - Pin 11
  • CLK - Pin 13
  • VCC - 5 Volts (Вольт)
  • Ground - Ground (Земля)

Прежде чем мы сможем загрузить наш код, мы должны сделать наши датчики напряжения, которые подключат Arduino к аккумулятору и позволят ему прочитать напряжение батарей.

Нам нужно припаять 2 резистора 10 Ом в конфигурации делителя напряжения к контактам A0 и Ground (земля) на Arduino, которые затем могут быть подключены к аккумулятору, A0 переходит в положительное состояние, а земля переходит на землю.

Нам также нужен источник питания для нашего экрана, поэтому нам нужно припаять другой провод к земле, а другой - к VIN на Arduino, который мы позже подключим к плате накопителя для питания.

Наконец, мы можем загрузить наш код, который ниже.

#include "U8glib.h"
int analogInput = 0;
int Percent ;  //We want it as a whole number
float Voltageout = 0.0;
float Voltage = 0.0; //We want it with decimal places
float R1 = 97000.0; //resistance 
float R2 = 10000.0;  //resistance 
int value = 0;

U8GLIB_SH1106_128X64 u8g(10, 9, 12, 11, 13); // pinout, see page

void draw(void) 
{
  u8g.setFont(u8g_font_helvB14r); // font
  u8g.drawStr(19, 16, "BATTERY"); 
  u8g.setPrintPos(7,55);
  u8g.setFont(u8g_font_helvB18r);
  u8g.println(Percent);           //Prints Percent
  u8g.println("%");
  u8g.setPrintPos(63,55);
  u8g.setFont(u8g_font_helvB18r); //A slightly larger font
   u8g.println(Voltage);             //Prints the voltage
  u8g.println("V");
  u8g.drawRFrame(0, 23, 128, 1, 0); 
}
void setup(){
   pinMode(analogInput, INPUT);
}
void loop(){
   value = analogRead(analogInput);
   Voltageout = (value * 5.0) / 1024.0; 
   Voltage = Voltageout / (R2/(R1+R2)); 
   if (Voltage<1) {
   Voltage=0.0;  // get  rid of unwanted readings
   }
   if (Voltage>5.00) {  // if Reading are too large
    Voltage= Voltage/10;
   Percent = ((Voltage-3)/(4.2-3))*100; //votage divided by max cell votage times 100 = the cells current percentage
} 
  u8g.firstPage();  
  do 
    {
     draw();      
    }
  while( u8g.nextPage() );
delay(500);
}

Шаг 6: Настройка остальных частей

Итак, мы создали все основные части, и теперь нам нужно установить меньшие и более простые части.

Начнем с клавиатуры, нам нужно отделить её от корпуса в который она входит (предназначена для использования с 7-дюймовым планшетом). Все, что нам нужно сделать, - это обрезать поддельную кожу вокруг клавиатуры и вытащить ее и ее контур, Вы увидите, что есть 4 провода, которые мы будем паять к нашему USB-хабу позже.

Трек-пэд также нуждается в минимальной настройке. Все, что нам нужно сделать, взять микро-USB-кабель для подключения его к USB-хабу. Наконец, нашему внутреннему Arduino нужно будет иметь пайки на всех его контактах, что проще всего сделать, поставив эти штифты и Arduino на макет, а затем паяя их на место, так как это будет держать их ровно. Тогда мы просто получим еще один микро USB-кабель для подключения Arduino к USB-хабу. Теперь все настроено!

Шаг 7: Цепь (Подключение всего)

На этом этапе мы индивидуально объединим все части вместе, мы должны соединить их друг с другом, чтобы сделать внутренности нашего ноутбука.

Сначала мы подключаем хаб USB к одному из двух USB, который мы распаяли ранее, второй USB затем припаян к порту "мама" USB, который расположен на другой стороне ноутбука, используя несколько длинных проводов. И теперь припаиваем трек-пад, клавиатуру и Arduino к USB-хабу. Затем мы припаяем 5-вольтовый выход нашего накопителя к входу 5 вольт на Raspberry Pi с помощью микро-USB-кабеля.

Теперь мы можем перейти к экрану. У нашего экрана всего две части, основной экран и дисплей батареи. Все, что нам нужно сделать, - это подключить 50-контактный ленточный кабель к основному экрану и к 50-контактному разъему на Raspberry Pi.

Затем нам нужно пустить 3 длинных кабеля от дисплея батареи Arduino, о которой мы говорили ранее. Кабель, подключенный к контакту A0, подключен к положительному соединению на батарее, контакт VIN подключается к 5-вольтовому выходу на цепи блока питания, а земля переходит на землю.

Конечно, в какой-то момент мы, возможно, захотим отключить его, поэтому мы добавим переключатель между соединением Земли от накопителя к Raspberry Pi, что позволит нам полностью отключить питание системы.

Нужно отметить, что просто отключение питания от Pi плохо для него, поэтому настройка программного обеспечения для предварительного отключения питания была бы идеальной. Это можно сделать просто нажав кнопку закрытия в настройках Raspberry Pi.

Шаг 8: Корпус ноутбука

Теперь, к сожалению, у меня нет 3D-принтера, но мы можем сделать очень прочный и красивый корпус из какого-нибудь ковкого пластика и картона. Идея этого заключается в том, что стены корпуса будут сделаны из картона с пластичным пластиком, который используется внутри корпуса, чтобы держать все вместе и сделать его более прочным.

Ключом для этого является измерение размеров необходимого картона и его резки. Картон затем склеивается супер клеем, использование горячего клея оставляет видимые линии, которые выглядят очень уродливо. Лучше всего думать о том, чтобы собрать кусочки вместе с помощью супер клея и укрепить его с помощью клея на внутренней стороне, а затем слоем пластичного пластика.

Шаг 9: Шарнир экрана

Как ни странно, мы нашли эту часть проекта самой сложной, хотя она кажется такой легкой. Нам нужно сделать очень жесткий шарнир, и легче сказать, чем сделать. Хороший опыт - начать искать, - это старые ноутбуки или экран, вы можете найти их в магазинах БУ техники.

Как только шарниры будут найдены, сделайте надпись на нижней части экрана и в верхней части основания и заполните эти выемки пластичным пластиком, о котором мы говорили раньше. Теперь, пока все части теплые и податливые начинайте толкать шарнир в него и закреплять его на месте. Этот материал сильно засыхает, так что с шарниром никогда не будет проблем.

Если вы допустили ошибку, - используйте фен для повторного плавления пластика, для дальнейшей его замены или удаления.

Шаг 10: Что нужно посмотреть или улучшить

Выполняя этот проект, можно столкнуться с несколькими проблемами, которые мешают или могут стоить больших денег. Первым и самым раздражающим был ленточный кабель. Ленточные кабели не предназначены для частого подключения и отсоединения, и, к сожалению, это то, что мы делали во время тестирования, которое фактически разрушило наш кабель (мы заказывали новый), поэтому обязательно будьте осторожны с ним,

Еще одна вещь, которая раздражала при тестировании этого ноутбука, заключалась в том, что мы загружали код в неправильный внутренний Arduino! В базе у нас есть 2 Arduino, подключенных к Raspberry Pi - первый управляет трекпадом, а второй - Arduino, который мы установили для использования в качестве внутреннего Arduino.

Проблемы возникли, когда мы случайно загрузили свой эскиз на трекпад Arduino, а не на внутренний Arduino. Всё не заработает пока вы не загрузите код снова в правильный Arduino.

Учитывая все сказанное, нужно сказать, что это не очень сложный проект, поскольку необходим минимальный код. Всё это благодаря людям, которые разрабатывают Raspberry Pi и которые сделали процесс создания и работы с микроконтроллером очень легким.

Шаг 11: Итоговый результат

На данный момент ноутбук полностью функциональный и мы используем его практически каждый день для заметок, он отлично подходит для этого, так как Raspbian OS (операционная система) поставляется с libraoffice, поэтому использование его как школьного или рабочего ноутбука действительно хорошая идея.

Он также подключается к сетям Wi-Fi и Bluetooth, что очень делает просмотр YouTube и других веб-страниц очень простым. Есть много-много игр, которые будут запускаться на на нем: от minecraft до классических старых игр. Также плюс проекта - длительное время автономной работы.

В целом, это действительно забавный проект, и мы рекомендуем попробовать его сделать.

Ардуино+